Для получения данных применяется команда SELECT. В упрощенном виде она имеет следующий синтаксис:
1
| SELECT список_столбцов FROM имя_таблицы |
Например, пусть ранее была создана таблица Products, и в нее добавлены некоторые начальные данные:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| CREATE TABLE Products ( Id INT IDENTITY PRIMARY KEY , ProductName NVARCHAR(30) NOT NULL , Manufacturer NVARCHAR(20) NOT NULL , ProductCount INT DEFAULT 0, Price MONEY NOT NULL ); INSERT INTO Products VALUES ( 'iPhone 6' , 'Apple' , 3, 36000), ( 'iPhone 6S' , 'Apple' , 2, 41000), ( 'iPhone 7' , 'Apple' , 5, 52000), ( 'Galaxy S8' , 'Samsung' , 2, 46000), ( 'Galaxy S8 Plus' , 'Samsung' , 1, 56000), ( 'Mi6' , 'Xiaomi' , 5, 28000), ( 'OnePlus 5' , 'OnePlus' , 6, 38000) |
Получим все объекты из этой таблицы:
1
| SELECT * FROM Products |
Символ звездочка * указывает, что нам надо получить все столбцы.

Получение всех столбцов с помощью символа звездочки * считается не очень хорошей практикой, так как, как правило, не все столбцы бывают нужны. И более оптимальный подход заключается в указании всех необходимых столбцов после слова SELECT. Исключение составляет тот случай, когда надо получить данные по абсолютно всем столбцам таблицы. Также использование символа * может быть предпочтительно в таких ситуациях, когда в точности не известны названия столбцов.
Если нам надо получить данные не по всем, а по каким-то конкретным столбцам, то тогда все эти спецификации столбцов перечисляются через запятую после SELECT:
1
| SELECT ProductName, Price FROM Products |

Спецификация столбца необязательно должна представлять его название. Это может быть любое выражение, например, результат арифметической операции. Так, выполним следующий запрос:
1
2
| SELECT ProductName + ' (' + Manufacturer + ')' , Price, Price * ProductCount FROM Products |
Здесь при выборке будут создаваться три столбца. Первый столбец представляет результат объединения двух столбцов ProductName и Manufacturer. Второй столбец - стандартный столбец Price. А третий столбец представляет значение столбца Price, умноженное на значение столбца ProductCount.

С помощью оператора AS можно изменить название выходного столбца или определить его псевдоним:
1
2
3
4
5
| SELECT ProductName + ' (' + Manufacturer + ')' AS ModelName, Price, Price * ProductCount AS TotalSum FROM Products |
В данном случае результатом выборки являются данные по 3-м столбцам. Первый столбец ModelName объединяет столбцы ProductName и Manufacturere, второй представляет стандартный столбец Price. Третий столбец TotalSum хранит произведение столбцов ProductCount и Price. При этом, как в случае со столбцом Price, необязательно определять название результирующего столбца с помощью AS.

DISTINCT
Оператор DISTINCT позволяет выбрать уникальные строки. Например, в нашем случае в таблице может быть по несколько товаров от одних и тех же производителей. Выберем всех производителей:
1
2
| SELECT DISTINCT Manufacturer FROM Products |

В данном случае критерием разграничения строк является столбец Manufacturer. Поэтому в результирующей выборке будут только уникальные значения Manufacturer. И если, к примеру, в базе данных есть два товара с производителем Apple, то это название будет встречаться в результирующей выборке только один раз.
Выборка с добавлением
SELECT INTO
Выражение SELECT INTO позволяет выбрать из одной таблицы некоторые данные в другую таблицу, при этом вторая таблица создается автоматически. Например:
1
2
3
4
5
| SELECT ProductName + ' (' + Manufacturer + ')' AS ModelName, Price INTO ProductSummary FROM Products SELECT * FROM ProductSummary |
После выполнения этой команды в базе данных будет создана еще одна таблица ProductSummary, которая будет иметь два столбца ModelName и Price, а данные для этих столбцов будут взяты из таблицы Products:

При выполнении этой команды таблица, в которую идет выборка (в данном случае ProductSummary), не должна существовать в базе данных.
Но, допустим, мы потом решили добавить все данные из таблицы Products в уже существующую таблицу ProductSummary. В этом случае можно опять же использовать команду INSERT:
1
2
3
| INSERT INTO ProductSummary SELECT ProductName + ' (' + Manufacturer + ')' AS ModelName, Price FROM Products |
Здесь добавляемые значения фактически представляют результат выборки из таблицы Products.
Комментариев нет:
Отправить комментарий