Введение
Оператор SELECT используется для выполнения простого запроса из базы данных или сложного запроса по некоторым критериям. Оператор SELECT не вносит никаких изменений в базу данных.
Оператор запроса или SELECT — это команда, которая дает инструкции базе данных для получения определенной информации (ов) из таблицы в ее памяти. Команда SELECT начинается с ключевого слова SELECT, за которым следует пробел и список столбцов, разделенных запятыми. Символ * можно использовать для выбора всех столбцов таблицы. Имя таблицы следует после ключевого слова FROM и пробела.
Синтаксис:
SELECT [ALL | DISTINCT] результат [FROM table-list] [WHERE expr] [GROUP BY expr-list] [HAVING expr] [составная операция выбор] * [ORDER BY sort-expr-list] [LIMIT integer [(OFFSET |,) integer ]]
Параметры:
Пункт | Выполнение операции | Входное значение |
---|---|---|
WHERE | Используется для ограничения | Выражение или условие |
DISTINCT | Используется для ограничения | Список столбцов |
ОТ | Объединения | Список таблиц |
GROUP BY | Используется для ограничения | Список столбцов |
ЗАКАЗАТЬ | Список столбцов | |
ИМЕЕТ | Используется для ограничения | выражения или условия |
LIMIT | Используется для ограничения | Целочисленного значения |
OFFSET | Используется для ограничения | Целочисленное значение |
Вот пример таблицы, в которой используется ees.
Получение всех data :
Если вы хотите получить все строки из таблицы местоположений, можно использовать следующий SQL.
ВЫБРАТЬ * ИЗ местоположений;
Вот результат.
sqlite> SELECT * FROM location; location_id street_address postal_code city state_province country_id ----------- -------------- --- -------- ---------- -------------- ---------- 1000 1297 Via Cola 989 Roma IT1100 93091 Calle de 10934 Venice IT1200 2017 Shinjuku- 1689 Tokyo Tokyo Prefectu JP1300 9450 Kamiya-ch 6823 Hiroshima JP1400 2014 Jabberwoc 26192 Southlake Texas US1500 2011 Interiors 99236 South San California US1600 2007 Zagora St 50090 Южный Брун Нью-Джерси US1700 2004 Charade Washington R 9818199 Seattle Spadina Av M5V 2L7 Toronto Ontario CA1900 6092 Boxwood S YSW 9T2 Whitehorse Yukon CA2000 40-5-12 Лаогия 190518 Пекин CN2100 1298 Vileparle 490231 Бомбей Махараштра IN2200 12-98 Виктория 2901 Сидней Нью-Саут-Уэйл Сингапур AU2300 198204 St UK2500 Magdalen Centr OX9 9ZB Oxford Oxford UK2600 9702 Chester R 9629850293 Stretford Manchester UK2700 Schwanthalerst 80925 Munich Bavaria DE2800 Rua Frei Canec 01307-002 Sao Паулу Сан-Паулу BR2900 20 Rue des Cor 1730 Geneva Geneve CH3000 Murtenstrasse 3095 Bern BE CH3100 Pieter Breughe 3029SK Utrecht Utrecht NL3200 Mariano Escobe 11932 Mexico Cit Distrito Feder MX
В приведенном выше примере используются * для обозначения ВСЕХ записей из таблицы местоположений.
, если предложение FROM не используется:
Может быть выполнено только выражение:
sqlite > ВЫБРАТЬ 6 + 15; 6 + 15 ---------- 21orsqlite> ВЫБРАТЬ 5 * 15; 5 * 15 ---------- 75orsqlite> ВЫБРАТЬ 5 + 2-3 * 4/ 6; 5 + 2-3 * 4/6 ---------- 5
Выбрать определенные столбцы :
Оператор SELECT может использоваться для получения определенных столбцов. Имена столбцов следуют за словом SELECT.
Если вы хотите получить столбцы street_address и city из таблицы местоположений, можно использовать следующий SQL.
SELECT street_address, city FROM location;
Вот результат.
sqlite> ВЫБЕРИТЕ street_address, city из местоположений; street_address city ----------------------------------------- --------- ---------- 1297 Via Cola di Rie Roma93091 Calle della Testa Venice2017 Shinjuku-ku Tokyo9450 Kamiya-cho Hiroshima2014 Jabberwocky Rd Southlake2011 Interiors Blvd South San2007 Zagora St South Brun2004 Charade Rd Сиэтл, 147 Спадина авеню, Торонто, 6092 Самшит, Уайтхорс, 40-5-12, Лаогиангген, Пекин, 1298 Вилепарл, Бомбей, 12-98, Виктория, Сидней, 198, Клементи, Север, Сингапур, 8204, Артур, Лондон, Центр Магдален, Оксфордский научный парк, Оксфорд, 9702, Честер Роуд, Стретфорд, Шванталерштр. 7031 MunichRua Frei Caneca 1360 Sao Paulo 20 Rue des Corps-Saints GenevaMurtenstrasse 921 BernPieter Breughelstraat 837 UtrechtMariano Escobedo 9991 Mexico Cit
Выберите столбцы, используя псевдоним:
В список FROM с оператором select можно включить одно или несколько имен таблиц, разделенных запятыми.. Таблицы, за которыми следует предложение FROM, имеют необязательное имя псевдонима, которое можно использовать для упоминания имен отдельных столбцов в результате. Если полное имя таблицы может использоваться для определения столбцов таблицы, псевдонимы не используются.
sqlite> ВЫБРАТЬ регионы. имя_региона ИЗ регионов; имя_региона ------------------------- REGION_NAMEЕвропаАмерикаАзияБлижний Восток и Африкаorsqlite> ВЫБРАТЬ z. имя_региона FROM регионов z; имя_региона ------------------------- REGION_NAMEЕвропаАмерикаАзия Ближний Восток и Африка
два оператора SELECT идентичны, последний использует псевдоним таблицы z для регионов.
Переименование имен столбцов :
Иногда мы используем имя столбца в краткой форме по ключевому слову для этого столбца. Таким образом, возвращаемое значение для этого столбца будет отображаться в кратком виде, а иногда нам требовалось отображать его в полном имени. Это можно сделать, используя предложение AS после имени столбца или любое выражение с оператором select.
Если вы хотите получить столбец region_name из таблицы регионов с заголовком настраиваемого столбца «Name of Регион »может использоваться следующий SQL. Если настраиваемый заголовок содержит более одного слова, он будет заключен в кавычки без кавычек, если его нельзя использовать независимо.
Вот пример.
ВЫБРАТЬ имя_региона КАК "Имя региона" ИЗ регионов;
Вот результат.
Название региона ------------------------- REGION_NAMEEuropeAmericasAsiaБлижний Восток и Африка
Здесь в следующем примере , настраиваемый заголовок содержит более одного слова и используется без кавычек, и это утверждение вызывает ошибку.
sqlite> SELECT region_name AS Имя региона из регионов; Ошибка: рядом с "из": синтаксическая ошибка
Выходной предел:
Когда мы хотим получить ограниченный объем данных из большой базы данных, мы можем использовать предложение LIMIT, чтобы ограничить объем данных, возвращаемых оператором.
Если мы хотим получить первые десять записей из таблицы местоположений, можно использовать следующий SQL.
SELECT * FROM location LIMIT 10;
Вот результат.
location_id street_address postal_code city state_province country_id ------------------------- ---------- ---------- ----------- ---------- -------------- ----- ----- 1000 1297 Via Cola di Rie 989 Roma IT1100 93091 Calle della Te 10934 Venice IT1200 2017 Shinjuku-ku 1689 Tokyo Tokyo Prefectu JP1300 9450 Kamiya-cho 6823 Hiroshima JP1400 2014 Jabberwocky Rd 26192 Southlake Texas US1500 2011 Interiors Blvd 99236 South Калифорния US1600 2007 Zagora St 50090 Южный Брун Нью-Джерси US1700 2004 Charade Rd 98199 Сиэтл Вашингтон US1800 Спадина Авеню 147 M5V 2L7 Торонто Онтарио CA1900 6092 Boxwood St YSW 9T2 Уайтхорс Юкон CA
Если мы хотим получить пять записей пропуская первые четыре из таблицы местоположений, можно использовать следующий SQL.
SELECT * FROM location LIMIT 4,5;
Вот результаты.
sqlite> SELECT * FROM location LIMIT 4,5; location_id street_address postal_code city state_province country_id ------------------------- -------- ----------- ----------- ---------- -------------- ---- ------ 1400 2014 Jabberwocky Rd 26192 Southlake Texas US1500 2011 Interiors Blvd 99236 South San California US 1600 2007 Zagora St 50090 South Brun New Jersey US1700 2004 Charade Rd 98199 Seattle Washington US1800 147 Spadina Ave M5V 2L7 Торонто Онтарио, Калифорния
Выбрать с помощью предложения OFFSET:
Предложение OFFSET после LIMIT указывает, сколько строк нужно пропустить в начале набора результатов.
Вот пример.
SELECT * FROM location LIMIT 5 OFFSET 4;
Вот результат такой же, как и предыдущий результат.
sqlite> ВЫБРАТЬ * ИЗ местоположений LIMIT 5 OFFSET 4; location_id street_address postal_code city state_province country_id ------------------------ - ------------------- ----------- ---------- --------- ----- ---------- 1400 2014 Jabberwocky Rd 26192 Southlake Texas US1500 2011 Interiors Blvd 99236 South San California US1600 2007 Zagora St 50090 South Brun New Jersey US1700 2004 Charade Rd 98199 Seattle Washington US1800 147 Spadina Ave M5V 2L7 Торонто, Онтарио, CA
Предложение WHERE
WHERE — мощный фильтр. Предложение WHERE может позволить вам взять именно часть данные, которые вам нужны. Он устанавливает условия для SELECT, и запрос вернет только те строки, которые соответствуют условиям. Он предоставляет вам большую степень контроля над условиями для наложения ограничений на набор данных, возвращаемый с помощью SELECT, с помощью которых можно включать (или исключать) строки в (или из) результата. Он используется как для ограничения количества возвращаемых строк, так и для указания отношения, используемого для объединения двух таблиц вместе.
Если вы хотите увидеть только города из Канады, можно использовать следующий SQL.
SELECT * FROM locations WHERE country_id = 'CA';
Вот результат для приведенного выше оператора.
sqlite> ВЫБРАТЬ * ИЗ местоположений WHERE country_id = 'CA'; location_id street_address postal_code city state_province country_id ----------- ----------- ---- ----------- ---------- -------------- ---------- 1800 147 Spadina Ave M5V 2L7 Toronto Ontario CA1900 6092 Boxwood St YSW 9T2 Whitehorse Yukon CA
Здесь можно использовать некоторые операторы с предложением WHERE. Ниже приведены операторы:
operator | description |
= | Equal |
Не равно * | |
> | Больше чем |
Меньше | |
> = | Больше или равно |
Меньше или равно |
Вот пример таблицы агентов.
AGENT_CODE AGENT_NAME РАБОЧАЯ_ЗОНА КОМИССИЯ PHONE_NO СТРАНА ---------- ---------- ------------ --- ------- ------------ ---------- A007 Рамасундар Бангалор 0,15 077-25814763A003 Алекс Лондон 0,13 075-12458969A008 Элфорд Нью-Йорк 0,12 044-25874365A011 Рави Кумар Бангалор 0,15 077-45625874A010 Сантакумар Ченнаи 0,14 007-22388644A012 Люсида Сан-Хосе 0,12 044-52981425A005 Андерсон Брисбан 0,13 045-21447739A001 Суббарао Бангалор 0,14 077-12346674A001-2000 077-12346674Aumb6-250 Mukesha Hampshair 0.11 008-22536178
Если вы хотите видеть только код_агента, имя_агента и комиссию от агентов, которые получают комиссию менее 0,15%, можно использовать следующий SQL.
ВЫБРАТЬ * ОТ агентов ГДЕ комиссия
Вот результат для приведенного выше утверждения.
sqlite> ВЫБРАТЬ код_агента, имя_агента, комиссию ОТ агентов, ГДЕ комиссияЕсли вы хотите видеть только код_агента, имя_агента и комиссию от агентов, которые получают комиссию более 0,12%, можно использовать следующий SQL.
ВЫБЕРИТЕ код_агента, имя_агента, комиссиюFROM агентов ГДЕ комиссия> .12;
Вот результат для приведенного выше утверждения.
sqlite> ВЫБРАТЬ код_агента, имя_агента, комиссия ...> ОТ агентов ГДЕ комиссия> .12; КОД_АГЕНТА ИМЯ_АГЕНТА КОМИССИЯ ---------- --------- - ---------- A007 Ramasundar 0.15A003 Alex 0.13A011 Ravi Kumar 0.15A010 Santakumar 0.14A005 Anderson 0.13A001 Subbarao 0.14A006 McDen 0.15A004 Ivan 0.15Если вы только хотите см. города из Канады, можно использовать следующий SQL.
SELECT * FROM locations WHERE country_id = 'CA';
Вот результат для приведенного выше оператора.
sqlite> ВЫБРАТЬ * ИЗ местоположений WHERE country_id = 'CA'; location_id street_address postal_code city state_province country_id ----------- ----------- ---- ----------- ---------- -------------- ---------- 1800 147 Spadina Ave M5V 2L7 Toronto Ontario CA1900 6092 Boxwood St YSW 9T2 Whitehorse Yukon CAWHERE с AND и OR
Вы можете использовать AND и OR с предложением WHERE для фильтрации строки из таблиц.
Вот пример таблицы сотрудников:
Если вы хотите увидеть employee_id, first_name, last_name, job_id, manager_id и отделы, которые принадлежат Department_id 80, можно использовать следующий SQL.
ВЫБЕРИТЕ employee_id, first_name, last_name, job_id, manager_id, Department_id FROM employeeWHERE department_id = 80;
Вот результат.
Пример вывода:
employee_id first_name last_name job_id manager_id Department_id ----------- ---------- - -------- ---------- ---------- ------------- 145 Джон Рассел SA_MAN 100 80146 Karen Partners SA_MAN 100 80147 Alberto Errazuriz SA_MAN 100 80148 Gerald Cambrault SA_MAN 100 80149 Eleni Zlotkey SA_MAN 100 80150 Peter Tucker SA_REP 145 80151 David Bernstein SA_REP 145 80 .........Вот другой пример , если вы хотите увидеть employee_id, first_name, last_name, job_id, manager_id и департаменты, которые принадлежат Department_id 80 и должны находиться под менеджером с идентификатором 100, можно использовать следующий SQL.
ВЫБЕРИТЕ employee_id, first_name, last_name, job_id, manager_id, Department_id FROM employeeWHERE department_id = 80 AND manager_id = 100;
Здесь результат.
employee_id first_name last_name job_id manager_id Department_id ----------- ---------- ---------- ---------- ---------- ------------- 145 Джон Рассел SA_MAN 100 80146 Karen Partners SA_MAN 100 80147 Alberto Errazuriz SA_MAN 100 80148 Джеральд Cambrault SA_MAN 100 80149 Eleni Zlotkey SA_MAN 100 80Теперь давайте найдем тех сотрудников, чей идентификатор работы может быть CLERK или может быть в отделе с идентификатором 80 и должен находиться под руководством менеджера, который является владелец идентификатора 147.
Вот заявление.
ВЫБЕРИТЕ employee_id, first_name, last_name, job_id, manager_id, Department_id FROM employeeWHERE job_id = 'SH_CLERK' OR Department_id = 80 AND manager_id = 147;
Вот результат приведенного выше утверждения.
employee_id first_name last_name job_id manager_id Department_id ----------- ---------- ---------- ---- ------ ---------- ------------- 162 Клара Вишни SA_REP 147 80163 Даниэль Грин SA_REP 147 80164 Маттеа Марвинс SA_REP 147 80165 Дэвид Ли SA_REP 147 80166 Sundar Ande SA_REP 147 80167 Amit Banda SA_REP 147 80180 Winston Taylor SH_CLERK 120 50181 Jean Fleaur SH_CLERK 120 50182 Martha Sullivan SH_CLERK 120 50183 Girard Geoni SH_CLERK 120 50184 Nandita Sarchand SH_CLERK 121 50 ....Новый результат показывает, что идентификатор задания 'SA_REP' также отображается вместе с 'SH_CLERK', поскольку реализация предложения OR и manager_id 147 появляются только для тех отделов, которые имеют идентификатор 80.
Оператор AND имеет более высокий приоритет, чем оператор OR, что означает, что он вычисляется первым. Таким образом, запрос действительно выглядит следующим образом:
ВЫБЕРИТЕ employee_id, first_name, last_name, job_id, manager_id, department_id FROM employeeWHERE job_id = 'SH_CLERK' OR (Department_id = 80 AND manager_id = 147);
Которая выбирает всех сотрудников для 'SH_CLERK' и только тех сотрудников отдела № 80, которые находятся под менеджером с идентификатором 147. Круглые скобки могут быть используется для уточнения запроса и фактического получения желаемых хайроллеров.
DISTINCT
Ключевое слово DISTINCT используется для выбора только уникальные элементы из набора результатов, или можно сказать, что он удаляет повторяющиеся строки из результата запроса.
Если вы хотите получить уникальную комбинацию Department_id и manager_id, можно использовать следующий SQL.
ВЫБРАТЬ РАЗЛИЧНЫЙ идентификатор_отдела, идентификатор_управленияFROM сотрудников;
Вот результат.
Department_id manager_id ------------- ---------- 9090 10060 10260 103100 101100 10830 10030 11450 10050 12050 12150 12250 12350 12480 10080 14580 14680 14780 14880 149 14910 10120 10020 20140 10170 101110 101110 205Приведенный выше результат показывает, что появилась только уникальная комбинация Department_id и manager_id. Теперь, если мы добавим столбец job_id с указанным выше запросом, посмотрим, что произойдет.
SELECT DISTINCT Department_id, manager_id, job_idFROM employee;
Вот результат.
Department_id manager_id job_id ------------- ---------- ---------- 90 AD_PRES90 100 AD_VP60 102 IT_PROG60 103 IT_PROG100 101 FI_MGR100 108 FI_ACCOUNT30 100 PU_MAN30 114 PU_CLERK50 100 ST_MAN50 120 ST_CLERK50 121 ST_CLERK50 122 ST_CLERK50 123 ST_CLERK50 124 ST_CLERK80 100 SA_MAN80 145 SA_REP80 146 SA_REP80 147 SA_REP80 148 SA_REP80 149 SA_REP 149 SA_REP50 120 SH_CLERK50 121 SH_CLERK50 122 SH_CLERK50 123 SH_CLERK50 124 SH_CLERK10 101 AD_ASST20 100 MK_MAN20 201 MK_REP40 101 HR_REP70 101 PR_REP110 101 AC_MGR110 205 AC_ACCOUNTЗдесь, в приведенном выше результате, уникальная комбинация трех столбцов и естественного количества строк изменяется, и здесь появляется больше строк, чем раньше.
ORDER BY
Предложение ORDER BY используется для сортировки возвращаемого набора данных. За предложением ORDER BY следует столбец, по которому мы выполняем сортировку. Направление по умолчанию для ORDER BY - восходящее; результаты упорядочены от наименьшего к наибольшему. Чтобы указать направление ORDER BY, используйте ключевое слово DESC или ASC:
Если вы хотите отсортировать результат по зарплате для тех сотрудников, у которых нет отдела. ниже 50, можно использовать следующий SQL.
ВЫБЕРИТЕ employee_id, first_name, last_name, job_id, salary, Department_id FROM employeeWHERE Department_id
Вот результат.
employee_id first_name last_name job_id оклад ID отдела ----------- ---------- ---------- ---- ------ ---------- ------------- 119 Карен Кольменарес PU_CLERK 2500 30118 Гай Химуро PU_CLERK 2600 30117 Сигал Тобиас PU_CLERK 2800 30116 Шелли Байда PU_CLERK 2900 30115 Alexander Khoo PU_CLERK 3100 30200 Jennifer Whalen AD_ASST 4400 10202 Pat Fay MK_REP 6000 20203 Susan Mavris HR_REP 6500 40114 Den Raphaely PU_MAN 11000 30201 Michael Hartstein MK_MAN 13000 20Если вы хотите отсортировать результат по зарплате в по убыванию для тех сотрудников, у которых нет отдела. ниже 50, можно использовать следующий SQL.
ВЫБЕРИТЕ employee_id, first_name, last_name, job_id, salary, Department_id FROM employeeWHERE Department_id
Здесь это результат.
employee_id first_name last_name job_id оклад ID отдела ----------- ---------- ---------- ---- ------ ---------- ------------- 201 Майкл Хартштейн MK_MAN 13000 20114 Den Raphaely PU_MAN 11000 30203 Susan Mavris HR_REP 6500 40202 Pat Fay MK_REP 6000 20200 Jennifer Whalen AD_ASST 4400 10115 Alexander Khoo PU_CLERK 3100 30116 Shelli Baida PU_CLERK 2900 30117 Sigal Tobias PU_CLERK 2800 30118 Guy Himuro PU_CLERK 2600 30119 Karen Colmenares PU_CLERK 2500 30Результат запроса может быть больше, чем один столбец. Строки с одинаковым значением для первого столбца ORDER BY дополнительно упорядочиваются по дополнительному столбцу (столбцам):
Вот пример.
Если хотите чтобы упорядочить результат сначала по столбцу Department_id в возрастающем порядке, а затем, какие отделы совпадают, они будут упорядочены по убыванию в соответствии с зарплатой, можно использовать следующий SQL.
ВЫБЕРИТЕ employee_id, first_name, last_name, job_id, salary, Department_id FROM employeeWHERE Department_id
Вот результат.
employee_id first_name last_name job_id оклад ID отдела ----------- ---------- ---------- ---- ------ ---------- ------------- 200 Дженнифер Уэлен AD_ASST 4400 10201 Майкл Хартштейн MK_MAN 13000 20202 Пэт Фэй MK_REP 6000 20114 Ден Рафаэли PU_MAN 11000 30115 Александр Кху PU_CLERK 3100 30116 Шелли Байда PU_CLERK 2900 30117 Сигал Тобиас PU_CLERK 2800 30118 Гай Химуро PU_CLERK 2600 30119 Карен Кольменарес PU_CLERK 2500 30203 Сьюзан Маврис HR_REP 6500 40Кажется, что результат 20 и выше, чем выше 30 имеют более одного ряда, и они расположены по убыванию в соответствии с зарплатой, то есть наибольшая зарплата будет первой..
ORDE BY с DISTINCT
Если вы хотите получить уникальную комбинацию Department_id, manager_id и job_id по порядку в соответствии с отделом по возрастанию можно использовать следующий SQL.
ВЫБРАТЬ РАЗЛИЧНЫЙ идентификатор_отдела, идентификатор_управления, идентификатор_заданияFROM сотрудников ЗАКАЗАТЬ ПО идентификатору_отдела;
Вот результат.
Department_id manager_id job_id ------------- ---------- ---------- 10 101 AD_ASST20 100 MK_MAN20 201 MK_REP30 100 PU_MAN30 114 PU_CLERK40 101 HR_REP50 100 ST_MAN50 120 ST_CLERK50 121 ST_CLERK50 122 ST_CLERK50 123 ST_CLERK50 124 ST_CLERK50 120 SH_CLERK50 121 SH_CLERK50 122 SH_CLERK50 123 SH_CLERK50 124 SH_CLERK60 102 IT_PROG60 103 IT_PROG70 101 PR_REP80 100 SA_MAN80 145 SA_REP80 146 SA_REP80 147 SA_REP80 148 SA_REP80 149 SA_REP90 AD_PRES90 100 AD_VP100 101 FI_MGR100 108 FI_ACCOUNT110 101 AC_MGR110 205 AC_ACCOUNT 149 SA_REPGROUP BY
Предложение GROUP BY используется для объединения записей базы данных с одинаковыми значениями в единую запись. Он часто используется с функциями агрегирования.
Предложение GROUP BY используется для агрегирования данных в одну строку, в которой повторяется значение одного или нескольких указанных столбцов. Он используется для объединения записей базы данных с одинаковыми значениями в одну запись. Часто используется с функциями агрегирования. Предложение GROUP BY берет список выражений, обычно имена столбцов из результата, и агрегирует данные для каждого выражения. Задача предложения GROUP BY состоит в том, чтобы вычислять агрегаты для всего результата, а также можно разделить этот результат на группы строк с указанными значениями и вычислить агрегаты для каждой группы за один шаг.
Предложение GROUP BY находится между предложением WHERE и предложением SELECT. Он получает вывод из WHERE и разбивает его на группы строк, которые имеют общее значение (или значения) для определенного столбца (или столбцов). Затем эти группы передаются в предложение SELECT.
Процесс группировки выполняется в два этапа. Во-первых, выражение GROUP BY организовало строки таблицы в разные группы. После определения групп заголовок SELECT определяет, как эти группы объединяются в одну строку. В итоговой таблице будет одна строка для каждой группы.
Если вы хотите найти общую зарплату для каждого job_id, можно использовать следующий SQL.
ВЫБЕРИТЕ job_id как Обозначение, СУММ (зарплата) «Общая зарплата» ОТ сотрудников ГРУППА ПО job_id;
Вот результат /p>
Обозначение Общая заработная плата ----------- ------------ АККАУНТ 8300AC_MGR 12000AD_ASST 4400AD_PRES 24000AD_VP 34000FI_ACCOUNT 39600FI_MGR 12000HR_REP 6500IT_PROG 28800MK_MAN 13000MK_REP 6000PR_ERPAN 11000MK_REP 6000PR_REPAN 10000PU 250500SH_CLERK 64300ST_CLERK 55700ST_MAN 36400Если вы хотите найти общее количество сотрудников по каждому назначению, можно использовать следующий SQL.
ВЫБЕРИТЕ job_id как Обозначение, COUNT (*) «Количество сотрудников» FROM employeeGROUP BY job_id;
Вот результат
Обозначение Количество сотрудников ----------- ------------------- AC_ACCOUNT 1AC_MGR 1AD_ASST 1AD_PRES 1AD_VP 2FI_ACCOUNT 5FI_MGR 1HR_REP 1IT_PROG 5MK_MAN 1MK_REP 1PR_REP 1PU_CLERK 5PU_MAN 1SA_MAN 5SA_REP 30SH_CLERK 20ST_CLERK 20ST_MAN 5GROUP BY с #, чтобы найти
общая зарплата для каждого job_id, который принадлежит отделу с идентификационным номером ниже 80, можно использовать следующий SQL.
ВЫБЕРИТЕ job_id как Обозначение, SUM (зарплата) «Общая зарплата» ОТ сотрудников ГДЕ Department_id
Вот результат
Обозначение Общая зарплата ----------- ------------ AD_ASST 4400HR_REP 6500IT_PROG 28800MK_MAN 13000MK_REP 6000PR_REP 10000PU_CLERK 13900PU_MAN 11000SH_CLERK 64300ST_CLERK 55700ST_MAN 36400GROUP BY и ORDER BY
Если вы хотите найти общее количество сотрудников по каждому назначению в порядке от наибольшего до наименьшее количество сотрудников, можно использовать следующий SQL.
ВЫБЕРИТЕ job_id как Обозначение, COUNT (*) «Количество сотрудников» FROM employeeGROUP BY job_idORDER BY COUNT (*) DESC;
Вот результат
Обозначение Количество сотрудников ----------- ------------------- SA_REP 30SH_CLERK 20ST_CLERK 20FI_ACCOUNT 5IT_PROG 5PU_CLERK 5SA_MAN 5ST_MAN 5AD_VP 2AC_ACCOUNT 1AC_MGR 1AD_ASST 1AD_PRES 1FI_MGR 1HR_REP 1MK_MAN 1MK_REP 1HR_REP 1MK_MAN 1MK_REP 1PR_REP> 1MK_REP_REP 1PR_MAN> 1MK_REP> # # # Сильный # функционально идентичен предложению WHERE. Он используется для ограничения записей на основе итогового значения группировки. Предложения .HAVING должны содержать только выражения фильтра, зависящие от вывода GROUP BY. Основное различие между предложением WHERE и предложением HAVING заключается в том, что предложение HAVING обрабатывается после предложений GROUP BY и SELECT, что позволяет фильтровать строки на основе результатов любого агрегата GROUP BY, в то время как предложение WHERE может ссылаться только на выражения, которые не содержат агрегатные функции.Пример:
Если вы хотите найти общее количество сотрудников по обозначениям, которые содержат или более 5 сотрудников можно использовать следующий SQL.
ВЫБЕРИТЕ job_id как Обозначение, COUNT (*) «Количество сотрудников» FROM employeeGROUP BY job_idHAVING COUNT (*)> = 5;
Вот результат
Обозначение Количество сотрудников ----------- ------------------- FI_ACCOUNT 5IT_PROG 5PU_CLERK 5SA_MAN 5SA_REP 30SH_CLERK 20ST_CLERK 20ST_MAN 5HAVING with ORDER BY
Если вы хотите найти общее количество сотрудников по обозначениям, которые содержат не менее 5 сотрудников, и результат будет в порядке от наибольшего к случайному количеству сотрудников, можно использовать следующий SQL.
ВЫБЕРИТЕ job_id как Обозначение, COUNT (*) «Количество сотрудников» FROM employeeGROUP BY job_idHAVING COUNT (*)> = 5ORDER BY COUNT (*) DESC;
Вот результат
Обозначение Количество сотрудников ----------- ------------- ------ SA_REP 30SH_CLERK 20ST_CLERK 20FI_ACCOUNT 5IT_PROG 5PU_CLERK 5SA_MAN 5ST_MAN 5HAVING with WHERE
Если вы хотите найти общую требуемую зарплату за месяц, которая находится на одном лаке или выше, для обозначения того, что ID ниже 80, в порядке от наибольшей к наименьшей зарплате можно использовать следующий SQL.
ВЫБЕРИТЕ job_id как Обозначение, СУММ (зарплата) «Общая зарплата» ОТ сотрудников ГДЕУ Department_id = 10000ORDER BY SUM (зарплата); >
Вот результат
Обозначение Общая зарплата ----------- ------------ PR_REP 10000PU_MAN 11000MK_MAN 13000PU_CLERK 13900IT_PROG 28800ST_MAN 36400ST_CLERK 55700SH_CLERK 64300