У цьому розділі ми познайомимося з найбільш часто вживаним оператором SQL — оператором вибору SELECT.Цей оператор повертає одне чи безліч значень, що є значеннями певних полів записів, які задовольняють заданій умові й упорядкованих за заданим критерієм.
Одна з форм оператора SELECT має синтаксис:
SELECT < список імен полів > FROM < таблиця >
WHERE < умова вибору > ORDER BY < список імен полів >;
Елементи оператора WHEREі ORDER BYне є обов'язковими. Елемент WHERE визначає умову добору записів: відбираються тільки ті, для яких умова виконується. Елемент ORDER BY визначає впорядкування записів, що повертаються.
< таблиця > — це та таблиця бази даних, з якої здійснюється вибір, наприклад, Pers.
Почнемо докладний розгляд даного оператора зі списку полів після ключового слова SELECT, що містить імена тих полів таблиці, що будуть повернуті. Імена розділяються комами. Наприклад, оператор
SELECT Fam, Nam, Par, Year_b FROM Pers
указує, що варто повернути поля Fam, Nam, Par і Year_b з таблиці Pers.
Якщо вказати замість списку полів символ «*» — це буде означати, що потрібно повернути всі поля. Наприклад, оператор
SELECT * FROM Рers
означає вибір усіх полів.
Бухгалтерія Іванов Іван Іванович 1950 ч
2 Цех1 Петров Петро Петрович 1961 ч
... ... ... ... ... ... ...
У списку імен полів можуть бути не тільки самі поля, але і будь-які вирази від них з арифметичними операціями +, - , *, /. Після виразу може записуватися псевдонім виразу у формі: AS <псевдонім >. Як псевдонім може фігурувати будь-який ідентифікатор, на який потім можна буде при необхідності посилатися. Зазначений псевдонім буде при відображенні результатів фігурувати в заголовку таблиці.
Наведемо приклад використання виразу:
SELECT Fam, Nam, (2002-Year_b) AS Age FROM Pers
Цей оператор створює поле Age, що обчислюється по формулі (2002-Year_b).
При роботі з базами даних InterBase використання російських псевдонімів неможливо.
У виразах для полів можуть використовуватися строкові константи й операція «||», що означає зчеплення рядків. Наприклад, оператор
Якщо бажано в подібному вигляді видавати значення полів, що містять не символи, а, наприклад, числа, то можна скористатися функцією Cast,що приводить поле до зазначеного в ній типу. Наприклад, в операторі
SELECT "Відділ: " || Dep, "Прізвище: " || Fam,
"р.н.: " || Cast(Year_b AS CHAR(4)) FROM Pers
функція Cast перетворить значення числового поля Year_bу рядок з чотирьох символів. Результат буде видаватися рядками виду:
Відділ: Бухгалтерія Прізвище: Іванов р.н.: 1950
Тепер розглянемо форму представлення умови вибору, що задається після ключового слова WHERE.Ця умова визначає критерій, за яким відбираються записи. Оператор SELECTвідбирає тільки ті записи, у яких задана умова істинна. Умова може включати імена полів (крім полів, що обчислюються,), константи, логічні вирази, що містять арифметичні операції, логічні операціїand, or, not і операції відношення:
= дорівнює;
> більше;
>= більше чи дорівнює;
< менше;
<= менше чи дорівнює;
!= або <> не дорівнює;
LIKEнаявність заданої послідовності символів;
between... andдіапазон значень;
in відповідність елементу множини;
Перші шість операцій очевидні. Наприклад, оператор
SELECT Fam FROM Pers WHERE Sех='ж' and Year_b > 1960
відбере записи, що стосуються жінок, що народились після 1960 року.
Операція LIKE має синтаксис:
< поле > LIKE ' < послідовність символів > '
Ця операція застосовна до полів типу рядків і повертає true,якщо в рядку зустрівся фрагмент, заданий в операції як - <послідовність символів>.Заданим символам може передувати і їх може завершувати символ відсотка «%», що означає — будь-яка кількість будь-яких символів. Якщо символ відсотка не зазначений, то задана послідовність символів повинна відповідати тільки цілому слову. Наприклад, умова
Fam LIKE ' A% '
означає, що будуть відібрані всі записи, у яких прізвище починається з великої російської літери «А» (операція LIKEрозрізняє малі і великі літери). Умові
Fam LIKE ' Іванов% '
будуть задовольняти прізвища «Іванов» і «Іванова», а умові
Fam LIKE ' % ван % '
крім цих прізвищ буде задовольняти, наприклад, прізвище «Іванников».
Операція between... andмає синтаксис:
< поле > between <значення > and < значення >
і задає для зазначеного поля діапазон значень, що відбираються. Наприклад, оператор
SELECT Fam, Year_b FROM Pers
WHERE Year_b BETWEEN 1960 AND 1970
відбере записи, що містять співробітників, що народилися у заданому діапазоні часу.
Операція In має синтаксис:
< поле > in (< множина >)
і відбирає записи, у яких значення зазначеного поля є одним з елементів зазначеної множини. Наприклад, оператор
SELECT Fam, Year__b FROM Pers
WHERE Fam IN (' Іванов ', ' Петров ', ' Сидоров')
відбере записи співробітників із заданими прізвищами, а оператор
SELECT Fam, Year_b FROM Pers WHERE Year_b IN ( 1950 , 1960 )
відбере записи співробітників з зазначеними роками народження.
Елемент оператора SELECT, що починається з ключових слів ORDER BY, визначає впорядкування (сортування) записів. Після цих ключових слів вказується список полів, що визначають сортування. Можна вказувати тільки поля, що фігурують у списку відібраних (після ключового слова SELECT).
Якщо в списку сортування зазначено тільки одне поле, то сортування робиться за замовчуванням у порядку зростання значень цього поля. Наприклад, оператор
SELECT Dep, Fam, Year_b FROM Pers ORDER BY Year_b
задає впорядкування значень, що повертаються, за зростанням року народження. Якщо бажано розташовувати результати по убуванню значень, то після імені поля додається ключове слово DESC:
SELECT Dep, Fam, Year_b FROM Pers ORDER BY Year_b DESC
Якщо в списку після ORDER BYперелічується кілька полів, то перше з них — головне і сортування проводиться насамперед за значеннями цього поля. Записи, що мають однакове значення першого поля, упорядковуються за значеннями другого поля і т.д. Наприклад, оператор
SELECT Dep, Fam, Year_b FROM Pers ORDER BY Dep, Fam
сортує записи насамперед по відділах (значенням поля Dep), а усередині кожного відділу — за алфавітом. Оператор
SELECT Dep, Fam, Year_b, Sex FROM Pers ORDER BY Dep, Sex, Fam
сортує записи по відділах, статі й алфавіту.
Після оператора SELECT можуть ставиться ключові слова DISTINCT(унікальний) чи ALL. Перше з них означає, що в результуючий набір даних не включаються записи, що повторюються, тобто ті записи, у яких збігаються значення полів, перерахованих у списку оператора SELECT. Ключове слово ALLозначає включення всіх записів. Наведемо приклад використання DISTINCT. Оператор SELECT DISTINCT Dep FROM Pers
видасть список підрозділів, у яких працюють співробітники.