Ситуация, когда требуется изменить количество выводимых строк, встречается гораздо чаще, чем ситуация, когда требуется изменить число и порядок выводимых столбцов. Для ввода в SQL-запрос такого рода ограничений в операторе SELECT предназначено ключевое слово WHERE, после которого следует логическое условие. Если запись удовлетворяет такому условию, она попадет в результат выборки, в противном случае такая запись отбрасывается.
Рассмотрим пример запроса, извлекающего из таблицы catalogs записи, чей первичный ключ id_catalog больше (оператор >) 4.
Использование конструкции WHERE
Оператор больше > возвращает true(истину), если левый аргумент больше правого, и false(ложь), если правый аргумент меньше левого. Если логическое выражение возвращает true для текущей записи, запись попадает в результирующую таблицу.
Помимо оператора > имеется еще несколько операторов, представленных в таблице.
Логические операторы
Оператор | Описание |
a > b | Возвращает true, если аргумент а больше b, и false — в противном случае |
a < b | Возвращает true, если аргумент а меньше b, и false — в противном случае |
a > = b | Возвращает true, если аргумент а больше или равен аргументу b, и false — в противном случае |
a < = b | Возвращает true, если аргумент а меньше или равен аргументу b, и false — в противном случае |
a = b | Возвращает true, если аргумент а равен аргументу b, и false — в противном случае |
a < > b | Возвращает true, если аргумент а не равен аргументу b, и false — в противном случае |
a! = b | Аналогичен оператору < > |
a < = > b |
Оператор эквивалентности; по своему действию аналогичен оператору равенства = , однако допускает в качестве одного из аргументов NULL |
Следует отметить, что логические операторы возвращают true(истину) и false(ложь) в стиле языка программирования С, т.е. без использования специальных констант и обозначений. За ложь считается 0, а за истину любое число, отличное от нуля. В этом легко убедиться, если вывести логическое выражение в результирующую таблицу.
Вывод логических значений в результирующую таблицу
Условие может быть составным и объединяться при помощи логических операторов. Рассмотрим пример, где будет использоваться составное условие: первичный ключ должен быть больше 3 и меньше или равен 5. Для объединения этих условий используется оператор AND(И).
Примечание. Помимо оператора AND(И), для объединения логических выражений может использоваться оператор OR(ИЛИ).
Использование составного логического условия
В таблицах представленных ниже, изложены правила, по которым операторы AND и OR объединяют свои операнды.
Оператор AND
Операнд/результат |
Значения |
|||
Первый операнд | true | true | false | false |
Второй операнд | true | false | true | false |
Результат | true | false | false | false |
Как видно из таблицы оператор AND возвращает true только в том случае, если оба его операнда принимают истинное значение true.
Оператор OR
Операнд/результат |
Значение |
|||
Первый операнд | true | true | false | false |
Второй операнд | true | false | true | false |
Результат | true | true | true | false |
Как видно из таблицы, оператор OR возвращает false только в том случае, если оба его операнда принимают значение false.
Помимо бинарных логических операторов AND и OR СУБД MySQL поддерживает унарный оператор отрицания NOT. Оператор возвращает истину для ложного аргумента и ложь для истинного. Рассмотрим пример, в котором демонстрируется использование оператора NOT.
Использование оператора NOT
Помимо операторов AND и OR язык SQL предоставляет еще один логический оператор: исключающее ИЛИ — XOR. Правила, по которым работает оператор, представлены в таблице.
Оператор XOR
Операнд/результат |
Значение |
|||
Первый операнд | true | true | false | false |
Второй операнд | true | false | true | false |
Результат | false | true | true | false |
Оператор XOR можно эмулировать при помощи логических операторов по формуле: (a AND (NOT b) OR ((NOT a) and b).
Для выборки записей из определенного интервала используется оператор BETWEEN min AND max, возвращающий записи, значения которых лежат в диапазоне от min до max.
Использование оператора BETWEEN
В результирующую таблицу возвращаются записи в диапазоне от 3 до 6.
Существует конструкция, протиположная конструкции BETWEEN — это NOT BETWEEN, которая возвращает записи, не попавшие в интервал между min и max.
Использование конструкции NOT BETWEEN
Иногда требуется извлечь записи, удовлетворяющие не диапазону, а списку, например, записи с id_catalog из списка (1, 3, 5). Для этого предназначена конструкция IN.
Использование оператора IN
Конструкция NOT IN является противоположной оператору IN и возвращает 1(истина), если проверяемое значение не входит в список, и 0 (ложь), если оно присутствует в списке.
Использование конструкции NOT IN
В конструкции WHERE могут использоваться не только числовые столбцы. Рассмотрим пример, где из таблицы catalogs извлекается запись, соответствующая элементу каталога Процессоры.
Работа с текстовыми полями
Зачастую условную выборку с участием строк удобнее производить не при помощи оператора равенства = , а при помощи оператора LIKE, который позволяет использовать простейшие регулярные выражения. Оператор LIKE имеет следующий синтаксис:
expr LIKE pat
Оператор часто используется в конструкции WHERE и возвращает 1 (истину), если выражение expr соответствует выражению pat, и 0 — в противном случае. Главное преимущество оператора LIKE перед оператором равенства заключается в возможности использования специальных символов, приведенных в таблице.
Специальные символы, используемые в операторе LIKE
Символ | Описание |
% | Соответствует любому количеству символов, даже их отсутствию |
- | Соответствует ровно одному символу |
При помощи специальных символов, представленных в таблице, можно задать различные шаблоны соответствия. Рассмотрим пример, где приводится выборка записей, которые содержат названия элементов каталога, заканчивающиеся на символ "ы".
Извлечение из таблицы catalogs записей, названия которых заканчиваются на "ы"
Оператор NOT LIKE противоположен по действию оператору LIKE и имеет следующий синтаксис:
expr NOT LIKE pat
Оператор возвращает 0, если выражение expr соответствует выражению pat, и 1 — в противном случае. Таким образом, с его помощью можно извлечь записи, которые не удовлетворяют указанному условию.
Использование оператора NOT LIKE
Имена вычмсляемых столбцов, формируемые выражениями или функциями, часто достаточно длинны и не удобны для использования в прикладных программах, выполняющих доступ к элементам в результирующей таблице по имени столбца. В SELECT-запросе столбцу можно назначить новое имя при помощи оператора AS. Рассмотрим пример, где результату функции DATE_FORMAT() присваивается новый псевдоним pritdate.
Добавим в таблицу catalogs новый столбец putdate.
Использование оператора AS
Как видно из предыдущих примеров, результат выборки представляет собой записи, которые располагаются в порядке, в котором они храняться в базе данных. Однако часто требуется отсортировать значения по одному из столбцов. Это осуществляется с помощью конструкции ORDER BY, которая следует за выражением SELECT. После конструкции ORDER BY указывается столбец (или столбцы), по которым следует сортировать данные.
Рассмотрим пример, где первый запрос сортирует результат выборки по полю id_catalog, а второй по полю name.
Использование конструкции ORDER BY
По умолчанию сортировка производится в прямом порядке, однако добавив после имени столбца ключевое слово DESC, можно добиться сортировки в обратном порядке.
Обратная сортировка
Сортировку записей можно производить и по нескольким столбцам. У нас уже имеется таблица tbl, состоящая из трех столбцов: id, putdate, lastdate. Переименуем столбец id в id_catalog.
Развернем таблицу tbl.
Таблица tbl
Рассмотрим пример, где производится сортировка таблицы tbl сначала по полю id_catalog, а затем по полю putdate.
Сортировка таблицы по двум столбцам
Записи в таблице tbl сначала сортируются по столбцу id_catalog, а совпадающие в рамках одного значения id_catalog записи сортируются по полю putdate в обратном порядке. Следует отметить, что ключевое слово DESC относится к полю putdate.
Для того, чтобы отсортировать оба столбца в обратном порядке, потребуется снабдить ключевым словом как столбец id_catalog, так и putdate.
Обратная сортировка по двум столбцам
Для прямой сортировки также существует ключевое слово ASC (в противовес ключевому слову DESC), но поскольку по умолчанию записи сортируются в прямом порядке, данное ключевое слово часто опускается.