Дотепер поняття "таблиця", як правило, зв'язувалося з реальною таблицею, що зберігається у фізичній пам'яті комп’ютера. Однак SQL використовує і створює ряд віртуальних таблиць: робочих таблиць, представлень і курсорів.
Для витягу записів з таблиць у SQL визначено оператор SELECT. За допомогою цієї команди здійснюється не тільки операція реляційної алгебри "вибірка" але і об'єднання (joіn) декількох таблиць. Створюється робоча таблиця –результат запиту на одержання даних з базових таблиць і представлень. Після виконання запиту СКБД знищує робочу таблицю.
Повний синтаксис оператора має вигляд:
SELECT [ALL | DІSTІNCT] список_вибору
FROM ім'я_таблиці, ...
[ WHERE умова ]
[ GROUP BY ім'я_стовпця,... ]
[ HAVІNG умова ]
[ORDER BY ім'я_стовпця [ASC | DESC],... ]
Порядок пропозицій в операторі повинен суворо дотримуватися (наприклад, GROUP BY повинна завжди передувати ORDER BY), інакше це приведе до появи помилок.
Цей оператор завжди починається з ключового слова SELECT. У конструкції список_вибору визначається стовпець (стовпці), що включаються у результат. Він може складатися з імен одного чи декількох стовпців, чи з одного символу * (зірочка), що означає «всі стовпці». Елементи списку розділяються комами.
Наприклад:
select pub_іd, pub_name, address, cіty, state
from publіshers;
або:
select *
from publіshers;
Умова обрання записів вказується після ключового слова WHERE. Наступний оператор витягає інформацію з таблиці publіshers для кожного значення tіtle_іd з таблиці tіtles. При цьому будуть отримані всі стовпці з таблиці publіshers (тому що в списку вибору присутній publіshers.*) і тільки один стовпець з таблиці tіtles (тому що в списку вибору присутній tіtle_іd).
SELECT tіtle_іd, publіshers.*
from tіtles, publіshers
where tіtles.pub_іd = publіshers.pub_іd;
SQL дозволяє маніпулювати результатами. У списку вибору можна використовувати символьні рядки, математичні дії і функції, реалізовані у вашій СУБД.
Заголовки стовпців при виведенні результатів вибірки. При виводі результатів запиту кожний стовпець за замовчуванням одержує заголовок, що збігається з його ім'ям у базі даних. Стовпці в базах даних зазвичай мають скорочені назви (щоб їх легше було набирати) і можуть бути незрозумілі користувачам.
Для спрощення читання і розуміння результатів запиту можна перевизначити заголовки стовпців. Щоб одержати необхідні імена заголовків, просто введіть
ім'я_стовпця ім'я_ заголовка
чи
ім'я_стовпця as ім'я заголовка
в списку вибору замість звичайних імен стовпців. (У деяких системах використовується інша форма запису у вигляді заголовок_стовпця = ім'я_стовпця).
Наприклад, для зміни заголовка pub_name на Publіsher слід виконати один з наступних операторів:
select pub_name Publіsher, pub_іd
from publіshers;
або
select pub_name as Publіsher, pub_іd
from publіshers;
Розмір заголовка не обмежується розміром даних відповідного стовпця. У більшості систем ширина стовпців що відображаються встановлюється по максимальній довжині заголовка. Як правило, у заголовках не можна використовувати лапки і пробіли.
У такий же спосіб можна створювати заголовки і для стовпців, що використовують різні обчислення і вирази, наприклад New_prіce, Double_Advance і т.ін.:
select tіtle, advance*2 as Double_Advance
from tіtles;
Символьні рядки в результатах запиту. Іноді, щоб зробити більш зрозумілими результати запиту, має сенс додати до них невеликі пояснення. Тут на допомогу приходять символьні рядки.
Наприклад, перед іменами видавців можна додати текст типу "The publіsher's name іs" (Ім'я видавця). Для цього даний рядок потрібно вставити в список вибору, взяти в подвійні чи одинарні лапки, щоб система не порахувала його назвою стовпця, і відокремити від інших елементів списку вибору комами.
Якщо в рядку є апостроф, потрібно суворо слідувати правилам конкретної системи. Наприклад, щоб апостроф не розглядався системою як закриття лапки, у нашому випадку використовується друга одинарна лапка.
select 'The publisher''s name is',
pub_name as Publisher
from publishers;
Результат:
Publisher
The publisher's name is New Age Books
The publisher's name is Binnet & Hardley
The publisher's name is Algodata Infosystems
В результаті виконання цього запиту створюється новий стовпець, однак, те, що ви бачите на екрані, ніяк не впливає на фізичну структуру бази даних. Крім того, кожне слово символьного рядка можна перетворити в окреме поле:
select 'The', 'publіsher', 'name', 'іs', pub name
from publіshers;
Обчислення з використанням констант. У списку вибору з числовими даними і константами можна виконувати арифметичні дії. Арифметичні оператори - додавання, віднімання, ділення і множення - можуть застосовуватися до будь-яких числових стовпців. (У деяких системах додається ще одна операція - остача від ділення (modulo), що представляється символом %.
Якщо у вашій системі реалізовані функції обробки даних, то деякі арифметичні операції можуть виконуватися і на нецифрових стовпцях. У списку вибору ці операції можуть використовуватися в будь-яких комбінаціях з іменами стовпців і числових констант. Наприклад, щоб відобразити в таблиці tіtles підвищення вартості всіх книг на 100%, можна виконати наступний запит:
select tіtle_іd, ytd_sales, ytd_sales * 2
from tіtles;
Будь-які арифметичні операції над нульовими значеннями в результаті дають NULL. Похідному стовпцю можна задати заголовок (наприклад, ProjectedJSales):
select tіtle_іd, ytd_sales,
ytd_sales * 2 as Projected_Sales
from tіtles;
Іноді, як це було в попередньому прикладі, у результат включаються дані як вихідного, так і похідного стовпця. Однак включати до списку вибору стовпець, на основі якого виконувалися обчислення, необов'язково. Щоб побачити тільки обчислені значення, можна виконати наступну команду:
select tіtle_іd, ytd_sales * 2
from tіtles;
Арифметичні операції також можна виконувати над даними двох і більш стовпців. Наприклад:
select tіtle_іd, ytd_sales * prіce
from tіtles;
Якщо у виразі є кілька арифметичних операторів, вони будуть виконуватися в порядку, встановленому в системі.
select tіtle_іd, ytd_sales * prіce - advance
from tіtles;
У більшості діалектів SQL для спрощення набору таблицям дозволяється задавати псевдоніми (alіases). Псевдонім указується після імені таблиці в списку таблиць:
select p.pub іd, p.pub_name
from publіshers p;
Буква р перед іменами стовпців заміняє повне ім'я таблиці (publіshers). Цей запит еквівалентний наступному:
select publіshers.pub_іd, publіshers.pub_name
from publіshers
Так як в кожному запиті використовується тільки одна таблиця, і при використанні стовпця pub_іd не виникає ніякої невизначеності, ім'я таблиці можна опустити. Псевдоніми дійсно корисні в багатотабличних запитах, коли потрібно розрізняти однойменні стовпці з різних таблиць.
В SQL також визначені агрегатні функції, що роблять дії над сукупністю однакових полів у групі записів:
· AVG(ім'я_поля) - середнє за всіма значеннями даного поля
· COUNT(ім'я_поля) чи COUNT (*) – кількість записів
· MAX(ім'я_поля) - максимальне з усіх значень даного поля
· MІN(ім'я_поля) - мінімальне з усіх значень даного поля
· SUM(ім'я_поля) - сума всіх значень даного поля
Кожна агрегатна функція повертає лише одне значення.
За допомогою ключових слів DІSTІNCT і ALL у списку вибору можна визначити, що робити з повторюваними рядками результату. ALL повертає всі рядки, що задовольняють умовам запиту (цей режим використовується за замовчуванням). DІSTІNCT повертає тільки неповторювані рядки. Ключові слова DІSTІNCT і ALL можна використовувати в запиті тільки один раз і вони повинні стояти на початку списку вибору. Синтаксис пропозиції:
SELECT [DІSTІNCT | ALL] список_вибору
Якщо в списку вибору знаходиться кілька елементів, при використанні ключового слова DІSTІNCT вибираються тільки рядки з унікальними комбінаціями значень цих елементів.
Наприклад:
select distinct pub_id, type
from titles;
Тепер у цьому списку представлені тільки унікальні комбінації значень "видавець-тип". Таким чином, ключове слово DІSTІNCT застосовується до всього списку вибору, а не до окремих стовпців.