Для формування запитів на вибірку даних в SQL використовується оператор SELECT. Його формат представлений нижче: SELECT [ALL I DISTINCT] selectitemcommalist FROM tablereferencecommalist [WHERE conditional_expression] [GROUP BY column_name_commalist] [HAVING conditionalexpression] [ORDER BY order item commalist] є досить складним оператором, що дозволяє вибирати дані з однієї або декількох таблиць, виконувати угруповання , обробку даних за допомогою агрегатних функцій, формувати вкладені запити і т.д. Вираз SELECT обробляється цілком, а не «порядково», як зазвичай буває в мовах програмування. У кілька узагальненому вигляді схема виконання оператора SELECT виглядає наступним чином:
1) виконується розділ FROM;
2) виконується розділ WHERE (якщо є);
) виконується GROUP BY (якщо є);
4) виконується HAVING (якщо є);
5) виконуються визначення в розділі SELECT:
6) виконується ORDER BY (якщо є).
Почнемо з розгляду обов'язкового розділу SELECT. У ньому вказується список елементів вибірки select-item-commalist, який не повинен бути порожнім. Також може використовуватися ключове слово ALL або DISTINCT. Перше з них вказує, що в результаті запиту можуть бути повторювані рядки, друге - що повторення відкидаються. Наприклад, використовується ключове слово
DISTINCT і є три співпадаючих рядки, тоді в результаті з них залишиться тільки одна. Коли явно нічого не вказано, то мається на увазі ALL.
Розглянемо тепер приклад із завданням імені стовпця і використанням текстової константи в стовпці. Якщо необхідно явно вказати, як стовпець буде називатися в виведених результатах запиту, це можна зробити в списку елементів вибірки в розділі SELECT. Нове ім'я вказується після вихідного назвою стовпчика через про - бел або після необов'язкового ключового слова «as». Нижче наведено приклад, в якому список прізвищ та ініціалів студентів супроводжується підписом «Прізвище та ініціали» .DISTINCT «Прізвище та ініціали» as Label1/FIO FROM Students
Підпис задається за допомогою строкової константи, які в SQL беруться в одинарні лапки. Називатися стовпець з підписом буде Label 1. Результат виконання цього запиту для набору даних з табл. 7.2 представлений в табл. 7.3. Як зазначалося вище, ключове слово «as» в SELECT можна пропустити, але іноді воно дозволяє зробити текст на SQL більш зрозумілим.
Порівняння може проводитися не тільки для чисел, а й для строкових значень (посимвольно), дат і т.д.
Якщо необхідно отримати всі значення з інтервалу, можна використовувати конструкцію BETWEEN ... AND .... Нехай є таблиця Book з інформацією про книги, і в ній цілочисельний стіл - Бец Year, що містить рік видання книги. Отримати всі книги, виданий - ниє з 1990 по 2002 рік включно, можна за допомогою наведено - ного нижче запиту (тому «Year» для MS SQL Server є ключі - вим словом, назва стовпчика знову у квадратних дужках). SELECT * FROM Book (Year) BETWEEN +1990 AND +2002 Аналогічний результат дасть запит * FROM Book [Year] gt;=1 990 AND [Year] lt;=2 002
Якщо навпаки потрібні всі книги, крім виданих у цей період, можна використовувати конструкцію NOT BETWEEN: * FROM Book [Year] NOT BETWEEN 1990 AND 2002
Для наведеного вище прикладу запит SELECT * FROM Results GROUP BY StudID повинен привести до помилки. При використанні GROUP BY, в розділі SELECT можуть бути вказані тільки ті стовпці, але яким вироб - диться угруповання. Інші стовпці можуть зазначатися, якщо вони ви - ступають в якості аргументів а1регатних функцій, сопоставляющих групі значень одне.
Нижче наведені основні агрегатні функції:
- середнє значення: AVG ((DISTINCT | ALL) lt; вираз gt;);
- максимум: МАХ ([DISTINCT | ALL] lt; вираз gt;);
- мінімум: MIN ([DISTINCT I ALL] lt; вираз gt;);
- сума: SUM ([DISTINCT I ALL] lt; вираз gt;);
- кількість: COUNT ((DISTINCT | ALL) lt; вираз gt;) або COUNT (*).
Угрупування може проводитися і по декількох стовпцях: для цього в розділі GROUP BY потрібно перерахувати їх через кому. Крім того, можна групувати строю! за значенням деякої функції від даних у стовпцях. Наприклад, на рис. 7.1. а представлена ??таблиця Device, в якій є стовпець DatePurch типу Date. У стовп - це містят...