SELECT, WHERE, ORDER BY и LIMIT — достать из таблицы нужные колонки и строки в нужном порядке.
Запрос SELECT достаёт данные из таблицы: какие колонки показать — после SELECT, из какой таблицы — после FROM.
SELECT name, price
FROM products;
SELECT * выводит все колонки. Это удобно, чтобы посмотреть на таблицу, но в рабочих запросах колонки лучше
перечислять: видно, что именно нужно, и запрос не изменится, когда в таблицу добавят колонку.
Условие в WHERE проверяется для каждой строки, и в результат попадают только те, где оно истинно. Сравнения —
=, <> (не равно), <, <=, >, >=. Несколько условий соединяют через AND и OR, список значений —
IN (…), диапазон — BETWEEN a AND b (обе границы входят). Строки и даты пишут в одинарных кавычках: 'Казань'.
SELECT name, price, stock
FROM products
WHERE price < 2000 AND stock > 0;
AND выполняется раньше OR — как умножение раньше сложения. Если в условии есть и то и другое, ставьте скобки:
WHERE (category_id = 2 OR category_id = 3) AND price > 30000.
Пустое значение в таблице — NULL. Его проверяют не через =, а так: email IS NULL — почты нет,
email IS NOT NULL — почта есть. Почему = NULL не работает, разберём в последнем блоке.
В шаблоне % — сколько угодно любых символов, _ — ровно один символ. LIKE различает большие и маленькие буквы,
ILIKE — нет.
SELECT name
FROM products
WHERE name ILIKE '%книга%';
ILIKE — расширение PostgreSQL: в стандарте SQL его нет, и не во всякой СУБД он есть. Способ, который работает
везде, — привести строку к маленьким буквам функцией lower() и искать маленькими: lower(name) LIKE '%книга%'.
upper() делает наоборот — переводит в большие.
Без ORDER BY PostgreSQL отдаёт строки в каком угодно порядке, и от запуска к запуску он может меняться.
По возрастанию — ASC (так по умолчанию), по убыванию — DESC. Колонок сортировки может быть несколько: вторая
решает, когда в первой значения равны.
LIMIT 5 оставляет первые пять строк результата, OFFSET 10 пропускает первые десять. Без ORDER BY «первые пять»
— случайные пять.
SELECT name, price
FROM products
ORDER BY price DESC, name
LIMIT 5;
Примеры можно выполнить — кнопка под каждым. Все таблицы базы и их колонки — в панели «Таблицы базы».