Сравнение текста
Чтобы сравнить столбец с текстом, запишите текст в одинарных кавычках, как вы делали с || на предыдущем уроке:
SELECT title, price
FROM games
WHERE genre = 'Puzzle';| title | price |
|---|---|
| Cube Logic | 5 |
| Word Quest | 10 |
Типичная ошибка: текст без кавычек. SQLite тогда принимает Puzzle за имя столбца, и WHERE genre = Puzzle заканчивается ошибкой no such column: Puzzle.
Знак = сравнивает текст точно, символ за символом, и заглавная буква — это не то же самое, что строчная. WHERE genre = 'puzzle' ничего не найдёт, как и 'Puzzle ' с пробелом в конце. Результат такого запроса — только строка с названиями столбцов, без строк с данными. Когда запрос, который должен что-то найти, ничего не находит, сравните его текст с вкладкой «Таблицы».
В названии Knight's Oath есть апостроф, а это тот же символ, которым заканчивается текст. Здесь текст заканчивается после Knight, и SQLite не знает, что делать с остальным:
SELECT *
FROM games
WHERE title = 'Knight's Oath';Error on line 1: near "s": syntax errorВнутри текста апостроф пишут дважды: 'Knight''s Oath'. Два апострофа подряд означают один апостроф в тексте, и текст продолжается.
А двойные кавычки? В SQL они нужны для имён таблиц и столбцов, а не для текста. SQLite иногда принимает "Puzzle" за текст, но только если ни у одного столбца нет такого имени, а другие базы данных этого не допускают вовсе. Текст всегда пишется в одинарных кавычках.
Текст можно сравнивать и с помощью <, >, <= и >=. Тогда сравнение идёт по алфавиту: текст «меньше», если стоит в алфавите раньше. Игры, название которых стоит раньше буквы D:
SELECT title
FROM games
WHERE title < 'D'
ORDER BY title;| title |
|---|
| Bakery Story |
| Castle Siege |
| Cube Logic |
Castle Siege и Cube Logic в списке есть, хотя они длиннее, чем 'D': текст сравнивается с первого символа, а C стоит раньше D. Когда один текст — начало другого, первым идёт более короткий, поэтому 'Castle' меньше, чем 'Castle Siege'.
Строго говоря, SQLite сравнивает текст по кодам символов, а в них все заглавные буквы идут раньше всех строчных: 'Zebra' < 'apple' — истина. ORDER BY сортирует текст так же, поэтому название, начинающееся со строчной буквы, окажется после всех остальных.
Задание
- 1
Покажите название и цену стратегий (жанр
Strategy), сначала самые дешёвые:title price Tiny Kingdoms 25 Castle Siege 30 Galaxy Trader 35 - 2
Ниже покажите все столбцы игры Knight's Oath. Найдите её по названию:
id title genre price released age_rating 15 Knight's Oath RPG 60 2025-11-14 16 - 3
В магазине переставляют полки, и вы расставляете игры от S до Z. Покажите названия игр, которые начинаются с S или с любой более поздней буквы, отсортировав их по названию:
title Shadow Ninja Star Pilots Tiny Kingdoms Turbo Karts Word Quest Zombie Town