Database
 sql >> база данни >  >> RDS >> Database

SQL SELECT за начинаещи

SELECT операторът е почти без съмнение, най-често използваният израз в SQL.

SELECT операторът се използва за извличане на данни от базата данни. Можете да посочите кои редове искате да бъдат върнати и кои колони.

Пример

Ето пример за демонстрация на SELECT изявление.

SELECT * 
FROM Pets;

Резултат:

+---------+-------------+-----------+-----------+------------+
| 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       |
+---------+-------------+-----------+-----------+------------+

В този пример използвахме звездичката (* ) заместващ знак за връщане на всички колони. Използвахме и FROM клауза, за да посочите от коя таблица да получите данни.

Така че тази заявка връща всички редове и всички колони от Pets таблица.

Посочете колоните

Можете да посочите колоните, които искате да бъдат върнати.

За да направите това, заменете заместващия знак със звездичка с имената на колоните, всяко разделено със запетая, в реда, в който искате да бъдат върнати.

SELECT PetId, PetName, DOB 
FROM Pets;

Резултат:

+---------+-----------+------------+
| 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       |
+---------+-----------+------------+

Обикновено се счита за добра практика да го направите по този начин и да върнете само онези колони, от които всъщност се нуждаете. Използването на заместващия знак звездичка за връщане на всички колони може да има неблагоприятно въздействие върху производителността, особено в по-големи бази данни.

Посочете редовете

Има много начини да филтрирате резултатите само до тези редове, които ви интересуват. Най-често срещаният начин е да използвате WHERE клауза. Тази клауза ви позволява да посочите условие, на което трябва да отговаря даден ред, за да се квалифицира.

Ето пример за демонстрация.

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

Резултат:

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

В нашия случай имаше два реда, които отговаряха на нашето условие за търсене.

Нашето условие за търсене използва оператора за равенство (= ), за да посочите, че стойността на PetName колоната трябва да съответства на посочената стойност (Fluffy ) точно.

Има много други оператори, които можете да използвате в условията на търсене. Например, можете да използвате LIKE оператор за връщане на домашни любимци, чието име започва с F или Fluff или каквото и да е.

Можете да добавите още условия към WHERE клауза чрез използване на оператори като AND и OR оператори.

Ето един пример.

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

Резултат:

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

В този пример върнахме всички редове, където името на домашния любимец е Fluffy или където датата на раждане на домашния любимец (посочена в DOB). колона) е по-малко от определена дата. Използвахме оператора less than (< ), за да уточните това.

Връщане на нетаблични данни

SELECT операторът може да се използва и за връщане на данни, които не се съхраняват в таблица. Например, напълно законно е да направите това:

SELECT 'Hey there!';

Резултат:

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

Забележете, че когато правим това, колоната няма име. Можем да използваме псевдоним, за да дадем име на полученото поле.

Ето още няколко примера за избор на данни, които не са в таблица, и предоставяне на псевдоним за всяко върнато поле:

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

Резултат:

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

Ето кратък преглед:

  • Първата колона просто добави две числа.
  • Втората колона обединява три низа (включително символ за интервал). Можете също да свържете низове с числа, ако е необходимо.
  • Третата колона използва SYSDATETIME() функция за връщане на текущата дата и час. Тази функция е налична в SQL Server. Други СУБД имат свои собствени функции за дата и час. Вижте функции за дата/час на SQLite, функции за дата/час на SQL Server и функции за дата/час на PostgreSQL за списък с функции за дата и час, налични в тези СУБД.

Подзаявки

Възможно е да имате няколко SELECT изрази в една заявка. Можем да направим това с помощта на подзаявка.

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

Резултат:

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

В този пример използвахме IN оператор, за да посочите подзаявка. Тази подзаявка избра данни от друга таблица и IN оператор го свърза обратно с външната заявка.

Поръчване на резултатите

Можете да използвате ORDER BY клауза за сортиране на резултатите.

Например, бихме могли да сортираме предишните резултати по PetTypeId колона в низходящ ред:

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

Резултат:

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

Вижте SQL ORDER BY Клауза за начинаещи за повече примери и подробно обяснение.

По-разширени SELECT Изявления

SELECT операторът е много прост израз, но може да се използва за създаване на много сложни заявки.

Ето заявка, която е малко по-сложна от предишните.

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;

Резултат:

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

В света на SQL заявките това все още е доста просто, но съдържа много от елементите, често срещани в по-сложни заявки.

Например, тази заявка използва присъединяване за извличане на данни от множество таблици. Той също така използва GROUP BY клауза за разделяне на редовете на групи.

Вижте SQL GROUP BY Клауза за начинаещи за повече примери за GROUP BY клауза.

Вижте урока за SQL Joins, за да видите как да извлечете данни от множество таблици и да ги върнете като един набор от резултати.

SELECT INTO Изявление

Някои СУБД поддържат SELECT INTO изявление. Това е малко по-различно от предишните примери, тъй като засяга данните в базата данни.

SELECT INTO оператор създава нова таблица и вмъква данни в нея от друга таблица.

По принцип става така:

SELECT * INTO Table2
FROM Table1;

В този пример създаваме нова таблица, наречена Table2 и вмъкнете всички данни от Table1 в него. Table2 ще има същата дефиниция като Table1 .

Вижте SQL SELECT INTO Изявление за още примери.

Както споменах, не всички СУБД поддържат това твърдение. Ако вашата СУБД не поддържа SELECT INTO изявление, опитайте да използвате CREATE TABLE ... AS SELECT вместо това изявление.

Тези изрази създават нова таблица като част от тяхната работа. За да вмъкнете данни в таблица, която вече съществува, опитайте да използвате INSERT INTO ... SELECT вместо това изявление.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо имате нужда от моделиране на данни?

  2. Модели за дизайн на потребителски интерфейс, които не се мащабират

  3. Кога да преминете към по-голям RDS екземпляр

  4. Свързване към база данни с помощта на PHP

  5. Агрегати и разделяне