Списки значений с IN
Когда значение в столбце должно быть равно одному из нескольких значений, OR получается длинным: genre = 'RPG' OR genre = 'Simulation' OR genre = 'Strategy'. IN говорит то же самое короче. После столбца идёт IN и список значений в скобках через запятую:
SELECT title, genre
FROM games
WHERE genre IN ('RPG', 'Simulation', 'Strategy')
ORDER BY genre, title;| title | genre |
|---|---|
| Dragon Forge | RPG |
| Knight's Oath | RPG |
| Bakery Story | Simulation |
| Moon Farm | Simulation |
| … | … |
Строка попадает в результат, если её значение равно любому из значений списка. Порядок значений не важен, а список может быть любой длины. Числа в списке пишутся без кавычек:
SELECT title, age_rating
FROM games
WHERE age_rating IN (16, 18)
ORDER BY title;| title | age_rating |
|---|---|
| Dragon Forge | 16 |
| Knight's Oath | 16 |
| Robot Rebellion | 16 |
| Shadow Ninja | 16 |
| Zombie Town | 18 |
NOT IN — наоборот: он находит строки, значения которых нет в списке. Покупатели не из London и не из Manchester:
SELECT name, city
FROM customers
WHERE city NOT IN ('London', 'Manchester')
ORDER BY name;| name | city |
|---|---|
| Isla Young | Leeds |
| Max Baker | Bristol |
| Mia Lewis | Bristol |
| Noah Wilson | Leeds |
| Oscar King | Bristol |
Ava Green и Henry Scott в результате нет, хотя они не из London и не из Manchester: их город — NULL. Строки с NULL не находят ни IN, ни NOT IN. Почему, вы узнаете в последнем упражнении этого урока.
Типичная ошибка: одна пара кавычек вокруг всего списка. genre IN ('RPG, Strategy') — не ошибка, но запрос ничего не находит. В списке одно значение — текст RPG, Strategy, а такого жанра нет ни у одной игры. У каждого текста в списке должны быть свои кавычки: ('RPG', 'Strategy').
Задание
- 1
Магазин разыграл приз: выиграли покупатели с ID 2, 7 и 11. Покажите их имя и email, отсортировав по имени:
name email Grace Hall grace.hall@mail.com Liam Turner liam.t@mail.com Mia Lewis mia.lewis@mail.com - 2
Ниже покажите название и жанр игр, которые не являются экшенами, гонками или спортивными играми (жанры
Action,RacingиSports). ИспользуйтеNOT INи отсортируйте игры по названию. Результат начинается так:title genre Bakery Story Simulation Castle Siege Strategy Cube Logic Puzzle … …