Примеры
SELECT genus, species
FROM mammals
WHERE family = 'Felidae'
ORDER BY genus;
SELECT *
FROM persons
WHERE birthyear IN (1880, 1881)
OR birthyear BETWEEN 1891 AND 1898;
SELECT name, street, borough, phone
FROM schools s
WHERE EXISTS (SELECT * FROM pupils p WHERE p.school = s.id)
ORDER BY borough, street;
SELECT *
FROM employees
WHERE salary >= 10000 AND position <> 'Manager';
SELECT name
FROM wrestlers
WHERE region = 'Europe'
AND weight > ALL (SELECT weight FROM shot_putters
WHERE region = 'Africa');
SELECT id, name
FROM players
WHERE team_id = (SELECT id FROM teams
WHERE name = 'Buffaloes');
SELECT SUM (population)
FROM towns
WHERE name LIKE '%dam'
AND province CONTAINING 'land';
SELECT pass
FROM usertable
WHERE username = current_user;
Следующий пример показывает, что может быть, если условие поиска вычисляется как NULL
.
Предположим у вас есть таблица, в которой находятся несколько детских имён и количество шариков, которыми они обладают.
CHILD | MARBLES |
---|---|
Anita |
23 |
Bob E. |
12 |
Chris |
<null> |
Deirdre |
1 |
Eve |
17 |
Fritz |
0 |
Gerry |
21 |
Hadassah |
<null> |
Isaac |
6 |
Первое, обратите внимание на разницу между NULL
и 0.Известно, что Fritz не имеет шариков вовсе, однако неизвестно количество шариков у Chris и Hadassah.
Теперь, если ввести этот SQL оператор:
SELECT LIST(child) FROM marbletable WHERE marbles > 10
вы получите имена Anita, Bob E., Eve и Gerry.Все эти дети имеют более чем 10 шариков.
Если вы отрицаете выражение:
SELECT LIST(child) FROM marbletable WHERE NOT marbles > 10
запрос вернёт Deirdre, Fritz и Isaac.Chris и Hadassah не будут включены в выборку, так как не известно 10 у них шариков или меньше.Если вы измените последний запрос так:
SELECT LIST(child) FROM marbletable WHERE marbles <= 100
результат будет тем же самым, поскольку выражение NULL <= 10
даёт UNKNOWN
.Это не то же самое что TRUE
, поэтому Chris и Hadassah не отображены.Если вы хотите что бы в списке были перечислены все "бедные" дети, то измените запрос следующим образом:
SELECT LIST(child)
FROM marbletable
WHERE marbles <= 10 OR marbles IS NULL
Теперь условие поиска становится истинным для Chris и Hadassah, потому что условие “marbles is null
” возвращает TRUE
в этом случае.Фактически, условие поиска не может быть NULL
ни для одного из них.
Наконец, следующие два примера SELECT
запросов с параметрами в условии поиска.Как определяются параметры запроса и возможно ли это, зависит от приложения.Обратите внимание, что запросы подобные этим не могут быть выполнены немедленно, они должны быть предварительно подготовлены.После того как параметризованный запрос был подготовлен, пользователь (или вызывающий код) может подставить значения параметров и выполнить его многократно, подставляя перед каждым вызовом новые значения параметров.Как вводятся значения параметров, и проходят ли они предварительную обработку зависит от приложения.В GUI средах пользователь, как правило, вводит значения параметров через одно и более текстовых полей, и щелкает на кнопку "Execute", "Run" или "Refresh".
SELECT name, address, phone
FROM stores
WHERE city = ? AND class = ?
SELECT *
FROM pants
WHERE model = :model AND size = :size AND color = :col
Последний запрос не может быть передан непосредственно к движку сервера, приложение должно преобразовать его в другой формат, отображая именованные параметры на позиционные параметры.