Склеивание текста
Иногда нужно собрать несколько значений в один текст: название игры вместе с жанром, имя клиента вместе с адресом почты. Оператор ||, две вертикальные черты, склеивает тексты:
SELECT title || ' (' || genre || ')'
FROM games;| title || ' (' || genre || ')' |
|---|
| Dragon Forge (RPG) |
| Pixel Racer (Racing) |
| Moon Farm (Simulation) |
| … |
' (' и ')' — это тексты, записанные прямо в запросе. В SQL текст всегда пишется в одинарных кавычках (апострофах): 'Hello', ' ('. Кавычки не входят в текст. Они лишь показывают, где он начинается и где заканчивается, а всё между ними остаётся как есть, вместе с пробелами и заглавными буквами. Без кавычек SQLite принял бы слово за название столбца. Числа пишутся без кавычек: 5, 0.8.
Типичная ошибка — название столбца в кавычках. 'city' — это не столбец city, а текст «city», поэтому SELECT name, 'city' FROM customers; покажет слово city в каждой строке. А двойные кавычки предназначены для названий, как псевдоним "sale price" в предыдущем упражнении, а не для текста. SQLite иногда прощает текст в двойных кавычках, но только если столбца с таким названием нет: "city" всё равно остаётся столбцом. Другие базы данных такого не прощают вовсе.
Оператор || склеивает и числа, как текст: title || ': $' || price даёт Dragon Forge: $40. Но будьте осторожны с вычислениями: || выполняется раньше * и -, поэтому title || ': $' || price * 2 сначала склеивает тексты, а потом умножает весь текст на 2, что не имеет смысла (в результате получится 0). Возьмите вычисление в скобки: title || ': $' || (price * 2).
Если любое из склеиваемых значений равно NULL, весь результат тоже NULL. У Ava Green нет города, поэтому для неё этот запрос даёт NULL, а не «Ava Green from»:
SELECT name || ' from ' || city AS customer
FROM customers;| customer |
|---|
| Emma Clark from London |
| Liam Turner from Manchester |
| Olivia Brown from London |
| Noah Wilson from Leeds |
| NULL |
| … |
Как подставить другое значение вместо NULL, вы узнаете на уроке о функциях. И, как видите, у склеенного столбца обычно есть псевдоним: само вычисление дало бы длинное название. И ещё одно замечание: || работает в SQLite, PostgreSQL и Oracle, а MySQL и SQL Server склеивают тексты функцией CONCAT().
Задание
- 1
Покажите контакты клиентов в том виде, в каком их записывают в электронной почте: один столбец
contactс именем, пробелом и адресом почты в угловых скобках, напримерAva Green <ava.green@mail.com>. Отсортируйте их по имени:contact Ava Green <ava.green@mail.com> Emma Clark <emma.clark@mail.com> Grace Hall <grace.hall@mail.com> … - 2
Ниже подготовьте тексты для баннера распродажи, например
Knight's Oath: now $55: название и цена на $5 ниже. Покажите их в одном столбцеsale, отсортировав по цене, от самой высокой:sale Knight's Oath: now $55 Goal Rush: now $45 Ice Hockey Pro: now $40 …