sql >> Databáze >  >> RDS >> Mysql

Dotazy MySQL

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');

  1. Jak převést datum a čas na hodnotu unixové epochy v Postgresu?

  2. Vraťte všechny možné kombinace hodnot ve sloupcích v SQL

  3. Oracle DB Server + APEX + ORDS + JasperReports od nuly (část 1)

  4. Jak přidat indikátor AD/BC k datu v Oracle