ako písať sql select queries. SQL dotazy

Každý webový vývojár potrebuje poznať SQL, aby mohol písať databázové dotazy. A aj keď phpMyAdmin nebol zrušený, na písanie nízkoúrovňového SQL je často potrebné zašpiniť si ruky.

Preto sme pripravili krátku prehliadku základov SQL. Začnime!

1. Vytvorte tabuľku

Príkaz CREATE TABLE sa používa na vytváranie tabuliek. Argumenty musia byť názvy stĺpcov, ako aj ich dátové typy.

Poďme tvoriť jednoduchý stôl podľa názvu mesiac. Pozostáva z 3 stĺpcov:

  • id– Číslo mesiaca v kalendárnom roku (celé číslo).
  • názov– Názov mesiaca (reťazec, maximálne 10 znakov).
  • dni– Počet dní v tomto mesiaci (celé číslo).

Takto by vyzeral zodpovedajúci SQL dotaz:

CREATE TABLE mesiace (id int, meno varchar(10), dni int);

Taktiež pri vytváraní tabuliek je vhodné pridať primárny kľúč pre jeden zo stĺpcov. Vďaka tomu budú záznamy jedinečné a urýchlia sa vybrané dotazy. Nech je v našom prípade názov mesiaca jedinečný (stĺpec názov)

CREATE TABLE months (id int, name varchar(10), days int, PRIMARY KEY (name));

dátum a čas
Dátový typPopis
DÁTUMHodnoty dátumu
DÁTUM ČASHodnoty dátumu a času s minútovou presnosťou
ČASČasové hodnoty

2. Vložte riadky

Teraz vyplňte našu tabuľku mesiacov užitočná informácia. Pridávanie záznamov do tabuľky sa vykonáva pomocou príkazu INSERT. Tento návod možno napísať dvoma spôsobmi.

Prvým spôsobom je neuvádzať názvy stĺpcov, do ktorých sa budú údaje vkladať, ale zadať iba hodnoty.

Tento zápis je jednoduchý, ale nebezpečný, pretože neexistuje žiadna záruka, že pri rozširovaní projektu a úprave tabuľky budú stĺpce v rovnakom poradí ako predtým. Bezpečnejší (a zároveň ťažkopádnejší) spôsob písania príkazu INSERT vyžaduje zadanie hodnôt aj poradia stĺpcov:

Tu je prvá hodnota v zozname HODNOTY sa zhoduje s prvým zadaným názvom stĺpca atď.

3. Extrahovanie údajov z tabuliek

Príkaz SELECT je náš najlepší priateľ, keď chceme získať údaje z databázy. Používa sa veľmi často, preto si túto časť prečítajte veľmi pozorne.

Najjednoduchším použitím príkazu SELECT je dotaz, ktorý vráti všetky stĺpce a riadky z tabuľky (napríklad tabuľky s názvom postavy):

VYBERTE * Z "znakov"

Znak hviezdičky (*) znamená, že chceme získať údaje zo všetkých stĺpcov. Takže základ SQL dáta zvyčajne pozostávajú z viac ako jednej tabuľky, je potrebné špecifikovať kľúčové slovo FROM , za ktorým nasleduje medzera, za ktorou nasleduje názov tabuľky.

Niekedy nechceme získať údaje z nie všetkých stĺpcov v tabuľke. Aby sme to dosiahli, musíme namiesto hviezdičky (*) napísať názvy požadovaných stĺpcov oddelené čiarkami.

VYBERTE ID, názov FROM mesiac

V mnohých prípadoch tiež chceme, aby boli výsledky zoradené v určitom poradí. V SQL to robíme pomocou ORDER BY . Na zoradenie vo vzostupnom poradí môže byť potrebný voliteľný modifikátor - ASC (predvolené) alebo na zostupné zoradenie DESC:

VYBERTE id, meno OD mesiaca ORDER BY name DESC

Keď používate ORDER BY, uistite sa, že je v príkaze SELECT na poslednom mieste. V opačnom prípade sa zobrazí chybové hlásenie.

4. Filtrovanie údajov

Naučili ste sa, ako vybrať konkrétne stĺpce z databázy pomocou SQL dotazu, ale čo ak chceme získať aj konkrétne riadky? Na pomoc tu prichádza klauzula WHERE, ktorá nám umožňuje filtrovať údaje na základe podmienky.

V tomto dotaze vyberieme z tabuľky len tie mesiace mesiac ktoré sú dlhšie ako 30 dní pomocou operátora väčšie ako (>).

SELECT id, name FROM month WHERE days > 30

5. Pokročilé filtrovanie údajov. operátory AND a OR

Predtým sme používali na filtrovanie údajov pomocou jedného kritéria. Na komplexnejšie filtrovanie údajov môžete použiť operátory AND a OR a operátory porovnávania (=,<,>,<=,>=,<>).

Tu máme tabuľku obsahujúcu štyri najpredávanejšie albumy všetkých čias. Vyberme si tie, ktoré sú klasifikované ako rock a majú menej ako 50 miliónov predaných kópií. To sa dá ľahko urobiť umiestnením operátor AND medzi týmito dvoma podmienkami.


VYBERTE * Z albumov WHERE žáner = "rock" A predaj_v_miliónoch<= 50 ORDER BY released

6. Medzi/medzi/páči sa mi

WHERE tiež podporuje niekoľko špeciálnych príkazov, ktoré vám umožňujú rýchlo skontrolovať najčastejšie používané dotazy. Tu sú:

  • IN - používa sa na určenie rozsahu podmienok, z ktorých môže byť splnená ktorákoľvek
  • BETWEEN - Skontroluje, či je hodnota v určenom rozsahu
  • LIKE - hľadá určité vzory

Napríklad, ak chceme vybrať albumy s pop a duša hudba, môžeme použiť IN("value1","value2") .

SELECT * FROM albumov WHERE žáner IN ("pop","soul");

Ak by sme chceli získať všetky albumy vydané v rokoch 1975 až 1985, napísali by sme:

SELECT * FROM albumy WHERE vydané BETWEEN 1975 AND 1985;

7. Funkcie

SQL je preplnené funkciami, ktoré robia najrôznejšie užitočné veci. Tu sú niektoré z najčastejšie používaných:

  • COUNT() - vráti počet riadkov
  • SUM() - vráti celkový súčet číselného stĺpca
  • AVG() - vráti priemernú hodnotu z množiny hodnôt
  • MIN() / MAX() - získa minimálnu / maximálnu hodnotu zo stĺpca

Aby sme získali posledný rok v našej tabuľke, musíme napísať nasledujúci SQL dotaz:

SELECT MAX (vydané) FROM albumov;

8. Poddotazy

V predchádzajúcom odseku sme sa naučili robiť jednoduché výpočty s údajmi. Ak chceme použiť výsledok z týchto výpočtov, bez vnorených dopytov sa nezaobídeme. Povedzme, že chceme výstup umelec, album a rok vydania pre najstarší album v tabuľke.

Vieme, ako získať tieto konkrétne stĺpce:

SELECT interpret, album, vydané FROM albumov;

Vieme tiež, ako získať najskorší rok:

SELECT MIN(vydané) Z albumu;

Všetko, čo teraz potrebujete, je spojiť dva dopyty s WHERE:

SELECT interpreta,album,vydane FROM albumov WHERE vydané = (SELECT MIN(vydané) FROM albumov);

9. Zlučovanie tabuliek

V zložitejších databázach existuje viacero tabuliek, ktoré spolu súvisia. Nižšie sú napríklad dve tabuľky o videohrách ( video hry) a vývojári videohier ( game_developers).


Tabuľka video hry existuje stĺpec vývojára ( developer_id), ale obsahuje celé číslo, nie meno vývojára. Toto číslo je identifikátor ( id) príslušného vývojára z tabuľky vývojárov hry ( game_developers) logické prepojenie týchto dvoch zoznamov, čo nám umožňuje používať informácie uložené v oboch zoznamoch súčasne.

Ak chceme vytvoriť dotaz, ktorý vráti všetko, čo potrebujeme vedieť o hrách, môžeme použiť INNER JOIN na prepojenie stĺpcov z oboch tabuliek.

SELECT video_games.name, video_games.genre, game_developers.name, game_developers.country FROM video_games INNER JOIN game_developers ON video_games.developer_id = game_developers.id;

Toto je najjednoduchší a najbežnejší typ JOIN. Existuje niekoľko ďalších možností, ale vzťahujú sa na menej časté prípady.

10. Prezývky

Ak sa pozriete na predchádzajúci príklad, všimnete si, že sú tam dva stĺpce tzv názov. Je to mätúce, preto nastavme alias do jedného z opakujúcich sa stĺpcov, napr. názov od stola game_developers bude zavolaný vývojár.

Dotaz môžeme tiež skrátiť aliasom názvov tabuliek: video hry zavolajme hry, game_developers - devs:

SELECT games.name, games.genre, devs.name AS developer, devs.country FROM video_games AS games INNER JOIN game_developers AS devs ON games.developer_id = devs.id;

11. Aktualizácia údajov

Často potrebujeme zmeniť údaje v niektorých riadkoch. V SQL sa to robí pomocou príkazu UPDATE. Vyhlásenie UPDATE pozostáva z:

  • Tabuľka obsahujúca náhradnú hodnotu;
  • Názvy stĺpcov a ich nové hodnoty;
  • Riadky vybraté pomocou WHERE, ktoré chceme aktualizovať. Ak to neurobíte, všetky riadky v tabuľke sa zmenia.

Nižšie je tabuľka TV_series so sériami s ich hodnotením. Do tabuľky sa však vkradla malá chybička: hoci séria Hra o tróny a je opísaná ako komédia, to naozaj nie je. Poďme to napraviť!

údaje tabuľky tv_series AKTUALIZÁCIA SET tv_series žáner = "dráma" WHERE id = 2;

12. Vymazanie údajov

Odstránenie riadku tabuľky pomocou SQL je veľmi jednoduchý proces. Jediné, čo musíte urobiť, je vybrať tabuľku a riadok, ktoré chcete odstrániť. Odstránime posledný riadok v tabuľke z predchádzajúceho príkladu TV_series. To sa vykonáva pomocou príkazu >DELETE.

DELETE FROM tv_series WHERE id = 4

Pri písaní príkazu DELETE buďte opatrní a uistite sa, že je prítomná klauzula WHERE, inak sa vymažú všetky riadky tabuľky!

13. Vymazanie tabuľky

Ak chceme vymazať všetky riadky, ale opustiť samotnú tabuľku, použijeme príkaz TRUNCATE:

TRUNCATE TABLE názov_tabuľky;

V prípade, že naozaj chceme vymazať údaje aj samotnú tabuľku, príde vhod príkaz DROP:

DROP TABLE názov_tabuľky;

Pri týchto príkazoch buďte veľmi opatrní. Nedajú sa vrátiť späť!/p>

Toto končí náš SQL tutoriál! Veľa sme toho neprebrali, ale to, čo už viete, by vám malo stačiť na to, aby ste získali niekoľko praktických zručností vo vašej webovej kariére.

SQL - Lekcia 4. Výber údajov - príkaz SELECT

Takže v našej databáze fóra sú tri tabuľky: používatelia (používatelia), témy (témy) a príspevky (správy). A chceme vidieť, aké údaje obsahujú. Na to je v SQL operátor VYBRAŤ. Syntax na jeho použitie je nasledovná:

SELECT vybrať_čo FROM vybrať_z;


Namiesto „what_to_choose“ musíme zadať buď názov stĺpca, ktorého hodnoty chceme vidieť, alebo názvy niekoľkých stĺpcov oddelené čiarkami, alebo znak hviezdičky (*), čo znamená výber všetkých stĺpcov tabuľky. Namiesto "from_choose" by ste mali zadať názov tabuľky.

Najprv sa pozrime na všetky stĺpce z tabuľky používateľov:

SELECT * FROM užívateľov;

To sú všetky naše údaje, ktoré sme zadali do tejto tabuľky. Predpokladajme však, že sa chceme pozrieť iba na stĺpec id_user (napríklad v minulej lekcii sme potrebovali vedieť, čo sú id_users v tabuľke používateľov, aby sme naplnili tabuľku tém). Za týmto účelom zadáme názov tohto stĺpca v dotaze:

SELECT id_user FROM užívateľov;

No ak chceme vidieť napríklad mená a e-maily našich užívateľov, tak uvedieme stĺpce záujmu oddelené čiarkami:

SELECT meno, email FROM užívateľov;

Podobne môžete vidieť, aké údaje obsahujú naše ďalšie tabuľky. Pozrime sa, aké témy máme:

VYBERTE * Z tém;

Teraz máme len 4 témy a ak ich bude 100? Bol by som rád, keby sa zobrazovali napríklad podľa abecedy. V SQL na to existuje kľúčové slovo. ZORADIŤ PODĽA za ktorým nasleduje názov stĺpca, podľa ktorého sa uskutoční triedenie. Syntax je nasledovná:

SELECT názov_stĺpca FROM názov_tabuľky ORDER BY názov_triediaceho_stĺpca;



Predvolené triedenie je vzostupné, ale to sa dá zmeniť pridaním kľúčového slova DESC

Teraz sú naše údaje zoradené v zostupnom poradí.

Môžete triediť podľa niekoľkých stĺpcov naraz. Napríklad nasledujúci dotaz zoradí údaje podľa stĺpca topic_name a ak je v tomto stĺpci niekoľko rovnakých riadkov, stĺpec id_author bude zoradený v zostupnom poradí:

Porovnajte výsledok s výsledkom predchádzajúceho dotazu.

Veľmi často nepotrebujeme všetky informácie z tabuľky. Chceme napríklad vedieť, ktoré témy vytvoril používateľ sveta (id=4). V SQL na to existuje kľúčové slovo. KDE, syntax takejto požiadavky je nasledovná:

Pre náš príklad je podmienkou ID užívateľa, t.j. chceme len riadky, ktoré majú 4 v stĺpci id_author (užívateľské ID sveta):

Alebo chceme vedieť, kto vytvoril tému „bicykle“:

Samozrejme, že by bolo pohodlnejšie zobraziť meno autora namiesto ID autora, ale mená sú uložené v inej tabuľke. V neskorších lekciách sa naučíme, ako vyberať údaje z viacerých tabuliek. Zatiaľ si povieme, aké podmienky je možné zadať pomocou kľúčového slova WHERE.

Operátor Popis
= (rovná sa) Vybrané hodnoty sa rovnajú zadaným

Príklad:

SELECT * FROM tém WHERE id_author=4;

výsledok:

> (viac) Vyberú sa hodnoty vyššie ako špecifikované

Príklad:

SELECT * FROM tém WHERE id_author>2;

výsledok:

< (меньше) Vyberú sa hodnoty nižšie, ako je špecifikované

Príklad:

VYBERTE * FROM tém WHERE id_author
výsledok:

>= (väčšie alebo rovné) Vyberú sa hodnoty väčšie alebo rovné zadanej hodnote.

Príklad:

SELECT * FROM tém WHERE id_author>=2;

výsledok:

<= (меньше или равно) Vyberú sa hodnoty menšie alebo rovné zadanej hodnote.

Príklad:

VYBERTE * FROM tém WHERE id_author
výsledok:

!= (nerovná sa) Vyberú sa hodnoty, ktoré sa nerovnajú zadaným hodnotám

Príklad:

SELECT * FROM topics WHERE id_author!=1;

výsledok:

NIE JE NULL Vyberú sa riadky, ktoré majú hodnoty v zadanom poli

Príklad:

SELECT * FROM tém WHERE id_author NIE JE NULL;

výsledok:

JE NULL Vyberú sa riadky, ktoré nemajú hodnotu v zadanom poli

Príklad:

SELECT * FROM tém WHERE id_author IS NULL;

výsledok:

Prázdna sada – žiadne takéto reťazce.

BETWEEN (medzi) Vyberú sa hodnoty medzi špecifikovanými hodnotami.

Príklad:

SELECT * FROM topics WHERE id_author BETWEEN 1 AND 3;

výsledok:

IN (obsiahnutá hodnota) Hodnoty zodpovedajúce zadaným

Príklad:

SELECT * FROM tém WHERE id_author IN (1, 4);

výsledok:

NOT IN (hodnota nie je obsiahnutá) Vybrané hodnoty iné ako uvedené

Príklad:

SELECT * FROM topics WHERE id_author NOT IN (1, 4);

výsledok:

LIKE (zápas) Vyberú sa vzorové hodnoty

Príklad:

SELECT * FROM topics WHERE topic_name LIKE "vel%";

výsledok:

Možné metaznaky operátora LIKE budú diskutované nižšie.

NIE AKO Vyberú sa hodnoty, ktoré sa nezhodujú so vzorkou

Príklad:

SELECT * FROM topics WHERE topic_name NOT LIKE "vel%";

výsledok:

Metaznaky operátora LIKE

Vyhľadávanie metaznakov je možné vykonávať iba v textových poliach.

Najčastejším metaznakom je % . To znamená akékoľvek znaky. Napríklad, ak chceme nájsť slová, ktoré začínajú písmenami „vel“, potom napíšeme LIKE „vel%“ a ak chceme nájsť slová, ktoré obsahujú znaky „klub“, napíšeme LIKE „% klub %“. Napríklad:

Ďalším bežne používaným metaznakom je _ . Na rozdiel od %, ktoré označuje málo alebo žiadne znaky, podčiarknutie označuje presne jeden znak. Napríklad:

Dávajte pozor na medzeru medzi metaznakom a „rybou“, ak ju preskočíte, požiadavka nebude fungovať, pretože metaznak _ znamená presne jeden znak a medzera je tiež znak.

Na dnes stačí. V ďalšej lekcii sa naučíme, ako dotazovať dve alebo viac tabuliek. Medzitým sa pokúste vytvoriť svoje vlastné dopyty proti tabuľke príspevkov (správ).

V databáze fóra sú teda tri tabuľky:

užívatelia (užívatelia);

Témy (témy);

· príspevky (správy).

Musíte vidieť, aké údaje obsahujú. Na to je v SQL operátor VYBRAŤ. Syntax na jeho použitie je nasledovná:

SELECT vybrať_čo FROM vybrať_z;

Namiesto „what_to_select“ musíte zadať buď názov stĺpca, ktorého hodnoty chcete zobraziť, alebo názvy niekoľkých stĺpcov oddelené čiarkami, alebo symbol hviezdičky (*), čo znamená výber všetkých stĺpcov tabuľky. Namiesto "from_choose" by ste mali zadať názov tabuľky.

Najprv sa pozrime na všetky stĺpce z tabuľky používateľov:

SELECT * FROM užívateľov;

Toto sú všetky údaje, ktoré boli zapísané do tabuľky.

Predpokladajme, že sa potrebujeme pozrieť len na stĺpec id_user (pretože na naplnenie tabuľky tém potrebujeme vedieť, čo sú id_users v tabuľke users). Ak to chcete urobiť, zadajte v dotaze názov tohto stĺpca:

SELECT id_user FROM užívateľov;

Ak potrebujete vidieť napríklad mená a e-maily používateľov, musíte uviesť stĺpce záujmu oddelené čiarkami:

SELECT meno, email FROM užívateľov;

Podobne môžete vidieť, aké údaje obsahujú ostatné tabuľky.

Najprv sa pozrime, čo sú to témy:

VYBERTE * Z tém;

Teraz sú v tabuľke len 4 témy, ale čo ak ich je 100? Bol by som rád, keby sa zobrazovali napríklad podľa abecedy. V SQL na to existuje kľúčové slovo. ZORADIŤ PODĽA nasleduje názov stĺpca, podľa ktorého sa má zoradiť. Syntax je nasledovná:

SELECT názov_stĺpca FROM názov_tabuľky ORDER BY názov_triediaceho_stĺpca;

Predvolené triedenie je vzostupné, ale to sa dá zmeniť pridaním kľúčového slova DESC.

Údaje sú teraz zoradené v zostupnom poradí.

Môžete triediť podľa niekoľkých stĺpcov naraz. Napríklad nasledujúci dotaz zoradí údaje podľa stĺpca topic_name a ak je v tomto stĺpci niekoľko rovnakých riadkov, stĺpec id_author bude zoradený v zostupnom poradí:

Porovnajte výsledok s výsledkom predchádzajúceho dotazu.

Používateľ veľmi často nepotrebuje všetky informácie z tabuľky. Napríklad potrebujete zistiť, ktoré témy vytvoril užívateľ sveta (id = 4). V SQL na to existuje kľúčové slovo. KDE, syntax takejto požiadavky je nasledovná:

SELECT názov_stĺpca FROM názov_tabulky WHERE podmienka;

Pre náš príklad je podmienkou ID užívateľa, t.j. sú potrebné len tie riadky, ktorých stĺpec id_author je 4 (ID sveta):

SELECT * FROM tém WHERE id_author=4;

Teraz musíte zistiť, kto vytvoril tému „bicykle“:

Samozrejme, že by bolo pohodlnejšie zobraziť meno autora namiesto ID autora, ale mená sú uložené v inej tabuľke. Ďalej sa pozrime na to, ako vybrať údaje z viacerých tabuliek. Zatiaľ si povieme, aké podmienky je možné zadať pomocou kľúčového slova WHERE.

Operátor Popis
= (rovná sa) Vyberú sa hodnoty rovné zadaným. Príklad: SELECT * FROM tém WHERE id_author=4; výsledok:
> (viac) Vyberú sa hodnoty vyššie ako špecifikované. Príklad: SELECT * FROM tém WHERE id_author > 2; výsledok:
< (меньше) Vyberú sa hodnoty menšie ako špecifikované. Príklad: SELECT * FROM tém WHERE id_author< 3; Результат:
>= (väčšie alebo rovné) Vyberú sa hodnoty väčšie a rovné zadanej hodnote. Príklad: SELECT * FROM tém WHERE id_author >= 2; výsledok:
<= (меньше или равно) Vyberú sa hodnoty menšie alebo rovné zadanej hodnote. Príklad: SELECT * FROM tém WHERE id_author<= 3; Результат:
!= (nerovná sa) Vyberú sa hodnoty, ktoré sa nerovnajú zadaným hodnotám. Príklad: SELECT * FROM tém WHERE id_author != 1; výsledok:
NIE JE NULL Vyberú sa riadky, ktoré majú hodnoty v zadanom poli. Príklad: SELECT * FROM tém WHERE id_author NIE JE NULL; výsledok:
JE NULL Vyberú sa riadky, ktoré nemajú hodnotu v zadanom poli. Príklad: SELECT * FROM tém WHERE id_author IS NULL; výsledok:
Prázdna sada – žiadne takéto reťazce.
BETWEEN (medzi) Vyberú sa hodnoty medzi špecifikovanými hodnotami. Príklad: SELECT * FROM topics WHERE id_author BETWEEN 1 AND 3; výsledok:
IN (obsiahnutá hodnota) Vyberú sa hodnoty zodpovedajúce zadaným hodnotám. Príklad: SELECT * FROM tém WHERE id_author IN (1, 4); výsledok:
NOT IN (hodnota nie je obsiahnutá) Vyberú sa iné hodnoty, ako sú uvedené. Príklad: SELECT * FROM tém WHERE id_author NOT IN (1, 4); výsledok:
LIKE (zápas) Vyberú sa hodnoty, ktoré zodpovedajú vzorke. Príklad: SELECT * FROM topics WHERE topic_name LIKE "vel%"; výsledok:
Možné metaznaky operátora LIKE budú diskutované nižšie.
NIE AKO Vyberú sa hodnoty, ktoré sa nezhodujú so vzorkou. Príklad: SELECT * FROM topics WHERE topic_name NOT LIKE "vel%"; výsledok:

Dotazy sú písané bez úvodzoviek, pretože MySQL, MS SQL a PostGree sú rozdielne.

SQL dotaz: získanie špecifikovaných (povinných) polí z tabuľky

SELECT id, country_title, count_people FROM table_name

Dostaneme zoznam záznamov: VŠETKY krajiny a ich obyvateľstvo. Názvy povinných polí sú oddelené čiarkami.

SELECT * FROM názov_tabuľky

* označuje všetky polia. To znamená, že budú displeje VŠETKO dátové polia.

SQL dotaz: zobrazenie záznamov z tabuľky s výnimkou duplikátov

SELECT DISTINCT country_title FROM table_name

Získame zoznam záznamov: krajiny, v ktorých sa naši používatelia nachádzajú. Z jednej krajiny môže byť veľa používateľov. V tomto prípade je to vaša požiadavka.

SQL dotaz: zobrazenie záznamov z tabuľky podľa danej podmienky

SELECT id, country_title, city_title FROM table_name WHERE count_people>100000000

Dostávame zoznam rekordov: krajiny, kde je počet ľudí viac ako 100 000 000.

SQL dotaz: zobrazenie záznamov z tabuľky s usporiadaním

SELECT id, city_title FROM table_name ORDER BY city_title

Dostaneme zoznam záznamov: mestá v abecednom poradí. A na začiatku, Z na konci.

SELECT id, city_title FROM table_name ORDER BY city_title DESC

Dostaneme zoznam záznamov: mestá naopak ( DESC) je v poriadku. Na začiatku ja, na konci A.

SQL dotaz: počítanie počtu záznamov

SELECT COUNT(*) FROM názov_tabuľky

Dostaneme počet (počet) záznamov v tabuľke. V tomto prípade NEEXISTUJE ŽIADNY zoznam záznamov.

SQL dotaz: zobrazenie požadovaného rozsahu záznamov

SELECT * FROM názov_tabulky LIMIT 2, 3

Z tabuľky dostaneme 2 (druhý) a 3 (tretí) záznam. Dotaz je užitočný pri vytváraní navigácie na WEB stránkach.

SQL dotazy s podmienkami

Zobrazenie záznamov z tabuľky podľa danej podmienky pomocou logických operátorov.

SQL dotaz: konštrukcia AND (AND)

SELECT id, city_title FROM table_name WHERE country="Russia" AND oil=1

Získanie zoznamu záznamov: mestá z Ruska A mať prístup k rope. Kedy sa používa operátor? A, potom sa obe podmienky musia zhodovať.

SQL dotaz: OR konštrukcia (OR)

SELECT id, city_title FROM table_name WHERE country="Russia" OR country="USA"

Získajte zoznam záznamov: všetky mestá z Ruska ALEBO USA. Kedy sa používa operátor? ALEBO, potom sa musí zhodovať ASPOŇ jedna podmienka.

SQL dotaz: AND NOT konštruovať (A NOT)

SELECT id, user_login FROM table_name WHERE country="Russia" AND NOT count_comments<7

Získajte zoznam záznamov: všetci používatelia z Ruska A vyrobené NIE MENEJ 7 komentárov.

SQL dotaz: IN konštrukcia (B)

SELECT id, user_login FROM table_name WHERE country IN ("Rusko", "Bulharsko", "Čína")

Získame zoznam záznamov: všetci používatelia, ktorí žijú v ( IN) (Rusko alebo Bulharsko alebo Čína)

SQL dotaz: NOT IN konstrukt (NOT IN)

SELECT id, user_login FROM table_name WHERE country NOT IN ("Rusko","Čína")

Získame zoznam záznamov: všetci používatelia, ktorí nežijú v ( NIE V) (Rusko alebo Čína).

SQL dotaz: konštrukcia IS NULL (prázdne alebo NIE prázdne hodnoty)

SELECT id, user_login FROM table_name WHERE status IS NULL

Získame zoznam záznamov: všetci používatelia, ktorých stav nie je definovaný. NULL je samostatná téma, a preto sa kontroluje samostatne.

SELECT id, user_login FROM table_name WHERE state IS NOT NULL

Získame zoznam záznamov: všetci používatelia, kde je definovaný stav (NIE NULA).

SQL dotaz: konštrukcia LIKE

SELECT id, user_login FROM table_name WHERE priezvisko LIKE "John%"

Získame zoznam záznamov: používatelia, ktorých priezvisko začína kombináciou „Ivan“. Znak % znamená AKÝKOĽVEK počet AKÝCHKOĽVEK znakov. Ak chcete nájsť znak %, musíte použiť escapovanie "Ivan\%".

SQL dotaz: konštrukcia BETWEEN

SELECT id, user_login FROM table_name WHERE plat MEDZI 25 000 AŽ 50 000

Dostávame zoznam záznamov: používatelia, ktorí dostávajú plat od 25 000 do 50 000 vrátane.

Existuje VEĽMI veľa logických operátorov, preto si podrobne preštudujte dokumentáciu k SQL serveru.

Komplexné SQL dotazy

SQL dotaz: spojenie viacerých dotazov

(SELECT id, user_login FROM table_name1) UNION (SELECT id, user_login FROM table_name2)

Získame zoznam záznamov: používateľov, ktorí sú zaregistrovaní v systéme, ako aj používateľov, ktorí sú registrovaní na fóre samostatne. Operátor UNION môže kombinovať viacero dopytov. UNION funguje ako SELECT DISTINCT, to znamená, že zahodí duplicitné hodnoty. Ak chcete získať úplne všetky záznamy, musíte použiť operátor UNION ALL.

SQL dotaz: výpočet hodnôt polí ​​MAX, MIN, SUM, AVG, COUNT

Výstup jedna, maximálna hodnota počítadla v tabuľke:

SELECT MAX(počítadlo) FROM názov_tabuľky

Výstup jednej, minimálnej hodnoty počítadla v tabuľke:

SELECT MIN(counter) FROM table_name

Zobrazenie súčtu všetkých hodnôt počítadla v tabuľke:

SELECT SUM(počítadlo) FROM názov_tabuľky

Zobrazenie priemernej hodnoty počítadla v tabuľke:

SELECT AVG(counter) FROM table_name

Zobrazenie počtu počítadiel v tabuľke:

SELECT COUNT(counter) FROM table_name

Záver o počte metrov v predajni č.1 v tabuľke:

SELECT COUNT(counter) FROM table_name WHERE office="Workshop #1"

Toto sú najobľúbenejšie príkazy. Tam, kde je to možné, sa odporúča použiť na výpočet SQL dotazy tohto druhu, keďže žiadne programovacie prostredie sa v rýchlosti spracovania dát nevyrovná samotnému SQL serveru pri spracovaní vlastných dát.

SQL dotaz: zoskupovanie záznamov

SELECT kontinent, SUM(country_area) FROM country GROUP BY kontinent

Dostaneme zoznam záznamov: s názvom kontinentu a so súčtom oblastí všetkých ich krajín. To znamená, že ak existuje adresár krajín, kde má každá krajina zaznamenanú svoju oblasť, potom pomocou konštrukcie GROUP BY môžete zistiť veľkosť každého kontinentu (na základe zoskupenia podľa kontinentov).

SQL dotaz: použitie viacerých tabuliek cez alias (alias)

SELECT o.order_no, o.amount_paid, c.company FROM orders AS o, customer AS with WHERE o.custno=c.custno AND c.city="Tyumen"

Dostávame zoznam záznamov: objednávky od kupujúcich, ktorí žijú iba v Ťumeni.

V skutočnosti pri správne navrhnutej databáze tohto typu je dopyt najfrekventovanejší, a tak MySQL zaviedlo špeciálny operátor, ktorý pracuje mnohonásobne rýchlejšie ako kód napísaný vyššie.

VYBERTE o.číslo_objednávky, o.zaplatená_suma, z.spoločnosť Z objednávok AKO o LEFT PRIDAJTE SA k zákazníkovi AS z ON (z.custno=o.custno)

Vnorené poddotazy

SELECT * FROM table_name WHERE plat=(SELECT MAX(plat) FROM zamestnanca)

Získame jeden záznam: informáciu o užívateľovi s maximálnou mzdou.

Pozor! Vnorené poddotazy sú jedným z úzkych miest na serveroch SQL. Spolu s ich flexibilitou a výkonom tiež výrazne zvyšujú zaťaženie servera. Čo vedie ku katastrofálnemu spomaleniu pre ostatných používateľov. Veľmi časté sú prípady rekurzívnych volaní s vnorenými dopytmi. Preto dôrazne odporúčam NEPOUŽÍVAŤ vnorené dotazy, ale rozdeliť ich na menšie. Alebo použite kombináciu LEFT JOIN opísanú vyššie. Okrem tohto typu požiadaviek sú zvýšeným ohniskom narušenia bezpečnosti. Ak sa rozhodnete použiť vnorené poddotazy, musíte ich navrhnúť veľmi opatrne a vykonať počiatočné spustenie na kópiách databázy (testovacie databázy).

SQL dotazy meniace údaje

SQL dotaz: INSERT

Poučenie VLOŽIŤ umožňujú vkladať záznamy do tabuľky. Jednoducho povedané, vytvorte riadok s údajmi v tabuľke.

Možnosť číslo 1. Často používaný návod:

INSERT INTO table_name (id, user_login) VALUES (1, "ivanov"), (2, "petrov")

V tabulke " názov_tabuľky» vloží 2 (dvoch) používateľov naraz.

Možnosť číslo 2. Je pohodlnejšie použiť štýl:

INSERT názov_tabuľky SET id=1, user_login="ivanov"; INSERT názov_tabulky SET id=2, user_login="petrov";

To má svoje výhody aj nevýhody.

Hlavné nevýhody:

  • Mnoho malých SQL dotazov je o niečo pomalších ako jeden veľký SQL dotaz, ale ostatné dotazy budú zaradené do frontu na obsluhu. To znamená, že ak veľký SQL dotaz beží 30 minút, tak počas celej tejto doby budú zvyšok dotazov fajčiť bambus a čakať, kým na ne príde rad.
  • Požiadavka je masívnejšia ako predchádzajúca verzia.

Hlavné výhody:

  • Počas malých SQL dotazov nie sú blokované iné SQL dotazy.
  • Jednoduchosť čítania.
  • Flexibilita. V tejto možnosti nemôžete sledovať štruktúru, ale pridať len potrebné údaje.
  • Pri vytváraní archívov týmto spôsobom môžete jednoducho skopírovať jeden riadok a spustiť ho cez príkazový riadok (konzolu), čím neobnovíte celý ARCHÍV.
  • Štýl písania je podobný príkazu UPDATE, ktorý je ľahšie zapamätateľný.

SQL dotaz: AKTUALIZÁCIA

UPDATE table_name SET user_login="ivanov", user_surname="Ivanov" WHERE id=1

V tabulke " názov_tabuľky» v zázname s číslom id=1 sa hodnoty polí user_login a user_surname zmenia na zadané hodnoty.

SQL dotaz: DELETE

DELETE FROM table_name WHERE id=3

Záznam s ID číslom 3 bude v tabuľke table_name vymazaný.

  1. Všetky názvy polí sa odporúča písať malými písmenami a v prípade potreby ich oddeliť vynútenou medzerou „_“ kvôli kompatibilite s rôznymi programovacími jazykmi, ako sú Delphi, Perl, Python a Ruby.
  2. Príkazy SQL sú kvôli čitateľnosti písané VEĽKÝMI písmenami. Vždy si pamätajte, že iní ľudia môžu čítať kód po vás, ale s najväčšou pravdepodobnosťou vy sami po N množstve času.
  3. Polia pomenujte najskôr podstatným menom a potom akciou. Napríklad: city_status, user_login, user_name.
  4. Pokúste sa vyhnúť rezervným slovám v rôznych jazykoch, ktoré môžu spôsobiť problémy v SQL, PHP alebo Perl, ako napríklad (meno, počet, odkaz). Napríklad: odkaz môže byť použitý v MS SQL, ale je rezervovaný v MySQL.

Tento materiál je krátkou referenciou pre každodennú prácu a nepredstiera, že je super mega autoritatívnym zdrojom, ktorý je primárnym zdrojom SQL dopytov konkrétnej databázy.

Už som písal o rôznych SQL dotazy, ale je čas porozprávať sa o zložitejších veciach, napr. SQL dotaz na výber záznamov z viacerých tabuliek.

Keď sme robili výber z jednej tabuľky, všetko bolo veľmi jednoduché:

SELECT požadované_názvy_polí FROM názov_tabulky WHERE select_condition

Všetko je veľmi jednoduché a triviálne, ale s načítanie viacerých tabuliek naraz je to trochu ťažšie. Jednou z ťažkostí je zhoda názvov polí. Napríklad každá tabuľka má pole id.

Zoberme si takúto žiadosť:

SELECT * FROM table_1, table_2 WHERE table_1.id > table_2.user_id

Mnohým, ktorí sa s takýmito otázkami nezaoberali, sa bude zdať, že všetko je veľmi jednoduché, mysliac si, že pred názvy polí boli pridané iba názvy tabuliek. V skutočnosti sa tým zabráni konfliktom medzi identickými názvami polí. To však nie je problém, ale algoritmus takéhoto SQL dotazu.

Algoritmus práce je nasledovný: prvý záznam je prevzatý z stôl 1. prijaté id tento záznam od stôl 1. Tabuľka je uvedená nižšie. tabuľka_2. A všetky záznamy sú pridané tam, kde je hodnota poľa ID používateľa menej id vybraný záznam v stôl 1. Po prvej iterácii sa teda môže objaviť od 0 do nekonečna výsledné záznamy. Pri ďalšej iterácii sa použije ďalší záznam tabuľky stôl 1. Znova sa zobrazí celá tabuľka tabuľka_2 a znova sa spustí podmienka výberu table_1.id > table_2.user_id. Do výsledku sa pridajú všetky záznamy, ktoré spĺňajú túto podmienku. Výstupom môže byť obrovské množstvo záznamov, mnohonásobne väčšie ako celková veľkosť oboch tabuliek.

Ak po prvýkrát pochopíte, ako to funguje, je to skvelé, ale ak nie, čítajte, kým úplne nepochopíte. Ak to pochopíte, bude to jednoduchšie.

Predchádzajúce SQL dotaz, ako taký, sa používa zriedka. Bolo to práve dané za vysvetlenie algoritmu výberu viacerých tabuliek. A teraz poďme analyzovať viac drep SQL dotaz. Povedzme, že máme dve tabuľky: s tovarom (je tam pole owner_id zodpovedný za id vlastník produktu) a s používateľmi (existuje pole id). Chceme jednu SQL dotaz získať všetky záznamy a každý by mal obsahovať informácie o používateľovi a jeho jednom produkte. Ďalší záznam obsahoval informácie o tom istom používateľovi a jeho ďalšom produkte. Keď sa tovar tohto používateľa minie, prejdite k ďalšiemu používateľovi. Preto musíme spojiť dve tabuľky a získať výsledok, v ktorom každý záznam obsahuje informácie o užívateľovi a jednom z jeho produktov.

Dotaz, ako je tento, nahradí 2 SQL dotazy: podľa výberu oddelene od tabuľky s produktmi a od tabuľky s používateľmi. Takáto požiadavka sa navyše okamžite zhoduje s používateľom a jeho produktom.

Samotná žiadosť je veľmi jednoduchá (ak ste porozumeli predchádzajúcej):

SELECT * FROM users, products WHERE users.id = products.owner_id

Algoritmus je tu už jednoduchý: prvý záznam sa vyberie z tabuľky používateľov. Ďalej to trvá id a všetky záznamy z tabuľky sa analyzujú Produkty, pričom k výsledku sa pridali tie s owner_id rovná sa id od stola používateľov. Pri prvej iterácii sa teda zhromažďujú všetky produkty od prvého používateľa. Pri druhej iterácii sa zhromaždí všetok tovar od druhého používateľa atď.

Ako môžeš vidieť SQL dotazy na výber z viacerých tabuliek nie sú najjednoduchšie, ale výhody z nich môžu byť obrovské, preto je veľmi žiaduce poznať a vedieť používať takéto dotazy.