SELECT — оператор мови SQL, котрий повертає рядки з однієї чи багатьох таблиць. Повний синтаксис оператора SELECT є складним, проте його можна описати так:
SELECT список_вибірки [ INTO нова_таблиця ] FROM таблиця [ WHERE умови_пошуку ] [ GROUP BY умова_групування ] [ HAVING умови_пошуку ] [ ORDER BY умова_сортування [ ASC | DESC ] ]
Повертає нуль або більше рядків з однієї або більше таблиць, тимчасових таблиць, або ж представлень бази даних. У більшості застосунків, SELECT — найчастіша команда Data Manipulation Language (DML). Оскільки, SQL не є процедурною мовою, запит SELECT описує кінцеві дані, однак, не вказує, які саме операції слід виконати для отримання цих даних: завдання покладається на систему керування базами даних, яка здатна самостійно оптимізовувати необхідні для отримання результату операції.
Ключові слова, пов'язані із запитом SELECT:
- FROM — оператор мови SQL, котрий вживається із оператором SELECT, і вказує, з якої таблиці провадиться вибірка даних.
- WHERE вказує, які рядки слід вибрати.
- GROUP BY гуртує рядки, що мають спільну властивість таким чином, щоб функція агрегації могла бути застосована до кожної групи.
- HAVING вибирає з груп означених оператором GROUP BY.
- ORDER BY вказує порядок повернення рядків.
Приклади
Таблиця «T» | Запит | Результат | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| SELECT * FROM T; |
| ||||||||||||
| SELECT C1 FROM T; |
| ||||||||||||
| SELECT * FROM T WHERE C1 = 1; |
| ||||||||||||
| SELECT * FROM T ORDER BY C1 DESC; |
|
В даній таблиці «Т», при запиті
SELECT * FROM T;
результатом будуть показані всі елементи всіх рядків таблиці. При запиті
SELECT C1 FROM T;
результатом буде показаний стовпчик С1 та всі рядки в ньому. Термінами реляційної алгебри можна сказати, що була виконана проєкція. Результатом на запит
SELECT * FROM T WHERE C1 = 1;
будуть показані всі елементи всіх рядків де стовпчик C1 має значення 1. Термінами реляційної алгебри можна сказати, що була виконана вибірка так як присутнє ключове слово WHERE. Останній запит
SELECT * FROM T ORDER BY C1 DESC;
покаже в результаті ті ж самі рядки що й перший запит, але результат буде відсортовано в зворотному порядку (Z-A), тому що було використане ключове слово ORDER BY з полем С1 як сортуванням.
Формування таблиці на льоту:
SELECT * FROM ( SELECT 0 as id UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 )
Обмеження кількості отриманих рядків
Згідно з ISO SQL:2003 кількість отриманих даних може бути обмежена за допомогою:
- курсорів, або
- введенням віконних функцій в оператор SELECT
Віконна функція ROW_NUMBER()
Існують різні віконні функції. ROW_NUMBER() OVER
може бути використана для простого обмеження кількості отриманих рядків. Наприклад, для повернення не більше 10 рядків:
SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber, columns FROM tablename ) AS foo WHERE rownumber <= 10
ROW_NUMBER може бути недетермінованим: якщо key не унікальний, кожен раз при виконанні запиту можливе присвоєння різних номерів рядкам, у яких key збігається. Коли key унікальний, кожен рядок буде завжди отримувати унікальний номер рядка.
Віконна функція RANK()
Функція RANK() OVER
працює майже так само, як ROW_NUMBER
, але може повернути більш ніж n рядків при певних умовах. Наприклад, для отримання топ-10 наймолодших людей:
SELECT * FROM ( SELECT RANK() OVER (ORDER BY age ASC) AS ranking, person_id, person_name, age FROM person ) AS foo WHERE ranking <= 10
Цей код може повернути більш ніж 10 рядків. Наприклад, якщо є дві людини з однаковим віком, то він поверне 11 рядків.
Нестандартний синтаксис
Не всі СКБД підтримують вище вказані віконні функції. При цьому більшість мають не стандартний синтаксис для рішення тих самих задач. Нижче представлені варіанти простого обмеження вибірки для різних СКБД:
Виробник/СКБД | Синтаксис обмеження |
---|---|
DB2 | (Підтримує стандарт починаючи з DB2 Version 6) |
Firebird | SELECT FIRST 10 * FROM T |
Informix | SELECT FIRST 10 * FROM T |
Interbase | SELECT * FROM T ROWS 10 |
Microsoft | (Підтримує стандарт починаючи з SQL Server 2005) |
Також SELECT TOP 10 [PERCENT] * FROM T ORDER BY col | |
MySQL | SELECT * FROM T LIMIT 10 |
SQLite | SELECT * FROM T LIMIT 10 |
PostgreSQL | SELECT * FROM T LIMIT 10 |
Oracle | (Підтримує стандарт починаючи з Oracle8i) |
Також SELECT * from T WHERE ROWNUM <= 10 |
Посилання
- Windowed Tables and Window function in SQL [ 1 червня 2010 у Wayback Machine.], Stefan Deßloch
- Oracle SELECT Syntax. [ 30 березня 2009 у Wayback Machine.]
- Firebird SELECT Syntax. [ 23 березня 2021 у Wayback Machine.]
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
SELECT operator movi SQL kotrij povertaye ryadki z odniyeyi chi bagatoh tablic Povnij sintaksis operatora SELECT ye skladnim prote jogo mozhna opisati tak SELECT spisok vibirki INTO nova tablicya FROM tablicya WHERE umovi poshuku GROUP BY umova grupuvannya HAVING umovi poshuku ORDER BY umova sortuvannya ASC DESC Povertaye nul abo bilshe ryadkiv z odniyeyi abo bilshe tablic timchasovih tablic abo zh predstavlen bazi danih U bilshosti zastosunkiv SELECT najchastisha komanda Data Manipulation Language DML Oskilki SQL ne ye procedurnoyu movoyu zapit SELECT opisuye kincevi dani odnak ne vkazuye yaki same operaciyi slid vikonati dlya otrimannya cih danih zavdannya pokladayetsya na sistemu keruvannya bazami danih yaka zdatna samostijno optimizovuvati neobhidni dlya otrimannya rezultatu operaciyi Klyuchovi slova pov yazani iz zapitom SELECT FROM operator movi SQL kotrij vzhivayetsya iz operatorom SELECT i vkazuye z yakoyi tablici provaditsya vibirka danih WHERE vkazuye yaki ryadki slid vibrati GROUP BY gurtuye ryadki sho mayut spilnu vlastivist takim chinom shob funkciya agregaciyi mogla buti zastosovana do kozhnoyi grupi HAVING vibiraye z grup oznachenih operatorom GROUP BY ORDER BY vkazuye poryadok povernennya ryadkiv PrikladiTablicya T Zapit RezultatC1 C21 a2 b SELECT FROM T C1 C21 a2 bC1 C21 a2 b SELECT C1 FROM T C112C1 C21 a2 b SELECT FROM T WHERE C1 1 C1 C21 aC1 C21 a2 b SELECT FROM T ORDER BY C1 DESC C1 C22 b1 a V danij tablici T pri zapitiSELECT FROM T rezultatom budut pokazani vsi elementi vsih ryadkiv tablici Pri zapitiSELECT C1 FROM T rezultatom bude pokazanij stovpchik S1 ta vsi ryadki v nomu Terminami relyacijnoyi algebri mozhna skazati sho bula vikonana proyekciya Rezultatom na zapitSELECT FROM T WHERE C1 1 budut pokazani vsi elementi vsih ryadkiv de stovpchik C1 maye znachennya 1 Terminami relyacijnoyi algebri mozhna skazati sho bula vikonana vibirka tak yak prisutnye klyuchove slovo WHERE Ostannij zapitSELECT FROM T ORDER BY C1 DESC pokazhe v rezultati ti zh sami ryadki sho j pershij zapit ale rezultat bude vidsortovano v zvorotnomu poryadku Z A tomu sho bulo vikoristane klyuchove slovo ORDER BY z polem S1 yak sortuvannyam Formuvannya tablici na lotu SELECT FROM SELECT 0 as id UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 Obmezhennya kilkosti otrimanih ryadkivZgidno z ISO SQL 2003 kilkist otrimanih danih mozhe buti obmezhena za dopomogoyu kursoriv abo vvedennyam vikonnih funkcij v operator SELECTVikonna funkciya ROW NUMBER Isnuyut rizni vikonni funkciyi ROW NUMBER OVER mozhe buti vikoristana dlya prostogo obmezhennya kilkosti otrimanih ryadkiv Napriklad dlya povernennya ne bilshe 10 ryadkiv SELECT FROM SELECT ROW NUMBER OVER ORDER BY key ASC AS rownumber columns FROM tablename AS foo WHERE rownumber lt 10 ROW NUMBER mozhe buti nedeterminovanim yaksho key ne unikalnij kozhen raz pri vikonanni zapitu mozhlive prisvoyennya riznih nomeriv ryadkam u yakih key zbigayetsya Koli key unikalnij kozhen ryadok bude zavzhdi otrimuvati unikalnij nomer ryadka Vikonna funkciya RANK Funkciya RANK OVER pracyuye majzhe tak samo yak ROW NUMBER ale mozhe povernuti bilsh nizh n ryadkiv pri pevnih umovah Napriklad dlya otrimannya top 10 najmolodshih lyudej SELECT FROM SELECT RANK OVER ORDER BY age ASC AS ranking person id person name age FROM person AS foo WHERE ranking lt 10 Cej kod mozhe povernuti bilsh nizh 10 ryadkiv Napriklad yaksho ye dvi lyudini z odnakovim vikom to vin poverne 11 ryadkiv Nestandartnij sintaksis Ne vsi SKBD pidtrimuyut vishe vkazani vikonni funkciyi Pri comu bilshist mayut ne standartnij sintaksis dlya rishennya tih samih zadach Nizhche predstavleni varianti prostogo obmezhennya vibirki dlya riznih SKBD Virobnik SKBD Sintaksis obmezhennyaDB2 Pidtrimuye standart pochinayuchi z DB2 Version 6 Firebird SELECT b FIRST 10 b FROM TInformix SELECT b FIRST 10 b FROM TInterbase SELECT FROM T b ROWS 10 b Microsoft Pidtrimuye standart pochinayuchi z SQL Server 2005 Takozh SELECT b TOP 10 PERCENT b FROM T ORDER BY colMySQL SELECT FROM T b LIMIT 10 b SQLite SELECT FROM T b LIMIT 10 b PostgreSQL SELECT FROM T b LIMIT 10 b Oracle Pidtrimuye standart pochinayuchi z Oracle8i Takozh SELECT from T b WHERE ROWNUM lt 10 b PosilannyaWindowed Tables and Window function in SQL 1 chervnya 2010 u Wayback Machine Stefan DesslochOracle SELECT Syntax 30 bereznya 2009 u Wayback Machine Firebird SELECT Syntax 23 bereznya 2021 u Wayback Machine