SELECT
Instrukcja jest prawie bez wątpienia najczęściej używaną instrukcją w SQL.
SELECT
Instrukcja służy do pobierania danych z bazy danych. Możesz określić, które wiersze chcesz zwrócić i które kolumny.
Przykład
Oto przykład demonstrujący SELECT
oświadczenie.
SELECT *
FROM Pets;
Wynik:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
W tym przykładzie użyliśmy gwiazdki (*
) symbol wieloznaczny, aby zwrócić wszystkie kolumny. Użyliśmy również FROM
klauzula określająca, z której tabeli mają być pobierane dane.
Więc to zapytanie zwraca wszystkie wiersze i wszystkie kolumny z Pets
tabela.
Określ kolumny
Możesz określić kolumny, które chcesz zwrócić.
Aby to zrobić, zastąp symbol wieloznaczny gwiazdką nazwami kolumn, oddzielonymi przecinkami, w kolejności, w jakiej mają być zwracane.
SELECT PetId, PetName, DOB
FROM Pets;
Wynik:
+---------+-----------+------------+ | 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 | +---------+-----------+------------+
Powszechnie uważa się, że dobrą praktyką jest robienie tego w ten sposób i zwracanie tylko tych kolumn, których faktycznie potrzebujesz. Użycie symbolu wieloznacznego gwiazdki do zwrócenia wszystkich kolumn może mieć negatywny wpływ na wydajność, zwłaszcza w przypadku większych baz danych.
Określ wiersze
Istnieje wiele sposobów filtrowania wyników tylko do tych wierszy, które Cię interesują. Najczęstszym sposobem jest użycie WHERE
klauzula. Ta klauzula pozwala określić warunek, który musi spełnić wiersz, aby się kwalifikować.
Oto przykład do zademonstrowania.
SELECT PetId, PetName, DOB
FROM Pets
WHERE PetName = 'Fluffy';
Wynik:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 6 | Fluffy | 2020-09-17 | +---------+-----------+------------+
W naszym przypadku były dwa wiersze, które spełniały nasz warunek wyszukiwania.
Nasz warunek wyszukiwania używa operatora równości (=
), aby określić, że wartość PetName
kolumna musi odpowiadać określonej wartości (Fluffy
) dokładnie.
Istnieje wiele innych operatorów, których możesz użyć w warunkach wyszukiwania. Na przykład możesz użyć LIKE
operator zwracający zwierzęta, których imię zaczyna się od F
lub Fluff
lub cokolwiek.
Możesz dodać więcej warunków do WHERE
klauzula za pomocą operatorów, takich jak AND
i OR
operatorów.
Oto przykład.
SELECT PetId, PetName, DOB
FROM Pets
WHERE PetName = 'Fluffy'
OR DOB < '2020-01-01';
Wynik:
+---------+-----------+------------+ | PetId | PetName | DOB | |---------+-----------+------------| | 1 | Fluffy | 2020-11-20 | | 2 | Fetch | 2019-08-16 | | 3 | Scratch | 2018-10-01 | | 6 | Fluffy | 2020-09-17 | +---------+-----------+------------+
W tym przykładzie zwróciliśmy wszystkie wiersze, w których imię zwierzaka to Puszysty lub gdzie data urodzenia zwierzaka (określona w DOB
kolumna) jest mniejsza niż określona data. Użyliśmy operatora mniej niż (<
), aby to określić.
Zwracanie danych spoza tabeli
SELECT
Instrukcja może być również używana do zwracania danych, które nie są przechowywane w tabeli. Na przykład jest to całkowicie legalne:
SELECT 'Hey there!';
Wynik:
+--------------------+ | (No column name) | |--------------------| | Hey there! | +--------------------+
Zauważ, że kiedy to robimy, kolumna nie ma nazwy. Moglibyśmy użyć aliasu, aby nadać nazwę wynikowemu polu.
Oto kilka innych przykładów wybierania danych spoza tabeli i podawania aliasu do każdego zwróconego pola:
SELECT
2 + 3 AS "2 + 3",
'Fluffy' + ' ' + 'Smith' AS FullName,
SYSDATETIME() AS "Date/time";
Wynik:
+---------+--------------+-----------------------------+ | 2 + 3 | FullName | Date/time | |---------+--------------+-----------------------------| | 5 | Fluffy Smith | 2020-12-04 23:58:55.8483734 | +---------+--------------+-----------------------------+
Oto krótkie podsumowanie:
- Pierwsza kolumna po prostu dodała dwie liczby.
- Druga kolumna łączyła trzy ciągi (w tym znak spacji). W razie potrzeby można również łączyć ciągi z liczbami.
- W trzeciej kolumnie użyto
SYSDATETIME()
funkcja zwracająca aktualną datę i godzinę. Ta funkcja jest dostępna w SQL Server. Inne DBMS mają swoje własne funkcje daty i czasu. Zobacz Funkcje Data/Czas SQLite, Funkcje Daty/Czasu SQL Server oraz Funkcje Daty/Czasu PostgreSQL, aby zapoznać się z listą funkcji daty i czasu dostępnych w tych DBMS.
Podzapytania
Możliwe jest posiadanie wielu SELECT
oświadczenia w jednym zapytaniu. Możemy to zrobić za pomocą podzapytania.
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets );
Wynik:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 1 | Bird | | 2 | Cat | | 3 | Dog | +-------------+-----------+
W tym przykładzie użyliśmy IN
operator, aby określić podzapytanie. To podzapytanie wybrało dane z innej tabeli, a IN
operator powiązał to z powrotem z zapytaniem zewnętrznym.
Porządkowanie wyników
Możesz użyć ORDER BY
klauzula sortowania wyników.
Na przykład moglibyśmy posortować poprzednie wyniki według PetTypeId
kolumna w kolejności malejącej:
SELECT
PetTypeId,
PetType
FROM PetTypes
WHERE PetTypeId IN ( SELECT PetTypeId FROM Pets )
ORDER BY PetTypeId DESC;
Wynik:
+-------------+-----------+ | PetTypeId | PetType | |-------------+-----------| | 3 | Dog | | 2 | Cat | | 1 | Bird | +-------------+-----------+
Zobacz SQL ORDER BY
Klauzula dla początkujących, aby uzyskać więcej przykładów i szczegółowe wyjaśnienie.
Bardziej zaawansowane SELECT
Oświadczenia
SELECT
Instrukcja jest bardzo prostą instrukcją, ale może być używana do tworzenia bardzo złożonych zapytań.
Oto zapytanie, które jest nieco bardziej złożone niż poprzednie.
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;
Wynik:
+-----------+---------+ | PetType | Count | |-----------+---------| | Dog | 4 | | Cat | 3 | | Bird | 1 | +-----------+---------+
W świecie zapytań SQL jest to nadal dość proste, jednak zawiera wiele elementów często spotykanych w bardziej złożonych zapytaniach.
Na przykład to zapytanie używa sprzężenia do pobierania danych z wielu tabel. Używa również GROUP BY
klauzula podziału wierszy na grupy.
Zobacz SQL GROUP BY
Klauzula dla początkujących, aby uzyskać więcej przykładów GROUP BY
klauzula.
Zobacz samouczek SQL Joins, aby zobaczyć, jak pobrać dane z wielu tabel i zwrócić je jako jeden zestaw wyników.
SELECT INTO
Oświadczenie
Niektóre DBMS obsługują SELECT INTO
oświadczenie. Różni się to nieco od poprzednich przykładów, ponieważ wpływa na dane w bazie danych.
SELECT INTO
instrukcja tworzy nową tabelę i wstawia do niej dane z innej tabeli.
Zasadniczo wygląda to tak:
SELECT * INTO Table2
FROM Table1;
W tym przykładzie tworzymy nową tabelę o nazwie Table2
i wstaw wszystkie dane z Table1
w tym. Table2
będzie miał taką samą definicję jak Table1
.
Zobacz SQL SELECT INTO
Oświadczenie, aby uzyskać więcej przykładów.
Jak wspomniałem, nie wszystkie DBMS wspierają to stwierdzenie. Jeśli Twój DBMS nie obsługuje SELECT INTO
spróbuj użyć CREATE TABLE ... AS SELECT
oświadczenie zamiast.
Wypowiedzi te w ramach swojej operacji tworzą nową tabelę. Aby wstawić dane do tabeli, która już istnieje, spróbuj użyć INSERT INTO ... SELECT
oświadczenie zamiast.