Kihagyás

SQL Bevezetés

  • Magas szintű programozási nyelv
  • Deklaratív
    • "hogyan" helyett "mit"
    • Előny a procedurális megközelítéshez képest
  • Az adatbázis-kezelő rendszer kitalálja a leggyorsabb végrehajtási módot
    • So called: Lekérdezés optimalizáció

SQL mantra - Select From Where

SELECT <atribútumok>
FROM <egy vagy több tábla>
WHERE <tábla soraira vonatkozó feltételek>;

Példa táblák a jegyzethez: (EA boi goes p hard on this one)

  • Sörök(név, gyártó)
  • Kocsmák(név, cím, engedélySzám)
  • Alkeszek(név, cím, telefon)
  • Szeret(alkesz, sör)
  • Felszolgál(kocsma, sör, ár)
  • Látogat(alkesz, kocsma)

Don't forget, underline is key :3

Kotlin reminder

A pontosvessző (pontosabban sorelválasztó karakter, később módosítható) működése egy kicsit érdekes SQL viszonlatban, de erre ha eljutunk PL/SQL-ig, szót ejtek.

Csak ne felejts el, hogy utasítások után jó dolog...

Lekérdezés - Példa

Mely söröket gyártotta az Anheuser-Busch?

SELECT nev
FROM Sörök
WHERE gyártó = 'Anheuser-Busch';

Eredmény - Anheuser

név
Bud
Bud Lite
Michelob
...

Lekérdezés jelentése

  • Elővesszük a FROM záradékban megadott relációt
    • A reláció lehet másik SELECT eredménye is...
  • Alkalmazzuk a WHERE záradékban megadott kiválasztási feltételt
  • Az ederményt a SELECT záradékban megadott oszlopokra vetítjük
    • A *-al kiválaszthatjuk az összes oszlopot
    • Opcionálisan a SELECT <A> AS <A'>, <B> AS <B_stg>... alakban át is nevezhetünk oszlopokat

Kifejezések a SELECT-ben

SELECT kocsma, sör, ár*144 AS árJenben
FROM felszolgál;

According to the EA:

"Minden kifejezés, ami 'értelmesnek tűnik' megjelenhet a SELECT záradékban"

Lényegében a típusinveriánsan megfelelő műveletek alkalmazhatóak

Konstansok a SELECT-ben

SELECT alkesz, 'szereti a Budot' AS BudIvó
FROM szeret
WHERE sör = 'Bud';

Eredmény - BudIvó

alkesz BudIvó
Sally szereti a Budot
Fred szereti a Budot
... ...

Információ integráció

  • Az adatbázisok sok firrásból épülhetnek fel (adattárházak)
    • Például minden kocsmának van egy saját Menü(sör, ár) táblája
    • A Felszolgál(kocsma, sör, ár) tábla elkészítéséhez pedig minden táblát fel kell dolgoznuk, a kocsma nevét pedig konstansként kell beszúrnunk

Indegráció - Példa

"Joe bárja" esetén

SELECT 'Joe bárja' AS kocsma, sör, ár
FROM Menü;

Összetett feltételek a WHERE-ben

  • Logikai műveletek
    • AND, OR, NOT
  • Összehasonlítások
    • =, <>, <, >, <=, >=

Összetett feltétel - Példa

Joe bárjában mennyibe kerül a Bud?

SELECT ár
FROM Felszolgál
WHERE kocsma = 'Joe bárja' 
 AND sör = 'Bud';

Kotin reminder

SQL-nek teljesen mindegy, hogy space, vagy sortöréssel választasz el, addig olvassa az utasítást, amíg új záradékot, vagy sorelválasztót nem talál...

SELECT ár FROM Felszolgál WHERE kocsma = 'Joe bárja' AND sör = 'Bud'; is teljesen valid, csak a mantra szavait konvenció sortöréssel kezdeni, subquery-nél meg behúzni.

Ez alól a programban tárolt nyers SQL kivétel, a Java kód elég ramatyul nézne ki, főleg a régi IDE-ken, ahol még nem volt az inline SQL-re syntax-highlight ._.

Minták

  • Feltételben a szavakon mintát illeszthetünk
    • <Attribútum> LIKE <minta>
    • <Attribútum> NOT LIKE <minta>
  • Speciális karakterek
    • % \(\to\) tetszőleges számú, tetszőleges karakter
    • _ \(\to\) pontosan egy, tetszőleges karakter

Minták - Példa

Budapesten belüli alkeszek listája

Ez a példa nem tetszik, mert a címet egy rekordként tárolja, but anyways ig...

SELECT név
FROM Alkeszek
WHERE cím LIKE '%Budapest%';
  • Így a címben bárhol megjelenik pontosan a Budapest karaktersor, akkor match-elni fog
    • 1056 Budapest, Fővám tér 2. talál
    • 2112 Veresegyház, Budapesti utca 2. szintén talál<!--

Mondom én, hogy ez a példa bs. És igen, ezt a címet direkt megkerestem lmao --> - \(\red{\text{Buda alatt, de Pest mellett}}\) nem talál

Keressünk olyan alkeszeket, akiknek a nevük második karaktere a, és nevük y-ra végződik

SELECT név
FROM Alkeszek
WHERE név LIKE '_a%y';
  • Ig it is time for Sally to show up :D

NULL

  • Alapértelmezés szerint a kulcson kívül minden attribútum tartalmazhat üres értéket
    • Ez később szigorítható, don't worry
  • A jelentés kontextusfüggő
    • Hiányzó érték
      • Ismeretlen elkövető
      • Nem tudjuk, hogy van Joe bárja (elég sus ngl)
    • Értelmetlen
      • Szingli embernek házastárs
      • Egyetemistának életkedv

NULL - összehasonlítások

  • SQL háromértékű logikája
    • TRUE
    • FALSE
    • UNKNOWN
  • Egy érték NULL-lal hasonlítva UNKNOWN eredményű lesz
  • A WHERE záradékban csak a TRUE érték kerül be az eredménybe

THF.: TRUE = 1 FALSE = 0, UNKNOWN = 1/2

Ekkor

  • AND = MIN
  • OR = MAX
  • NOT(x) = 1-x