Вибірка даних з таблиці в sql (розділи select, from і where)

розділ SELECT

Цей розділ є обов'язковим і дозволяє:
→ Визначити список вихідних стовпців
Список вихідних стовпців може бути вказаний декількома способами:
• Вказувати державний символ *, що позначає включення в результати запиту всіх колонок запиту в природній послідовності.
• Перерахувати в бажаному порядку тільки потрібні.
Приклад: SELECT * FROM Customer

→ Увімкнути обчислювані стовпці
Як обчислюються стовпців запиту можуть виступати:
• Результати найпростіших арифметичних вирази (+, -, /, * _ або конкатенації рядків (||).
• Результати функцій агрегування COUNT (*) | ([DISTINCT | ALL])

Примітка. У SQL Server додатково можна використовувати оператор% - модуль (цілий залишок від ділення).
→ Увімкнути константи
Як стовпців можуть виступати константи числового і символьного типів.

Примітка. SELECT DISTINCT 'Для', SNum, Comm * 100, '%', SName FROM SalesPeople

→ Перейменувати вихідні стовпчики
Обчислюваним, а також будь-яким іншим стовпцями, при бажанні, можна привласнити унікальне ім'я за допомогою ключового слова AS: AS

Примітка. У SQL SERVER дати нове ім'я колонки можна за допомогою оператора присвоєння =

→ Вказати принцип обробки дублів рядків
DISTINCT - забороняє поява рядків-дублів в вихідному безлічі. Його можна задавати один раз для оператора SELECT. На практика спочатку формується вихідна безліч, упорядковується, а потім з нього видаляються повторювані значення. Зазвичай це займає багато часу і не слід цим зловживати.
ALL (діє за замовчуванням) - забезпечує включення в результати запиту і повторюваних значень

→ Увімкнути агрегатні функції
Функції агрегування (функції над множинами, статистичні або базові) призначені для обчислення деяких значень для заданого безлічі рядків. Використовуються наступні агрегатні функції:
• AVG | SUM (| [DISTINCT]) - підраховує середнє значення | суму від або. можливо без урахування дублів, ігноруючи NULL.
• MIN | MAX () - знаходить максимальне | мінімальне значення.
• COUNT (* [DISTINCT]) - підраховує число рядків у безлічі з урахуванням NULL значень | значень в стовпці, ігноруючи NULL значення, можливо без дублів.

Примітки щодо використання:
• Функції агрегування можна вкладати один в одного.
• Через значень NULL вираз SUM (F1) -SUN (F2)<>Sum (F1-F2)
• Всередині функцій агрегування допустимі вирази AVG (Comm * 100)
• Якщо в результаті запиту не отримано жодного рядка або все значення рівні NULL, то функція COUNT повертає 0, а інші - NULL.
• Функції AVG і SUM можуть застосовуватися тільки для числових типів, даних в Interval, а інші можуть використовуватися для будь-яких типів даних.
• Функція COUNT повертає ціле число (типу Integer), а інші успадковують типи даних оброблюваних значень, внаслідок чого слід стежити за точністю результату функції SUM (з обсягом) і масштабом функції AVG.

Приклади на агрегатні функції:

• SELECT COUNT (*) FROM Customer
• SELECT COUNT (DISTINCT SNum) FROM Orders
• SELECT MAX (Amt + Binc) FROM Orders // Якщо Binc - додаткове числове поле в Orders
• SELECT AVG (Comm * 100) FROM SalesPeople // Вираз всередині функції

→ Особливості промислових серверів
У СУБД Oracle в розділі SELECT можна вказувати додаткові вказівки-підказки (hints) (27 штук), що впливають на вибір типу оптимізатора запитів і його роботу.
SELECT / * + ALL_ROWS * / FROM Orders ... // найкраща продуктивність

У СУБД SQL Server:
[TOP () [PERCENT] [WITH TIES]] - задає кількість або відсоток зчитувальних рядків. При однакових останніх значеннях можливо зчитування всіх таких рядків і загальне число може бути більше зазначеного.

DECLARE @p AS Int
SELECT @ p = 10
SELECT TOP (@p) WITH TIES * FROM Orders

розділ FROM

Цей розділ є обов'язковим і дозволяє:
→ Вказати імена вихідних таблиць
У розділі FROM вказуються імена таблиць і / або уявлень, з яких будуть вилучатись дані. Причому одна і та ж таблиця може кілька разів входити в цей розділ.
Примітка: У СУБД Oracle можна вибирати рядки і зі знімків (Snapshot).

→ Вказати псевдоніми таблиць
Під псевдонімом таблиці розуміється додатковий, зазвичай короткий ідентифікатор, що вказується через пробіл після імені таблиці / уявлення.
Приклад: Customer C

→ Вказати варіант зовнішнього об'єднання таблиць
Якщо в розділі FROM вказано кілька таблиць, то всі вони неявно вважаються зовнішніми з'єднаннями. У стандарті передбачені такі основні види з'єднань таблиць:

1) Перехресне з'єднання
CROSS JOIN - визначаються всі можливі поєднання пар рядків по одній для кожного рядка кожної з поєднуваних таблиць. Еквівалентно картезіанському з'єднанню. Іноді називає декартових твором.

2) Природне з'єднання
[NATURAL] [] JOIN - визначаються тільки ті рядки таблиць А і B, в яких значення стовпців однакові. Називають не зовсім повноцінним еквісоедіненія. Це автоматичне з'єднання за кількома стовпцями з усіма однаковими іменами (join over).

3) З'єднання об'єднанням
UNION JOIN - визначаються тільки ті рядки кожної з таблиць, для яких збіги не були встановлені. Стовпці з іншої таблиці заповнюються значеннями NULL. Відзначимо, що з'єднання UNION і оператор UNIUN - це не одне і те ж. З'єднання протилежно з'єднанню типу INNER.

4) Об'єднання за допомогою предиката
[] JOIN ON - фільтрує рядки. Предикат може містити вкладені запити.

5) Об'єднання за допомогою імен стовпців
[] JOIN USING () - визначає з'єднання тільки за вказаними стовпцями, в той час як NATURAL - автоматично по всіх однойменною.

типи з'єднань

являє собою один з аргументів: INNER | LEFT | RIGHT | FULL [OUTER]>
• INNER - включає рядки, в яких є стовпці з однаковими даними об'єднуються таблиць. Використовується за замовчуванням.
• LEFT [OUTER] - включає всі рядки таблиці А (ліва таблиця) і всі співпадаючі значення з таблиці B. Стовпці незбіжних рядків заповнюється NULL-значеннями.
• RIGHT [OUTER] - включає всі рядки таблиці B (права таблиця) і всі співпадаючі значення таблиці А. зворотний варіант для лівого об'єднання.
• FULL [OUTER] - включає всі рядки обох таблиць. Стовпці співпадаючих рядків заповнені реальними значеннями, а незбіжних рядків - NULL-значеннями.
• OUTER (зовнішній) - уточнююче слово, що означає, що незбіжні рядки з провідною таблиці включаються разом з співпадаючими.

Приклади на зовнішнє об'єднання:

• SELECT * FROM SalesPeople INNER JOIN Customer ON SalesPeople.City = Customer.City
• SELECT * FROM Customer LEFT OUTER JOIN SalesPeople ON SalesPeople.City = Customer.City
• SELECT * FROM Customer FULL OUTER JOIN SalesPeople ON SalesPeople.City = Customer.City

Картезіанські з'єднання і самооб'єднання
• Якщо при включенні декількох таблиць не використовуються ті чи інші варіанти з'єднання таблиць, то такі сполуки називаються картезіанських. Вони використовуються для отримання рядків з двох різних таблиць. Тоді наприклад, при з'єднанні двох таблиць, кожна з яких містить по 20 рядків, підсумкова таблиця буде містити 100 рядків - кожна з рядків однієї таблиці з кожного з рядків іншої таблиці. SELECT * FROM Customer, Orders.
• З'єднання однакових таблиць називають самооб'єднання (self-join).

розділ WHERE

1. Створення внутрішніх з'єднань
Зв'язок між таблицями здійснюють за допомогою операторів порівняння, а в список вихідних стовпців включають кваліфікаційні імена для однойменних стовпців з вихідних таблиць.

Основні види з'єднань:
• еквісоедіненія - це з'єднання таблиць, засновані на рівності. Зв'язок між таблицями за ключовими стовпцями забезпечує довідкову цілісність. Якщо при з'єднанні використовуються первинний і зовнішній ключ то завжди існує відношення «один-ко-многим» (предок / нащадок).

• Тета-з'єднання - це таке з'єднання, коли в якості оператора порівняння застосовується нерівність (<>,> =.

SELECT C.CName, S.SName, S.City FROM SalesPeople S, Customer C WHERE S.City = C.City
SELECT SName, CName FROM SalesPeople, Customer WHERE SName

2. Фільтрація рядків вихідного безлічі
Розділ WHERE дозволяє також визначити. тобто логічне умова, яке може бути або істинним, або хибним. Крім того, одне або обидва порівнюваних значення в предикате можуть бути рівні NULL, тоді результат порівняння може бути дорівнює UNKNOWN. Оператор SELECT витягує тільки ті рядки з таблиць, для яких має значення TRUE, виключаючи рядки, для яких він дорівнює FALSE або UNKNOWN.