Project

General

Profile

Часть 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.

 

Add picture from clipboard (Maximum size: 742 MB)