Выбор строк с помощью WHERE
До сих пор ваши запросы показывали все строки таблицы. Обычно же нужны только некоторые: игры для маленьких детей, заказы одного покупателя, отзывы с пятью звёздами. Чтобы выбрать строки, добавьте слово WHERE и условие после FROM:
SELECT title, age_rating
FROM games
WHERE age_rating = 3;| title | age_rating |
|---|---|
| Pixel Racer | 3 |
| Moon Farm | 3 |
| Cube Logic | 3 |
| Goal Rush | 3 |
| Turbo Karts | 3 |
| Bakery Story | 3 |
| Ice Hockey Pro | 3 |
База данных просматривает таблицу строку за строкой и проверяет для каждой из них условие: равно ли значение age_rating в этой строке 3? Если да, строка попадает в результат, если нет — пропускается. Поэтому в результате только 7 игр, которые подходят с 3 лет.
Знак = сравнивает два значения, здесь — значение в столбце age_rating с числом 3. В SQL один знак = означает «равно», а не ==, как в других языках программирования. (SQLite понимает и ==, но другие базы данных — нет, так что пишите =.)
Столбец из условия не обязан входить в число показываемых столбцов. Этот запрос показывает только название, а строку выбирает по первичному ключу — это самый надёжный способ найти одну конкретную строку:
SELECT title
FROM games
WHERE id = 7;| title |
|---|
| Star Pilots |
У WHERE в запросе строго определённое место: после FROM и перед ORDER BY и LIMIT. Части запроса всегда идут в таком порядке:
SELECT columns
FROM table
WHERE condition
ORDER BY columns
LIMIT number;Обязательны только SELECT и FROM. Остальные части добавляйте по необходимости, но всегда в этом порядке. Последние три и работают в этом порядке: сначала WHERE выбирает строки, затем ORDER BY сортирует оставшиеся, а LIMIT берёт из них первые несколько. Две самые дорогие игры для маленьких детей:
SELECT title, price
FROM games
WHERE age_rating = 3
ORDER BY price DESC
LIMIT 2;| title | price |
|---|---|
| Goal Rush | 50 |
| Ice Hockey Pro | 45 |
Типичная ошибка: WHERE после ORDER BY. Запрос SELECT title FROM games ORDER BY title WHERE age_rating = 3; заканчивается ошибкой:
Error on line 1: near "WHERE": syntax errorSQLite не ожидал WHERE после сортировки. Перенесите условие перед ORDER BY.
Задание
- 1
Покажите название и цену игр, которые стоят ровно $30, отсортировав их по названию:
title price Castle Siege 30 Turbo Karts 30 Zombie Town 30 - 2
Ниже добавьте запрос, который показывает ID и дату (
ordered_at) каждого заказа покупателя с ID 3 (столбецcustomer_idтаблицыorders), сначала самые новые:id ordered_at 29 2025-12-12 17 2025-03-03 8 2024-06-18 3 2024-02-29