Какие опции могут быть использованы в операторах выборки данных

Какие опции могут быть использованы в операторах выборки данных

Выборка данных: оператор SELECT

Для формирования запросов на выборку данных в SQL используется оператор SELECT. Его формат представлен ниже:

SELECT [ ALL | DISTINCT ] select_item_cominalist FROM table_reference_commalist [ WHERE conditional_expression ]

[ GROUP BY column_name_commalist ]

[ ORDER BY order_item_commalist ]

SELECT является достаточно сложным оператором, позволяющим выбирать данные из одной или нескольких таблиц, выполнять группировку, обработку данных с помощью агрегатных функций, формировать вложенные запросы и т.д. Выражение SELECT обрабатывается целиком, а не "построчно", как обычно бывает в языках программирования. В несколько обобщенном виде схема выполнения оператора SELECT выглядит следующим образом:

  • 1) выполняется раздел FROM;
  • 2) выполняется раздел WHERE (если есть);
  • 3) выполняется GROUP BY (если есть);
  • 4) выполняется HAVING (если есть);
  • 5) выполняются определения в разделе SELECT;
  • 6) выполняется ORDER BY (если есть).

Начнем с рассмотрения обязательного раздела SELECT. В нем указывается список элементов выборки select-item-commalist, который не должен быть пустым. Также может использоваться ключевое слово ALL или DISTINCT. Первое из них указывает, что в результате запроса могут быть повторяющиеся строки, второе – что повторения отбрасываются. Например, используется ключевое слово DISTINCT и есть три совпадающих строки, тогда в результате из них останется только одна. Когда явно ничего не указано, то подразумевается ALL.

Вернемся к списку элементов выборки. В нем через запятую могут указываться имена столбцов, константы, операции над столбцами или функции, возвращающие скалярное значение. Кроме того, может использоваться символ "*", обозначающий все столбцы, или <имя таблицы>.*, что указывает на все столбцы данной таблицы.

Перед тем как перейти к рассмотрению примеров, необходимо отметить, что в разделе FROM указываются таблицы, из которых делается выборка. Если через запятую перечислены несколько таблиц, это соответствует их декартову произведению. Следующий запрос позволит получить содержимое всей таблицы Т1:

SELECT * FROM T1 Аналогичный результат даст запрос SELECT Tl.* FROM Т1

Пусть имеется таблица Students, аналогичная представленной в табл. 7.2. Получить перечень номеров студенческих групп без повторения позволит следующий запрос:

SELECT DISTINCT [Group] FROM Students

По поводу этого запроса надо отметить следующее. Во-первых, предполагается, что номер группы может упоминаться в таблице несколько раз. Поэтому для отбрасывания повторений явно указывается ключевое слово DISTINCT. Если бы в перечне столбцов был первичный или альтернативный ключ, это обеспечило бы уникальность строк в результате запроса и DISTINCT можно было бы опустить. Во-вторых, название столбца Group совпадает с названием инструкции SQL. Поэтому в большинстве случаев потребуется явно указать в СУБД, что речь идет о названии столбца. В частности, для MS SQL Server надо будет использовать двойные кавычки или квадратные скобки: [Group].

Рассмотрим пример с заданием имени столбца и использованием текстовой константы в столбце. Если необходимо явно указать, как столбец будет называться в выводимых результатах запроса, это можно сделать в списке элементов выборки в разделе SELECT. Новое имя указывается после исходного названия столбца через пробел или после необязательного ключевого слова "as". Ниже приведен пример, в котором список фамилий и инициалов студентов сопровождается подписью "Фамилия и инициалы":

SELECT DISTINCT ‘Фамилия и инициалы’ as Labell, FIO FROM Students

Подпись задается с помощью строковой константы, которые в SQL берутся в одинарные кавычки. Называться столбец с подписью будет Labell. Результат выполнения этого запроса для набора данных из табл. 7.2 представлен в табл. 7.6. Как отмечалось выше, ключевое слово "as" в SELECT можно пропустить, но иногда оно позволяет сделать текст на SQL более понятным.

Результат запроса

Фамилия и инициалы

Фамилия и инициалы

Фамилия и инициалы

Приведем еще один пример. Пусть в таблице Т находится информация о товарах и их ценах в долларах (столбец PriceUSD). Необходимо вывести идентификатор товара Id и цену в рублях, пересчитав ее по курсу 31 рубль за доллар и назвав столбец PriceRUB. Соответствующий запрос приведен ниже:

SELECT Id, PriceUSD*31 as PriceRUB FROM T Как уже отмечалось выше, раздел FROM содержит список таблиц, данные из которых будут выбираться. Также там могут указываться имена представлений (апгл. view), речь о которых пойдет далее в этой главе. Тема соединения таблиц также будет подробно рассмотрена в параграфе 7.6. Сейчас же рассмотрим пример задания и использования псевдонима таблицы. Пусть необходимо вывести все сочетания номеров студенческих билетов (т.е. сочетания "каждый с каждым"). Для этого надо взять столбцы из результата декартова произведения таблицы Students на саму себя, а чтобы отличать в полученном результате столбцы друг от друга, потребуется ввести псевдоним для таблицы в разделе FROM. Как и в случае названия столбцов, псевдоним для таблицы задается через пробел или с использованием ключевого слова "as":

SELECT Students.StudID, S.StudID FROM Students, Students S

Чтобы лучше разобраться в работе с псевдонимами таблиц, рассмотрим два внешне похожих запроса:

Select * FROM Т2, Т1 и

Select Tl.* FROM Т2 Т1

Первый запрос выводит результат декартова произведения таблиц Т2 и Т1. Во втором запросе таблице Т2 задается псевдоним Т1, после чего из нее выбираются все данные. Здесь работа идет только с одной таблицей.

Также надо отметить, что производная таблица, из которой выбираются данные, может быть определена прямо в разделе FROM, то есть в SQL допустимы конструкции, подобные приведенной ниже:

FROM (Select Id, . FROM MyTabl . ) as T

Перейдем к рассмотрению раздела WHERE. В соответствии с описанным выше порядком выполнения запроса после обработки инструкций в разделе FROM будет сформировано некоторое множество строк. Если в запросе присутствует раздел WHERE, то из этого множества будут отобраны только те строки, для которых приведенное в данном разделе логическое условие даст истину. При этом само условие может быть как простым, так и состоящим из нескольких, связанных логическими операторами NOT, AND, OR (отрицание, логическое "и", логическое "или"). Если раздел WHERE пропущен, дальнейшая обработка будет выполняться для всех строк.

В условиях могут использоваться сравнения: =, <> (не равно), >, <, >=, <=. Ниже приведен пример, выводящий список студентов из группы 382 (здесь учтена особенность синтаксиса для MS SQL Server в части заключения названий столбцов в квадратные скобки):

FROM Students WHERE [Group]=382

Сравнение может производиться не только для чисел, но и для строковых значений (посимвольно), дат и т.д.

Если необходимо получить все значения из интервала, можно использовать конструкцию BETWEEN . AND. . Пусть имеется таблица Book с информацией о книгах, и в ней целочисленный столбец Year, содержащий год издания книги. Получить все книги, изданные с 1990 по 2002 г. включительно, можно с помощью приведенного ниже запроса (поскольку "Year" для MS SQL Server является ключевым словом, название столбца снова в квадратных скобках):

WHERE [Year] BETWEEN 1990 AND 2002 Аналогичный результат даст запрос SELECT *

WHERE [Year]>=1990 AND [Year]<=2002

Если, наоборот, нужны все книги, кроме изданных в этот период, можно использовать конструкцию NOT BETWEEN:

WHERE [Year] NOT BETWEEN 1990 AND 2002 Если нужно проверить определено или нет значение столбца, используется условие IS [NOT] NULL. Тут необходимо напомнить, что NULL означает "не определено", поэтому обычное сравнение с NULL может дать, на первый взгляд, неожиданный результат. Так, проверка условия 1 = 1 всегда даст значение "истина", а условие NULL = NULL должно давать "не определено". Например, если атрибут "цвет машины" у двух машин не определен (в столбце значение NULL), это не означает ни что они одинакового цвета, ни что они разных цветов. В каких-то СУБД могут быть особенности в интерпретации подобного условия, например может генерироваться ошибка. Поэтому, если нужно получить список студентов, номер группы которых не задан, корректный запрос будет выглядеть так:

SELECT * FROM Students WHERE [Group] IS NULL Проверить принадлежность значения столбца некоторому множеству можно с помощью условия вида

<выражение> [NOT] IN (<множество>)

Здесь множество может быть явно задано или формироваться в результате запроса. Следующий запрос выводит строки из таблицы Т1, которые относятся к перечисленным в скобках городам:

SELECT * FROM T1

WHERE CityName IN (‘Санкт-Петербург’, ‘Псков’,

Если надо получить строки, в которых поле CityName имеет значение, не использовавшееся в таблице Т2, запрос будет следующим:

SELECT * FROM T1

WHERE CityName NOT IN (

SELECT DISTINCT CityName FROM T2)

Вложенные запросы (подзапросы) будут более подробно рассмотрены далее. Сейчас хотелось бы обратить внимание на то, что в запросах, подобных приведенному выше, подзапрос должен возвращать только один столбец. Например, следующий запрос в большинстве СУБД приведет к ошибке:

SELECT * FROM T1

WHERE CityName NOT IN (

SELECT Id, CityName FROM T2)

При работе с вложенными запросами (подзапросами) также используется инструкция [NOT] EXISTS (<подзапрос>). EXISTS возвращает значение "истина" (true), если результаты подзапроса содержат хотя бы одну строку. Если подзапрос возвратит пустое множество строк, EXISTS примет значение "ложь" (false). Примеры использования этой конструкции будут приведены далее.

При работе с символьными строками часто требуется найти строку, соответствующую некоторому шаблону. Например, в столбце хранятся фамилия и инициалы, а нужно выбрать всех Ивановых. Подобные задачи можно решать, используя в разделе WHERE оператор сравнения с шаблоном LIKE. Его формат:

<строковое_выражение> [NOT] LIKE <шаблон>

При описании шаблона в предикате LIKE можно использовать символ "%", обозначающий строку любого размера, включая пустую строку, и символ "_" – любой одиночный символ. Шаблон заключается в одинарные кавычки. Таким образом, если из таблицы Students надо выбрать записи о студентах, чья фамилия начинается на "Ив", запрос будет выглядеть так: SELECT * FROM Students WHERE FIO LIKE ‘Ив%’

Ключевое слово ESCAPE позволяет задать символьную последовательность, "экранирующую" символ подстановки. Когда в заданном с помощью LIKE шаблоне встречается эта последовательность, следующий за ней символ подстановки рассматривается как обычный символ. Например, требуется из таблицы DevTab выбрать строки, в которых в столбце DevName второй символ – "%".

Если в качестве экранирующей последовательности использовать восклицательный знак, запрос будет выглядеть следующим образом:

SELECT * FROM DevTab

WHERE DevName LIKE ‘_!%%’ ESCAPE ‘!’

В ряде диалектов SQL возможности LIKE дополнительно расширяются. Например, MS SQL Server 2008 допускает использование шаблона в виде списка или диапазона символов. Квадратные скобки со списком символов означают один символ из заданных в списке, с диапазоном символов – символ из заданного диапазона; символ ^ и список или диапазон символов – один любой символ, кроме указанных.

Следующий запрос выведет записи о студентах, чья фамилия начинается с букв от "А" до "И":

SELECT * FROM Students WHERE FIO LIKE ‘[А-И]%’

Если нужно, чтобы фамилия не начиналась на "И" или "С", маска будет LIKE ‘[^ИС]%’.

Перейдем к рассмотрению следующего раздела – GROUP BY:

GROUP BY column-commalist.

Если в запросе присутствует этот раздел, то полученная в результате выполнения инструкций разделов FROM и WHERE таблица будет перегруппирована таким образом, чтобы каждое сочетание значений столбцов в группе встречалось только один раз.

Рассмотрим пример. Пусть исходная таблица RESULTS выглядит так, как представлено в табл. 7.7. После выполнения инструкции GROUP BY StudlD таблица будет перегруппирована так, как представлено в табл. 7.8.

В общем случае группированная таблица не соответствует требованиям 1НФ (значения столбцов не атомарные), и она не может быть выведена в качестве результата запроса.

Оператор SELECT

Наиболее используемым, но и самым сложным оператором является оператор выборки SELECT. Он позволяет производить выборку данных из таблиц и преобразовывать к нужному виду полученные результаты.

Результатом выполнения оператора SELECT является таблица. К этой таблице может быть снова применен оператор SELECT и т.д., то есть такие операторы могут быть вложены друг в друга. Вложенные операторы SELECT называют подзапросами.

Синтаксис оператора SELECT использует следующие основные предложения:

Кратко пояснить смысл предложений оператора SELECT можно следующим образом:

  • SELECT — выбрать данные из указанных столбцов и (если необходимо) выполнить перед выводом их преобразование в соответствии с указанными выражениями и (или) функциями
  • FROM — из перечисленных таблиц, в которых расположены эти столбцы
  • WHERE — где строки из указанных таблиц должны удовлетворять указанному перечню условий отбора строк
  • GROUP BY — группируя по указанному перечню столбцов с тем, чтобы получить для каждой группы единственное значение
  • HAVING — имея в результате лишь те группы, которые удовлетворяют указанному перечню условий отбора групп
  • ORDER BY — сортируя по указанному перечню столбцов

Как видно из синтаксиса рассматриваемого оператора, обязательными являются только два первых предложения: SELECT и FROM .

Рассмотрим каждое предложение оператора SELECT .

База данных для примеров

Дальше будет много примеров и логично постоянно использовать одну и ту же БД, что бы не рисовать каждый раз новые. На основании базы данных ниже будут продемонстрированы все примеры, не только в этой статье, но и в других.

Постановка задачи: пусть требуется разработать БД для предметной области «Поставка деталей»!

Требуется хранить следующую информацию:

  • О поставщиках (P) pnum, pname
  • О деталях (D) pnum, dname, dprice
  • О поставках (PD) volume

Значения таблицы P:

pnum pname
1 Иванов
2 Петров
3 Сидоров
4 Кузнецов

Значения таблицы D:

pnum dname dprice
1 Болт 10
2 Гайка 20
3 Винт 30

Значения таблицы PD:

pnum dnum volume
1 1 100
1 2 100
1 3 300
2 1 150
1 2 250
3 1 1000

Предложение SELECT

После служебного слова SELECT перечисляются имена столбцов, значения которых будут входить в результат выполнения запроса.

Столбцы в результирующей таблице размещаются в том порядке, в котором они были указаны в предложении SELECT . Имена столбцов указываются через запятую.

Если имя столбца содержит пробелы или разделители, то его необходимо заключить в квадратные скобки.

При обработке данных из разных таблиц может возникнуть ситуация, когда столбцы разных таблиц имеют одинаковые имена. В этом случае имя столбца необходимо записывать как составное, указывая перед ним имя соответствующей таблицы: <Имя таблицы>.<Имя столбца>

Предложение FROM

В предложении FROM перечисляются имена таблиц, которые содержат столбцы, указанные после слова SELECT .

Пример 1.
Вывести список наименований деталей из таблицы D (“Детали”).

Пример 2.
Получить всю информацию из таблицы D (“Детали”).

Получить результат можно двумя способами:

  • Явным указанием всех столбцов таблицы.
  • Полный список столбцов таблицы заменяет символ * .

В результате и первого и второго запроса получаем новую таблицу, представляющую собой полную копию таблицы D (“Детали”).

Можно осуществить выбор отдельных столбцов и их перестановку.

Пример 3.
Получить информацию о наименовании и номере поставщика.

Пример 4.
Определить номера поставщиков, которые поставляют детали в настоящее время (то есть номера тех поставщиков, которые присутствуют в таблице PD (“Поставки”)).

pnum
1
1
1
2
2
3

Дополнительно о SELECT

Теперь, когда мы научились делать простые запросы с SELECT и FROM , можно ненадолго снова вернуться к SELECT .

Агрегатные функции

В операторе SELECT можно использовать агрегатные функции, которые дают единственное значение для целой группы строк в таблице.

Агрегатная функция записывается в следующем виде: <имя функции>(<имя столбца>)

Пользователю доступны следующие агрегатные функции:

  • SUM ‑ вычисляет сумму множества значений указанного столбца;
  • COUNT ‑ вычисляет количество значений указанного столбца;
  • MIN / MAX ‑ определяет минимальное/максимальное значение в указанном столбце;
  • AVG ‑ вычисляет среднее арифметическое значение множества значений столбца;
  • FIRST / LAST ‑ определяет первое/последнее значение в указанном столбце.

Пример 15.
Определить общий объем поставляемых деталей.

Expr1000
2000

Столбцы результирующей таблицы, которых не существовало в исходных таблицах, называются вычисляемыми. Таким столбцам СУБД присваивает системные имена, что не всегда является удобным.

При вычислении результатов любой агрегатной функции СУБД сначала исключает все NULL -значения, после чего требуемая операция применяется к оставшимся значениям.

Для функции COUNT возможен особый вариант использования — COUNT(*) . Его назначение состоит в подсчете всех строк в результирующей таблице, включая NULL -значения.

Переименование столбца

Язык SQL позволяет задавать новые имена столбцам результирующей таблицы, для чего используется операция AS . Переименование также используют для изменения сложных имен столбцов таблицы.

Например, присвоить новое имя вычисляемому столбцу в предыдущем примере позволит выполнение следующего запроса.

Sum
2000

Пример 16.
Определить количество поставщиков, которые поставляют детали в настоящее время.

Count
6

Несмотря на то, что реальное число поставщиков деталей в таблице PD равно 3, СУБД возвращает число 6. Такой результат объясняется тем, что СУБД подсчитывает все строки в таблице PD, не обращая внимание на то, что в строках есть одинаковые значения.

Операция DISTINCT

Если до применения агрегатной функции необходимо исключить дублирующиеся значения, следует перед именем столбца указать ключевое слово DISTINCT .

Count
3

DISTINCT можно задать только один раз для одного предложения SELECT .

Противоположностью DISTINCT является операция ALL . Она имеет противоположное действие «показать все строки таблицы» и предполагается по умолчанию.

Операция TOP

Итоговый набор записей, получаемых после выполнения запроса можно ограничить первыми N строками или первыми N процентами от общего количества строк результата.

Для этого используется операция TOP , которая записывается в предложении SELECT следующим образом: SELECT TOP N [PERCENT] <список столбцов>

Пример 23.
Определить номера первых двух деталей таблицы D.

Стандарт SQL требует, чтобы при сортировке NULL -значения трактовались либо как превосходящие, либо как уступающие по сравнению со всеми остальными значениями. Так как конкретный вариант стандартом не оговаривается, то в зависимости от используемой СУБД при сортировке NULL -значения следуют до или после остальных значений. В MS SQL Server NULL -значения считаются уступающими по сравнению с остальными значениями.

Предложение WHERE

После служебного слова WHERE указываются условия выбора строк, помещаемых в результирующую таблицу. Существуют различные типы условий выбора:

Типы условий выбора:

  • Сравнение значений атрибутов со скалярными выражениями, другими атрибутами или результатами вычисления выражений.
  • Проверка значения на принадлежность множеству.
  • Проверка значения на принадлежность диапазону.
  • Проверка строкового значения на соответствие шаблону.
  • Проверка на наличие null-значения.

Сравнение

В языке SQL используются традиционные операции сравнения = , <> , < , <= , > , >= .

В качестве условия в предложении WHERE можно использовать сложные логические выражения, использующие атрибуты таблиц, константы, скобки, операции AND , OR , отрицание NOT .

Пример 5.
Определить номера деталей, поставляемых поставщиком с номером 2.

Пример 6.
Получить информацию о поставщиках Иванов и Петров.

Строковые значения атрибутов заключаются в апострофы.

Проверка на принадлежность множеству

Операция IN проверяет, принадлежит ли значение атрибута заданному множеству.

Пример 7.
Получить информацию о поставщиках ‘Иванов’ и ‘Петров’.

Пример 8.
Получить информацию о деталях с номерами 1 и 2.

Проверка на принадлежность диапазону

Операция BETWEEN определяет минимальную и максимальную границу диапазона, в которое должно попадать значение атрибута. Обе границы считаются принадлежащими диапазону.

Пример 9.
Определить номера деталей, с ценой от 10 до 20 рублей.

Пример 10.
Вывести наименования поставщиков, начинающихся с букв от ‘К’ по ‘П’.

Буква ‘Р’ в условии запроса объясняется тем, что строки сравниваются посимвольно. Для каждого символа при этом определяется код. Для нашего случая справедливо условие: ‘П’<‘Петров’<‘Р’

Проверка строкового значения на соответствие шаблону

Операция LIKE используется для поиска подстрок. Значения столбца, указываемого перед служебным словом LIKE сравниваются с задаваемым после него шаблоном. Форматы шаблонов различаются в конкретных СУБД.

Для СУБД MS SQL Server:

  • Символ % заменяет любое количество любых символов.
  • Символ _ заменяет один любой символ.
  • [<множество символов>] ‑ вместо символа строки может быть подставлен один любой символ из множества возможных, указанных в ограничителях.
  • [^<множество символов>] ‑ вместо символа строки может быть подставлен любой из символов кроме символов из множества, указанного в ограничителях.

Множество символов в квадратных скобках можно указывать через запятую, либо в виде диапазона.

Пример 11.
Вывести фамилии поставщиков, начинающихся с буквы ‘И’.

Пример 12.
Вывести фамилии поставщиков, начинающихся с букв от ‘К’ по ‘П’.

Проверка на наличие null-значения

Операции IS NULL и IS NOT NULL используются для сравнения значения атрибута со значением NULL .

Пример 13.
Определить наименования деталей, для которых не указана цена.

Пример 14.
Определить номера поставщиков, для которых указано наименование.

Предложение GROUP BY

Использование GROUP BY позволяет разбивать таблицу на логические группы и применять агрегатные функции к каждой из этих групп. В результате получим единственное значение для каждой группы.

Обычно предложение GROUP BY применяют, если формулировка задачи содержит фразу «для каждого…», «каждому..» и т.п.

Пример 18.
Определить суммарный объем деталей, поставляемых каждым поставщиком.

pnum sum
1 600
2 400
3 1000

Выполнение запроса можно описать следующим образом: СУБД разбивает таблицу PD на три группы, в каждую из групп помещаются строки с одинаковым значением номера поставщика. Затем к каждой из полученных групп применяется агрегатная функция SUM, что дает единственное итоговое значение для каждой группы.

Рассмотрим два похожих примера.

В примере 1 определяется минимальный объем поставки каждого поставщика. В примере 2 определяется объем минимальной поставки среди всех поставщиков.

Пример 1:

Пример 2:

Результаты запросов представлены в следующей таблице:

pnum min max
1 100 100
2 150
3 1000

Все имена столбцов, перечисленные после ключевого слова SELECT должны присутствовать и в предложении GROUP BY , за исключением случая, когда имя столбца является аргументом агрегатной функции.

Однако в предложении GROUP BY могут быть указаны имена столбцов, не перечисленные в списке вывода после ключевого слова SELECT .

Если предложение GROUP BY расположено после предложения WHERE , то группы создаются из строк, выбранных после применения WHERE .

Пример 19.
Для каждой из деталей с номерами 1 и 2 определить количество поставщиков, которые их поставляют, а также суммарный объем поставок деталей.

dnum COUNT SUM
1 3 1250
2 2 450

Чтобы организовать вложенные группировки, после GROUP BY следует указать несколько группирующих столбцов через запятую. В этом случае реальный подсчет данных будет происходить по той группе, которая указана последней.

Предложение HAVING

Предложение HAVING определяет критерий, согласно которому определенные группы, сформированные с помощью предложения GROUP BY , исключаются из результирующей таблицы.

Выполнение предложения HAVING сходно с выполнением предложения WHERE . Но предложение WHERE исключает строки до того, как выполняется группировка, а предложение HAVING — после. Поэтому предложение HAVING может содержать агрегатные функции, а предложение WHERE — не может.

Пример 20.
Определить номера поставщиков, поставляющих в сумме более 500 деталей.

pnum SUM
1 600
3 1000

Пример 21.
Определить номера поставщиков, которые поставляют только одну деталь.

pnum SUM
3 1

Предложение ORDER BY

При выполнении запроса СУБД возвращает строки в случайном порядке. Предложение ORDER BY позволяет упорядочить выходные данные запроса в соответствии со значениями одного или нескольких выбранных столбцов.

Можно задать возрастающий — ASC (от слова Ascend) или убывающий — DESC (от слова Descend) порядок сортировки. По умолчанию принят возрастающий порядок сортировки.

Пример 22.
Отсортировать таблицу PD в порядке возрастания номеров поставщиков, а строки с одинаковыми значениями pnum отсортировать в порядке убывания объема поставок.

pnum volume dnum
1 300 3
1 200 2
1 100 1
2 250 2
2 150 1
3 1000 1

Операцию TOP удобно применять после сортировки результирующего набора с помощью предложения ORDER BY .

Пример 24.
Определить номера первых двух деталей с наименьшей стоимостью.

Следует отметить, что если в таблице D будут две детали без указания цены, то именно их и отобразит предыдущий запрос.

Поэтому при наличии NULL -значений их необходимо исключать с помощью предложения WHERE.

Команда SQL для выборки из базы данных (SELECT, WHERE, LIKE, AND, OR)

Знак равенства «=» можно использовать в SQL запросах не только для чисел, но и для строк. Представим что нам нужно получить выборку из базы, в которой будут содержаться данные о пользователе с именем «Мышь». Запрос получится такой: В результате мы получим все строки, в которых в столбце имени пользователя «NAME» содержится строка «Мышь». Обратите внимание, что совпадение должно быть полным. То есть в выборку не попадут пользователи, имена которых «Мышь серая», «Мышь белая», «Мышь чёрная». Чтобы выбрать и этих пользователей, необходимо сделать текстовый поиск по значению столбца. Для этого используется команда «LIKE» (в переводе с английского этот предлог звучит как «ПОДОБНО», «ВРОДЕ» или «СЛОВНО»).

С помощью команды «LIKE» можно искать подстроку в столбце. Чтобы сделать это поставьте знак процента «%» с той стороны подстроки, с которой могут находиться другие символы. К примеру: В результаты выборки попадёт не только пользователь с именем «Мышь», но и «Мышь серая», «Мышь белая», «Мышь чёрная». Если поставить знак процента ещё и до подстроки: то в выборку попадут не только все предыдущие результаты, но и пользователь с именем «Большая мышь».

Ссылка на основную публикацию