Предикаты select
В выражениях SELECT можно использовать несколько предикатов, приведенных ниже.
• ALL
• DISTINCT
• DISTINCTROW
• TOP
Эти предикаты служат для ограничения количества возвращаемых записей. В SQL-выражении их можно использовать с командой WHERE.
Предикат ALL назначен по умолчанию. Он выбирает все записи, которые в выражении SQL удовлетворяет условию WHERE. Указывать его необязательно, поскольку он назначен по умолчанию. Предикат DISTINCT необходимо включать, когда из запроса следует исключить одинаковые записи (рассматриваются только поля, включенные в запрос). Например, при создании запроса, выводящего идентификатор покупателя и день, в который он сделал заказ, нужно использовать следующее SELECT DISTINCT [CustomerlD], [OrderDate]
Если в таблицу Orders помещено два заказа одного покупателя за один день, то в результирующей таблице будет содержаться только одна запись. Предикат DISTINCT указывает Access, что, если отобранные поля содержат одинаковые значения, нужно выводить только одну запись. Даже если на самом деле в таблице Orders есть две различные записи, то отображена будет только одна из них. Предикат DISTINCT проверяет дублирование только для полей, указанных для просмотра.
Предикат DISTINCT предназначен для исключения записей, которые содержат повторяющиеся значения в отобранных полях. Для того чтобы запись была включена в результат выполнения запроса, значения в каждом поле, включенном в инструкцию SELECT, должны быть уникальными.
DISTINCTROW— это предикат, существующий только в Access. Он работает подобно предикату DISTINCT, но с одним большим отличием: DISTINCTROW проверят совпадение в таблице или таблицах всех полей, а не только выбранных. Предикат DISTINCTROW используется для исключения записей, повторяющихся полностью. Он влияет на результат только в том случае, если в запрос включены не все поля из анализируемых таблиц. Предикат DISTINCTROW игнорируется, если запрос содержит только одну таблицу.
Если, например, какому-либо покупателю в таблице Orders соответствуют две различные записи, то при использовании в предыдущем SQL-выражении distinctrow вместо DISTINCT будут выведены обе записи. Предикат DISTINCTROW проверяет совпадение всех полей в таблицах Customers и Orders. Если содержимое каких-либо полей различно (в данном случае — идентификатор заказа), то будут выведены обе записи.
Предикат ТОР, который также характерен только для Access, ограничивает число выводимых записей, удовлетворяющих условию WHERE. Предикат TOP предназначен для возврата определенного числа записей, находящихся в начале или в конце диапазона, описанного с помощью предложения ORDER BY. Например, ТОР 10 выводит только десять первых записей, удовлетворяющих условию WHERE.
Предикат ТОР имеет один необязательный параметр PERCENT (процент), который указывает не количество первых записей, а их процентное отношение к общему числу отобранных записей.
Использование квадратных скобок в именах полей
При задании названия поля, в котором должны быть пробелы. Access требует, чтобы это поле было заключено в квадратные скобки.
Для просмотра полей из нескольких таблиц наряду с требуемым полем нужно указывать название соответствующей таблицы. Например, предложение SQL для просмотра полей в таблицах Customers и Orders глядит следующим образом:
SELЕСТ Customers. [CompanyName], Customers. [Country], Orders. [OrderDate], lers. [Requi red Date]
Когда в Access создается запрос, названия таблиц помещаются перед названиями полей автоматически. самом деле указывать название таблицы нужно только в том случае, если в SQL-выражении несколько )лиц содержат поля с одинаковыми названиями. Например, обе таблицы — Customers и Orders — содержат поле [Customer ID]. Если в SQL-выражении нужно указать данное поле, то следует уточнить, какое полей [Customer ID] вам нужно (из таблицы Customers или из таблицы Orders):
SELЕСТ Customers. [Customer] D], [CompanyName], Country, [OrderDate], •qui redDate]
studfiles.net
Предикаты SQL или как создавать запросы И, ИЛИ, НЕТ
Снова обращаюсь к записи, созданной ранее. Запросы в SQL — это команды, необходимые для работы с информацией БД. В другой записи я говорил о запросах с использованием ключевого слова SELECT, которое позволяет создавать запросы по отбору нужной информации.Сегодня же я знакомлюсь с созданием более сложных запросов в SQL.
Как и во многих языках программирования, в SQL используются такие операции, как сложение, вычитание и так далее. Но всё же, в реляционных БД предпочтение отдаётся функциям сравнения данных.
- > больше
- < меньше
- = равно
- >= больше или равно
- <= меньше или равно
- <> не равно
Но, внесён некоторые ясности. Рассмотрю такой случай. Нужно сравнить два выражения b и, скажем, выражение t. Для SQL будет верно, что выражение «b» будет больше выражения «t» — b>t, поскольку в английском алфавите, буква t находится во втором десятке, в то время, как b — вторая буква алфавита. Такая же ситуация и при использовании разных регистров. Так, для SQL выражение «B
Для наглядного рассмотрения вышеизложенного, буду рассматривать таблицу
Debtors
Num | Month | Year | Sname | City | Address | Debt |
0001 | Июль | 2012 | Иванов | Ставрополь | Ставропольская, 1 | 50000 |
0002 | Декабрь | 2019 | Кононов | Татарка | Загородная, 254 | 684068 |
0003 | Май | 2013 | Ямшин | Михайловск | Сельская, 48 | 165840 |
0004 | Август | 2012 | Прени | Ставрополь | Центральная, 16 | 46580 |
… | … | … | … | … | … | … |
9564 | Март | 2015 | Улиева | Дёмино | Международная, 156 | 435089 |
9565 | Октябрь | 2012 | Павлова | Ставрополь | Вокзальная, 37 | 68059 |
9566 | Январь | 2012 | Урюпа | Михайловск | Фонтанная, 19 | 51238 |
9567 | Ноябрь | 2017 | Вальетов | Татарка | Выездная, 65 | 789654 |
SELECT *
FROM Debtors
WHERE Debt > 50000;
Тогда таблица данных примет следующий вид
Debtors
Num | Month | Year | Sname | City | Address | Debt |
0002 | Декабрь | 2019 | Кононов | Татарка | Загородная, 254 | 684068 |
0003 | Май | 2013 | Ямшин | Михайловск | Сельская, 48 | 165840 |
9564 | Март | 2015 | Улиева | Дёмино | Международная, 156 | 435089 |
9565 | Октябрь | 2012 | Павлова | Ставрополь | Вокзальная, 37 | 68059 |
9566 | Январь | 2012 | Урюпа | Михайловск | Фонтанная, 19 | 51238 |
9567 | Ноябрь | 2017 | Вальетов | Татарка | Выездная, 65 | 789654 |
SELECT *
FROM Debtors
WHERE Debt >= 50000;
Кроме выражений сравнения в SQL используются Булевы выражения. Это выражения, которые соответствуют условия false (ложь) и true (правда). Такими выражениями будут
- AND, которое говорит программе, что выражения А и В будут правдивыми
- OR, которое предполагает, что условие А или условие В верно.
- NOT, которое подразумевает, что одно условие А не является правдой в отношении условия В или наоборот.
SELECT *
FROM Debtors
WHERE City = ‘Ставрополь’
AND Debt >= 50000;
В итоге получим данные
Num | Month | Year | Sname | City | Address | Debt |
0001 | Июль | 2012 | Иванов | Ставрополь | Ставропольская, 1 | 50000 |
9565 | Октябрь | 2012 | Павлова | Ставрополь | Вокзальная, 37 | 68059 |
SELECT *
FROM Debtors
WHERE City = ‘Ставрополь’
OR Debt >= 50000;
Итоговая таблица примет вид
Num | Month | Year | Sname | City | Address | Debt |
0001 | Июль | 2012 | Иванов | Ставрополь | Ставропольская, 1 | 50000 |
0002 | Декабрь | 2019 | Кононов | Татарка | Загородная, 254 | 684068 |
0003 | Май | 2013 | Ямшин | Михайловск | Сельская, 48 | 165840 |
0004 | Август | 2012 | Прени | Ставрополь | Центральная, 16 | 46580 |
9564 | Март | 2015 | Улиева | Дёмино | Международная, 156 | 435089 |
9565 | Октябрь | 2012 | Павлова | Ставрополь | Вокзальная, 37 | 68059 |
9566 | Январь | 2012 | Урюпа | Михайловск | Фонтанная, 19 | 51238 |
9567 | Ноябрь | 2017 | Вальетов | Татарка | Выездная, 65 | 789654 |
NOT же используется как обратное превращение значения Булево выражения. То есть, оно обращает имеющееся выражение.
SELECT *
FROM Debtors
WHERE City = ‘Ставрополь’
OR NOT Debt >= 50000;
В таком случае получим
Num | Month | Year | Sname | City | Address | Debt |
0001 | Июль | 2012 | Иванов | Ставрополь | Ставропольская, 1 | 50000 |
0004 | Август | 2012 | Прени | Ставрополь | Центральная, 16 | 46580 |
В связи с вышеизложенным, хочется обратить внимание, что выражение NOT должно предшествовать Булеву выражению, и не должно располагаться непосредственно перед операцией сравнения. Итогом подобной ошибки может быть то, что запрос просто напросто не сработает. Так же, не верным будет задание следующего запроса
SELECT *
FROM Debtors
WHERE NOT City = ‘Ставрополь’
OR Debt >= 50000;
В этом случае, выражение NOT так же будет применено только к другому Булеву выражению — OR.
Итогом этой статьи можно считать то, что теперь я знаю, какие операции могут применяться к информации БД. Сравнение — это главенствующее в SQL — любые данные выводятся на основе отбора и сравнения.
dum4uk.livejournal.com
Иллюстрированный самоучитель по SQL для начинающих › «Пристрелка» к нужным данным [страница — 106] | Самоучители по программированию
«Пристрелка» к нужным данным
Предикаты сравнения
Примеры, приведенные в предыдущем разделе, демонстрируют обычное использование предикатов сравнения, в которых одно значение сравнивается с другим. Каждая строка, где в результате сравнения получается значение True, выполняет условие предложения WHERE, и с ней выполняется определенная операция (SELECT, UPDATE, DELECT и т.д.). Строки, где в результате сравнения получается значение False, пропускаются. Проанализируйте, например, следующий оператор SQL:
SELECT * FROM FOODS WHERE Calories < 219;
Этот оператор выводит все строки таблицы FOODS, в которых значение, хранящееся в столбце Calories, меньше 219.
В табл. 9.2 приведены шесть предикатов сравнения.
Таблица 9.2. Предикаты сравнения языка SQL.
Сравнение | Символ |
---|---|
Равно | = |
Не равно | <> |
Меньше | < |
Меньше или равно | <= |
Больше | > |
Больше или равно | >= |
BETWEEN
Иногда нужно выбрать ту строку, в которой значение какого-либо столбца входит в определенный диапазон. Один из способов это сделать – использовать предикаты сравнения. Можно, например, составить предложение WHERE, предназначенное для выбора всех строк таблицы FOODS, в которых значение, хранящееся в столбце CALORIES, больше 100 и меньше 300:
WHERE FOODS.Calories > 100 AND FOODS.Calories < 300
В это сравнение не включены продукты питания, содержащие в точности 100 или 300 калорий, – в нем имеются только те значения, которые находятся в промежутке между этими числами. Чтобы в сравнение попали и эти два значения, можно написать следующий оператор:
WHERE FOODS.Calories >= 100 AND FOODS.Calories <= 300
Другой способ указать диапазон, включая его границы, – использовать предикат BETWEEN (между):
WHERE FOODS.Calories BETWEEN 100 AND 3 00
Это предложение выполняет абсолютно те же функции, что и оператор в предыдущем примере, в котором используются предикаты сравнения. Как видите, эта формулировка позволяет ввести меньшее количество кода, а также она чуть более наглядная, чем та, в которой используются два предиката сравнения, соединенные логической связкой AND.
Внимание:
Ключевое слово BETWEEN может привести к путанице, потому что неочевидно, включены ли в предложение границы диапазона. На самом деле границы в предложение включены. Кроме того, первая граница обязательно должна быть не больше второй. Если, например, в FOODS.Calories содержится значение 200, то следующее предложение возвращает значение True:
WHERE FOODS.Calories BETWEEN 100 AND 300
Однако предложение, казалось бы, эквивалентное предыдущему примеру, на самом деле возвращает противоположный результат False:
WHERE FOODS.Calories BETWEEN 300 AND 100
Помни:
Для ключевого слова BETWEEN первая граница обязательно должна быть не больше второй.
Предикат BETWEEN можно использовать со следующими типами данных: символьными, битовыми, даты-времени, а также с числовыми. Вам могут встретиться примеры, похожие на следующий:
SELECT FirstName, LastName FROM CUSTOMER WHERE CUSTOMER.LastName BETWEEN 'A' AND 'Mzzz';
При его выполнении возвращаются данные обо всех покупателях, фамилии которых находятся в верхней половине списка по алфавиту.
samoychiteli.ru
Предикаты ALL, DISTINCT, DISTINCTROW и TOP
Эти предикаты задают записи, выбираемые с помощью запросов SQL.
Синтаксис
SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]
FROM таблица
Инструкция SELECT, содержащая эти предикаты, состоит из следующих частей:
Элемент | Описание |
---|---|
ALL |
Используется по умолчанию, если вы не указываете ни один из предикатов. Ядро СУБД Microsoft Access выбирает все записи, которые удовлетворяют условиям в инструкции SQL. Следующие два примера эквивалентны и возвращает все записи из таблицы Employees:
|
DISTINCT |
Исключает записи, содержащие повторяющиеся данные в выбранных полях. Для включения в результаты запроса значения каждого из полей, перечисленных в инструкции SELECT, должны быть уникальными. Например, у нескольких сотрудников, перечисленных в таблице Employees, могут быть одинаковые фамилии. Если две записи содержат «Глазков» в поле LastName, следующая инструкция SQL возвращает только одну запись, содержащую значение «Глазков»:
Если опустить DISTINCT, этот запрос возвратит обе записи с фамилией «Глазков». Если предложение SELECT содержит несколько полей, запись будет включена в результаты только в том случае, если сочетание значений всех таких полей уникально. Выходные данные запроса, использующего DISTINCT, не является обновляемыми и не отражают изменения, внесенные другими пользователями. |
DISTINCTROW |
Исключает полностью повторяющиеся записи, а не просто записи с повторяющимися полями. Например, вы можете создать запрос, объединяющий таблицы Customers и Orders по полю CustomerID. В таблице Customers нет повторяющихся полей CustomerID, но в таблице Orders они есть, потому что от каждого клиента может быть несколько заказов. Следующая инструкция SQL показывает, как использовать DISTINCTROW для создания списка компаний, которые имеют по крайней мере один заказ. При этом список не будет включать сведения об этих заказах:
Если опустить DISTINCTROW, этот запрос создаст несколько строк для каждой компании, от которой поступало более одного заказа. DISTINCTROW действует только в том случае, если вы выбираете поля из некоторых (но не всех) таблиц, используемых в запросе. DISTINCTROW игнорируется, если запрос содержит только одну таблицу или вы включаете поля из всех таблиц. |
TOP n [PERCENT] |
Возвращает записи, относящиеся к верхней или нижней части диапазона, заданного предложением ORDER BY. Предположим, что вы хотите получить имена 25 лучших студентов из группы 1994 г.:
Если не включить предложение ORDER BY, запрос вернет из таблицы Students произвольный набор, включающий 25 записей, которые удовлетворяют предложению WHERE. Предикат TOP не выбирает между равными значениями. Если в предыдущем примере двадцать пятый и двадцать шестой средний балл совпадают, запрос вернет 26 записей. Вы также можете использовать зарезервированное слово PERCENT для возвращения определенного процента записей из верхней или нижней части диапазона, заданного предложением ORDER BY. Предположим, что вместо 25 лучших студентов вы хотите получить 10 процентов худших студентов группы:
Предикат ASC позволяет вернуть нижние значения. Значение после TOP должно быть целым числом без знака. TOP не влияет на возможность обновления запроса. |
таблица |
Имя таблицы, из которой извлекаются записи. |
support.office.com