ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 26.10.2023
Просмотров: 50
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Краткий справочник по SQL
Оператор «SELECT»
Толмачев П.В. (
www.ptolmachev.ru
). Страница 1 из 16
Оглавление
Общий синтаксис SQL .................................................................................................................................. 2
Общий формат инструкции SQL ................................................................................................................. 2
Предложение SELECT .................................................................................................................................. 2
Предложение FROM .................................................................................................................................... 3
Предложение WHERE .................................................................................................................................. 3
Сортировка результатов: предложение ORDER BY ................................................................................... 3
Работа со сводными данными: предложения GROUP BY и HAVING ....................................................... 4
Задание полей, которые не используются в статистической функции: предложение GROUP BY ....... 4
Ограничение статистических значений с помощью условий группировки: предложение HAVING .... 5
Объединение результатов запроса: оператор UNION ............................................................................. 5
Использование псевдостолбцов (литералов) ........................................................................................... 6
Конкатенация ............................................................................................................................................... 6
Псевдонимы столбцов (квалификтор AS) .................................................................................................. 7
Агрегатные функции .................................................................................................................................... 7
Операции сравнения ................................................................................................................................... 7
BETWEEN ....................................................................................................................................................... 8
IN ................................................................................................................................................................... 9
LIKE ................................................................................................................................................................ 9
IS NULL ........................................................................................................................................................ 10
Устранение дублирования (модификатор DISTINCT) ............................................................................. 10
Соединение (JOIN) ..................................................................................................................................... 11
Внутренние соединения ........................................................................................................................... 12
Самосоединения ....................................................................................................................................... 15
Внешние соединения ................................................................................................................................ 15
Толмачев П.В. (
www.ptolmachev.ru
). Страница 2 из 16
Общий синтаксис SQL
Инструкция SQL состоит из нескольких частей, называемых предложениями.
Каждое предложение в инструкции SQL имеет свое назначение. Некоторые предложения являются обязательными. В приведенной ниже таблице указаны предложения SQL, используемые чаще всего.
Предложение
SQL
Описание
Обязательное
SELECT
Определяет поля, которые содержат нужные данные. Да
FROM
Определяет таблицы, которые содержат поля, указанные в предложении SELECT.
Да
WHERE
Определяет условия отбора полей, которым должны соответствовать все записи, включаемые в результаты.
Нет
ORDER BY
Определяет порядок сортировки результатов.
Нет
GROUP BY
В инструкции SQL, которая содержит статистические функции, определяет поля, для которых в предложении SELECT не вычисляется сводное значение.
Только при наличии таких полей
HAVING
В инструкции SQL, которая содержит статистические функции, определяет условия, применяемые к полям, для которых в предложении SELECT вычисляется сводное значение.
Нет
Общий формат инструкции SQL
SELECT Адрес, Название
FROM Контакты
WHERE Город = «Ростов»
;
Примечания:
Access игнорирует разрывы строк в инструкции SQL. Несмотря на это, каждое предложение рекомендуется начинать с новой строки, чтобы инструкцию SQL было удобно читать как тому, кто ее написал, так и всем остальным.
Каждая инструкция SELECT заканчивается точкой с запятой (;). Точка с запятой может стоять как в конце последнего предложения, так и на отдельной строке в конце инструкции SQL.
Читать нужно так: Выбрать данные из полей Адрес и Название таблицы Контакты, где поле Город равно значению «Ростов»
Предложение SELECT
SELECT Адрес, Название
Толмачев П.В. (
www.ptolmachev.ru
). Страница 3 из 16
Это предложение SELECT. Оно содержит оператор (SELECT), за которым следуют два идентификатора (Адрес и Название).
Если идентификатор содержит пробелы или специальные знаки (например, зарезервированные слова (table, union)), он должен быть заключен в прямоугольные скобки. В Oracle – в двойные кавычки “ ”
В предложении SELECT не нужно указывать таблицы, в которых содержатся поля, и нельзя задать условия отбора, которым должны соответствовать данные, включаемые в результаты.
В инструкции SELECT предложение SELECT всегда стоит перед предложением
FROM.
Предложение FROM
FROM Контакты
Это предложение FROM. Оно содержит оператор (FROM), за которым следует идентификатор (Контакты).
В предложении FROM не указываются поля для выборки.
Предложение WHERE
WHERE Город = «Ростов»
Это предложение WHERE. Оно содержит оператор (WHERE), за которым следует выражение (Город=«Ростов»).
Примечание: В отличие от предложений SELECT и FROM предложение WHERE является необязательным элементом инструкции SELECT.
Сортировка результатов: предложение ORDER BY
Во всех СУБД можно сортировать результаты запроса в таблице. Используя предложение ORDER BY, в запросе также можно указать способ сортировки результатов при выполнении запроса. Если используется предложение ORDER BY, оно должно находиться в конце инструкции SQL. ORDER BY – не обязательное предложение.
Предложение ORDER BY содержит список полей, для которых нужно выполнить сортировку, в том же порядке, в котором будут применена сортировка.
Предположим, например, что результаты сначала нужно отсортировать по убыванию значения поля «Организация», а затем, если присутствуют записи с одинаковым значением поля «Организация», отсортировать их по возрастанию
Толмачев П.В. (
www.ptolmachev.ru
). Страница 4 из 16
значения поля «Адрес». Предложение ORDER BY будет выглядеть следующим образом:
ORDER BY Организация DESC, Адрес
Примечание: По умолчанию в Access выполняется сортировка по возрастанию (от А до Я, от наименьшего к наибольшему, ключевое слово ASC – обычно не пишется, но подразумевается). Чтобы вместо этого выполнить сортировку значений по убыванию, необходимо указать ключевое слово DESC.
Порядок строк может задаваться одним из двух способов:
•именами столбцов
•номерами столбцов.
Работа со сводными данными: предложения GROUP BY и
HAVING
Иногда возникает необходимость работы со сводными данными, такими как итоговые продажи за месяц или самые дорогие товары на складе. Для этого в предложении SELECT к полю следует применить агрегатная функция. Например, если в результате выполнения запроса нужно получить количество адресов каждой компании, предложение SELECT может выглядеть следующим образом:
SELECT COUNT(Адрес), Компания
Возможность употребления той или иной статистической функции зависит от типа данных в поле или используемого выражения.
Задание полей, которые не используются в статистической
функции: предложение GROUP BY
При использовании статистических функций обычно необходимо создать предложение GROUP BY. В предложении GROUP BY указываются все поля, к которым не применяется статистическая функция. Если статистические функции применяются ко всем полям в запросе, предложение GROUP BY создавать не нужно.
Предложение GROUP BY должно следовать сразу же за предложением WHERE или
FROM, если предложение WHERE отсутствует. В предложении GROUP BY поля указываются в том же порядке, что и в предложении SELECT.
Продолжим предыдущий пример. Пусть в предложении SELECT статистическая функция применяется только к полю Адрес, тогда предложение GROUP BY будет выглядеть следующим образом:
GROUP BY Компания
Толмачев П.В. (
www.ptolmachev.ru
). Страница 5 из 16
Ограничение статистических значений с помощью условий
группировки: предложение HAVING
Если необходимо указать условия для ограничения результатов, но поле, к которому их требуется применить, используется в статистической функции, предложение
WHERE использовать нельзя. Вместо него следует использовать предложение
HAVING. Предложение HAVING работает так же, как и WHERE, но используется для статистических данных.
Предположим, например, что к первому полю в предложении SELECT применяется функция AVG (которая вычисляет среднее значение):
SELECT COUNT(Адрес), Компания
Чтобы ограничить результаты запроса на основе значения функции COUNT, к этому полю нельзя применить условие отбора в предложении WHERE. Вместо него условие следует поместить в предложение HAVING. Например, если нужно, чтобы запрос возвращал строки только в том случае, если у компании имеется несколько адресов, можно использовать следующее предложение HAVING:
HAVING COUNT(Адрес)>1
Примечание: Запрос может включать и предложение WHERE, и предложение
HAVING, при этом условия отбора для полей, которые не используются в статистических функциях, указываются в предложении WHERE, а условия для полей, которые используются в статистических функциях, — в предложении
HAVING.
Объединение результатов запроса: оператор UNION
Оператор UNION используется для одновременного просмотра всех данных, возвращаемых несколькими сходными запросами на выборку, в виде объединенного набора.
Оператор UNION позволяет объединить две инструкции SELECT в одну.
Объединяемые инструкции SELECT должны иметь одинаковое число и порядок выходных полей с такими же или совместимыми типами данных. При выполнении запроса данные из каждого набора соответствующих полей объединяются в одно выходное поле, поэтому выходные данные запроса имеют столько же полей, сколько и каждая инструкция SELECT по отдельности.
Примечание: В запросах на объединение числовой и текстовый типы данных являются совместимыми.
Используя оператор UNION, можно указать, должны ли в результаты запроса включаться повторяющиеся строки, если таковые имеются. Для этого следует использовать ключевое слово ALL.
Толмачев П.В. (
www.ptolmachev.ru
). Страница 6 из 16
Запрос на объединение двух инструкций SELECT имеет следующий базовый синтаксис:
SELECT field_1
FROM table_1
UNION [ALL]
SELECT field_a
FROM table_a
;
Предположим, например, что имеется две таблицы, которые называются «Товары» и «Услуги». Обе таблицы содержат поля с названием товара или услуги, ценой и сведениями о гарантии, а также поле, в котором указывается эксклюзивность предлагаемого товара или услуги. Несмотря на то, что в таблицах «Продукты» и
«Услуги» предусмотрены разные типы гарантий, основная информация одна и та же
(предоставляется ли на отдельные продукты или услуги гарантия качества). Для объединения четырех полей из двух таблиц можно использовать следующий запрос на объединение:
SELECT name, price, warranty_available, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee_available, exclusive_offer
FROM Services
;
Использование псевдостолбцов (литералов)
Для придания большей наглядности получаемому результату можно использовать литералы. Литералы - это строковые константы, которые применяются наряду с наименованиями столбцов и, таким образом, выступают в роли "псевдостолбцов".
Строка символов, представляющая собой литерал, должна быть заключена в одинарные или двойные скобки.
SELECT first_name, "получает", salary,
"долларов в год"
FROM employee
FIRST_NAME SALARY
Robert получает 105900.00 долларов в год
Bruce получает 97500.00 долларов в год
Конкатенация
Имеется возможность соединять два или более столбца, имеющие строковый тип, друг с другом, а также соединять их с литералами. Для этого используется операция конкатенации (||).
SELECT "сотрудник " || first_name || " " ||
Толмачев П.В. (
www.ptolmachev.ru
). Страница 7 из 16
last_name
FROM employee получить список всех сотрудников
============================================== сотрудник Robert Nelson сотрудник Bruce Young сотрудник Kim Lambert
Псевдонимы столбцов (квалификтор AS)
Для придания наглядности получаемым результатам наряду с литералами в списке выбираемых элементов можно использовать квалификатор AS. Данный квалификатор заменяет в результирующей таблице существующее название столбца на заданное. Это наиболее эффективный и простой способ создания заголовков (к сожалению, InterBase, как уже отмечалось, не поддерживает использование русских букв в наименовании столбцов).
SELECT count(*) AS number
FROM employee подсчитать количество служащих
NUMBER
===========
42
Агрегатные функции
К агрегирующим функциям относятся функции вычисления суммы (SUM), максимального (MAX) и минимального (MIN) значений столбцов, арифметического среднего (AVG), а также количества строк, удовлетворяющих заданному условию (COUNT).
Операции сравнения
Рассмотрим операции сравнения. Реляционные операторы могут использоваться с различными элементами. При этом важно соблюдать следующее правило: элементы
должны иметь сравнимые типы. Если в базе данных определены домены, то сравниваемые элементы должны относиться к одному домену.
Что же может быть элементом сравнения? Элементом сравнения может выступать:
значение поля
литерал
арифметическое выражение
Толмачев П.В. (
www.ptolmachev.ru
). Страница 8 из 16
агрегирующая функция
другая встроенная функция
значение (значения), возвращаемые подзапросом.
Операторы сравнения o
= равно o
<> не равно o
!= не равно o
> больше o
< меньше o
>= больше или равно o
<= меньше или равно
SELECT first_name, last_name, dept_no
FROM employee
WHERE job_code = "Admin" получить список сотрудников (и номера их отделов), занимающих должность администраторов
FIRST_NAME LAST_NAME DEPT_NO
Terri Leev 000
Ann Bennet 120
BETWEEN
Предикат BETWEEN задает диапазон значений, для которого выражение принимает значение true. Разрешено также использовать конструкцию NOT
BETWEEN.
SELECT first_name, last_name, salary
FROM employee
WHERE salary BETWEEN 20000 AND 30000 получить список сотрудников, годовая зарплата которых больше 20000 и меньше
30000
FIRST_NAME LAST_NAME SALARY
Ann Bennet 22935.00
Kelly Brown 27000.00
Тот же запрос с использованием операторов сравнения будет выглядеть следующим образом:
SELECT first_name, last_name, salary
Толмачев П.В. (
www.ptolmachev.ru
). Страница 9 из 16
FROM employee
WHERE salary >= 20000
AND salary <= 30000
IN
Предикат IN проверяет, входит ли заданное значение, предшествующее ключевому слову "IN" (например, значение столбца или функция от него) в указанный в скобках список. Если заданное проверяемое значение равно какому-либо элементу в списке, то предикат принимает значение true. Разрешено также использовать конструкцию NOT IN.
SELECT first_name, last_name, job_code
FROM employee
WHERE job_code IN ("VP", "Admin", "Finan") получить список сотрудников, занимающих должности "вице-президент",
"администратор", "финансовый директор"
FIRST_NAME LAST_NAME JOB_CODE
Robert Nelson VP
Terri Lee Admin
Stewart Hall Finan
LIKE
Предикат LIKE используется только с символьными данными. Он проверяет, соответствует ли данное символьное значение строке с указанной маской. В качестве маски используются все разрешенные символы (с учетом верхнего и нижнего регистров), а также специальные символы:
•% - замещает любое количество символов (в том числе и 0),
•_ - замещает только один символ.
Разрешено также использовать конструкцию NOT LIKE.
SELECT first_name, last_name
FROM employee
WHERE last_name LIKE "F%" получить список сотрудников, фамилии которых начинаются с буквы "F"
FIRST_NAME LAST_NAME
Phil
Forest
Pete
Fisher
Roberto
Ferrari
SELECT first_name, last_name
FROM employee
Толмачев П.В. (
www.ptolmachev.ru
). Страница 10 из 16
WHERE first_name LIKE "%er" получить список сотрудников, имена которых заканчиваются буквами "er"
FIRST_NAME LAST_NAME
De Souza
RogerRogerWalter
IS NULL
В SQL-запросах NULL означает, что значение столбца неизвестно. Поисковые условия, в которых значение столбца сравнивается с NULL, всегда принимают значение unknown (и, соответственно, приводят к ошибке), в противоположность true или false, т.е.
WHERE dept_no = NULL или даже WHERE NULL = NULL.
Предикат IS NULL принимает значение true только тогда, когда выражение слева от ключевых слов "IS NULL" имеет значение null (пусто, не определено).
Разрешено также использовать конструкцию IS NOT NULL, которая означает "не пусто", "имеет какое-либо значение".
SELECT department, mngr_no
FROM department
WHERE mngr_no IS NULL получить список отделов, в которых еще не назначены начальники
DEPARTMENT MNGR_NO
Marketing
Software Products Div.
Устранение дублирования (модификатор DISTINCT)
Дублированными являются такие строки в результирующей таблице, в которых идентичен каждый столбец.
Иногда (в зависимости от задачи) бывает необходимо устранить все повторы строк из результирующего набора. Этой цели служит модификатор DISTINCT. Данный модификатор может быть указан только один раз в списке выбираемых элементов и действует на весь список.
SELECT job_code
FROM employee получить список должностей сотрудников