sql >> Databáze >  >> RDS >> Database

SQL SELECT pro začátečníky

SELECT je téměř bezpochyby nejběžněji používaným příkazem v SQL.

SELECT výpis slouží pro získávání dat z databáze. Můžete určit, které řádky chcete vrátit a které sloupce.

Příklad

Zde je příklad demonstrující SELECT prohlášení.

SELECT * 
FROM Pets;

Výsledek:

+---------+-------------+-----------+-----------+------------+
| PetId   | PetTypeId   | OwnerId   | PetName   | DOB        |
|---------+-------------+-----------+-----------+------------|
| 1       | 2           | 3         | Fluffy    | 2020-11-20 |
| 2       | 3           | 3         | Fetch     | 2019-08-16 |
| 3       | 2           | 2         | Scratch   | 2018-10-01 |
| 4       | 3           | 3         | Wag       | 2020-03-15 |
| 5       | 1           | 1         | Tweet     | 2020-11-28 |
| 6       | 3           | 4         | Fluffy    | 2020-09-17 |
| 7       | 3           | 2         | Bark      | NULL       |
| 8       | 2           | 4         | Meow      | NULL       |
+---------+-------------+-----------+-----------+------------+

V tomto příkladu jsme použili hvězdičku (* ) zástupný znak pro vrácení všech sloupců. Také jsme použili FROM klauzule k určení, ze které tabulky se mají získat data.

Tento dotaz tedy vrátí všechny řádky a všechny sloupce z Pets tabulka.

Určete sloupce

Můžete určit sloupce, které chcete vrátit.

Chcete-li to provést, nahraďte zástupný znak hvězdičkou názvy sloupců, každý oddělený čárkou, v pořadí, v jakém je chcete vrátit.

SELECT PetId, PetName, DOB 
FROM Pets;

Výsledek:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 2       | Fetch     | 2019-08-16 |
| 3       | Scratch   | 2018-10-01 |
| 4       | Wag       | 2020-03-15 |
| 5       | Tweet     | 2020-11-28 |
| 6       | Fluffy    | 2020-09-17 |
| 7       | Bark      | NULL       |
| 8       | Meow      | NULL       |
+---------+-----------+------------+

Obecně se považuje za dobrou praxi to udělat tímto způsobem a vrátit pouze ty sloupce, které skutečně potřebujete. Použití zástupného znaku hvězdička k vrácení všech sloupců může mít nepříznivý dopad na výkon, zejména ve větších databázích.

Určete řádky

Existuje mnoho způsobů, jak filtrovat výsledky pouze na ty řádky, které vás zajímají. Nejběžnějším způsobem je použití WHERE doložka. Tato klauzule vám umožňuje zadat podmínku, kterou musí řádek splňovat, aby se kvalifikoval.

Zde je příklad k demonstraci.

SELECT PetId, PetName, DOB 
FROM Pets
WHERE PetName = 'Fluffy';

Výsledek:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 6       | Fluffy    | 2020-09-17 |
+---------+-----------+------------+

V našem případě byly dva řádky, které splnily naši podmínku vyhledávání.

Naše vyhledávací podmínka používá operátor rovná se (= ), abyste určili, že hodnota PetName sloupec musí odpovídat zadané hodnotě (Fluffy ) přesně.

Existuje mnoho dalších operátorů, které můžete použít ve svých podmínkách vyhledávání. Můžete například použít LIKE operátor vrátí domácí mazlíčky, jejichž jméno začíná F nebo Fluff nebo cokoli jiného.

Do WHERE můžete přidat další podmínky klauzule pomocí operátorů, jako je AND a OR operátory.

Zde je příklad.

SELECT PetId, PetName, DOB 
FROM Pets
WHERE PetName = 'Fluffy'
OR DOB < '2020-01-01';

Výsledek:

+---------+-----------+------------+
| PetId   | PetName   | DOB        |
|---------+-----------+------------|
| 1       | Fluffy    | 2020-11-20 |
| 2       | Fetch     | 2019-08-16 |
| 3       | Scratch   | 2018-10-01 |
| 6       | Fluffy    | 2020-09-17 |
+---------+-----------+------------+

V tomto příkladu jsme vrátili všechny řádky, kde je jméno mazlíčka Fluffy nebo kde je datum narození zvířete (uvedené v DOB sloupec) je kratší než určité datum. Použili jsme operátor menší než (< ), abyste to upřesnili.

Vracení netabulkových dat

SELECT lze také použít k vrácení dat, která nejsou uložena v tabulce. Například je naprosto legální udělat toto:

SELECT 'Hey there!';

Výsledek:

+--------------------+
| (No column name)   |
|--------------------|
| Hey there!         |
+--------------------+

Všimněte si, že když to uděláme, sloupec nemá žádný název. Můžeme použít alias k pojmenování výsledného pole.

Zde je několik dalších příkladů výběru netabulkových dat a poskytnutí aliasu každému vrácenému poli:

SELECT 
    2 + 3 AS "2 + 3",
    'Fluffy' + ' ' + 'Smith' AS FullName,
    SYSDATETIME() AS "Date/time";

Výsledek:

+---------+--------------+-----------------------------+
| 2 + 3   | FullName     | Date/time                   |
|---------+--------------+-----------------------------|
| 5       | Fluffy Smith | 2020-12-04 23:58:55.8483734 |
+---------+--------------+-----------------------------+

Zde je rychlý přehled:

  • První sloupec jednoduše přidal dvě čísla.
  • Druhý sloupec spojil tři řetězce (včetně mezery). V případě potřeby můžete řetězce také zřetězit s čísly.
  • Třetí sloupec používal SYSDATETIME() funkce pro vrácení aktuálního data a času. Tato funkce je dostupná na serveru SQL Server. Ostatní DBMS mají své vlastní funkce data a času. Seznam funkcí data a času dostupných v těchto DBMS najdete v části Funkce data/času SQLite, funkce data/času serveru SQL Server a funkce data/času PostgreSQL.

Poddotazy

Je možné mít více SELECT příkazy v jednom dotazu. Můžeme to udělat pomocí dílčího dotazu.

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );

Výsledek:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 1           | Bird      |
| 2           | Cat       |
| 3           | Dog       |
+-------------+-----------+

V tomto příkladu jsme použili IN operátor k zadání poddotazu. Tento dílčí dotaz vybral data z jiné tabulky a IN operátor jej přiřadil zpět k vnějšímu dotazu.

Pořadí výsledků

Můžete použít ORDER BY klauzule k řazení výsledků.

Předchozí výsledky bychom mohli například seřadit podle PetTypeId sloupec v sestupném pořadí:

SELECT 
    PetTypeId,
    PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets )
ORDER BY PetTypeId DESC;

Výsledek:

+-------------+-----------+
| PetTypeId   | PetType   |
|-------------+-----------|
| 3           | Dog       |
| 2           | Cat       |
| 1           | Bird      |
+-------------+-----------+

Viz SQL ORDER BY Doložka pro začátečníky pro více příkladů a podrobné vysvětlení.

Pokročilejší SELECT Prohlášení

SELECT příkaz je velmi jednoduchý příkaz, ale lze jej použít k vytvoření velmi složitých dotazů.

Zde je dotaz, který je o něco složitější než předchozí.

SELECT 
    PetTypes.PetType,
    COUNT(Pets.PetTypeId) AS Count
FROM Pets 
LEFT JOIN PetTypes 
ON Pets.PetTypeId = PetTypes.PetTypeId
GROUP BY PetTypes.PetType
ORDER BY Count DESC;

Výsledek:

+-----------+---------+
| PetType   | Count   |
|-----------+---------|
| Dog       | 4       |
| Cat       | 3       |
| Bird      | 1       |
+-----------+---------+

Ve světě SQL dotazů je to stále docela jednoduché, nicméně obsahuje mnoho prvků, které se často vyskytují ve složitějších dotazech.

Tento dotaz například používá spojení k načtení dat z více tabulek. Používá také GROUP BY klauzule k rozdělení řádků do skupin.

Viz SQL GROUP BY Doložka pro začátečníky pro další příklady GROUP BY doložka.

Podívejte se na SQL Joins Tutorial, kde se dozvíte, jak načíst data z více tabulek a vrátit je jako jednu sadu výsledků.

SELECT INTO Prohlášení

Některé DBMS podporují SELECT INTO prohlášení. To se mírně liší od předchozích příkladů v tom, že to ovlivňuje data v databázi.

SELECT INTO příkaz vytvoří novou tabulku a vloží do ní data z jiné tabulky.

V zásadě to vypadá takto:

SELECT * INTO Table2
FROM Table1;

V tomto příkladu vytvoříme novou tabulku s názvem Table2 a vložte všechna data z Table1 do toho. Table2 bude mít stejnou definici jako Table1 .

Viz SQL SELECT INTO Prohlášení pro další příklady.

Jak jsem již zmínil, ne všechny DBMS toto tvrzení podporují. Pokud váš DBMS nepodporuje SELECT INTO zkuste použít CREATE TABLE ... AS SELECT místo toho prohlášení.

Tyto příkazy vytvoří novou tabulku jako součást své operace. Chcete-li vložit data do tabulky, která již existuje, zkuste použít INSERT INTO ... SELECT místo toho prohlášení.


  1. Příklady DATEADD() v SQL Server

  2. Přidání kroku úlohy do existující úlohy agenta SQL Server (T-SQL)

  3. Vytvoření uživatele se zašifrovaným heslem v PostgreSQL

  4. Připojte se k Alias ​​Columns SQL