кодесурса
«SQLite

SQLite SELECT Query

script1adsense2code
script1adsense3code

Вступление

Оператор 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 программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code