Open
Close

Виды запросов sql. Простые SQL запросы - короткая справка и примеры

На уроке будет рассмотрен язык запросов: оператор SELECT sql — на выборку данных

SQL-запрос Select предназначен для обычной выборки из базы данных. Т.е. если нам необходимо просто получить данные, не делая с ними никакой обработки и не внося изменений в базу данных, то можно смело использовать данный запмагарос.

Синтаксис оператора SELECT

SELECT * FROM имя_таблицы;

Это самый простой вариант работы с оператором, когда мы выбираем все записи из таблицы БД.

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

Рассмотрим примеры sql запросов select:

Пример : если вы создали локальную базу данных и заполнили таблицы, как в рассмотренном ранее (или же воспользовались сервисом sqlFiddle), то выполним следующий пример.
Необходимо выбрать все записи из таблицы teachers

SELECT * FROM имя_таблицы LIMIT 2,3;

В примере происходит выборка 3 записей из таблицы, начиная со 2 записи.
Этот запрос особо необходим при создании блока страниц навигации.

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

SELECT name, zarplata, premia FROM teachers ORDER BY name;

Выберет значения полей name , zarplata , premia и отсортирует по полю name (по алфавиту)


Пример: БД «Компьютерный магазин». Выбрать данные о скорости и памяти компьютеров. Требуется упорядочить результирующий набор по скорости процессора в порядке возрастания.

SELECT `Скорость`,`Память` FROM `pc` ORDER BY 1 ASC

Результат:

Сортировку можно выполнять по двум полям:

SELECT name, zarplata, premia FROM teachers ORDER BY name DESC;

Выберет значения полей name , zarplata , premia и отсортирует по полю name по убыванию


Удаление повторяющихся значений в SQL

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

DISTINCT (в переводе с английского ОТЛИЧИЕ) - аргумент, который устраняет двойные значения :

Пример БД «Институт»: требуется узнать возможные варианты размера премий. Если не использовать Distinct , в результате будет выдаваться два одинаковых значения. Удалить в sql повторяющиеся значения можно при введении Distinct — в результате дублирующиеся значения не повторяются.

    SELECT Скорость, Память FROM PC;

    Результат:

    В таблице PC первичным ключом является поле code . Поскольку это поле отсутствует в запросе, в приведенном выше результирующем наборе имеются дубликаты строк.

    Когда требуется получить уникальные строки (например, нас интересуют только различные комбинации скорости процессора и объема памяти, а не характеристики всех имеющихся компьютеров), то нужно использовать Distinct:

    SELECT DISTINCT Скорость, Память FROM PC;

    SELECT DISTINCT Скорость, Память FROM PC;

    Результат:

    Задание sql select 1_1. БД «Институт» Выполните запрос на выборку id и name из таблицы учителей. Отсортируйте фамилии учителей по убыванию

    Язык sql: where условие

    Условие выполняется предложением
    WHERE
    которое записывается после предложения FROM .

    При этом в результирующий набор попадут только те записи, для которых значение предиката равно TRUE (истина).

    Пример БД «Институт»: Выводить данные преподавателя из таблицы teachers , фамилия которого Иванов

    Несколько условий в SQL

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

  1. AND ,
  2. или NOT
  3. Пример БД «Институт»: вывести код преподавателя, зарплата которого составляет 10000 , а премия 500

    Реляционные операторы, встречающиеся в условиях:
    = Равный
    > Больше чем
    >= Больше чем или равно
    Не равно

    Between в SQL (между)

    Предикат BETWEEN проверяет, попадают ли значения проверяемого выражения в диапазон, задаваемый пограничными выражениями, соединяемыми служебным словом AND .

    Синтаксис:

    <Проверяемое выражение> BETWEEN <Начальное выражение> AND <Конечное выражение>

    Пример БД "Институт": Вывести фамилию и зарплату преподавателя, зарплата которого между 5000 и 10000.

    Пример БД "Институт": Вывести фамилию и зарплату преподавателя, зарплата которого не находится в диапазоне от 5000 до 10000.

    Предикат IN

    Предикат IN определяет, будет ли значение проверяемого выражения обнаружено в наборе значений, который явно определен.

    Синтаксис:

    < Проверяемое выражение> [ NOT ] IN (< набор значений> )

    <Проверяемое выражение> IN (<набор значений>)

    Пример БД "Институт": вывести имена преподавателей, зарплата которых составляет 5000 , 10000 или 11000

    Пример БД "Институт": вывести имена преподавателей, зарплата которых не находится среди значений: 5000 , 10000 или 11000

    Задание sql select 1_3. БД "Институт" Вывести фамилию, зарплату и премию учителей, премия которых от 2000 до 5000 рублей.

Запросов - структурированных запросов к базе данных. Почему именно курс программирования ? Несмотря на то, что многие “буквоеды” будут утверждать, что SQL – это не , а язык запросов , я считаю, что курсы по его изучению можно и нужно относить к курсам программирования. Во-первых, не называть же их курсами составления запросов, поскольку так их могут перепутать с курсами для начинающих чиновников или прокуроров. Во-вторых, работа с базами данных настолько тесно переплетается с , что невладение навыками SQL довольно сильно сужает область применения того или иного программиста. Ну и в-третьих, структурированные запросы (не обязательно к базам данных) уже давно не на подступах к границам языков программирования – они ее уже перешагнули, и примером этому может служить технология .

Все примеры построены вокруг запросов к трем таблицам,


содержащим следующую информацию:

  • D_STAFF - список сотрудников компании;

    • S_NAME – Ф.И.О.
    • S_POSITION – должность (справочник);
    • S_EXPERIENCE – стаж работы (целое количество лет);
    • S_CHIEF_ID – вышестоящий сотрудник компании (отношение “начальник”-“подчиненный”);
    • S_COMMENTS – примечание.


  • D_PROFIE – список профилей пользователей , которая, по легенде, развернута на территории рассматриваемого предприятия и помогает автоматизировать некоторые его бизнес-процессы. Этой системой могла бы быть как отечественная разработка “1С – Предприятие”, так и система на базе программного комплекса SAP R/3, являющегося наиболее ярким представителем такого класса программного обеспечения за рубежом;

    • XD_IID – Уникальный идентификатор записи;
    • P_NAME – наименование профиля (роли);
    • P_COMMENTS – примечание.


  • D_STAFF_PROFILE – таблица, связывающая сотрудников компании (D_STAFF) с профилями пользователей системы (D_PROFILE). Каждая запись в этой таблице - это связь, которая определяет возможность сотрудника входить в систему со всеми правами и разрешениями выбранного для него профиля. Каждый сотрудник может иметь несколько разрешенных ему профилей, а любой профиль может быть связан с несколькими различными сотрудниками. Таким образом, таблица D_STAFF_PROFILE определяет связь "многие-ко-многим".

Краткий обзор синтаксиса рассматриваемых SQL запросов

Обновление данных или команда UPDATE

Назначение команды UPDATE – обновление существующих записей в указанной таблице. Указываем, где и чего хотим изменить, а после ключевого слова WHERE устанавливаем критерии отбора обновляемых записей. В команде обновления данных, как и в других SQL запросах, можно использовать подзапросы: например, можно определить в качестве присваиваемого полю значения результат подзапроса, который возвращает только одну колонку и одну строчку.

UPDATE SET { = } или UPDATE SET { = (SELECT FROM WHERE)}

Добавление данных или команда INSERT

Добавление новых записей в указанную таблицу. Здесь тоже ничего сложного. Указываем таблицу, список полей и список добавляемых в эти поля значений. Что может дать использование SQL подзапроса тоже догадаться несложно - копирование выбранного с помощью SELECT массива данных в указанную таблицу (в перечисленные через запятую поля). Естественно, что количество и тип колонок в запросе SELECT должен соответствовать количеству и типу полей таблицы, куда производится вставка.

INSERT INTO [()] VALUES () или INSERT INTO [()] (SELECT FROM WHERE)

Удаление данных или команда DELETE

Удаление строк из одной таблицы или сразу из нескольких таблиц, строки которых объединены условиями. Здесь все также очевидно. Указываем, из какой таблицы удаляем данные, а в части WHERE отбираем удаляемые данные. Во втором варианте SQL запроса с использованием инструкции DELETE показан обобщенный синтаксис удаления записей сразу из нескольких таблиц. В условиях отбора (в части WHERE) также можно использовать подзапросы.

DELETE FROM или DELETE FROM

Если все более или менее понятно, то знакомимся с или и начинаем сам процесс обучения.

    Выполнение простейших SQL запросов с использованием команды SELECT. Определение простых и составных критериев отбора записей посредством конструкции WHERE. Применение операторов BETWEEN и LIKE. Построение иерархического запроса с использованием псевдонимов таблиц и полей.

Практическая работа №9

Тема занятия: Создание запросов SQL.

Цель занятия : Научиться использовать язык SQL для создания запросов.

План занятия :

1. Создание SQL запросов на выборку.

2. Создание SQL запросов на выборку с условием отбора.

3. Создание SQL запросов с вычислением.

4. Создание SQL запросов на группировку.

SQL ( Structured Query Language) – структурированный язык запросов, предоставляющий средства создания и обработки данных в БД.

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

    Создать запрос с помощью конструктора.

· В конструкторе запросов щелкнете правой кнопкой мыши в области отображения таблиц и в контекстном меню выберите «Режим SQL».

1. Создание SQL запросов на выборку.

Создадим простейший запрос на выборку товаров и заказов на эти товары с помощью SQL.

· Откройте редактор SQL запросов.

· В окно редактора впишите следующую процедуру запроса

SELECT Заказы.[Код заказа], Товары.[Наименование товара], Заказы. Количество, Товары. Цена, Товары.[Еденица измерения], Заказы.[Дата заказа]

FROM Товары INNER JOIN Заказы ON Товары.[Код товара] = Заказы. Товар;

· Сохраните запрос под именем выборка SQL.

· Проверьте правильность работы запроса.

Разберем синтаксис данной операции:

SELECT – оператор который сообщает базе данных, что данная операция является запросам (практически все запросы начинаются с этого слова). После оператора SELECT обычно начинается перечисление тех полей, которые будут включены в запрос. Например запись SELECT Заказы.[Код заказа] будет означать что в запрос будет включено поле Код заказа из таблицы «Заказы». В случае если имя поля содержит пробелы его необходимо указывать в квадратных скобках .

FROM – оператор отвечающий за источник данных. Если необходимо указать связи между таблицами, то нужно использовать оператор INNER JOIN.

INNER JOIN - Объединяет записи из двух таблиц, если связующие поля этих таблиц содержат одинаковые значения. Например запись «FROM Товары INNER JOIN Заказы ON Товары.[Код товара] = Заказы. Товар» означает, что в данной процедуре запроса поле Код товара Из таблицы «Товары» является источником записи для поля Товар таблицы «Заказы»

Задание: Создайте SQL запрос позволяющий вывести сведения о клиентах купивших товар.

2. Создание SQL запросов на выборку с условием отбора.

С помощью языка SQL создадим запрос позволяющий вывести сведения о сотрудниках продавших товар количеством больше 3.

Для создания запросов с условием отбора используется оператор WHERE.

· Создайте SQL запрос на выборку содержащий такие поля: Фамилия, Имя, Отчество Сотрудника, Код заказа Который тот обслужить, Количество. Проверьте правильностьего работы.

· Теперь необходимо добавить условие отбора. Откройте редактор SQL и в конец продцедуры запроса добавьте «WHERE (((Заказы. Количество)>3))».

· Сохраните запрос под именем «Выборка с условием отбора SQL». Проверьте работу запроса.

Задание: Создайте SQL запрос отбирающий все товары цена на которые не прекращена и цена не превышает 20 денежных едениц.

3. Создание SQL запросов с вычислением.

Создадим SQL запрос позволяющий вывести Фамилию клиента, Наименование товара, сумму заказа (цена*количество).

Продцедура запроса выглядит так:

SELECT Клиенты. Фамилия, Товары.[Наименование товара], Заказы! Количество*Товары! Цена AS [Сумма заказа]

FROM Товары INNER JOIN (Клиенты INNER JOIN Заказы ON Клиенты.[Код клиента]=Заказы. Клиент) ON Товары.[Код товара]=Заказы. Товар;

4. Создание SQL запросов на группировку.

Создадим запрос который позволит определить на какую сумму всего было заказанно товаров каждым клиентом.

Для группировки записей используется оператор GROUP BY.

Продцедура запроса выглядит следующим образом:

SELECT Клиенты. Фамилия, Sum(Заказы! Количество*Товары! Цена) AS [Сумма заказов]

FROM Товары INNER JOIN (Клиенты INNER JOIN Заказы ON Клиенты.[Код клиента] = Заказы. Клиент) ON Товары.[Код товара] = Заказы. Товар

GROUP BY Клиенты. Фамилия;

Контрольные вопросы:

1. Что такое SQL?

2. Как создать SQL запрос?

3. Структурные составляющие языка SQL.

4. Перечислите основные операторы языка SQL.

5. Общие сведения об операторах SELECT, WHERE, FROM, INNER JOIN, GROUP BY.

Задание для успевающих: Попытайтесь самостоятельно создать SQL запрос позволяющий удалять все записи из таблицы «Товары» цена на которые меньше 3 денежных едениц

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

В предыдущих статьях были рассмотрены вопросы . Рассмотрена технология создания структуры таблиц базы данных «sql_training_st.mdb» на основе SQL запросов. Кроме того, с помощью SQL запросов было осуществлено заполнение таблиц СУБД ACCESS "sql_training_st.mdb".

Известно, что в реляционных базах данных язык SQL предназначен для манипулирования данными, определения структуры баз данных и ее составных частей, управления доступом пользователей к БД и для управления транзакциями или управления изменениями в БД.

Язык SQL состоит из четырех групп:

  • язык манипулирования данными DML;
  • язык определения данных DDL;
  • язык управления данными DCL;
  • язык управления транзакциями TCL.

К группе DML относятся четыре основных типа запросов SQL:

  • INSERT - предназначен для добавления одной или нескольких записей в конец таблицы;
  • UPDATE - предназначен для изменения уже существующих записей в столбцах таблицы или модификации данных в таблице;
  • DELETE - предназначен для удаления записей из таблицы;
  • SELECT - предназначен для выборки данных из таблиц.

Первые три типа SQL запросов (INSERT, UPDATE, DELETE), которые относятся к корректирующим запросам к базе данных, были рассмотрены на страничке

В данной статье рассмотрим запросы на выборку данных из таблиц БД Access.

Для извлечения информации, хранящейся в базе данных БД Access 2003 или 2007, можно применить запрос SELECT на выборку данных из таблиц.

Составим следующий SQL запрос (инструкцию SQL) на выборку, для этого выберем режим SQL, выполнив команду Вид/Режим SQL. Вводим с клавиатуры следующую инструкцию SQL:

SELECT *
FROM Студенты;

Эта инструкция состоит из двух предложений "SELECT *" и "FROM Студенты". Первое предложение содержит оператор SELECT и идентификатор * ("идентификатор *" означает вывод всех столбцов таблицы). Второе предложение содержит оператор FROM и идентификатор "Студенты".

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


Рис. 1. SQL запрос SELECT на выборку данных

В данном примере формируется выборка данных из всех столбцов таблицы Студенты.

Сохраняем запрос с именем "Студенты-запрос1". В результате выполнения команды "Сохранить" в «Области переходов» появится объект - «Запросы: Студенты-запрос1».

После сохранения запроса на выборку необходимо выполнить этот запрос, щелкая на пиктограмме «Выполнить». Результаты выполнения команды «Выполнить» представлены на рис. 2.



Рис. 2. Выборка данных из всех столбцов таблицы Студенты

Выборка данных из таблицы в SQL осуществляется с помощью следующей конструкции:
SELECT *|
[AS ] FROM [WHERE [AND ]]
[GROUP BY | [HAVING ]]
[ORDER BY [COLLATE ] ]

Раздел SELECT


Определить список выходных столбцов
Список выходных столбцов может быть указан несколькими способами:
. Указать символ *, обозначающий включение в результаты запроса всех колонок запроса в естественной последовательности.
. Перечислить в желательном порядке только нужные.
Пример: SELECT * FROM Customer

Включить вычисляемые столбцы
В качестве вычисляемых столбцов запроса могут выступать:
. Результаты простейших арифметических выражения (+, -, /, *_ или конкатенации строк (||).
. Результаты функций агрегирования COUNT(*)|{AVG|SUM|MAX|MIN|COUNT} ( )

Примечание : В SQL Server дополнительно можно использовать оператор % — модуль (целый остаток от деления).
Включить константы
В качестве столбцов могут выступать константы числового и символьного типов.

Примечание : SELECT DISTINCT ‘Для ‘, SNum, Comm*100, ‘%’, SName FROM SalesPeople

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

Примечание : В SQL SERVER дать новое имя столбцу можно с помощью оператора присвоения =

Указать принцип обработки дублей строк
DISTINCT – запрещает появление строк-дублей в выходном множестве. Его можно задавать один раз для оператора SELECT. На практика первоначально формируется выходное множество, упорядочивается, а затем из него удаляются повторяющиеся значения. Обычно это занимает много времени и не следует этим злоупотреблять.
ALL (действует по умолчанию) – обеспечивает включение в результаты запроса и повторяющихся значений

Включить агрегатные функции
Функции агрегирования (функции над множествами, статистические или базовые) предназначены для вычисления некоторых значений для заданного множества строк. Используются следующие агрегатные функции:
. AVG|SUM(|) – подсчитывает среднее значение | сумму от или, возможно без учета дублей, игнорируя NULL.
. MIN|MAX() – находит максимальное | минимальное значение.
. COUNT(*) – подсчитывает число строк во множестве с учетом NULL значений | значений в столбце, игнорируя NULL значения, возможно без дублей.

Примечания по использованию :
. Функции агрегирования нельзя вкладывать друг в друга.
. Из-за значений NULL выражение SUM(F1)-SUN(F2)Sum(F1-F2)
. Внутри функций агрегирования допустимы выражения AVG(Comm*100)
. Если в результате запроса не получено ни одной строки или все значения равны NULL, то функция COUNT возвращает 0, а другие – NULL.
. Функции AVG и SUM могут применяться только для числовых типов, данных в Interval, а остальные могут использоваться для любых типов данных.
. Функция COUNT возвращает целое число (типа Integer), а другие наследуют типы данных обрабатываемых значений, вследствие чего следует следить за точностью результата функции SUM (возможно переполнение) и масштабом функции AVG.

Примеры на агрегатные функции:

SELECT COUNT(*) FROM Customer
. SELECT COUNT(DISTINCT SNum) FROM Orders
. SELECT MAX(Amt+Binc) FROM Orders //Если Binc – дополнительное числовое поле в Orders
. SELECT AVG(Comm*100) FROM SalesPeople //Выражение внутри функции

Особенности промышленных серверов
В СУБД Oracle в разделе SELECT можно указывать дополнительные указания-подсказки (hints) (27 штук), влияющие на выбор типа оптимизатора запросов и его работу.
SELECT /*+ ALL_ROWS */ FROM Orders… //наилучшая производительность

В СУБД SQL Server :
] – задает количество или процент считываемых строк. При одинаковых последних значениях возможно считывание всех таких строк и общее число может быть больше указанного.

DECLARE @p AS Int
SELECT @p=10
SELECT TOP(@p) WITH TIES * FROM Orders

Раздел FROM

Этот раздел является обязательным и позволяет:
Указать имена исходных таблиц
В разделе FROM указываются имена таблиц и/или представлений, из которых будут извлекаться данные. Причем одна и та же таблица может несколько раз входить в этот раздел.
Примечание: В СУБД Oracle можно выбирать строки и из снимков (Snapshot).

Указать псевдонимы таблиц
Под псевдонимом таблицы понимается дополнительный, обычно краткий идентификатор, указываемый через пробел после имени таблицы/представления.
Пример: Customer C

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

1) Перекрестное соединение
CROSS JOIN — определяются все возможные сочетания пар строк по одной для каждой строки каждой из объединяемых таблиц. Эквивалентно картезианскому соединению. Иногда называет декартовым произведением.

2) Естественное соединение
JOIN — определяются только те строки таблиц А и B, в которых значения столбцов одинаковы. Называют не совсем полноценным эквисоединением. Это автоматическое соединение по нескольким столбцам со всеми одинаковыми именами (join over).

3) Соединение объединением
UNION JOIN — определяются только те строки каждой из таблиц, для которых совпадения не были установлены. Столбцы из другой таблицы заполняются значениями NULL. Отметим, что соединение UNION и оператор UNIUN – это не одно и то же. Соединение противоположно соединению типа INNER.

4) Объединение посредством предиката
JOIN ON — фильтрует строки. Предикат может содержать подзапросы.

5) Объединение посредством имен столбцов
JOIN USING() – определяет соединение только по указанным столбцам, в то время как NATURAL – автоматически по всем одноименным.

Типы соединений

представляет собой один из аргументов: INNER |{LEFT|RIGHT|FULL}
. INNER – включает строки, в которых есть столбцы с совпадающими данными объединяемых таблиц. Используется по умолчанию.
. LEFT – включает все строки таблицы А (левая таблица) и все совпадающие значения из таблицы B. Столбцы несовпадающих строки заполняются NULL-значениями.
. RIGHT – включает все строки таблицы B (правая таблица) и все совпадающие значения таблицы А. обратный вариант для левого объединения.
. FULL – включает все строки обеих таблиц. Столбцы совпадающих строк заполнены реальными значениями, а несовпадающих строк – NULL-значениями.
. OUTER (внешний) – уточняющее слово, означающее, что несовпадающие строки из ведущей таблицы включаются вместе с совпадающими.

Примеры на внешнее объединение:

SELECT * FROM SalesPeople INNER JOIN Customer ON SalesPeople.City=Customer.City
. SELECT * FROM Customer LEFT OUTER JOIN SalesPeople ON SalesPeople.City=Customer.City
. SELECT * FROM Customer FULL OUTER JOIN SalesPeople ON SalesPeople.City=Customer.City

Картезианские соединения и самообъединения
. Если при включении нескольких таблиц не используются те или иные варианты соединения таблиц, то такие соединения называются картезианскими. Они используются для получения строк из двух различных таблиц. Тогда например, при соединении двух таблиц, каждая из которых содержит по 20 строк, итоговая таблица будет содержать 100 строк – каждая из строк одной таблицы с каждой из строк другой таблицы. SELECT * FROM Customer, Orders.
. Соединения одинаковых таблиц называют самообъединением (self-join).

Раздел WHERE

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

Основные виды соединений:
. Эквисоединения – это соединения таблиц, основанные на равенствах. Связь между таблицами по ключевым столбцам обеспечивает ссылочную целостность. Если при соединении используются первичный и внешний ключ то всегда существует отношение «один-ко-многим» (предок/потомок).

. Тэта-соединения – это такое соединение, когда в качестве оператора сравнения применяется неравенство (, >=, Примечания по SQL Server
В SQL Server левое, правое и полное соединение можно задать в разделе WHERE с помощью [*]=[*]. Фактически реализуется внешнее соединение, которое у других СУБД реализуется в разделе FROM.

Примеры внутренних соединений

SELECT C.CName, S.SName, S.City FROM SalesPeople S, Customer C WHERE S.City=C.City
SELECT SName, CName FROM SalesPeople, Customer WHERE SName

2. Фильтрация строк выходного множества
Раздел WHERE позволяет также определить, т.е. логическое условие, которое может быть либо истинным, либо ложным. Кроме того, одно или оба сравниваемых значения в предикате могут быть равны NULL, тогда результат сравнения может быть равен UNKNOWN. Оператор SELECT извлекает только те строки из таблиц, для которых имеет значение TRUE, исключая строки, для которых он равен FALSE или UNKNOWN.