SQLite SELECT Query
Вступление
Оператор SELECT используется для создания простого запроса из базы данных или сложного запроса по некоторым критериям. Оператор SELECT не вносит никаких изменений в базу данных.
Оператор запроса или SELECT - это команда, которая дает инструкции базе данных для получения определенной информации из таблицы в ее памяти. Команда SELECT начинается с ключевого слова SELECT, за которым следуют пробел и список столбцов, разделенных запятыми. Символ * может использоваться для выбора всех столбцов таблицы. Имя таблицы следует после ключевого слова FROM и пробела.
Синтаксис:
ВЫБРАТЬ [ВСЕ | DISTINCT] результат [ИЗ таблицы-списка] [ГДЕ expr] [GROUP BY expr-list] [ИМЕЯ expr] [составной выбор] * [ORDER BY sort-expr-list] [LIMIT integer [(OFFSET |,) integer]]
Параметры:
пункт | Операция выполнить | Входное значение |
---|---|---|
ГДЕ | Используется для ограничения | Выражение или условие |
DISTINCT | Используется для ограничения | Список столбцов |
ОТ | присоединяется | Список таблиц |
ГРУППА ПО | Используется для ограничения | Список столбцов |
СОРТИРОВАТЬ ПО | Список столбцов | |
HAVING | Используется для ограничения | Выражение или условие |
ПРЕДЕЛ | Используется для ограничения | Целочисленное значение |
OFFSET | Используется для ограничения | Целочисленное значение |
Вот пример таблицы сотрудников.
Примеры:
Получение всех данных :
Если вы хотите извлечь все строки из таблицы расположений, можно использовать следующий SQL.
SELECT * FROM locations;
Вот результат.
sqlite> SELECT * FROM location; location_id street_address почтовый индекс город state_province country_id ----------- -------------- ----------- ---------- ---- ---------- ---------- 1000 1297 Via Cola 989 Roma IT 1100 93091 Calle de 10934 Венеция IT 1200 2017 Синдзюку- 1689 Токио Токио Префекту JP 1300 9450 Камия-ч 6823 Хиросима JP 1400 2014 Jabberwoc 26192 Саутлейк, Техас, США 1500 2011 Интерьеры 99236 Южная Сан-Калифорния, США 1600 2007 Zagora St 50090 South Brun Нью-Джерси США 1700 2004 Charade R 98199 Сиэтл Вашингтон, США 1800 147 Spadina Av M5V 2L7 Торонто Онтарио, Калифорния 1900 6092 Самшит S YSW 9T2 Уайтхорс Юкон, Калифорния 2000 40-5-12 Laogia 190518 Пекин CN 2100 1298 Vileparle 490231 Бомбей Махараштра IN 2200 12-98 Виктория 2901 Сидней, Новый Южный Уэйл, Австралия 2300 198 Clementi N 540198 Сингапур SG 2400 8204 Артур Ст Лондон, Великобритания 2500 Магдален Центр OX9 9ZB Оксфорд Оксфорд, Великобритания 2600 9702 Chester R 9629850293 Стретфорд Манчестер, Великобритания 2700 Schwanthalerst 80925 Мюнхен Бавария DE 2800 Rua Frei Canec 01307-002 Сан-Пауло Сан-Пауло, BR 2900 20 Rue des Cor 1730 Женева Женева CH 3000 Муртенштрассе 3095 Берн BE CH 3100 Pieter Breughe 3029SK Утрехт Утрехт Н.Л. 3200 Мариано Эскобе 11932 Мексика Cit Distrito Feder MX
Здесь, в приведенном выше примере, * были использованы для обозначения ВСЕХ записей из таблицы местоположений.
если предложение FROM не используется:
Выражение может быть выполнено только:
sqlite> ВЫБРАТЬ 6 + 15; 6 + 15 ---------- 21 или же sqlite> SELECT 5 * 15; 5 * 15 ---------- 75 или же sqlite> ВЫБРАТЬ 5 + 2-3 * 4/6; 5 + 2-3 * 4/6 ---------- 5
Выберите конкретные столбцы :
Оператор SELECT может использоваться для извлечения определенных столбцов. Имена столбцов следуют за словом SELECT.
Если вы хотите извлечь столбцы street_address и city из таблицы местоположений, можно использовать следующий SQL.
SELECT street_address, city FROM locations;
Вот результат.
sqlite> SELECT street_address, город ОТ местоположения; улица адрес города -------------------------------------------------- ---------- 1297 Виа Кола ди Ри Рома 93091 Calle della Testa Венеция 2017 Синдзюку-ку Токио 9450 Камия-чо Хиросима 2014 Jabberwocky Rd Southlake 2011 Interiors Blvd South San 2007 Загора Санкт-Южный Брун 2004 Charade Rd Seattle 147 Spadina Ave Toronto 6092 Самшит Св. Уайтхорс 40-5-12 Laogianggen Пекин 1298 Vileparle (E) Бомбей Виктория-стрит, 12-98, Сидней 198 Clementi Северный Сингапур 8204 Артур Сент-Лондон Центр Магдалины, Оксфордский Научный Парк Оксфорд 9702 Chester Road Stretford Schwanthalerstr. 7031 Мюнхен Руа Фрей Канека 1360 Сан-Паулу 20 Rue des Corps-Saints Geneva Муртенштрассе 921 Берн Питер Брейгельстраат 837 Утрехт Мариано Эскобедо 9991 Мексика Cit
Выберите столбцы, используя псевдоним:
В список FROM с оператором select можно включить одно или несколько имен таблиц, разделенных запятой. Таблицы, за которыми следует предложение FROM, имеют необязательное имя псевдонима, которое можно использовать для упоминания имен отдельных столбцов в результате. Если полное имя таблицы можно использовать для определения столбцов таблицы, псевдонимы не используются.
sqlite> SELECT region.region_name из регионов; REGION_NAME ------------------------- REGION_NAME Европа Северные и Южная Америка Азия Ближний Восток и Африка или же sqlite> SELECT z.region_name из регионов z; REGION_NAME ------------------------- REGION_NAME Европа Северные и Южная Америка Азия Ближний Восток и Африка
Здесь выше, два оператора SELECT идентичны, последний использует псевдоним таблицы z для регионов.
Переименование имен столбцов :
Иногда мы используем имя столбца в качестве краткой формы для ключевого слова для этого столбца. Таким образом, возвращаемое значение для этого столбца будет кратко отображаться из, и иногда нам требуется отображать его в полном имени. Это можно сделать с помощью предложения AS, следующего за именем столбца, или любого выражения с оператором select.
Если вы хотите извлечь столбец region_name из таблицы регионов с заголовком настраиваемого столбца «Имя региона», можно использовать следующий SQL. Если заголовок настройки содержит более одного слова, он будет заключен в кавычки, если только он не может использоваться независимо.
Вот пример.
SELECT region_name AS "Name of the Region" FROM regions;
Вот результат.
Название региона ------------------------- REGION_NAME Европа Северные и Южная Америка Азия Ближний Восток и Африка
Здесь, в следующем примере, заголовок настройки содержит более одного слова, и он используется без кавычек, и в этом операторе возникает ошибка.
sqlite> SELECT region_name AS Имя региона ИЗ регионов; Ошибка: около "of": синтаксическая ошибка
Предельный выход:
Когда мы хотим извлечь ограниченный объем данных из большой базы данных, мы можем использовать предложение LIMIT, чтобы ограничить объем данных, возвращаемых оператором.
Если мы хотим получить первые десять записей из таблицы местоположений, можно использовать следующий SQL.
SELECT * FROM locations LIMIT 10;
Вот результат.
location_id street_address почтовый индекс город state_province country_id ------------------------- -------------------- ----- ------ ---------- -------------- ---------- 1000 1297 Via Cola di Rie 989 Roma IT 1100 93091 Calle della Te 10934 Венеция ИТ 1200 2017 Синдзюку-ку 1689 Токио Префектура Токио JP 1300 9450 Камия-чо 6823 Хиросима JP 1400 2014 Jabberwocky Rd 26192 Саутлейк, Техас, США 1500 2011 Interiors Blvd 99236, Южная Сан-Калифорния, США 1600 2007 Zagora St 50090 South Brun Нью-Джерси США 1700 2004 Charade Rd 98199 Сиэтл Вашингтон, США 1800 147 Spadina Ave M5V 2L7 Торонто Онтарио, Калифорния 1900 6092 Самшит-Стрит YSW 9T2 Уайтхорс Юкон, Калифорния
Если мы хотим получить пять записей, пропустив первые четыре из таблицы местоположений, можно использовать следующий SQL.
SELECT * FROM locations LIMIT 4,5;
Вот результаты.
sqlite> SELECT * FROM location LIMIT 4,5; location_id street_address почтовый индекс город state_province country_id ------------------------- ------------------- ------ ----- ---------- -------------- ---------- 1400 2014 Jabberwocky Rd 26192 Саутлейк, Техас, США 1500 2011 Interiors Blvd 99236, Южная Сан-Калифорния, США 1600 2007 Zagora St 50090 South Brun Нью-Джерси США 1700 2004 Charade Rd 98199 Сиэтл Вашингтон, США 1800 147 Spadina Ave M5V 2L7 Торонто Онтарио, Калифорния
Выберите, используя предложение OFFSET:
Предложение OFFSET после LIMIT указывает, сколько строк пропустить в начале набора результатов.
Вот пример.
SELECT * FROM locations LIMIT 5 OFFSET 4;
Вот результат такой же, как и предыдущий.
sqlite> SELECT * FROM location LIMIT 5 OFFSET 4; location_id street_address почтовый индекс город state_province country_id ------------------------- ------------------- ------ ----- ---------- -------------- ---------- 1400 2014 Jabberwocky Rd 26192 Саутлейк, Техас, США 1500 2011 Interiors Blvd 99236, Южная Сан-Калифорния, США 1600 2007 Zagora St 50090 South Brun Нью-Джерси США 1700 2004 Charade Rd 98199 Сиэтл Вашингтон, США 1800 147 Spadina Ave M5V 2L7 Торонто Онтарио, Калифорния
ГДЕ оговорка
WHERE - мощный фильтр. Предложение WHERE позволяет вам получать именно те данные, которые вам нужны. Он устанавливает условия для SELECT, и запрос будет возвращать только те строки, которые соответствуют условиям. Он предоставляет вам большую степень контроля над условиями, накладывающими ограничения на набор данных, возвращаемый SELECT, с помощью которого можно (или исключать) строки в (или из) результате. Он используется как для ограничения количества возвращаемых строк, так и для указания отношения, используемого для объединения двух таблиц.
Если вы хотите увидеть только города из Канады, используйте следующий SQL.
SELECT * FROM locations WHERE country_id='CA';
Вот результат для вышеуказанного утверждения.
sqlite> SELECT * FROM location WHERE country_id = 'CA'; location_id street_address почтовый индекс город state_province country_id ----------- --------------- ----------- ---------- --- ----------- ---------- 1800 147 Spadina Ave M5V 2L7 Торонто Онтарио, Калифорния 1900 6092 Самшит-Стрит YSW 9T2 Уайтхорс Юкон, Калифорния
Здесь некоторые операторы могут использоваться с предложением WHERE. Вот операторы ниже-
оператор | описание |
знак равно | равных |
<> | Не равный* |
> | Лучше чем |
< | Меньше, чем |
> = | Больше или равно |
<= | Меньше или равно |
Вот образец таблицы агентов.
AGENT_CODE AGENT_NAME WORKING_AREA COMMISSION PHONE_NO COUNTRY ---------- ---------- ------------ ---------- -------- ---- ---------- A007 Рамасундар Бангалор 0,15 077-25814763 A003 Алекс Лондон 0,13 075-12458969 A008 Alford New York 0,12 044-25874365 A011 Рави Кумар Бангалор 0,15 077-45625874 A010 Santakumar Chennai 0.14 007-22388644 A012 Люсида Сан-Хосе 0,12 044-52981425 A005 Андерсон Брисбан 0,13 045-21447739 A001 Subbarao Bangalore 0,14 077-12346674 А002 Мукеш Мумбаи 0.11 029-12358964 A006 McDen London 0,15 078-22255588 A004 Иван Торенто 0.15 008-22544166 A009 Бенджамин Хэмпшир 0.11 008-22536178
Если вы хотите видеть только код агента, имя агента и комиссию от агентов, которые получают комиссию менее 0,15%, можно использовать следующий SQL.
SELECT * FROM agents WHERE commission<.15;
Вот результат для вышеуказанного утверждения.
sqlite> SELECT agent_code, agent_name, комиссия ОТ агентов, ГДЕ комиссия <.15; AGENT_CODE AGENT_NAME COMMISSION ---------- ---------------------------------------- ---------- А003 Алекс 0.13 A008 Alford 0,12 A010 Santakumar 0.14 A012 Lucida 0,12 A005 Андерсон 0,13 A001 Subbarao 0,14 А002 Мукеш 0.11 A009 Бенджамин 0,11
Если вы хотели видеть только код агента, имя агента и комиссию от агентов, которые получают комиссию более чем на .12%, можно использовать следующий SQL.
SELECT agent_code, agent_name, commission
FROM agents
WHERE commission>.12;
Вот результат для вышеуказанного утверждения.
sqlite> SELECT agent_code, agent_name, комиссия ...> ОТ АГЕНТОВ ГДЕ комиссия> .12; AGENT_CODE AGENT_NAME COMMISSION ---------- ---------- ---------- A007 Рамасундар 0,15 А003 Алекс 0.13 A011 Рави Кумар 0,15 A010 Santakumar 0.14 A005 Андерсон 0,13 A001 Subbarao 0,14 A006 McDen 0,15 А004 Иван 0,15
Если вы хотите видеть только города из Канады, можно использовать следующий SQL.
SELECT *
FROM locations
WHERE country_id='CA';
Вот результат для вышеуказанного утверждения.
sqlite> SELECT * FROM location WHERE country_id = 'CA'; location_id street_address почтовый индекс город state_province country_id ----------- --------------- ----------- ---------- --- ----------- ---------- 1800 147 Spadina Ave M5V 2L7 Торонто Онтарио, Калифорния 1900 6092 Самшит-Стрит YSW 9T2 Уайтхорс Юкон, Калифорния
ГДЕ с И И ИЛИ
Вы можете использовать AND и OR с предложением WHERE для фильтрации строк из таблиц.
Вот пример таблицы сотрудников:
Если вы хотите просмотреть идентификатор employee_id, first_name, last_name, job_id, manager_id и отделы, которые относятся к Department_id 80, можно использовать следующий SQL.
SELECT employee_id, first_name, last_name,job_id, manager_id,department_id
FROM employees
WHERE department_id=80;
Вот результат.
Пример вывода:
идентификатор сотрудника имя_ фамилии имя_работы идентификатор_идентификатора_идентификатор отдела_идентификатора ----------- ---------- ---------- ---------- --------- - ------------- 145 Джон Рассел SA_MAN 100 80 146 Карен Партнерс SA_MAN 100 80 147 Альберто Эрразуриз SA_MAN 100 80 148 Джеральд Камбро SA_MAN 100 80 149 Eleni Zlotkey SA_MAN 100 80 150 Питер Такер SA_REP 145 80 151 Дэвид Бернштейн SA_REP 145 80 .........
Здесь, в другом примере, если вы хотите видеть идентификатор employee_id, first_name, last_name, job_id, manager_id и отделов, которые принадлежат отделу_идеода 80 и должны находиться под менеджером, чей идентификатор равен 100, можно использовать следующий SQL.
SELECT employee_id, first_name, last_name,job_id, manager_id,department_id
FROM employees
WHERE department_id=80
AND manager_id=100;
Вот результат.
идентификатор сотрудника имя_ фамилии имя_работы идентификатор_идентификатора_идентификатор отдела_идентификатора ----------- ---------- ---------- ---------- --------- - ------------- 145 Джон Рассел SA_MAN 100 80 146 Карен Партнерс SA_MAN 100 80 147 Альберто Эрразуриз SA_MAN 100 80 148 Джеральд Камбро SA_MAN 100 80 149 Eleni Zlotkey SA_MAN 100 80
Теперь давайте найдем тех сотрудников, чей идентификатор работы может быть CLERK или может быть в отделе с идентификатором 80 и должен находиться под менеджером, который является владельцем идентификатора 147.
Вот утверждение.
SELECT employee_id, first_name, last_name,job_id, manager_id,department_id
FROM employees
WHERE job_id='SH_CLERK'
OR department_id=80
AND manager_id=147;
Вот результат вышеприведенного утверждения.
идентификатор сотрудника имя_ фамилии имя_работы идентификатор_идентификатора_идентификатор отдела_идентификатора ----------- ---------- ---------- ---------- --------- - ------------- 162 Клара Вишней SA_REP 147 80 163 Даниэль Грин SA_REP 147 80 164 Маттеа Марвинс SA_REP 147 80 165 Дэвид Ли SA_REP 147 80 166 Сундар Анд SA_REP 147 80 167 Амит Банда SA_REP 147 80 180 Уинстон Тейлор SH_CLERK 120 50 181 Жан Флёр SH_CLERK 120 50 182 Марта Салливан SH_CLERK 120 50 183 Girard Geoni SH_CLERK 120 50 184 Nandita Sarchand SH_CLERK 121 50 185 Алексис Булл SH_CLERK 121 50 .........
Приведенный выше результат показывает, что job_id 'SA_REP' также появляется вместе с 'SH_CLERK', потому что импликация предложений OR и manager_id 147 появляется только для тех отделов, которые имеют ID 80.
Оператор AND имеет более высокий приоритет, чем оператор OR, что означает, что он вычисляется первым. Таким образом, запрос действительно выглядит следующим образом:
SELECT employee_id, first_name, last_name,job_id, manager_id,department_id
FROM employees
WHERE job_id='SH_CLERK'
OR (department_id=80 AND manager_id=147);
Который выбирает всех сотрудников для «SH_CLERK» и только тех сотрудников для отдела № 80, которые имеют менеджера с идентификатором 147. Скобки можно использовать для уточнения запроса и фактического получения нужных нам высоких игроков.
DISTINCT
Ключевое слово DISTINCT используется для выбора только уникальных элементов из результирующего набора, или можно сказать, что оно исключает дублирующиеся строки из результата запроса.
Если вы хотите получить уникальную комбинацию Department_id и manager_id, можно использовать следующий SQL.
SELECT DISTINCT department_id, manager_id
FROM employees;
Вот результат.
отдел_ид менеджер_ид ------------- ---------- 90 90 100 60 102 60 103 100 101 100 108 30 100 30 114 50 100 50 120 50 121 50 122 50 123 50 124 80 100 80 145 80 146 80 147 80 148 80 149 149 10 101 20 100 20 201 40 101 70 101 110 101 110 205
Приведенный выше результат показывает, что появилась только уникальная комбинация Department_id и manager_id. Теперь, если мы добавим столбец job_id с вышеуказанным запросом, посмотрим, что произойдет.
SELECT DISTINCT department_id, manager_id,job_id
FROM employees;
Вот вывод.
отдела_ид менеджера_ид вакансии_ид ------------- ---------- ---------- 90 AD_PRES 90 100 AD_VP 60 102 IT_PROG 60 103 IT_PROG 100 101 FI_MGR 100 108 FI_ACCOUNT 30 100 PU_MAN 30 114 PU_CLERK 50 100 ST_MAN 50 120 ST_CLERK 50 121 ST_CLERK 50 122 ST_CLERK 50 123 ST_CLERK 50 124 ST_CLERK 80 100 SA_MAN 80 145 SA_REP 80 146 SA_REP 80 147 SA_REP 80 148 SA_REP 80 149 SA_REP 149 SA_REP 50 120 SH_CLERK 50 121 SH_CLERK 50 122 SH_CLERK 50 123 SH_CLERK 50 124 SH_CLERK 10 101 AD_ASST 20 100 MK_MAN 20 201 MK_REP 40 101 HR_REP 70 101 PR_REP 110 101 AC_MGR 110 205 AC_ACCOUNT
Здесь, в приведенном выше результате, уникальная комбинация, состоящая из трех столбцов и естественного количества строк, изменяется, и здесь появляется больше строк, чем раньше.
СОРТИРОВАТЬ ПО
Предложение ORDER BY используется для сортировки возвращенного набора данных. За предложением ORDER BY следует столбец, по которому мы выполняем сортировку. Направление по умолчанию для ORDER BY - восходящее; результаты упорядочены от наименьшего количества к наибольшему. Чтобы указать направление ORDER BY, используйте ключевое слово DESC или ASC:
Если вы хотите отсортировать результат по зарплате для тех сотрудников, какого отдела нет. ниже 50, можно использовать следующий SQL.
SELECT employee_id, first_name, last_name,job_id, salary,department_id
FROM employees
WHERE department_id<50
ORDER BY salary;
Вот результат.
идентификатор сотрудника имя_ фамилии имя_работы_ид зарплата отдел_идентификатора ----------- ---------- ---------- ---------- --------- - ------------- 119 Карен Кольменарес PU_CLERK 2500 30 118 Guy Himuro PU_CLERK 2600 30 117 Сигал Тобиас PU_CLERK 2800 30 116 Шелли Байда PU_CLERK 2900 30 115 Александр Ху PU_CLERK 3100 30 200 Дженнифер Уэйлен AD_ASST 4400 10 202 Пэт Фай MK_REP 6000 20 203 Сьюзен Маврис HR_REP 6500 40 114 Den Raphaely PU_MAN 11000 30 201 Майкл Хартштейн MK_MAN 13000 20
Если вы хотите отсортировать результат по зарплате в порядке убывания для тех сотрудников, которых в отделе нет. ниже 50, можно использовать следующий SQL.
SELECT employee_id, first_name, last_name,job_id, salary,department_id
FROM employees
WHERE department_id<50
ORDER BY salary DESC;
Вот результат.
идентификатор сотрудника имя_ фамилии имя_работы_ид зарплата отдел_идентификатора ----------- ---------- ---------- ---------- --------- - ------------- 201 Майкл Хартштейн MK_MAN 13000 20 114 Den Raphaely PU_MAN 11000 30 203 Сьюзен Маврис HR_REP 6500 40 202 Пэт Фай MK_REP 6000 20 200 Дженнифер Уэйлен AD_ASST 4400 10 115 Александр Ху PU_CLERK 3100 30 116 Шелли Байда PU_CLERK 2900 30 117 Сигал Тобиас PU_CLERK 2800 30 118 Guy Himuro PU_CLERK 2600 30 119 Карен Кольменарес PU_CLERK 2500 30
Результат запроса может быть упорядочен по нескольким столбцам. Строки с одинаковым значением для первого столбца ORDER BY дополнительно упорядочены дополнительными столбцами:
Вот пример.
Если вы хотите упорядочить результат сначала по столбцу Department_id в порядке возрастания, а после этого, какие отделы будут одинаковыми, они будут упорядочены по убыванию в соответствии с зарплатой, можно использовать следующий SQL.
SELECT employee_id, first_name, last_name,job_id, salary,department_id
FROM employees
WHERE department_id<50
ORDER BY department_id,salary DESC;
Вот результат.
идентификатор сотрудника имя_ фамилии имя_работы_ид зарплата отдел_идентификатора ----------- ---------- ---------- ---------- --------- - ------------- 200 Дженнифер Уэйлен AD_ASST 4400 10 201 Майкл Хартштейн MK_MAN 13000 20 202 Пэт Фай MK_REP 6000 20 114 Den Raphaely PU_MAN 11000 30 115 Александр Ху PU_CLERK 3100 30 116 Шелли Байда PU_CLERK 2900 30 117 Сигал Тобиас PU_CLERK 2800 30 118 Guy Himuro PU_CLERK 2600 30 119 Карен Кольменарес PU_CLERK 2500 30 203 Сьюзен Маврис HR_REP 6500 40
Как видно из приведенного выше результата, depertment_id 20 и 30 имеют более одной строки, и они расположены в порядке убывания в соответствии с зарплатой, то есть наибольшая зарплата будет первой.
ORDE BY с помощью DISTINCT
Если вы хотите получить уникальную комбинацию Department_id, manager_id и job_id по порядку в порядке возрастания, можно использовать следующий SQL.
SELECT DISTINCT department_id, manager_id,job_id
FROM employees ORDER BY department_id;
Вот вывод.
отдела_ид менеджера_ид вакансии_ид ------------- ---------- ---------- 10 101 AD_ASST 20 100 MK_MAN 20 201 MK_REP 30 100 PU_MAN 30 114 PU_CLERK 40 101 HR_REP 50 100 ST_MAN 50 120 ST_CLERK 50 121 ST_CLERK 50 122 ST_CLERK 50 123 ST_CLERK 50 124 ST_CLERK 50 120 SH_CLERK 50 121 SH_CLERK 50 122 SH_CLERK 50 123 SH_CLERK 50 124 SH_CLERK 60 102 IT_PROG 60 103 IT_PROG 70 101 PR_REP 80 100 SA_MAN 80 145 SA_REP 80 146 SA_REP 80 147 SA_REP 80 148 SA_REP 80 149 SA_REP 90 AD_PRES 90 100 AD_VP 100 101 FI_MGR 100 108 FI_ACCOUNT 110 101 AC_MGR 110 205 AC_ACCOUNT 149 SA_REP
ГРУППА ПО
Предложение GROUP BY используется для объединения записей базы данных с одинаковыми значениями в одну запись. Это часто используется с функциями агрегации.
Предложение GROUP BY используется для объединения данных в одну строку, где значение одного или нескольких указанных столбцов повторяется. Он используется для объединения записей базы данных с одинаковыми значениями в одну запись. Это часто используется с функциями агрегации. Предложение GROUP BY берет список выражений, обычно имен столбцов из результата, и объединяет данные для каждого выражения. Задача предложения GROUP BY состоит в том, чтобы вычислять агрегаты по всему результату, а также может разбивать этот результат на группы строк с указанными значениями и вычислять агрегаты в каждой группе за один шаг.
Предложение GROUP BY находится между предложением WHERE и предложением SELECT. Он получает выходные данные из WHERE и разбивает их на группы строк, которые имеют общее значение (или значения) для определенного столбца (или столбцов). Эти группы затем передаются в предложение SELECT.
Процесс группировки выполняется в два этапа. Сначала выражение GROUP BY организовало строки таблицы в разные группы. Как только группы определены, заголовок SELECT определяет, как эти группы сведены в одну строку. Результирующая таблица будет иметь одну строку для каждой группы.
Если вы хотите найти общую зарплату для каждого job_id, можно использовать следующий SQL.
SELECT job_id as Designation ,SUM(salary) "Total Salary"
FROM employees
GROUP BY job_id;
Вот результат
Обозначение Общая зарплата ----------- ------------ AC_ACCOUNT 8300 AC_MGR 12000 AD_ASST 4400 AD_PRES 24000 AD_VP 34000 FI_ACCOUNT 39600 FI_MGR 12000 HR_REP 6500 IT_PROG 28800 MK_MAN 13000 MK_REP 6000 PR_REP 10000 PU_CLERK 13900 PU_MAN 11000 SA_MAN 61000 SA_REP 250500 SH_CLERK 64300 ST_CLERK 55700 ST_MAN 36400
Если вы хотите найти общее количество сотрудников по каждому назначению, то следующий SQL может быть использован.
SELECT job_id as Designation ,COUNT(*) "Number of Employees"
FROM employees
GROUP BY job_id;
Вот результат
Обозначение Количество работников ----------- ------------------- AC_ACCOUNT 1 AC_MGR 1 AD_ASST 1 AD_PRES 1 AD_VP 2 FI_ACCOUNT 5 FI_MGR 1 HR_REP 1 IT_PROG 5 MK_MAN 1 MK_REP 1 PR_REP 1 PU_CLERK 5 PU_MAN 1 SA_MAN 5 SA_REP 30 SH_CLERK 20 ST_CLERK 20 ST_MAN 5
GROUP BY с ГДЕ
Если вы хотите найти общую зарплату для каждого job_id, который принадлежит отделу, идентификационный номер которого ниже 80, можно использовать следующий SQL.
SELECT job_id as Designation ,SUM(salary) "Total Salary"
FROM employees
WHERE department_id<80
GROUP BY job_id;
Вот результат
Обозначение Общая зарплата ----------- ------------ AD_ASST 4400 HR_REP 6500 IT_PROG 28800 MK_MAN 13000 MK_REP 6000 PR_REP 10000 PU_CLERK 13900 PU_MAN 11000 SH_CLERK 64300 ST_CLERK 55700 ST_MAN 36400
GROUP BY и ORDER BY
Если вы хотите найти общее число сотрудников по каждому назначению в порядке от наименьшего до наименьшего количества сотрудников, можно использовать следующий SQL.
SELECT job_id as Designation ,COUNT(*) "Number of Employees"
FROM employees
GROUP BY job_id
ORDER BY COUNT(*) DESC;
Вот результат
Обозначение Количество работников ----------- ------------------- SA_REP 30 SH_CLERK 20 ST_CLERK 20 FI_ACCOUNT 5 IT_PROG 5 PU_CLERK 5 SA_MAN 5 ST_MAN 5 AD_VP 2 AC_ACCOUNT 1 AC_MGR 1 AD_ASST 1 AD_PRES 1 FI_MGR 1 HR_REP 1 MK_MAN 1 MK_REP 1 PR_REP 1 PU_MAN 1
HAVING
Предложение HAVING функционально идентично предложению WHERE. Он используется для ограничения записей на основе суммарного значения группировки. Предложения .HAVING должны содержать только выражения фильтра, которые зависят от вывода GROUP BY. Основное различие между предложением WHERE и предложением HAVING заключается в том, что предложение HAVING обрабатывается после предложений GROUP BY и SELECT, что позволяет фильтровать строки на основе результатов любого агрегата GROUP BY, в то время как предложение WHERE может ссылаться только на выражения, которые не содержат агрегатные функции.
Пример:
Если вы хотите найти общее количество сотрудников по обозначениям, которые содержат 5 или более сотрудников, можно использовать следующий SQL.
SELECT job_id as Designation ,COUNT(*) "Number of Employees"
FROM employees
GROUP BY job_id
HAVING COUNT(*)>=5;
Вот результат
Обозначение Количество работников ----------- ------------------- FI_ACCOUNT 5 IT_PROG 5 PU_CLERK 5 SA_MAN 5 SA_REP 30 SH_CLERK 20 ST_CLERK 20 ST_MAN 5
ИМЕЯ С ЗАКАЗАТЬ
Если вы хотите найти общее число сотрудников по обозначениям, которые содержат 5 или более сотрудников, и результат будет получен в порядке убывания числа сотрудников, можно использовать следующий SQL.
SELECT job_id as Designation ,COUNT(*) "Number of Employees"
FROM employees
GROUP BY job_id
HAVING COUNT(*)>=5
ORDER BY COUNT(*) DESC;
Вот результат
Обозначение Количество работников ----------- ------------------- SA_REP 30 SH_CLERK 20 ST_CLERK 20 FI_ACCOUNT 5 IT_PROG 5 PU_CLERK 5 SA_MAN 5 ST_MAN 5
ГДЕ ГДЕ
Если вы хотите найти общую зарплату, требуемую за месяц, которая составляет один или более лаков, для обозначения, в котором содержится идентификатор, ниже 80, на порядок от самой большой до самой маленькой зарплаты, можно использовать следующий SQL.
SELECT job_id as Designation ,SUM(salary) "Total Salary"
FROM employees
WHERE department_id<80
GROUP BY job_id
HAVING SUM(salary)>=10000
ORDER BY SUM(salary);
Вот результат
Обозначение Общая зарплата ----------- ------------ PR_REP 10000 PU_MAN 11000 MK_MAN 13000 PU_CLERK 13900 IT_PROG 28800 ST_MAN 36400 ST_CLERK 55700 SH_CLERK 64300
Предыдущий: Создать, изменить, удалить индекс
Далее: Операторы SQLite Введение
Новый контент: Composer: менеджер зависимостей для PHP , R программирования