Zatím jsme vytvořili databázi, přidali dvě tabulky a vložili data do obou tabulek. Nyní se podíváme na to, jak tato data získat. Ale nejen načíst data, ale dotaz databázi.
SQL je zkratka pro Structured Query Language . Je to Dotaz bit, který dělá SQL tak výkonným. SQL je jazyk, který umožňuje spouštět dotazy proti vaší databázi. Umožňuje vám dotazovat se databázi pro data, která chcete.
SQL SELECT
Prohlášení
Když dojde na dotazování vaší databáze MySQL, SQL SELECT
prohlášení to vše umožňuje. Toto je pravděpodobně váš nejčastěji používaný SQL příkaz při práci s MySQL. SELECT
umožňuje MySQL přesně popsat, jaká data chcete získat.
Zvažte následující příkaz SQL:
SELECT * FROM Fruit;
Zde je výsledek:
Toto je SELECT
prohlášení ve své nejjednodušší podobě. Výše uvedený příkaz SQL načte všechny záznamy z
Ovoce
tabulka.
Hvězdička (*
) říká MySQL, aby vrátila všechny sloupce. To nám šetří čas a námahu. Bez toho bychom museli napsat názvy všech sloupců, které bychom chtěli vrátit.
Nicméně můžete také říci MySQL, aby vrátilo pouze ty sloupce, které chcete vrátit. To se provádí pojmenováním pouze těch sloupců, které chcete vrátit. Takhle:
SELECT FruitId, FruitName FROM Fruit;
Zde je výsledek:
Výše uvedený příkaz SQL vybere FruitId a Název ovoce sloupce z Ovoce tabulka.
To může snížit nepořádek, takže uvidíte pouze ty sloupce, které vás zajímají. Může to také zvýšit výkon, protože MySQL (a jakákoli aplikace, kterou používáte) nepotřebuje používat cenné zdroje k vracení zbytečných dat.
Tento dotaz opět načte vše záznamy z tabulky — MySQL vrátí všechny záznamy, pokud není uvedeno jinak.
WHERE
Ustanovení
Můžete přidat WHERE
klauzule pro zúžení sady výsledků pouze na ty záznamy, které vás zajímají. Takto:
SELECT * FROM Fruit WHERE UnitId = 1;
Výsledek:
Výše uvedený dotaz vrátí všechny záznamy z
Ovoce
tabulka, kde je
UnitId
sloupec má hodnotu 1
.
Poddotazy – vnořené SELECT
Prohlášení
Co kdybychom neznali
UnitId
? Co kdybychom věděli, že máme hledat jen ty záznamy s názvem jednotky Piece
? ?
Snadný! Výše uvedený příklad bychom mohli přepsat a použít vnořený SELECT
příkaz (jinak známý jako poddotaz ), která se dotazuje na jinou tabulku (
Jednotky
stůl). To nám umožní použít skutečný název jednotky (spíše než jeho ID), protože druhá tabulka toto obsahuje v UnitName
pole:
SELECT * FROM Fruit WHERE UnitId = (SELECT UnitId FROM Units WHERE UnitName = 'Piece');
Výsledek:
Zde používáme vnořený SELECT
příkaz (tj. SELECT
příkaz v rámci SELECT
příkazu) k dotazu na
Jednotky
tabulku pro
UnitId
záznamu, který obsahuje Piece
jako jeho
Jméno jednotky
hodnota. Můžeme to udělat, protože
Fruit.UnitId
sloupec je cizí klíč k
Units.UnitId
sloupec.
Zde jsou další příklady dílčích dotazů, pokud vás to zajímá.
Pomocí SQL JOIN
Když to vezmeme o krok dále, mohli bychom přepsat náš vnořený SELECT
příkaz do INNER JOIN
.
V SQL, JOIN
umožňuje dotazovat se na více tabulek, které sdílejí data. V našem případě obě tabulky sdílejí UnitId
takže by se dalo říci, že jsou „spojeni“ tímto polem.
V SQL existují různé typy spojení, nás však zajímá hlavně INNER JOIN
prozatím.
INNER JOIN
syntaxe vypadá takto:
SELECT * FROM table_name_1 INNER JOIN table_name_2 ON table_name_1.column_name = table_name_2.column_name
Takže bychom mohli přepsat náš poddotaz z předchozího příkladu na následující:
SELECT Fruit.* FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId WHERE Units.UnitName = 'Piece';
Výsledek:
Zadali jsme Fruit.*
místo pouhého *
protože jsme chtěli vrátit pouze všechny sloupce z
Ovoce
stůl. Pokud bychom použili *
, dotaz by vrátil všechny sloupce z obou tabulek.
Podívejte se také na LEFT JOIN
a RIGHT JOIN
abyste viděli, jak můžete získat různá data v závislosti na typu spojení.
Poddotaz vs JOIN
?
Nyní, když jste viděli dvě metody k dosažení stejného výsledku, pravděpodobně vás zajímá, která z nich je lepší?
Poddotazy bývají čitelnější (a možná snáze pochopitelné), což může začátečníkům usnadnit jejich pochopení.
Mnoho programátorů SQL však nachází JOIN
je efektivnější a výkonnější. Pokud narazíte na problémy s výkonem u vašich dotazů nebo aplikace, zkuste převést jakékoli poddotazy na JOIN
s nebo naopak (v některých případech by dílčí dotaz mohl fungovat lépe).
Mohou se také vyskytnout případy, kdy je poddotaz vaší jedinou možností, takže je to také na zvážení.
Více operátorů
Všechny naše dotazy dosud obsahovaly rovnítko (=
). Tomu se říká operátor . Konkrétně jde o porovnávací operátor protože porovnává jeden výraz s druhým.
Existuje mnohem více operátorů, které můžete použít ve svých dotazech. Ty mohou výrazně pomoci při zúžení sady výsledků pouze na ty záznamy, které požadujete. Není neobvyklé, že databáze obsahuje miliony záznamů. I když máte jen tisíce záznamů, pokusit se najít jeden záznam (nebo dokonce jen hrstku) mezi tisíci by byl velmi skličující úkol, pokud byste tyto operátory neměli k dispozici.
Zde jsou některé z běžněji používaných operátorů SQL.
Kód >
Operátor
Můžete použít >
operátora k výběru dat, která jsou větší než daná hodnota.
SELECT * FROM Fruit WHERE Inventory > 10;
<
Operátor
Můžete použít <
operátora k výběru dat, která jsou méně než daná hodnota.
SELECT * FROM Fruit WHERE Inventory < 10;
Kód <>
Operátor
Můžete použít <>
operátor k výběru dat, která jsou zároveň menší než a větší než daná hodnota.
SELECT * FROM Fruit WHERE Inventory <> 10;
The >=
Operátor
Můžete použít >=
operátor pro výběr dat, která jsou větší nebo rovna dané hodnotě.
SELECT * FROM Fruit WHERE Inventory >= 10;
<=
Operátor
Můžete použít <=
operátor pro výběr dat, která jsou menší nebo rovna dané hodnotě.
SELECT * FROM Fruit WHERE Inventory <= 10;
AND
Operátor
Můžete přidat AND
operátora na WHERE
klauzule, abyste omezili svůj výběr pouze na ty záznamy, které splňují dvě podmínky (nebo více, pokud zahrnete více AND
operátoři).
Zde je příklad:
SELECT * FROM Fruit WHERE Inventory > 10 AND DateEntered > '2015-01-15';
OR
Operátor
Můžete použít OR
operátora rozšířit váš výběr na více než jedno kritérium. Jak název napovídá, OR
klauzule umožňuje vybrat data, jejichž kritériem je buď toto NEBO že. Takže AND
omezení operátora váš výběr a OR
operátor rozšíří to.
Zde je příklad:
SELECT * FROM Fruit WHERE UnitId = 1 OR UnitId = 2;
BETWEEN
Operátor
Použijte BETWEEN
operátor pro výběr dat, která jsou mezi dvěma danými hodnotami.
SELECT * FROM Fruit WHERE DateEntered BETWEEN '2015-01-25' AND '2015-02-25';
NOT
Operátor
Použijte NOT
operátor vybrat data, která nejsou ekvivalentní dané podmínce.
SELECT * FROM Fruit WHERE NOT (FruitName = 'Apple');