- Введення в SQL
- Синтаксис SQL
- Інструкція SQL SELECT
- Інструкція SQL SELECT DISTINCT
- SQL WHERE
- SQL ORDER BY
- Оператор SQL AND
- Оператор OR
- Оператор NOT
- Інструкція SQL INSERT INTO
- Значення SQL NULL
- Інструкція SQL UPDATE
- Інструкція SQL DELETE
- SQL SELECT TOP
- Агрегатні функції SQL
- Функції SQL MIN() і MAX()
- Функція SQL COUNT()
- Функція SQL SUM()
- Функція SQL AVG()
- Оператор SQL LIKE
- Символи підстановки SQL
- Оператор SQL IN
- Оператор SQL BETWEEN
- Псевдоніми SQL
- SQL об'єднання
- SQL INNER JOIN
- SQL LEFT JOIN
- SQL RIGHT JOIN
- SQL FULL OUTER JOIN
- SQL Self Join
- SQL UNION
- Інструкція SQL GROUP BY
- SQL HAVING
- SQL EXISTS
- SQL ANY та ALL
- SQL SELECT INTO
- SQL INSERT INTO SELECT
- SQL CASE
- SQL NULL
- Збережені процедури SQL
- Коментарі SQL
- Оператори SQL
- SQL означає мову структурованих запитів
- SQL дозволяє отримувати доступ до баз даних і керувати ними
- SQL став стандартом Американського національного інституту стандартів (ANSI) у 1986 році та Міжнародної організації зі стандартизації (ISO) у 1987 році.
- SQL може виконувати запити до бази даних
- SQL може отримувати дані з бази даних
- SQL може вставляти записи в базу даних
- SQL може оновлювати записи в базі даних
- SQL може видаляти записи з бази даних
- SQL може створювати нові бази даних
- SQL може створювати нові таблиці в базі даних
- SQL може створювати збережені процедури в базі даних
- SQL може створювати представлення в базі даних
- SQL може встановлювати дозволи для таблиць, процедур і представлень
Більшість дій, які вам потрібно виконати з базою даних, виконуються за допомогою операторів SQL.
Інструкції SQL складаються з ключових слів, які легко зрозуміти.
Наступний оператор SQL повертає всі записи з таблиці під назвою «Клієнти»:
SELECT * FROM Customers;База даних найчастіше містить одну або декілька таблиць. Кожна таблиця ідентифікується назвою (наприклад, «Клієнти» або «Замовлення») і містить записи (рядки) з даними.
Нижче наведено вибірку з таблиці "Клієнти" , яка використовується в прикладах:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Таблиця вище містить п’ять записів (по одному для кожного клієнта) і сім стовпців (CustomerID, CustomerName, ContactName, Address, City, PostalCode та Country).
- Ключові слова SQL НЕ чутливі до регістру:
selectте саме, щоSELECT
Деякі системи баз даних вимагають крапки з комою в кінці кожного оператора SQL.
Крапка з комою — це стандартний спосіб відокремлення кожного оператора SQL у системах баз даних, які дозволяють виконувати кілька операторів SQL під час одного виклику до сервера.
SELECT- витягує дані з бази данихUPDATE- оновлює дані в базі данихDELETE- видаляє дані з бази данихINSERT INTO- вносить нові дані в базу данихCREATE DATABASE- створює нову базу данихALTER DATABASE- змінює базу данихCREATE TABLE- створює нову таблицюALTER TABLE- змінює таблицюDROP TABLE- видаляє таблицюCREATE INDEX- створює індекс (ключ пошуку)DROP INDEX- видаляє індекс
Інструкція SELECT використовується для вибору даних із бази даних.
Повернути дані з таблиці Клієнти:
SELECT CustomerName, City FROM Customers;SELECT column1, column2, ...
FROM table_name;Тут стовпець1, стовпець2, ... — це назви полів таблиці, з якої потрібно вибрати дані. Table_name представляє назву таблиці, з якої потрібно вибрати дані.
Нижче наведено вибірку з таблиці "Клієнти" , яка використовується в прикладах:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Якщо ви хочете повернути всі стовпці, не вказуючи ім’я кожного стовпця, ви можете використати синтаксис SELECT *:
SELECT * FROM Customers;Оператор SELECT DISTINCT використовується для повернення лише різних (різних) значень.
Виберіть усі різні країни з таблиці «Клієнти»:
SELECT DISTINCT Country FROM Customers;Усередині таблиці стовпець часто містить багато повторюваних значень; іноді вам потрібно лише перелічити різні (різні) значення.
SELECT DISTINCT column1, column2, ...
FROM table_name;Нижче наведено вибірку з таблиці "Клієнти" , яка використовується в прикладах:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Якщо пропустити DISTINCT ключове слово, оператор SQL повертає значення "Країна" з усіх записів таблиці "Клієнти":
SELECT Country FROM Customers;Використовуючи DISTINCT ключове слово у функції під назвою COUNT, ми можемо повернути кількість різних країн.
SELECT COUNT(DISTINCT Country) FROM Customers;Речення WHERE використовується для фільтрації записів.
Він використовується для вилучення лише тих записів, які відповідають певній умові.
Виберіть усіх клієнтів з Мексики:
SELECT * FROM Customers
WHERE Country='Mexico';SELECT column1, column2, ...
FROM table_name
WHERE condition;Нижче наведено вибірку з таблиці "Клієнти" , яка використовується в прикладах:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
SQL вимагає одинарних лапок навколо текстових значень (більшість систем баз даних також допускають подвійні лапки).
Однак числові поля не слід брати в лапки:
SELECT * FROM Customers
WHERE CustomerID=1;Для фільтрації пошуку можна використовувати інші оператори, крім оператора =.
Виберіть усіх клієнтів із CustomerID більше 80:
SELECT * FROM Customers
WHERE CustomerID > 80;Можна використовувати такі оператори WHERE:
| Оператор | Опис |
|---|---|
| = | Рівний |
| > | Більше ніж |
| < | Менше ніж |
| >= | Більше ніж або рівний |
| <= | Менше ніж або рівний |
| <> | Не рівний. Примітка: У деяких версіях SQL цей оператор може бути записаний як != |
| BETWEEN | Між певним діапазоном |
| LIKE | Пошук за шаблоном |
| IN | Вказати кілька можливих значень для стовпця |
Ключове ORDER BY слово використовується для сортування набору результатів у порядку зростання або спадання.
Сортувати товари за ціною:
SELECT * FROM Products
ORDER BY Price;SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;Нижче наведено вибірку з таблиці «Продукти» , яка використовується в прикладах:
| ProductID | ProductName | SupplierID | CategoryID | Unit | Price |
|---|---|---|---|---|---|
| 1 | Chais | 1 | 1 | 10 boxes x 20 bags | 18 |
| 2 | Chang | 1 | 1 | 24 - 12 oz bottles | 19 |
| 3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml bottles | 10 |
| 4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6 oz jars | 22 |
| 5 | Chef Anton's Gumbo Mix | 2 | 2 | 36 boxes | 21.35 |
За умовчанням ключове 'ORDER BY' слово сортує записи в порядку зростання. Щоб відсортувати записи в порядку спадання, використовуйте 'DESC' ключове слово.
Розсортуйте продукти від найвищої до найнижчої ціни:
SELECT * FROM Products
ORDER BY Price DESC;Для рядкових значень ORDER BY ключове слово буде впорядковано в алфавітному порядку:
Відсортуйте продукти в алфавітному порядку за назвою продукту:
SELECT * FROM Products
ORDER BY ProductName;Щоб відсортувати таблицю в зворотному алфавітному порядку, використовуйте DESC ключове слово:
Відсортуйте продукти за назвою продукту у зворотному порядку:
SELECT * FROM Products
ORDER BY ProductName DESC;Наступний оператор SQL вибирає всіх клієнтів із таблиці «Клієнти», відсортованих за стовпцями «Країна» та «Назва клієнта». Це означає, що він упорядковує їх за країною, але якщо деякі рядки мають однакову країну, вони впорядковуються за назвою клієнта:
SELECT * FROM Customers
ORDER BY Country, CustomerName;Наступний оператор SQL вибирає всіх клієнтів із таблиці «Клієнти», відсортованих за зростанням за стовпцем «Країна» та за спаданням за стовпцем «Назва клієнта»:
SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;WHERE може містити один або кілька AND операторів.
Оператор AND використовується для фільтрації записів на основі кількох умов, наприклад, якщо ви хочете повернути всіх клієнтів з Іспанії, які починаються з літери «G»:
Виберіть усіх клієнтів з Іспанії, які починаються з літери "G":
SELECT *
FROM Customers
WHERE Country = 'Spain' AND CustomerName LIKE 'G%';Синтаксис
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;Оператор AND виводить запис, якщо всі умови ІСТИННІ.
Оператор OR виводить запис, якщо будь-яка з умов є TRUE.
Нижче наведено вибірку з таблиці "Клієнти" , яка використовується в прикладах:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
У наведеному нижче операторі SQL вибираються всі поля, серед Customers яких Country «Німеччина» ТА City «Берлін» ТА PostalCode більше 12000:
SELECT * FROM Customers
WHERE Country = 'Germany'
AND City = 'Berlin'
AND PostalCode > 12000;Ви можете комбінувати оператори ANDі OR.
Наступний оператор SQL вибирає всіх клієнтів з Іспанії, які починаються з «G» або «R».
Переконайтеся, що ви використовуєте дужки, щоб отримати правильний результат.
Виберіть усіх іспанських клієнтів, які починаються на "G" або "R":
SELECT * FROM Customers
WHERE Country = 'Spain' AND (CustomerName LIKE 'G%' OR CustomerName LIKE 'R%');Без дужок оператор select поверне всіх клієнтів з Іспанії, які починаються з «G», а також усіх клієнтів, які починаються з «R», незалежно від значення країни:
Виберіть усіх клієнтів, які: з Іспанії та починаються з літери "G" або літери "R":
SELECT * FROM Customers
WHERE Country = 'Spain' AND CustomerName LIKE 'G%' OR CustomerName LIKE 'R%';WHERE може містити один або декілька OR операторів.
Оператор OR використовується для фільтрації записів на основі більш ніж однієї умови, наприклад, якщо ви хочете повернути всіх клієнтів з Німеччини, а також клієнтів з Іспанії:
приклад Виберіть усіх клієнтів з Німеччини чи Іспанії:
SELECT *
FROM Customers
WHERE Country = 'Germany' OR Country = 'Spain';SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;Нижче наведено вибірку з таблиці "Клієнти" , яка використовується в прикладах:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Наступна інструкція SQL вибирає всі поля від клієнтів, де або City "Берлін", Customer Nameпочинається з літери "G" або Country "Норвегія":
SELECT * FROM Customers
WHERE City = 'Berlin' OR CustomerName LIKE 'G%' OR Country = 'Norway';Оператор NOT використовується в поєднанні з іншими операторами для отримання протилежного результату, який також називають негативним результатом.
У операторі select нижче ми хочемо повернути всіх клієнтів, які НЕ з Іспанії:
Виберіть лише клієнтів, які НЕ з Іспанії:
SELECT * FROM Customers
WHERE NOT Country = 'Spain';У прикладі вище NOT оператор використовується в комбінації з = оператором, але його можна використовувати в комбінації з іншими операторами порівняння та/або логічними операторами. Дивіться приклади нижче.
SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;Нижче наведено вибірку з таблиці "Клієнти" , яка використовується в прикладах:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Виберіть клієнтів, які не починаються з літери «А»:
SELECT * FROM Customers
WHERE CustomerName NOT LIKE 'A%';Виберіть клієнтів із ідентифікатором клієнта не між 10 і 60:
SELECT * FROM Customers
WHERE CustomerID NOT BETWEEN 10 AND 60;Виберіть клієнтів, які не з Парижа чи Лондона:
SELECT * FROM Customers
WHERE City NOT IN ('Paris', 'London');Виберіть клієнтів з CustomerId не більше 50:
SELECT * FROM Customers
WHERE NOT CustomerID > 50;Примітка: існує оператор не більше: !> це дасть той самий результат.
Виберіть клієнтів з CustomerID не менше 50:
SELECT * FROM Customers
WHERE NOT CustomerId < 50;Примітка: існує оператор not-меньше-тоді: !< це дасть вам той самий результат.
Інструкція INSERT INTO використовується для вставки нових записів у таблицю.
Написати заяву можна INSERT INTO двома способами:
- Вкажіть назви стовпців і значення, які потрібно вставити:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);- Якщо ви додаєте значення для всіх стовпців таблиці, вам не потрібно вказувати назви стовпців у SQL-запиті. Однак переконайтеся, що порядок значень відповідає порядку стовпців у таблиці.
Тут
INSERT INTOсинтаксис буде таким:
INSERT INTO table_name
VALUES (value1, value2, value3, ...);Нижче наведено вибірку з таблиці "Клієнти" , яка використовується в прикладах:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 89 | White Clover Markets | Karl Jablonski | 305 - 14th Ave. S. Suite 3B | Seattle | 98128 | USA |
| 90 | Wilman Kala | Matti Karttunen | Keskuskatu 45 | Helsinki | 21240 | Finland |
| 91 | Wolski | Zbyszek | ul. Filtrowa 68 | Walla | 01-012 | Poland |
Наступний оператор SQL вставляє новий запис у таблицю "Клієнти":
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway');Вибір із таблиці «Клієнти» тепер виглядатиме так:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 89 | White Clover Markets | Karl Jablonski | 305 - 14th Ave. S. Suite 3B | Seattle | 98128 | USA |
| 90 | Wilman Kala | Matti Karttunen | Keskuskatu 45 | Helsinki | 21240 | Finland |
| 91 | Wolski | Zbyszek | ul. Filtrowa 68 | Walla | 01-012 | Poland |
| 92 | Cardinal | Tom B. Erichsen | Skagen 21 | Stavanger | 4006 | Norway |
Також можна вставляти дані лише в певні стовпці.
Наступний оператор SQL вставить новий запис, але вставить дані лише в стовпці «CustomerName», «City» і «Country» (CustomerID буде оновлено автоматично):
INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');Вибір із таблиці «Клієнти» тепер виглядатиме так:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 89 | White Clover Markets | Karl Jablonski | 305 - 14th Ave. S. Suite 3B | Seattle | 98128 | USA |
| 90 | Wilman Kala | Matti Karttunen | Keskuskatu 45 | Helsinki | 21240 | Finland |
| 91 | Wolski | Zbyszek | ul. Filtrowa 68 | Walla | 01-012 | Poland |
| 92 | Cardinal | null | null | Stavanger | null | Norway |
Також можна вставити кілька рядків в один оператор.
Щоб вставити кілька рядків даних, ми використовуємо той самий INSERT INTO оператор, але з кількома значеннями:
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES
('Cardinal', 'Tom B. Erichsen', 'Skagen 21', 'Stavanger', '4006', 'Norway'),
('Greasy Burger', 'Per Olsen', 'Gateveien 15', 'Sandnes', '4306', 'Norway'),
('Tasty Tee', 'Finn Egan', 'Streetroad 19B', 'Liverpool', 'L1 0AA', 'UK');Обов’язково розділяйте кожен набір значень комою ,.
Вибір із таблиці «Клієнти» тепер виглядатиме так:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 89 | White Clover Markets | Karl Jablonski | 305 - 14th Ave. S. Suite 3B | Seattle | 98128 | USA |
| 90 | Wilman Kala | Matti Karttunen | Keskuskatu 45 | Helsinki | 21240 | Finland |
| 91 | Wolski | Zbyszek | ul. Filtrowa 68 | Walla | 01-012 | Poland |
| 92 | Cardinal | Tom B. Erichsen | Skagen 21 | Stavanger | 4006 | Norway |
| 93 | Greasy Burger | Per Olsen | Gateveien 15 | Sandnes | 4306 | Norway |
| 94 | Tasty Tee | Finn Egan | Streetroad 19B | Liverpool | L1 0AA | UK |
Поле зі значенням NULL є полем без значення.
Якщо поле в таблиці є необов’язковим, можна вставити новий запис або оновити запис, не додаючи значення до цього поля. Тоді поле буде збережено зі значенням NULL.
Неможливо перевірити значення NULL за допомогою операторів порівняння, таких як =, < або <>.
Замість цього нам доведеться використовувати оператори IS NULL and IS NOT NULL.
SELECT column_names
FROM table_name
WHERE column_name IS NULL;IS NOT NULL Синтаксис
SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;Нижче наведено вибірку з таблиці "Клієнти" , яка використовується в прикладах:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Оператор IS NULL використовується для перевірки порожніх значень (значення NULL).
Наступний SQL перераховує всіх клієнтів із значенням NULL у полі "Адреса":
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NULL;Оператор IS NOT NULL використовується для перевірки непорожніх значень (НЕ NULL).
Наступний SQL перераховує всіх клієнтів із значенням у полі "Адреса":
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address IS NOT NULL;Інструкція UPDATE використовується для зміни наявних записів у таблиці.
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;Нижче наведено вибірку з таблиці "Клієнти" , яка використовується в прикладах:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Наступний оператор SQL оновлює першого клієнта (CustomerID = 1) за допомогою нової контактної особи та нового міста.
UPDATE Customers
SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'
WHERE CustomerID = 1;Вибір із таблиці «Клієнти» тепер виглядатиме так:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Alfred Schmidt | Obere Str. 57 | Frankfurt | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Це WHERE пункт, який визначає, скільки записів буде оновлено.
Наступна інструкція SQL оновить ContactName на "Juan" для всіх записів, де країна "Мексика":
UPDATE Customers
SET ContactName='Juan'
WHERE Country='Mexico';Вибір із таблиці «Клієнти» тепер виглядатиме так:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Alfred Schmidt | Obere Str. 57 | Frankfurt | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Juan | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Juan | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Будьте обережні при оновленні записів. Якщо ви опустите WHERE пункт, ВСІ записи будуть оновлені!
UPDATE Customers
SET ContactName='Juan';Вибір із таблиці «Клієнти» тепер виглядатиме так:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Juan | Obere Str. 57 | Frankfurt | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Juan | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Juan | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Juan | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Juan | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Інструкція DELETE використовується для видалення існуючих записів у таблиці.
DELETE FROM table_name WHERE condition;Примітка. Будьте обережні, видаляючи записи в таблиці! Зверніть увагу на WHERE пункт у DELETE заяві. У WHERE пункті вказується, які записи слід видалити. Якщо ви опустите WHERE пункт, усі записи в таблиці будуть видалені!
Нижче наведено вибірку з таблиці "Клієнти" , яка використовується в прикладах:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Juan | Obere Str. 57 | Frankfurt | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Juan | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Juan | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Juan | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Juan | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Наступний оператор SQL видаляє клієнта "Alfreds Futterkiste" із таблиці "Клієнти":
DELETE FROM Customers WHERE CustomerName='Alfreds Futterkiste';Тепер таблиця «Клієнти» матиме такий вигляд:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Можна видалити всі рядки в таблиці, не видаляючи таблицю. Це означає, що структура таблиці, атрибути та індекси залишаться незмінними:
DELETE FROM table_name;Наступний оператор SQL видаляє всі рядки в таблиці "Клієнти", не видаляючи таблицю:
DELETE FROM Customers;Щоб повністю видалити таблицю, скористайтеся оператором DROP TABLE:
Видалення таблиці клієнтів:
DROP TABLE Customers;Речення SELECT TOP використовується для визначення кількості записів, які потрібно повернути.
Цей SELECT TOP пункт корисний для великих таблиць із тисячами записів. Повернення великої кількості записів може вплинути на продуктивність.
Виберіть лише перші 3 записи таблиці Клієнти:
SELECT TOP 3 * FROM Customers;Нижче наведено вибірку з таблиці "Клієнти" , яка використовується в прикладах:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Juan | Obere Str. 57 | Frankfurt | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Juan | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Juan | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Juan | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Juan | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Наступний оператор SQL показує еквівалентний приклад для MySQL:
Виберіть перші 3 записи таблиці Клієнти:
SELECT * FROM Customers
LIMIT 3;Наступний оператор SQL показує еквівалентний приклад для Oracle:
Виберіть перші 3 записи таблиці Клієнти:
SELECT * FROM Customers
FETCH FIRST 3 ROWS ONLY;Наступний оператор SQL вибирає перші 50% записів із таблиці «Клієнти» (для SQL Server/MS Access):
SELECT TOP 50 PERCENT * FROM Customers;Наступний оператор SQL вибирає перші три записи з таблиці «Клієнти», де країна — «Німеччина» (для SQL Server/MS Access):
SELECT TOP 3 * FROM Customers
WHERE Country='Germany';Додайте ORDER BY ключове слово, якщо хочете відсортувати результат, і поверніть перші 3 записи відсортованого результату.
Для SQL Server і MS Access:
Відсортуйте результат в алфавітному порядку за ім’ям клієнта та поверніть перші 3 записи:
SELECT TOP 3 * FROM Customers
ORDER BY CustomerName DESC;Агрегатна функція – це функція, яка виконує обчислення набору значень і повертає одне значення.
Агрегатні функції часто використовуються з GROUP BY умовою оператора SELECT. Речення GROUP BY розбиває набір результатів на групи значень, а агрегатну функцію можна використовувати для повернення окремого значення для кожної групи.
Найпоширенішими агрегатними функціями SQL є:
MIN()- повертає найменше значення у вибраному стовпціMAX()- повертає найбільше значення у вибраному стовпціCOUNT()- повертає кількість рядків у наборіSUM()- повертає загальну суму числового стовпцяAVG()- повертає середнє значення числового стовпця
Агрегатні функції ігнорують нульові значення (крім COUNT()).
Функція MIN() повертає найменше значення вибраного стовпця.
Функція MAX() повертає найбільше значення вибраного стовпця.
Знайдіть найнижчу ціну в стовпці Ціна:
SELECT MIN(Price)
FROM Products;Знайдіть найвищу ціну в стовпці Ціна:
SELECT MAX(Price)
FROM Products;SELECT MIN(column_name)
FROM table_name
WHERE condition;SELECT MAX(column_name)
FROM table_name
WHERE condition;Нижче наведено вибірку з таблиці «Продукти» , яка використовується в прикладах:
| ProductID | ProductName | SupplierID | CategoryID | Unit | Price |
|---|---|---|---|---|---|
| 1 | Chais | 1 | 1 | 10 boxes x 20 bags | 18 |
| 2 | Chang | 1 | 1 | 24 - 12 oz bottles | 19 |
| 3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml bottles | 10 |
| 4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6 oz jars | 22 |
| 5 | Chef Anton's Gumbo Mix | 2 | 2 | 36 boxes | 21.35 |
Якщо ви використовуєте MIN() або MAX(), повернутий стовпець не матиме описової назви. Щоб дати стовпцю описову назву, використовуйте AS ключове слово:
SELECT MIN(Price) AS SmallestPrice
FROM Products;Тут ми використовуємо MIN()функцію та GROUP BY пункт, щоб повернути найменшу ціну для кожної категорії в таблиці Products:
SELECT MIN(Price) AS SmallestPrice, CategoryID
FROM Products
GROUP BY CategoryID;Функція COUNT() повертає кількість рядків, які відповідають заданому критерію.
Знайдіть загальну кількість рядків у Products таблиці:
SELECT COUNT(*)
FROM Products;##Синтаксис
SELECT COUNT(column_name)
FROM table_name
WHERE condition;Нижче наведено вибірку з таблиці «Продукти» , яка використовується в прикладах:
| ProductID | ProductName | SupplierID | CategoryID | Unit | Price |
|---|---|---|---|---|---|
| 1 | Chais | 1 | 1 | 10 boxes x 20 bags | 18 |
| 2 | Chang | 1 | 1 | 24 - 12 oz bottles | 19 |
| 3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml bottles | 10 |
| 4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6 oz jars | 22 |
| 5 | Chef Anton's Gumbo Mix | 2 | 2 | 36 boxes | 21.35 |
Ви можете вказати назву стовпця замість символу зірочки (*).
Якщо ви вкажете назву стовпця замість (*), значення NULL не будуть зараховані.
Знайдіть кількість продуктів, де ProductNameне дорівнює нулю:
SELECT COUNT(ProductName)
FROM Products;Ви можете додати WHERE пункт, щоб визначити умови:
Знайдіть кількість продуктів, у яких Price більше 20:
SELECT COUNT(ProductID)
FROM Products
WHERE Price > 20;Ви можете ігнорувати дублікати, використовуючи DISTINCT ключове слово у COUNT() функції.
Якщо DISTINCT вказано, рядки з однаковим значенням для вказаного стовпця вважатимуться одним.
Скільки різних цін у Products таблиці:
SELECT COUNT(DISTINCT Price)
FROM Products;Дайте назву підрахованому стовпцю за допомогою AS ключового слова.
Назвіть стовпець «Кількість записів»:
SELECT COUNT(*) AS [Number of records]
FROM Products;Тут ми використовуємо COUNT() функцію та GROUP BYпропозицію, щоб повернути кількість записів для кожної категорії в таблиці Products:
SELECT COUNT(*) AS [Number of records], CategoryID
FROM Products
GROUP BY CategoryID;Функція SUM()повертає загальну суму числового стовпця.
Повертає суму всіх Quantityполів у OrderDetailsтаблиці:
SELECT SUM(Quantity)
FROM OrderDetails;SELECT SUM(column_name)
FROM table_name
WHERE condition;Нижче наведено вибірку з таблиці OrderDetails, яка використовується в прикладах:
| OrderDetailID | OrderID | ProductID | Quantity |
|---|---|---|---|
| 1 | 10248 | 11 | 12 |
| 2 | 10248 | 42 | 10 |
| 3 | 10248 | 72 | 5 |
| 4 | 10249 | 14 | 9 |
| 5 | 10249 | 51 | 40 |
Ви можете додати WHERE пункт, щоб визначити умови:
Повертає суму поля Quantityдля добутку з ProductID11:
SELECT SUM(Quantity)
FROM OrderDetails
WHERE ProductId = 11;Дайте назву підсумковому стовпцю за допомогою AS ключового слова.
Назвіть стовпець «усього»:
SELECT SUM(Quantity) AS total
FROM OrderDetails;Тут ми використовуємо SUM() функцію та GROUP BY пропозицію, щоб повернути Quantity для кожного OrderID в таблиці OrderDetails:
SELECT OrderID, SUM(Quantity) AS [Total Quantity]
FROM OrderDetails
GROUP BY OrderID;Параметр всередині SUM() функції також може бути виразом.
Якщо припустити, що кожен продукт у OrderDetails стовпчику коштує 10 доларів, ми можемо знайти загальний прибуток у доларах, помноживши кожну кількість на 10:
Використовуйте вираз у SUM() функції:
SELECT SUM(Quantity * 10)
FROM OrderDetails;Ми також можемо приєднати OrderDetails таблицю до Products таблиці, щоб знайти фактичну суму, замість того, щоб вважати, що вона становить 10 доларів:
Приєднайтеся OrderDetails до Products, і використовуйте SUM(), щоб знайти загальну суму:
SELECT SUM(Price * Quantity)
FROM OrderDetails
LEFT JOIN Products ON OrderDetails.ProductID = Products.ProductID;Функція AVG()повертає середнє значення числового стовпця.
Знайдіть середню ціну всіх товарів:
SELECT AVG(Price)
FROM Products;SELECT AVG(column_name)
FROM table_name
WHERE condition;Нижче наведено вибірку з таблиці «Продукти» , яка використовується в прикладах:
| ProductID | ProductName | SupplierID | CategoryID | Unit | Price |
|---|---|---|---|---|---|
| 1 | Chais | 1 | 1 | 10 boxes x 20 bags | 18 |
| 2 | Chang | 1 | 1 | 24 - 12 oz bottles | 19 |
| 3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml bottles | 10 |
| 4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6 oz jars | 22 |
| 5 | Chef Anton's Gumbo Mix | 2 | 2 | 36 boxes | 21.35 |
Ви можете додати WHERE пункт, щоб визначити умови:
Поверніть середню ціну продуктів у категорії 1:
SELECT AVG(Price)
FROM Products
WHERE CategoryID = 1;Дайте назву стовпцю AVG за допомогою AS ключового слова.
Назвіть стовпець «середня ціна»:
SELECT AVG(Price) AS [average price]
FROM Products;Щоб отримати список усіх записів із ціною, вищою за середню, ми можемо використати AVG() функцію у підзапиті:
Повернути всі товари з ціною вищою за середню:
SELECT * FROM Products
WHERE price > (SELECT AVG(price) FROM Products);Тут ми використовуємо AVG() функцію та GROUP BY речення, щоб повернути середню ціну для кожної категорії в таблиці Products:
SELECT AVG(Price) AS AveragePrice, CategoryID
FROM Products
GROUP BY CategoryID;Оператор LIKE використовується в WHERE пропозиції для пошуку заданого шаблону в стовпці.
У поєднанні з оператором часто використовуються два символи підстановки LIKE:
Знак відсотка % означає нуль, один або декілька символів
Знак підкреслення _ означає один символ
Виберіть усіх клієнтів, які починаються з літери «а»:
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;Нижче наведено вибірку з таблиці "Клієнти" , яка використовується в прикладах:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Символ _ підстановки представляє один символ.
Це може бути будь-який символ або число, але кожен _ представляє один і тільки один символ.
Повернути всіх клієнтів із міста, яке починається з «L», за яким іде один символ підстановки, потім «nd», а потім два символи підстановки:
SELECT * FROM Customers
WHERE city LIKE 'L_nd__';Символ % підстановки представляє будь-яку кількість символів, навіть нуль символів.
Повернути всіх клієнтів з міста, яке містить літеру "L":
SELECT * FROM Customers
WHERE city LIKE '%L%';Щоб повернути записи, які починаються з певної літери або фрази, додайте % в кінці літери або фрази.
Повернути всіх клієнтів, які починаються з "La":
SELECT * FROM Customers
WHERE CustomerName LIKE 'La%';Повернути всіх клієнтів, які починаються на "a" або на "b":
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%' OR CustomerName LIKE 'b%';Щоб повернути записи, які закінчуються певною літерою чи фразою, додайте % на початку літери чи фрази.
Повернути всіх клієнтів, які закінчуються на "a":
SELECT * FROM Customers
WHERE CustomerName LIKE '%a';Повернути всіх клієнтів, які починаються на "b" і закінчуються на "s":
SELECT * FROM Customers
WHERE CustomerName LIKE 'b%s';Щоб повернути записи, які містять певну літеру чи фразу, додайте % до та після літери чи фрази.
Повернути всіх клієнтів, які містять фразу "або"
SELECT * FROM Customers
WHERE CustomerName LIKE '%or%';Будь-який символ узагальнення, наприклад % і _, можна використовувати в поєднанні з іншими символами підстановки.
Повернути всіх клієнтів, які починаються з "a" і містять принаймні 3 символи:
SELECT * FROM Customers
WHERE CustomerName LIKE 'a__%';Повернути всіх клієнтів, які мають «r» на другій позиції:
SELECT * FROM Customers
WHERE CustomerName LIKE '_r%';Якщо символ підстановки не вказано, фраза повинна мати точний збіг, щоб повернути результат.
Повернути всіх клієнтів з Іспанії:
SELECT * FROM Customers
WHERE Country LIKE 'Spain';Символ підстановки використовується для заміни одного або кількох символів у рядку.
З оператором використовуються символи підстановки . Оператор використовується в пропозиції для пошуку заданого шаблону в стовпці. LIKE LIKE WHERE
Повернути всіх клієнтів, які починаються з літери "а":
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';| Symbol | Description |
|---|---|
| % | Represents zero or more characters |
| _ | Represents a single character |
| [] | Represents any single character within the brackets * |
| ^ | Represents any character not in the brackets * |
| - | Represents any single character within the specified range * |
| {} | Represents any escaped character ** |
-
Не підтримується в базах даних PostgreSQL і MySQL.
-
Підтримується лише в базах даних Oracle.
Нижче наведено вибірку з таблиці "Клієнти" , яка використовується в прикладах:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Символ % підстановки представляє будь-яку кількість символів, навіть нуль символів.
Повернути всіх клієнтів, які закінчуються шаблоном "es":
SELECT * FROM Customers
WHERE CustomerName LIKE '%es';Повернути всіх клієнтів, які містять шаблон "mer":
SELECT * FROM Customers
WHERE CustomerName LIKE '%mer%';Символ _ підстановки представляє один символ.
Це може бути будь-який символ або число, але кожен _ представляє один і тільки один символ.
Повернути всіх клієнтів, які City починаються з будь-якого символу, після якого йде «ondon»:
SELECT * FROM Customers
WHERE City LIKE '_ondon';приклад
Повернути всіх клієнтів, які City починаються з "L", за якими слідують будь-які 3 символи, що закінчуються "on":
SELECT * FROM Customers
WHERE City LIKE 'L___on';Символ [] підстановки повертає результат, якщо будь-який із символів усередині знайде збіг.
Повернути всіх клієнтів, починаючи з "b", "s" або "p":
SELECT * FROM Customers
WHERE CustomerName LIKE '[bsp]%';Символ - узагальнення дозволяє вказати діапазон символів усередині цього [] символу.
Повернути всіх клієнтів, які починаються на "a", "b", "c", "d", "e" або "f":
SELECT * FROM Customers
WHERE CustomerName LIKE '[a-f]%';Будь-який символ узагальнення, наприклад % і _ , можна використовувати в поєднанні з іншими символами підстановки.
Повернути всіх клієнтів, які починаються з "a" і містять принаймні 3 символи:
SELECT * FROM Customers
WHERE CustomerName LIKE 'a__%';Повернути всіх клієнтів, які мають «r» на другій позиції:
SELECT * FROM Customers
WHERE CustomerName LIKE '_r%';Якщо символ підстановки не вказано, фраза повинна мати точний збіг, щоб повернути результат.
Повернути всіх клієнтів з Іспанії:
SELECT * FROM Customers
WHERE Country LIKE 'Spain';База даних Microsoft Access має деякі інші символи підстановки:
| Symbol | Description | Example |
|---|---|---|
| * | Represents zero or more characters | bl* finds bl, black, blue, and blob |
| ? | Represents a single character | h?t finds hot, hat, and hit |
| [] | Represents any single character within the brackets | h[oa]t finds hot and hat, but not hit |
| ! | Represents any character not in the brackets | h[!oa]t finds hit, but not hot and hat |
| - | Represents any single character within the specified range | c[a-b]t finds cat and cbt |
| # | Represents any single numeric character | 2#5 finds 205, 215, 225, 235, 245, 255, 265, 275, 285, and 295 |
Оператор IN дозволяє вказати кілька значень у WHEREреченні.
Оператор IN є скороченням кількох OR умов.
Повернути всіх клієнтів із «Німеччини», «Франції» або «Великобританії»
SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);Нижче наведено вибірку з таблиці "Клієнти" , яка використовується в прикладах:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Використовуючи NOT ключове слово перед IN оператором, ви повертаєте всі записи, які НЕ є жодним із значень у списку.
Повернути всіх клієнтів, які НЕ з "Німеччини", "Франції" або "Великобританії":
SELECT * FROM Customers
WHERE Country NOT IN ('Germany', 'France', 'UK');Ви також можете використовувати IN з підзапитом у WHERE реченні.
За допомогою підзапиту ви можете повернути всі записи з основного запиту, які присутні в результаті підзапиту.
Повернути всіх клієнтів, які мають замовлення, у таблиці «Замовлення» :
SELECT * FROM Customers
WHERE CustomerID IN (SELECT CustomerID FROM Orders);Результат у наведеному вище прикладі повернув 74 записи, що означає, що є 17 клієнтів, які не розмістили жодного замовлення.
Давайте перевіримо, чи це правильно, за допомогою NOT IN оператора.
приклад Повернути всіх клієнтів, які НЕ зробили жодного замовлення, у таблицю «Замовлення» :
SELECT * FROM Customers
WHERE CustomerID NOT IN (SELECT CustomerID FROM Orders);Оператор BETWEEN вибирає значення в заданому діапазоні. Значеннями можуть бути числа, текст або дати.
Оператор BETWEEN включає: початкове та кінцеве значення включено.
Вибирає всі товари з ціною від 10 до 20:
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;Нижче наведено вибірку з таблиці «Продукти» , яка використовується в прикладах:
| ProductID | ProductName | SupplierID | CategoryID | Unit | Price |
|---|---|---|---|---|---|
| 1 | Chais | 1 | 1 | 10 boxes x 20 bags | 18 |
| 2 | Chang | 1 | 1 | 24 - 12 oz bottles | 19 |
| 3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml bottles | 10 |
| 4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6 oz jars | 22 |
| 5 | Chef Anton's Gumbo Mix | 2 | 2 | 36 boxes | 21.35 |
Щоб відобразити продукти поза діапазоном попереднього прикладу, використовуйте NOT BETWEEN:
SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;Наступний оператор SQL вибирає всі продукти з ціною від 10 до 20. Крім того, CategoryID має мати значення 1, 2 або 3:
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20
AND CategoryID IN (1,2,3);Наступний оператор SQL вибирає всі продукти з ProductName в алфавітному порядку між Carnarvon Tigers і Mozzarella di Giovanni:
SELECT * FROM Products
WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;Наступний оператор SQL вибирає всі продукти з ProductName між Carnarvon Tigers і Chef Anton's Cajun Seasoning:
SELECT * FROM Products
WHERE ProductName BETWEEN "Carnarvon Tigers" AND "Chef Anton's Cajun Seasoning"
ORDER BY ProductName;Наступний оператор SQL вибирає всі продукти з ProductName не між Carnarvon Tigers і Mozzarella di Giovanni:
SELECT * FROM Products
WHERE ProductName NOT BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;Наступний оператор SQL вибирає всі замовлення з OrderDate між «01-July-1996» і «31-July-1996»:
SELECT * FROM Orders
WHERE OrderDate BETWEEN #07/01/1996# AND #07/31/1996#;АБО:
SELECT * FROM Orders
WHERE OrderDate BETWEEN '1996-07-01' AND '1996-07-31';
Нижче наведено вибірку з таблиці замовлень , яка використовується в прикладах:
| OrderID | CustomerID | EmployeeID | OrderDate | ShipperID |
|---|---|---|---|---|
| 10248 | 90 | 5 | 7/4/1996 | 3 |
| 10249 | 81 | 6 | 7/5/1996 | 1 |
| 10250 | 34 | 4 | 7/8/1996 | 2 |
| 10251 | 84 | 3 | 7/9/1996 | 1 |
| 10252 | 76 | 4 | 7/10/1996 | 2 |
Псевдоніми SQL Псевдоніми SQL використовуються для надання таблиці або стовпцю в таблиці тимчасового імені.
Псевдоніми часто використовуються, щоб зробити назви стовпців більш читабельними.
Псевдонім існує лише протягом цього запиту.
Псевдонім створюється за допомогою AS ключового слова.
SELECT CustomerID AS ID
FROM Customers;Фактично, у більшості мов баз даних ви можете пропустити ключове слово AS і отримати той самий результат:
SELECT CustomerID ID
FROM Customers;Коли псевдонім використовується в стовпці:
SELECT column_name AS alias_name
FROM table_name;Коли в таблиці використовується псевдонім:
SELECT column_name(s)
FROM table_name AS alias_name;Нижче наведено вибірку з таблиць «Клієнти» та «Замовлення» , які використовуються в прикладах.
Клієнти
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
Замовлення
| OrderID | CustomerID | EmployeeID | OrderDate | ShipperID |
|---|---|---|---|---|
| 10248 | 90 | 5 | 7/4/1996 | 3 |
| 10249 | 81 | 6 | 7/5/1996 | 1 |
| 10250 | 34 | 4 | 7/8/1996 | 2 |
Наступний оператор SQL створює два псевдоніми, один для стовпця CustomerID і інший для стовпця CustomerName:
SELECT CustomerID AS ID, CustomerName AS Customer
FROM Customers;Якщо ви хочете, щоб ваш псевдонім містив один або кілька пробілів, наприклад «My Great Products», візьміть псевдонім у квадратні дужки або подвійні лапки.
Використання [квадратних дужок] для псевдонімів із пробілами:
SELECT ProductName AS [My Great Products]
FROM Products;Використання «подвійних лапок» для псевдонімів із пробілами:
SELECT ProductName AS "My Great Products"
FROM Products;Наступний оператор SQL створює псевдонім із назвою «Адреса», який об’єднує чотири стовпці (адреса, поштовий індекс, місто та країна):
SELECT CustomerName, Address + ', ' + PostalCode + ' ' + City + ', ' + Country AS Address
FROM Customers;SELECT CustomerName, CONCAT(Address,', ',PostalCode,', ',City,', ',Country) AS Address
FROM Customers;Ці ж правила застосовуються, якщо ви хочете використовувати псевдонім для таблиці.
Натомість використовуйте таблицю "Клієнти" як "Особи":
SELECT * FROM Customers AS Persons;Може здатися марним використовувати псевдоніми для таблиць, але коли ви використовуєте більше однієї таблиці у своїх запитах, це може зробити оператори SQL коротшими.
Наступний оператор SQL вибирає всі замовлення від клієнта з CustomerID=4 (Around the Horn). Ми використовуємо таблиці «Клієнти» та «Замовлення» та надаємо їм псевдоніми таблиць «c» та «o» відповідно (тут ми використовуємо псевдоніми, щоб зробити SQL коротшим):
SELECT o.OrderID, o.OrderDate, c.CustomerName
FROM Customers AS c, Orders AS o
WHERE c.CustomerName='Around the Horn' AND c.CustomerID=o.CustomerID;Наступний оператор SQL такий самий, як і вище, але без псевдонімів:
SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName
FROM Customers, Orders
WHERE Customers.CustomerName='Around the Horn' AND Customers.CustomerID=Orders.CustomerID;- У запиті бере участь більше однієї таблиці
- У запиті використовуються функції
- Назви стовпців великі або погано читаються
- Два або більше стовпців об'єднують разом
Речення JOIN використовується для об’єднання рядків з двох або більше таблиць на основі пов’язаного стовпця між ними.
Розглянемо вибірку з таблиці «Замовлення»:
| OrderID | CustomerID | OrderDate |
|---|---|---|
| 10308 | 2 | 1996-09-18 |
| 10309 | 37 | 1996-09-19 |
| 10310 | 77 | 1996-09-20 |
Потім перегляньте вибір із таблиці «Клієнти»:
| CustomerID | CustomerName | ContactName | Country |
|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mexico |
Зауважте, що стовпець «CustomerID» у таблиці «Orders» відноситься до «CustomerID» у таблиці «Customers». Зв’язок між двома таблицями вище – це стовпець «CustomerID».
Потім ми можемо створити такий оператор SQL (який містить INNER JOIN), який вибирає записи, що мають відповідні значення в обох таблицях:
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;| OrderID | CustomerName | OrderDate |
|---|---|---|
| 10308 | Ana Trujillo Emparedados y helados | 9/18/1996 |
| 10365 | Antonio Moreno Taquería | 11/27/1996 |
| 10383 | Around the Horn | 12/16/1996 |
| 10355 | Around the Horn | 11/15/1996 |
| 10278 | Berglunds snabbköp | 8/12/1996 |
Ось різні типи JOIN у SQL:
(INNER) JOIN: повертає записи, які мають відповідні значення в обох таблицях
LEFT (OUTER) JOIN: повертає всі записи з лівої таблиці та відповідні записи з правої таблиці
RIGHT (OUTER) JOIN: повертає всі записи з правої таблиці та відповідні записи з лівої таблиці
FULL (OUTER) JOIN: повертає всі записи, якщо є відповідність у лівій або правій таблиці
Ключове INNER JOIN слово вибирає записи, які мають відповідні значення в обох таблицях.
Давайте подивимося на вибір таблиці Продукти :
| ProductID | ProductName | CategoryID | Price |
|---|---|---|---|
| 1 | Chais | 1 | 18 |
| 2 | Chang | 1 | 19 |
| 3 | Aniseed Syrup | 2 | 10 |
І вибір таблиці категорій :
| CategoryID | CategoryName | Description |
|---|---|---|
| 1 | Beverages | Soft drinks, coffees, teas, beers, and ales |
| 2 | Condiments | Sweet and savory sauces, relishes, spreads, and seasonings |
| 3 | Confections | Desserts, candies, and sweet breads |
Ми об’єднаємо таблицю «Продукти» з таблицею «Категорії», використовуючи CategoryID поле з обох таблиць:
прикладОтримайте власний SQL Server
Об’єднайте продукти та категорії за допомогою ключового слова INNER JOIN:
SELECT ProductID, ProductName, CategoryName
FROM Products
INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID;Примітка. Ключове INNER JOIN слово повертає лише рядки з відповідністю в обох таблицях. Це означає, що якщо у вас є продукт без CategoryID або з CategoryID, якого немає в таблиці Categories, цей запис не буде повернено в результаті.
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;Рекомендується включати назву таблиці під час визначення стовпців у операторі SQL.
Вкажіть назви таблиць:
SELECT Products.ProductID, Products.ProductName, Categories.CategoryName
FROM Products
INNER JOIN Categories ON Products.CategoryID = Categories.CategoryID;Наведений вище приклад працює без вказівки імен таблиць, оскільки жодна з указаних імен стовпців не присутня в обох таблицях. Якщо ви спробуєте включити CategoryID в SELECT оператор, ви отримаєте повідомлення про помилку, якщо не вкажете назву таблиці (оскільки CategoryID присутня в обох таблицях).
JOIN і INNER JOIN поверне той самий результат.
INNER є типовим типом об’єднання для JOIN, тому, коли ви пишете, JOIN аналізатор фактично записує INNER JOIN.
JOIN те саме, що INNER JOIN:
SELECT Products.ProductID, Products.ProductName, Categories.CategoryName
FROM Products
JOIN Categories ON Products.CategoryID = Categories.CategoryID;Наступний оператор SQL вибирає всі замовлення з інформацією про клієнта та відправника:
SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM ((Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);Ключове LEFT JOIN слово повертає всі записи з лівої таблиці (таблиця1) і відповідні записи з правої таблиці (таблиця2). Результатом буде 0 записів з правого боку, якщо немає відповідності.
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;У цьому підручнику ми будемо використовувати відомий приклад бази даних Northwind.
Нижче наведено вибір із таблиці «Клієнти»:
| CustomerID | CustomerName | ContactName | Country |
|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mexico |
І вибірка з таблиці «Замовлення»:
| OrderID | CustomerID | EmployeeID | OrderDate | ShipperID |
|---|---|---|---|---|
| 10308 | 2 | 7 | 1996-09-18 | 3 |
| 10309 | 37 | 3 | 1996-09-19 | 1 |
| 10310 | 77 | 8 | 1996-09-20 | 2 |
Наступний оператор SQL вибере всіх клієнтів і будь-які замовлення, які вони можуть мати:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;Ключове RIGHT JOINслово повертає всі записи з правої таблиці (table2) і відповідні записи з лівої таблиці (table1). Результатом є 0 записів зліва, якщо немає відповідності.
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;Демонстраційна база даних У цьому підручнику ми будемо використовувати відомий приклад бази даних Northwind.
Нижче наведено вибір із таблиці «Замовлення»:
| OrderID | CustomerID | EmployeeID | OrderDate | ShipperID |
|---|---|---|---|---|
| 10308 | 2 | 7 | 1996-09-18 | 3 |
| 10309 | 37 | 3 | 1996-09-19 | 1 |
| 10310 | 77 | 8 | 1996-09-20 | 2 |
І вибірка з таблиці "Співробітники":
| EmployeeID | LastName | FirstName | BirthDate | Photo |
|---|---|---|---|---|
| 1 | Davolio | Nancy | 12/8/1968 | EmpID1.pic |
| 2 | Fuller | Andrew | 2/19/1952 | EmpID2.pic |
| 3 | Leverling | Janet | 8/30/1963 | EmpID3.pic |
Наступний оператор SQL поверне всіх співробітників і будь-які замовлення, які вони могли розмістити:
SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Orders.OrderID;Ключове FULL OUTER JOIN слово повертає всі записи, якщо є відповідність у лівих (таблиця1) або правих (таблиця2) записах таблиці.
Порада: FULL OUTER JOIN і FULL JOIN однакові.
FULL OUTER JOIN Синтаксис
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name
WHERE condition;У цьому підручнику ми будемо використовувати відомий приклад бази даних Northwind.
Нижче наведено вибір із таблиці «Клієнти»:
| CustomerID | CustomerName | ContactName | Country |
|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mexico |
І вибірка з таблиці «Замовлення»:
| OrderID | CustomerID | EmployeeID | OrderDate | ShipperID |
|---|---|---|---|---|
| 10308 | 2 | 7 | 1996-09-18 | 3 |
| 10309 | 37 | 3 | 1996-09-19 | 1 |
| 10310 | 77 | 8 | 1996-09-20 | 2 |
Наступний оператор SQL вибирає всіх клієнтів і всі замовлення:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;Вибір із набору результатів може виглядати так:
| CustomerName | OrderID |
|---|---|
| Null | 10309 |
| Null | 10310 |
| Alfreds Futterkiste | Null |
| Ana Trujillo Emparedados y helados | 10308 |
| Antonio Moreno Taquería | Null |
Примітка. Ключове FULL OUTER JOIN слово повертає всі відповідні записи з обох таблиць незалежно від того, відповідає інша таблиця чи ні. Таким чином, якщо є рядки в «Клієнти», які не мають збігів у «Замовленнях», або якщо є рядки в «Замовленнях», які не мають збігів у «Клієнтах», ці рядки також будуть перераховані.
Самооб’єднання є звичайним об’єднанням, але таблиця об’єднується сама з собою.
Синтаксис самооб'єднання
SELECT column_name(s)
FROM table1 T1, table1 T2
WHERE condition;T1 і T2 є різними псевдонімами для однієї таблиці.
У цьому підручнику ми будемо використовувати відомий приклад бази даних Northwind.
Нижче наведено вибір із таблиці «Клієнти»:
| CustomerID | CustomerName | ContactName | Country |
|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mexico |
Наступний оператор SQL відповідає клієнтам з одного міста:
SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City
ORDER BY A.City;Оператор UNION використовується для поєднання набору результатів двох або більше SELECT операторів.
- Кожен
SELECTоператор усерединіUNIONповинен мати однакову кількість стовпців - Стовпці також повинні мати подібні типи даних
- Стовпці в кожній
SELECTзаяві також мають бути в однаковому порядку
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;UNION За замовчуванням оператор вибирає лише різні значення . Щоб дозволити повторювані значення, використовуйте UNION ALL:
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;Демонстраційна база даних У цьому підручнику ми будемо використовувати відомий приклад бази даних Northwind.
Нижче наведено вибір із таблиці «Клієнти»:
| CustomerID | CustomerName | ContactName | Country |
|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mexico |
І вибірка з таблиці «Постачальники»:
| SupplierID | SupplierName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Exotic Liquid | Charlotte Cooper | 49 Gilbert St. | London | EC1 4SD | UK |
| 2 | New Orleans Cajun Delights | Shelley Burke | P.O. Box 78934 | New Orleans | 70117 | USA |
| 3 | Grandma Kelly's Homestead | Regina Murphy | 707 Oxford Rd. | Ann Arbor | 48104 | USA |
Наступний оператор SQL повертає міста (тільки різні значення) з таблиці «Клієнти» та «Постачальники»:
SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;Наступний оператор SQL повертає міста (також повторювані значення) з обох таблиць «Клієнти» та «Постачальники».
SELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City;Наступний оператор SQL повертає німецькі міста (лише різні значення) з обох таблиць «Клієнти» та «Постачальники».
SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;Наступний оператор SQL повертає німецькі міста (також повторювані значення) з таблиці «Клієнти» та «Постачальники»:
SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION ALL
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;Наступний оператор SQL містить список усіх клієнтів і постачальників:
SELECT 'Customer' AS Type, ContactName, City, Country
FROM Customers
UNION
SELECT 'Supplier', ContactName, City, Country
FROM Suppliers;Інструкція GROUP BY групує рядки з однаковими значеннями в підсумкові рядки, наприклад «знайти кількість клієнтів у кожній країні».
Оператор GROUP BYчасто використовується з агрегатними функціями ( COUNT(), MAX(), MIN(), SUM(), AVG()) для групування набору результатів за одним або кількома стовпцями.
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
ORDER BY column_name(s);Нижче наведено вибірку з таблиці «Клієнти» у прикладі бази даних Northwind:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
У наступному операторі SQL перераховано кількість клієнтів у кожній країні:
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country;У наведеному нижче операторі SQL перераховано кількість клієнтів у кожній країні, відсортованих від старшого до нижчого:
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
ORDER BY COUNT(CustomerID) DESC;Нижче наведено вибірку з таблиці «Клієнти» у прикладі бази даних Northwind:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
У наступному операторі SQL перераховано кількість клієнтів у кожній країні:
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country;У наведеному нижче операторі SQL перераховано кількість клієнтів у кожній країні, відсортованих від старшого до нижчого:
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
ORDER BY COUNT(CustomerID) DESC;Нижче наведено вибірку з таблиці «Замовлення» у прикладі бази даних Northwind:
| OrderID | CustomerID | EmployeeID | OrderDate | ShipperID |
|---|---|---|---|---|
| 10248 | 90 | 5 | 1996-07-04 | 3 |
| 10249 | 81 | 6 | 1996-07-05 | 1 |
| 10250 | 34 | 4 | 1996-07-08 | 2 |
І вибірка з таблиці "Важдивідправники":
| ShipperID | ShipperName |
|---|---|
| 1 | Speedy Express |
| 2 | United Package |
| 3 | Federal Shipping |
У наведеному нижче операторі SQL перераховано кількість замовлень, надісланих кожним відправником:
SELECT Shippers.ShipperName, COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders
LEFT JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID
GROUP BY ShipperName;Речення HAVING було додано до SQL, оскільки WHERE ключове слово не можна використовувати з агрегатними функціями.
HAVING Синтаксис
SELECT column_name(s)
FROM table_name
WHERE condition
GROUP BY column_name(s)
HAVING condition
ORDER BY column_name(s);Нижче наведено вибірку з таблиці «Клієнти» у прикладі бази даних Northwind:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
У наступному операторі SQL перераховано кількість клієнтів у кожній країні. Включіть лише країни, у яких більше ніж 5 клієнтів:
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;У наведеному нижче операторі SQL перераховано кількість клієнтів у кожній країні, відсортованих від старшого до нижчого (включайте лише країни, де більше ніж 5 клієнтів):
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5
ORDER BY COUNT(CustomerID) DESC;Нижче наведено вибірку з таблиці «Замовлення» у прикладі бази даних Northwind:
| OrderID | CustomerID | EmployeeID | OrderDate | ShipperID |
|---|---|---|---|---|
| 10248 | 90 | 5 | 1996-07-04 | 3 |
| 10249 | 81 | 6 | 1996-07-05 | 1 |
| 10250 | 34 | 4 | 1996-07-08 | 2 |
І вибірка з таблиці "Співробітники":
У наведеному нижче операторі SQL перераховано співробітників, які зареєстрували понад 10 замовлень:
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM (Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID)
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 10;Наступний оператор SQL перераховує, якщо співробітники "Davolio" або "Fuller" зареєстрували більше 25 замовлень:
SELECT Employees.LastName, COUNT(Orders.OrderID) AS NumberOfOrders
FROM Orders
INNER JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
WHERE LastName = 'Davolio' OR LastName = 'Fuller'
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 25;
Оператор EXISTS використовується для перевірки існування будь-якого запису в підзапиті.
Оператор EXISTS повертає TRUE, якщо підзапит повертає один або більше записів.
EXISTS Синтаксис
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);Нижче наведено вибірку з таблиці «Продукти» у прикладі бази даних Northwind:
| ProductID | ProductName | SupplierID | CategoryID | Unit | Price |
|---|---|---|---|---|---|
| 1 | Chais | 1 | 1 | 10 boxes x 20 bags | 18 |
| 2 | Chang | 1 | 1 | 24 - 12 oz bottles | 19 |
| 3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml bottles | 10 |
| 4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6 oz jars | 22 |
| 5 | Chef Anton's Gumbo Mix | 2 | 2 | 36 boxes | 21.35 |
І вибірка з таблиці «Постачальники»:
| SupplierID | SupplierName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Exotic Liquid | Charlotte Cooper | 49 Gilbert St. | London | EC1 4SD | UK |
| 2 | New Orleans Cajun Delights | Shelley Burke | P.O. Box 78934 | New Orleans | 70117 | USA |
| 3 | Grandma Kelly's Homestead | Regina Murphy | 707 Oxford Rd. | Ann Arbor | 48104 | USA |
| 4 | Tokyo Traders | Yoshi Nagase | 9-8 Sekimai Musashino-shi | Tokyo | 100 | Japan |
Наступний оператор SQL повертає TRUE і містить список постачальників із ціною продукту менше 20:
SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.supplierID AND Price < 20);Наступний оператор SQL повертає TRUE і містить список постачальників із ціною продукту, що дорівнює 22:
SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.supplierID AND Price = 22);Оператори ANYand ALLдозволяють виконувати порівняння між значеннями одного стовпця та діапазоном інших значень.
Оператор ANY:
- у результаті повертає логічне значення
- повертає TRUE, якщо БУДЬ-ЯКЕ зі значень підзапиту відповідає умові
ANY означає, що умова буде істинною, якщо операція буде істинною для будь-якого зі значень у діапазоні.
SELECT column_name(s)
FROM table_name
WHERE column_name operator ANY
(SELECT column_name
FROM table_name
WHERE condition);Оператор ALL:
- у результаті повертає логічне значення
- повертає TRUE, якщо ВСІ значення підзапиту відповідають умові
- використовується з SELECTі WHEREоператорамиHAVING
ALL означає, що умова буде істинною, лише якщо операція буде істинною для всіх значень у діапазоні.
SELECT ALL column_name(s)
FROM table_name
WHERE condition;SELECT column_name(s)
FROM table_name
WHERE column_name operator ALL
(SELECT column_name
FROM table_name
WHERE condition);Нижче наведено вибірку з таблиці «Продукти» у прикладі бази даних Northwind:
| ProductID | ProductName | SupplierID | CategoryID | Unit | Price |
|---|---|---|---|---|---|
| 1 | Chais | 1 | 1 | 10 boxes x 20 bags | 18 |
| 2 | Chang | 1 | 1 | 24 - 12 oz bottles | 19 |
| 3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml bottles | 10 |
| 4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6 oz jars | 22 |
| 5 | Chef Anton's Gumbo Mix | 2 | 2 | 36 boxes | 21.35 |
| 6 | Grandma's Boysenberry Spread | 3 | 2 | 12 - 8 oz jars | 25 |
| 7 | Uncle Bob's Organic Dried Pears | 3 | 7 | 12 - 1 lb pkgs. | 30 |
| 8 | Northwoods Cranberry Sauce | 3 | 2 | 12 - 12 oz jars | 40 |
| 9 | Mishi Kobe Niku | 4 | 6 | 18 - 500 g pkgs. | 97 |
І вибір із таблиці "Деталі замовлення" :
| OrderDetailID | OrderID | ProductID | Quantity |
|---|---|---|---|
| 1 | 10248 | 11 | 12 |
| 2 | 10248 | 42 | 10 |
| 3 | 10248 | 72 | 5 |
| 4 | 10249 | 14 | 9 |
| 5 | 10249 | 51 | 40 |
| 6 | 10250 | 41 | 10 |
| 7 | 10250 | 51 | 35 |
| 8 | 10250 | 65 | 15 |
| 9 | 10251 | 22 | 6 |
| 10 | 10251 | 57 | 15 |
Наступний оператор SQL перераховує ProductName, якщо він знаходить БУДЬ-ЯКИЙ запис у таблиці OrderDetails із значенням Quantity, рівним 10 (це поверне значення TRUE, оскільки стовпець Quantity має деякі значення 10):
SELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10);Наступний оператор SQL перераховує ProductName, якщо він знаходить БУДЬ-ЯКИЙ запис у таблиці OrderDetails із кількістю, більшою за 99 (це поверне TRUE, оскільки стовпець Quantity містить деякі значення, більші за 99):
SELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 99);Наступний оператор SQL перераховує ProductName, якщо він знаходить БУДЬ-ЯКИЙ запис у таблиці OrderDetails із кількістю, більшою за 1000 (це поверне значення FALSE, оскільки стовпець Quantity не містить значень, більших за 1000):
SELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity > 1000);Наступний оператор SQL перераховує ВСІ назви продуктів:
SELECT ALL ProductName
FROM Products
WHERE TRUE;Оператор SELECT INTO копіює дані з однієї таблиці в нову таблицю.
Скопіюйте всі стовпці в нову таблицю:
SELECT *
INTO newtable [IN externaldb]
FROM oldtable
WHERE condition;Скопіюйте лише деякі стовпці в нову таблицю:
SELECT column1, column2, column3, ...
INTO newtable [IN externaldb]
FROM oldtable
WHERE condition;Нова таблиця буде створена з назвами стовпців і типами, як визначено в старій таблиці. Ви можете створити нові назви стовпців за допомогою AS пропозиції.
Наступний оператор SQL створює резервну копію клієнтів:
SELECT * INTO CustomersBackup2017
FROM Customers;Наступний оператор SQL використовує IN пункт для копіювання таблиці в нову таблицю в іншій базі даних:
SELECT * INTO CustomersBackup2017 IN 'Backup.mdb'
FROM Customers;Наступний оператор SQL копіює лише кілька стовпців у нову таблицю:
SELECT CustomerName, ContactName INTO CustomersBackup2017
FROM Customers;Наступний оператор SQL копіює лише німецьких клієнтів у нову таблицю:
SELECT * INTO CustomersGermany
FROM Customers
WHERE Country = 'Germany';Наступний оператор SQL копіює дані з кількох таблиць у нову таблицю:
SELECT Customers.CustomerName, Orders.OrderID
INTO CustomersOrderBackup2017
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;Порада: SELECT INTO також можна використовувати для створення нової порожньої таблиці за допомогою іншої схеми. Просто додайте WHEREпункт, який змушує запит не повертати дані:
SELECT * INTO newtable
FROM oldtable
WHERE 1 = 0;Оператор INSERT INTO SELECT копіює дані з однієї таблиці та вставляє їх в іншу таблицю.
Інструкція INSERT INTO SELECT вимагає, щоб типи даних у вихідній і цільовій таблицях збігалися.
Скопіюйте всі стовпці з однієї таблиці в іншу:
INSERT INTO table2
SELECT * FROM table1
WHERE condition;Скопіюйте лише деякі стовпці з однієї таблиці в іншу:
INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition;У цьому підручнику ми будемо використовувати відомий приклад бази даних Northwind.
Нижче наведено вибір із таблиці «Клієнти»:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
І вибірка з таблиці «Постачальники»:
| SupplierID | SupplierName | ContactName | Address | City | Postal Code | Country |
|---|---|---|---|---|---|---|
| 1 | Exotic Liquid | Charlotte Cooper | 49 Gilbert St. | Londona | EC1 4SD | UK |
| 2 | New Orleans Cajun Delights | Shelley Burke | P.O. Box 78934 | New Orleans | 70117 | USA |
| 3 | Grandma Kelly's Homestead | Regina Murphy | 707 Oxford Rd. | Ann Arbor | 48104 | USA |
Скопіюйте «Постачальники» в «Клієнти» (колонки, які не заповнені даними, будуть містити NULL):
INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers;Скопіюйте «Постачальники» в «Клієнти» (заповніть усі стовпці):
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
SELECT SupplierName, ContactName, Address, City, PostalCode, Country FROM Suppliers;Скопіюйте лише німецьких постачальників у «Клієнти»:
INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers
WHERE Country='Germany';Вираз CASE проходить через умови та повертає значення, коли виконується перша умова (як оператор if-then-else). Отже, як тільки умова виконується, вона припинить читання та поверне результат. Якщо жодна умова не виконується, повертається значення в ELSE пропозиції.
Якщо частина відсутня ELSE і умови не виконуються, повертається NULL.
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN conditionN THEN resultN
ELSE result
END;Нижче наведено вибір із таблиці «OrderDetails» у прикладі бази даних Northwind:
| OrderDetailID | OrderID | ProductID | Quantity |
|---|---|---|---|
| 1 | 10248 | 11 | 12 |
| 2 | 10248 | 42 | 10 |
| 3 | 10248 | 72 | 5 |
| 4 | 10249 | 14 | 9 |
| 5 | 10249 | 51 | 40 |
Наступний SQL перевіряє умови та повертає значення, коли виконується перша умова:
SELECT OrderID, Quantity,
CASE
WHEN Quantity > 30 THEN 'The quantity is greater than 30'
WHEN Quantity = 30 THEN 'The quantity is 30'
ELSE 'The quantity is under 30'
END AS QuantityText
FROM OrderDetails;Наступний SQL упорядкує клієнтів за містом. Однак, якщо місто дорівнює NULL, упорядкуйте за країною:
SELECT CustomerName, City, Country
FROM Customers
ORDER BY
(CASE
WHEN City IS NULL THEN Country
ELSE City
END);Подивіться на наступну таблицю «Продукти»:
| P_Id | ProductName | UnitPrice | UnitsInStock | UnitsOnOrder |
|---|---|---|---|---|
| 1 | Jarlsberg | 10.45 | 16 | 15 |
| 2 | Mascarpone | 32.56 | 23 | |
| 3 | Gorgonzola | 15.67 | 9 | 20 |
Припустімо, що стовпець "UnitsOnOrder" необов'язковий і може містити значення NULL.
Подивіться на наступний оператор SELECT:
SELECT ProductName, UnitPrice * (UnitsInStock + UnitsOnOrder)
FROM Products;У прикладі вище, якщо будь-яке зі значень "UnitsOnOrder" дорівнює NULL, результат буде NULL.
Функція MySQL IFNULL() дозволяє повертати альтернативне значення, якщо вираз дорівнює NULL:
SELECT ProductName, UnitPrice * (UnitsInStock + IFNULL(UnitsOnOrder, 0))
FROM Products;або ми можемо скористатися цією функцією: COALESCE()
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products;Функція SQL Server ISNULL() дозволяє повертати альтернативне значення, коли вираз має значення NULL:
SELECT ProductName, UnitPrice * (UnitsInStock + ISNULL(UnitsOnOrder, 0))
FROM Products;або ми можемо скористатися COALESCE() цією функцією:
SELECT ProductName, UnitPrice * (UnitsInStock + COALESCE(UnitsOnOrder, 0))
FROM Products;Функція MS Access IsNull() повертає TRUE (-1), якщо вираз має нульове значення, інакше FALSE (0):
SELECT ProductName, UnitPrice * (UnitsInStock + IIF(IsNull(UnitsOnOrder), 0, UnitsOnOrder))
FROM Products;Збережена процедура — це підготовлений код SQL, який можна зберегти, щоб код можна було використовувати знову і знову.
Отже, якщо у вас є SQL-запит, який ви пишете знову і знову, збережіть його як збережену процедуру, а потім просто викличте її для виконання.
Ви також можете передати параметри збереженій процедурі, щоб збережена процедура могла діяти на основі переданих значень параметра.
CREATE PROCEDURE procedure_name
AS
sql_statement
GO;EXEC procedure_name;Нижче наведено вибірку з таблиці «Клієнти» у прикладі бази даних Northwind:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Наступний оператор SQL створює збережену процедуру під назвою «SelectAllCustomers», яка вибирає всі записи з таблиці «Клієнти»:
CREATE PROCEDURE SelectAllCustomers
AS
SELECT * FROM Customers
GO;Виконайте наведену вище збережену процедуру таким чином:
EXEC SelectAllCustomers;Наступний оператор SQL створює збережену процедуру, яка вибирає клієнтів із певного міста з таблиці «Клієнти»:
CREATE PROCEDURE SelectAllCustomers @City nvarchar(30)
AS
SELECT * FROM Customers WHERE City = @City
GO;Виконайте наведену вище збережену процедуру таким чином:
EXEC SelectAllCustomers @City = 'London';Налаштувати кілька параметрів дуже просто. Просто перерахуйте кожен параметр і тип даних, розділивши їх комою, як показано нижче.
Наступний оператор SQL створює збережену процедуру, яка вибирає клієнтів із певного міста з певним поштовим індексом із таблиці «Клієнти»:
CREATE PROCEDURE SelectAllCustomers @City nvarchar(30), @PostalCode nvarchar(10)
AS
SELECT * FROM Customers WHERE City = @City AND PostalCode = @PostalCode
GO;Виконайте наведену вище збережену процедуру таким чином:
EXEC SelectAllCustomers @City = 'London', @PostalCode = 'WA1 1DP';Коментарі використовуються для пояснення розділів інструкцій SQL або для запобігання виконанню інструкцій SQL.
Примітка. Коментарі не підтримуються в базах даних Microsoft Access!
Однорядкові коментарі починаються з --.
Будь-який текст між -- і кінцем рядка буде проігноровано (не буде виконано).
У наступному прикладі як пояснення використовується однорядковий коментар:
-- Select all:
SELECT * FROM Customers;У наступному прикладі використовується однорядковий коментар, щоб ігнорувати кінець рядка:
SELECT * FROM Customers -- WHERE City='Berlin';У наступному прикладі використовується однорядковий коментар, щоб ігнорувати оператор:
-- SELECT * FROM Customers;
SELECT * FROM Products;Багаторядкові коментарі
Багаторядкові коментарі починаються з /*і закінчуються на */.
Будь-який текст між /* і */ ігноруватиметься.
У наступному прикладі використовується багаторядковий коментар як пояснення:
/*Select all the columns
of all the records
in the Customers table:*/
SELECT * FROM Customers;У наступному прикладі використовується багаторядковий коментар, щоб ігнорувати багато тверджень:
/*SELECT * FROM Customers;
SELECT * FROM Products;
SELECT * FROM Orders;
SELECT * FROM Categories;*/
SELECT * FROM Suppliers;Щоб проігнорувати лише частину оператора, також використовуйте коментар /* */.
У наступному прикладі використовується коментар, щоб ігнорувати частину рядка:
SELECT CustomerName, /*City,*/ Country FROM Customers;| Operator | Description | Example |
|---|---|---|
| + | Add | 3 + 2 = 5 |
| - | Subtract | 5 - 2 = 3 |
| * | Multiply | 2 * 3 = 6 |
| / | Divide | 10 / 2 = 5 |
| % | Modulo | 10 % 3 = 1 |
| Operator | Description |
|---|---|
| & | Bitwise AND |
| | | Bitwise OR |
| ^ | Bitwise exclusive OR |
| Operator | Description |
|---|---|
| = | Equal to |
| > | Greater than |
| < | Less than |
| >= | Greater than or equal to |
| <= | Less than or equal to |
| <> | Not equal to |
Складені оператори SQL:
| Operator | Description |
|---|---|
| += | Add equals |
| -= | Subtract equals |
| *= | Multiply equals |
| /= | Divide equals |
| %= | Modulo equals |
| &= | Bitwise AND equals |
| ^-= | Bitwise exclusive equals |
| |*= | Bitwise OR equals |
Логічні оператори SQL:
| Operator | Description |
|---|---|
| ALL | TRUE if all of the subquery values meet the condition |
| AND | TRUE if all the conditions separated by AND is TRUE |
| ANY | TRUE if any of the subquery values meet the condition |
| BETWEEN | TRUE if the operand is within the range of comparisons |
| EXISTS | TRUE if the subquery returns one or more records |
| IN | TRUE if the operand is equal to one of a list of expressions |
| LIKE | TRUE if the operand matches a pattern |
| NOT | Displays a record if the condition(s) is NOT TRUE |
| OR | TRUE if any of the conditions separated by OR is TRUE |
| SOME | TRUE if any of the subquery values meet the condition |







