2021. november 18., csütörtök

2021.11.18. AB

 Ellenőriztük a Hajó megoldását.

Szótár megoldása. A következő órán a szótárasat még megbeszéljük.

Számonkérés várható a Termék, Hajó, Szótár adatbázisokból.


/*1*/
  CREATE DATABASE hajo
DEFAULT CHARACTER SET UTF-8
COLLATE UTF8_hungarian_ci;
 /* 3.  Írassa ki a J1 hajójárat menetrendjét! Jelenjenek meg az indulási és érkezési állomások az időpontokkal együtt!*/
SELECT menetrend.honnan, menetrend.hova, menetrend.indul, menetrend.erkezik
FROM menetrend
  WHERE (jarat = "j1");

/*  4.  Listázza ki, hogy Balatonfüredről milyen állomások felé indulnak hajók
  11 óra 30 perc és 12 óra 30 perc között (beleértve a megadott időpontokat is)! (4. feladat:)*/
/*Egyik megoldás*/

SELECT menetrend.hova
FROM menetrend
WHERE ((honnan = "Balatonfüred") and (menetrend.indul between '11:30' AND '12:30'));

/*Másik megoldás*/

SELECT menetrend.hova
FROM menetrend
WHERE ((honnan = "Balatonfüred") and (menetrend.indul>= '11:30' AND menetrend.indul<= '12:30'));


/*5.  Listázza ki, hogy Siófokról milyen jelű járatok indulnak 9 óra után (beleértve a 9 órát is). (5. feladat:)*/

 SELECT menetrend.jarat, menetrend.indul
  from menetrend
  WHERE honnan="Siófok" and indul>9;

/*6.  Listázza ki indulási sorrendben az összes B-vel kezdődő jelű járatot, ami délután indul. (6. feladat:)*/
select menetrend.jarat, menetrend.indul
  from menetrend
  where jarat like 'b%' and indul>'12:00:00'
order by indul;

/*7.  Határozza meg lekérdezés segítségével, hogy naponta hány hajó érkezik a kikötőkbe!
  A lista az állomás nevéből és a kikötő hajók számából álljon, az utóbbi értéke szerint csökkenően!(7. feladat:)*/
  SELECT menetrend.hova, count(menetrend.azon)
    from menetrend
    group by hova
    order by 2 desc;

   
/*8.  Adja meg, hogy a legkésőbben érkező hajó hánykor ér Balatonföldvárra! (8. feladat:)*/

  /*Egyik megoldás*/
  SELECT menetrend.erkezik
    from menetrend
    where hova="Balatonföldvár"
    order by erkezik desc
    limit 1;

/*Másik megoldás*/
  SELECT max(menetrend.erkezik)  
    from menetrend
    where hova="Balatonföldvár";
   
/*9.  Az E2-es hajójáratnak mi a végállomása és hánykor érkezik oda? (9. feladat:)*/
  SELECT hova, erkezik
    from menetrend
    where jarat="e2"
        order by erkezik DESC
    limit 1;


/*1.  Hozzon létre a lokális SQL szerveren szotar néven adatbázist!
  Az adatbázis alapértelmezett rendezési sorrendje a magyar szabályok
  szerinti legyen!
  Ha az Ön által választott SQL szervernél nem alapértelmezés az UTF-8 kódolás,
  akkor azt is állítsa be alapértelmezettnek az adatbázis létrehozásánál!*/
CREATE DATABASE szotar
  CHARACTER SET utf8
  COLLATE utf8_hungarian_ci;

/*2.  A tabla.sql és az adatok.sql állományok tartalmazzák a táblákat létrehozó, valamint az adatokat a táblába beszúró SQL parancsokat! Futtassa a lokális SQL szerveren elsőként a tabla.sql, majd az adatok.sql parancsfájlt.
A feladatok megoldására elkészített SQL parancsokat a megoldasok.sql állományba illessze be a feladatok végén jelzett zárójelben lévő sor alá!*/


/*3.  Készítsen lekérdezést, amely felsorolja azokat az angol szavakat,
  amelyeknek magyar megfelelőjét pontosan
  az angol írásmóddal egyezően írják! (3. feladat:) */
select szolista.angol
  from szolista
  where angol=magyar;

/*4.  Készítsen lekérdezést, amely ABC sorrendben
  felsorolja azokat a magyar szavakat,
  amelyeknél az adatbázisba kerülés dátuma 2003-ban,
  vagy 2004-ben volt! (4. feladat:)*/
select szolista.magyar
  from szolista
  where felvetel>='2003.01.01.' AND felvetel<='2004.12.31.'
  order by magyar;

select szolista.magyar
  from szolista
  where felvetel between '2003.01.01.' AND '2004.12.31.'
  order by magyar;

  select szolista.magyar
  from szolista
  where year(felvetel) between 2003 AND 2004
  order by magyar;

    select szolista.magyar
  from szolista
  where year(felvetel) = 2003 OR year(felvetel) = 2004
  order by magyar;

  select szolista.magyar
  from szolista
  where felvetel like "2003%" OR felvetel like "2004%"
  order by magyar;


/*5.  Készítsen lekérdezést, amely megjeleníti azokat az angol szavakat,
  amelyek valamelyik magyar jelentését legalább 150 fő helyesnek ítélte,
  vagy kevesebb, mint 5 fő találta hibásnak! (5. feladat:)*/
select angol, helyes, helytelen
  from szolista
  where helyes>=150 or helytelen<5;

/*6.  Készítsen lekérdezést, amely megjeleníti
  az „ac” betűkkel kezdődő és „y”-nal végződő angol  szavakat
  és a magyar megfelelőiket. (6. feladat:)*/
select angol, magyar
  from szolista
  where angol like 'ac%y';

/*7.  Készítsen lekérdezést, amely megadja a 4000-nél
  nagyobb azonosítójú angol szavakra vonatkozóan
  a következőket: helyes minősítések száma,
  helytelen minősítések száma,
  minősítések száma átlagosan.
  A harmadik mező „átlag” néven jelenjen meg.
  (Egyetlen sort kell kiírni.) (7. feladat:)*/
select sum(helyes), sum(helytelen), avg(helyes+helytelen) as 'átlag'
  from szolista
  where azon>4000;
 
  /*Rávezető-gyakorló feladatok:
  7.a Készítsen lekérdezést, amely megadja a 4000-nél
  nagyobb azonosítójú angol szavakra vonatkozóan
  a következőket: angol szó, magyar szó,
  helyes minősítések száma (soronként),
  helytelen minősítések száma (soronként),
  minősítések száma átlagosan (soronként).
  A harmadik mező „minősítések száma átlagosan soronként” néven jelenjen meg.
  (Több sort kell kiírni.) (7.a feladat:)*/

  select angol, magyar, helyes, helytelen, (helyes+helytelen)/2 as 'minősítések száma átlagosan soronként'
  from szolista where azon>4000;
  /*Azért nem használhatsz oszlopfüggvényt(aggregáló függvényt), mert az nem egy sorral,
  hanem egy oszloppal dolgozik.*/
 
  /*  7.b Készítsen lekérdezést, amely megadja a 4000-nél
  nagyobb azonosítójú angol szavakra vonatkozóan
  a következőket:
  helyes minősítések száma átlagosan (az összes sorban lévő értékek átlaga),
  helytelen minősítések száma átlagosan (az összes sorban lévő értékek átlaga),
  helyes és helytelen minősítések száma átlagosan (az összes sorban lévő értékek átlaga).
  (Egyetlen sort kell kiírni.) (7.b feladat:)*/

  select avg(helyes), avg(helytelen), avg(helyes+helytelen) as 'minősítések száma átlagosan'
  from szolista where azon>4000;
  /*Itt a helyes értékeket soronként összeadja, majd elosztja a rekordok számával,
  a helytelen értékeket soronként összeadja, majd elosztja a rekordok számával,
  soronként a helyes és helytelen értékeket összeadja,
   majd ezeket is összeadja és elosztja a rekordok számával.
   Ha két rekorddal ki akarjuk próbálni, konkrétan milyen eredményt kapunk:
  select avg(helyes), avg(helytelen), avg(helyes+helytelen) as 'minősítések száma átlagosan'
  from szolista where azon = 3203 or azon = 3204;
   */


 /*  7.c  Készítsen lekérdezést, amely megadja a 4000-nél
  nagyobb azonosítójú angol szavak számát.
  (Egyetlen sort kell kiírni.) (7.c feladat:)*/

  select count(azon) as 'rekordok száma'
  from szolista where azon>4000;
  /*Itt minden olyan mezőt megadhatunk a függvénynek, aminek az értéke garantáltan kitöltött.
  Az azonosító mező ezért mindig alkalmas.
  Vegyük észre, hogy az ilyen feladatoknál nincs értelme
  kiírni egy mezőt, pl. az angol nevet, mivel az nem köthető
  az összesítő függvény eredményéhez.
  pl. a következő megoldás nem dob hibát, de nincs értelme, ezért nagyon vigyázzunk ezzel:
  select angol, count(azon) as 'rekordok száma' from szolista where azon>4000;
  Itt az első, szűrésnek megfelelő rekordban lévő angol szót írja ki, aminek nincs értelme.
  Győződj meg róla:
  SELECT angol, azon FROM `szolista` where angol like "perfume";
  */

/*8.  Készítsen lekérdezést, amely megadja,
  hogy legelőször mikor került
  a „warp” angol szó az adatbázisba! (8. feladat:)*/

select felvetel
  from szolista
WHERE angol like 'warp'
order by felvetel
limit 1;

select min(felvetel)
  from szolista
WHERE angol like 'warp';


/*9.  Készítsen lekérdezést, amely megadja,
  hogy az adatbázis angol szavai közül
  melyeknek van legalább 3 magyar jelentése!
  A lekérdezésben csak az angol szavak jelenjenek meg. (9. feladat:)*/
select angol
  from szolista
  group by angol
  having count(azon)>=3;


2021. november 17., szerda

2021.11.17. AB

Házi feladat a Termék adatbázisos megoldásokat tudni,  számonkérés várható.

További házi feladat a Hajó adatbázisos feladatokat befejezni, digifüzetbe betenni.

A Termék feladatsor megoldása

1.  Listázd ki a képernyőre a termék nevét, és árát a termék neve szerinti
növekvő sorrendben.
SELECT terméknév, termék_ár FROM termékek ORDER BY terméknév
2.  Listázd ki a képernyőre a termék nevét és a csoport nevét,
a második oszlop neve legyen: csoport.
SELECT terméknév, csoport_azonosító AS 'Csoport' FROM termékek
3.  Listázd ki a képernyőre az első kettő termék csoportnevét
és a termék nevét a csoport neve szerinti csökkenő sorrendben.
SELECT terméknév, csoport_azonosító  AS "Csoport"FROM termékek
ORDER BY csoport_azonosító DESC LIMIT 2
4.  Listázd ki a képernyőre azoknak a termékeknek a nevét,
amelyekben szerepel a "kártya".
SELECT terméknév FROM termékek WHERE terméknév LIKE '%kártya%'
5.  Írd ki a képernyőre, hogy hány darab termék tartozik
a 04-es csoportba (egyenlő a 04-gyel).
SELECT COUNT(terméknév) FROM termékcsoportok WHERE csoport_azonosító = '04'
6.  Írd ki a képernyőre a termékek átlag árát.
SELECT AVG(termék_ár) FROM termékek
7.  Listázd ki a képernyőre termékcsoportonként (a termék csoportneve jelenjen meg)
a maximális árat.
ezt pótoljuk


Továbbfejlesztés, ha már tudjuk a táblák összekapcsolását:
1.  Listázd ki a képernyőre a termék nevét, és árát a termék neve
 szerinti növekvő sorrendben.
SELECT terméknév, termék_ár FROM termékek ORDER BY terméknév ASC;
2.  Listázd ki a képernyőre a termék nevét és a csoport nevét,
 a második oszlop neve legyen: csoport.
SELECT termékek.terméknév, termékcsoportok.csoportnév AS 'Csoport'
 FROM termékek INNER JOIN termékcsoportok
  ON termékcsoportok.csoport_azonosító=termékek.csoport_azonosító;
3.  Listázd ki a képernyőre az első kettő termék csoportnevét
 és a termék nevét a csoport neve szerinti csökkenő sorrendben.
SELECT termékcsoportok.csoportnév, termékek.terméknév
FROM termékek INNER JOIN termékcsoportok
 ON termékcsoportok.csoport_azonosító=termékek.csoport_azonosító
  ORDER BY termékcsoportok.csoportnév DESC LIMIT 2;
4.  Listázd ki a képernyőre termékcsoportonként
 (a termék csoportneve jelenjen meg) a maximális árat.
SELECT csoportnév, MAX(termékek.termék_ár) AS 'A termék maximális ára',
  FROM termékek INNER JOIN termékcsoportok
  ON termékcsoportok.csoport_azonosító=termékek.csoport_azonosító
  group by csoportnév;

2021. november 15., hétfő

2021.11.15. AB

 Megtanultuk elméletben a táblák illesztését (összekapcsolását). A második módszert kell csak tudni, a join kulcsszóval való illesztést.  Ma eljutottunk az önillesztésig. Egyelőre gyakorlatban az inner joint fogjuk csak gyakorolni, ezt kell tudni. 

Elkezdtük a Termék adatbázis kiegészítő feladatait, itt folytatjuk.

2021. november 12., péntek

2021.11.12. AB

 Házi feladat pótlás. Legközelebb vesszük a táblák összekapcsolását.

2021.11.12 ISZ

 Ismétlés: makrók

Körlevél: elkészült a Kékeszöld medence, 1* elkészült a körlevél, még gyakoroljuk.

2021. november 11., csütörtök

2021.11.11. AB

 Befejeztük az Áru adatbázist, elkezdtük a Terméket. Ezt be kell fejezni otthon, a megoldást az adatbázisos digifüzetbe feltölteni. A forrás a Teamsben van.

2021.11.10. ISZ

 Tartalomjegyzék, makró készítése (Magyar költők feladat)

2021. november 4., csütörtök

2021.11.04. AB

 Eljutottunk a HAVING-ig ma.

Házi feladat mindenkinek otthon felvinni a minta adatbázist, feltölteni adatokkal, és az eddig tanult lekérdezéseket kipróbálni. Számonkérés várható.

A Group by-nál csak a legegyszerűbb alkalmazást kell tudni, a having-et nem kell egyelőre tudni használni.


SELECT * FROM `diakok`
SELECT * FROM `diakok` order by nev
SELECT * FROM `diakok` order by nev, szuletesi_ev
SELECT * FROM `diakok` order by nev desc, szuletesi_ev
SELECT * FROM `diakok` limit 1
SELECT * FROM `diakok` limit 3
SELECT * FROM `diakok` order by szuletesi_ev desc limit 1
SELECT * FROM `diakok`
SELECT * FROM diakok WHERE nev LIKE 'Horváth%' AND szuletesi_ev>=1990
SELECT * FROM diakok WHERE szuletesi_ev=1991 OR szuletesi_ev=1990
SELECT * FROM diakok WHERE szuletesi_hely IN ('Karcag''Kisvárda')
SELECT * FROM diakok WHERE szuletesi_hely not IN ('Karcag''Kisvárda')
SELECT * FROM diakok WHERE szuletesi_ev BETWEEN 1988 AND 1990
SELECT * FROM diakok WHERE szuletesi_ev > 1988 and szuletesi_ev <1990
SELECT * FROM diakok WHERE szuletesi_ev NOT BETWEEN 1988 AND 1990
SELECT nev AS Name, szuletesi_ev AS Birthdate FROM diakok
SELECT nev AS Name, (2021 - szuletesi_ev) AS Birthdate FROM diakok
SELECT nev AS Name, (2021 - szuletesi_ev) FROM diakok
SELECT nev AS Name, (2021 - szuletesi_ev) as 'A diák kora' FROM diakok
select count(*) from diakok
select count(nev) from diakok
select count(nev) as 'Sorok száma' from diakok
select min(szuletesi_ev) as 'Legkisebb születési év' from diakok
select max(szuletesi_ev) as 'Legnagyobb születési év' from diakok
select nev, max(szuletesi_ev) as 'Legnagyobb születési év' from diakok
SELECT * FROM `diakok` group by szuletesi_ev
SELECT szuletesi_ev FROM `diakok` group by szuletesi_ev