- Table of contents
- Часть 2 Базовый синтаксис SELECT
Часть 2 Базовый синтаксис SELECT¶
За манипулирование данными (выборка данных, вставка новых данных, обновление данных, удаление данных) отвечает подмножество языка SQL - DML (Data Manipulation Language).
Язык DML содержит следующие конструкции:
- SELECT - выборка данных
- INSERT - вставка новых данных
- UPDATE - обновление данных
- DELETE - удаление данных
- MERGE - слияние данных
Данная часть материала посвящена базовому синтаксису команды SLEECT. Без понимания базовых принципов, невозможно будет приступить к изучению более сложных конструкций.
Примеры запросов будут проводиться на базе данных, которую мы сделали в предыдущей части: Часть_1_Описание_данных
Если по какой-то причине у вас нет этой базы данных или возникла необходимость быстро собрать ее заново, можно воспользоваться данным скриптом: create_mediadb.sql
Для существующей базы данных, не забудьте заполнить ее данными:
SET IDENTITY_INSERT attributes ON INSERT attributes(attribute_id, attribute_name) VALUES (1, N'Исполнитель'), (2, N'Автор'), (3, N'Композитор') SET IDENTITY_INSERT attributes OFF GO SET IDENTITY_INSERT files ON INSERT files(file_id, file_name, duration_size, sample_size, frequency) VALUES (1, N'\\root\snd\music\roza_chaynaya.mp3', 262, 11554200, 44100), (2, N'\\root\snd\music\zhestokaya_lybov.mp3', 227, 10010700, 44100), (3, N'\\root\snd\music\bud_ili_ne_bud.mp3', 219, 9657900, 44100), (4, N'\\root\snd\music\ischeznet_grust.mp3', 225, 9922500, 44100) SET IDENTITY_INSERT files OFF GO SET IDENTITY_INSERT phonograms ON INSERT phonograms(phonogram_id, phonogram_name, type, file_id) VALUES (1, N'Роза чайная', 3, 1), (2, N'Жестокая любовь', 3, 2), (3, N'Будь или не будь', 3, 3), (4, N'Исчезнет грусть', 3, 4)
Базовый синтаксис команды SELECT выглядит следующим образом:
SELECT [DISTINCT] список_столбцов или * FROM источник WHERE фильтр (условие) ORDER BY выражение_сортировки
SELECT - оператор выборки данных¶
Вначале рассмотрим самый простой вариант применения оператора выборки данных.
SELECT * FROM phonograms
Символ "*" означает, что в данном запросе мы просим вернуть все поля (столбцы), которые доступны в источнике. В качестве источника, командой "FROM phonograms" мы указали таблицу phonograms. В случае наличия кластеризованного индекса, сортировка, скорее всего, будет производиться по нему.
| phonogram_id | phonogram_name | type | file_id | add_date |
| 1 | Роза чайная | 3 | 1 |
2021-09-13 16:55:35.175 |
| 2 | Жестокая любовь | 3 | 2 |
2021-09-13 16:55:35.175 |
| 3 | Будь или не будь | 3 | 3 |
2021-09-13 16:55:35.175 |
| 4 | Исчезнет грусть | 3 | 4 |
2021-09-13 16:55:35.175 |
Если столбцов в таблице очень много, а особенно, если в таблице еще очень много строк, плюс к тому если мы делаем запросы к БД по сети, то предпочтительней будет выборка с непосредственным перечислением необходимых вам полей через запятую:
SELECT phonogram_id, phonogram_name FROM phonograms
| phonogram_id | phonogram_name |
| 1 | Роза чайная |
| 2 | Жестокая любовь |
| 3 | Будь или не будь |
| 4 | Исчезнет грусть |
Задание псевдонимов для таблиц¶
При перечислении столбцов (полей), можно указать имя источника, к которому они относятся (бывает необходимо, если используется несколько источников, а имя полей совпадают). Например:
SELECT phonograms.phonogram_id, phonograms.phonogram_name FROM phonograms
Такой синтаксис не очень удобный, особенно если имя источника достаточно длинное. Для этих случаев применяют псевдонимы (alias) - короткие имена, которые временно присваивают источнику.
SELECT p.phonogram_id, p.phonogram_name FROM phonograms AS p
Псевдоним задается ключевым словом AS: "источник AS псевдоним". Имя псевдонима обычно составляют из первых букв каждого слова в имени объекта. Если псевдоним уже существует, к его имени добавляют цифру.
Примеры:
- phonograms AS p
- phonogram_name AS pn
- add_date AS ad1 (первая таблица)
- add_date AS ad2 (вторая таблица)
При формировании запроса, необходимо выбрать один из двух вариантов - либо указывать полное имя источника, либо псевдоним. Если вы задали псевдоним, пользоваться полным именованием источника уже нельзя.
Т.е. такой запрос не сработает:
SELECT phonograms.phonogram_id, p.phonogram_name FROM phonograms AS p ---- Msg 4104, Level 16, State 1, Line 2 Не удалось привязать составной идентификатор "phonograms.phonogram_id".
DISTINCT - отброс строк дубликатов¶
Ключевое слово DISTINCT используется для того, чтобы отбросить из результата запроса дублирующиеся строки.
В нашем примере, можно попробовать сделать запрос, который покажет только уникальные типы материалов в таблице phonograms:
SELECT DISTINCT type FROM phonograms
Если интересно, попробуйте выполнить этот запрос без ключевого слова DISTINCT.