Урок 1. Создание объектов базы данных и отправка запросов к ним
Применимо к: SQL Server Azure SQL Database
Управляемый экземпляр SQL Azure
Analytics Platform System (PDW)
На этом занятии вы узнаете, как создать базу данных, создать таблицу в базе данных и получить доступ к данным таблицы и изменить их. Поскольку это занятие представляет собой введение в использование Transact-SQL, в нем не используются и не описываются многие параметры, доступные для этих инструкций.
Инструкции Transact-SQL могут быть написаны и пересланы ядру СУБД следующими способами:
При помощи среды SQL Server Management Studio. Предполагается, что вы используете среду Среда Management Studio, но можно также использовать среду Среда Management Studio Express, которая может быть загружена бесплатно с веб-узла центра загрузки Майкрософт.
С помощью служебной программы sqlcmd .
Соединившись из создаваемого приложения.
Исходный код исполняется в компоненте Компонент Database Engine таким же образом и с теми же разрешениями, независимо от того, как был передан исходный код инструкций.
Чтобы выполнить инструкцию языка Transact-SQL в Management Studio, откройте Management Studio и подключитесь к экземпляру ядра СУБД SQL Server.
Предварительные требования
Для работы с этим руководством необходима среда SQL Server Management Studio и доступ к экземпляру SQL Server.
- Установите SQL Server Management Studio.
Если у вас нет экземпляра SQL Server, создайте его. Чтобы создать экземпляр, выберите свою платформу по следующим ссылкам. При выборе проверки подлинности SQL используйте учетные данные SQL Server.
- Windows: скачать выпуск SQL Server 2017 Developer Edition.
- Linux: скачайте SQL Server 2017 в контейнер.
Создание базы данных
Как и многие инструкции Transact-SQL, инструкция CREATE DATABASE имеет обязательный параметр: имя базы данных. Кроме этого, у инструкции CREATE DATABASE
имеется ряд необязательных параметров, таких как расположение на диске, где требуется хранить файлы базы данных. При выполнении инструкции CREATE DATABASE
без дополнительных параметров для многих из них SQL Server использует значения по умолчанию.
В окне Редактор запросов введите, но не выполняйте следующий код:
CREATE DATABASE TestData GO
С помощью указателя выделите слова
CREATE DATABASE
и нажмите клавишу F1. ДолжнаCREATE DATABASE
открыться статья в электронной документации по SQL Server. Таким же способом можно найти полный синтаксис инструкцииCREATE DATABASE
и других инструкций, используемых в данном учебнике.В редакторе запросов нажмите клавишу F5 , чтобы выполнить инструкцию и создать базу данных с именем
TestData
.
При создании базы данных SQL Server создает копию model
базы данных и переименовывает ее в имя базы данных. Эта операция обычно занимает несколько секунд, если только с помощью дополнительного параметра не указан большой исходный размер базы данных.
Примечание
Когда в одном пакете представлено несколько инструкций, они разделяются с помощью ключевого слова GO. Ключевое слово GO является необязательным, если в пакете содержится только одна инструкция.
Создание таблицы
Применимо к: SQL Server Azure SQL Database
Azure Synapse Analytics Analytics
Platform System (PDW)
Чтобы создать таблицу, нужно указать имя таблицы, имена и типы данных для каждого столбца таблицы. Также рекомендуется указывать, допускаются ли значения NULL для каждого из столбцов. Для создания таблицы необходимо иметь разрешение CREATE TABLE
и разрешение ALTER SCHEMA
для схемы, которая будет содержать таблицу. Предопределинная роль базы данных db_ddladmin имеет эти разрешения.
Большинство таблиц имеют первичный ключ, состоящий из одной или нескольких столбцов таблицы. Первичный ключ всегда уникален. Компонент Компонент Database Engine будет применять ограничение на то, что любое значение первичного ключа не может повторяться в таблице.
Список типов данных и ссылки на их описание см. в разделе Типы данных (Transact-SQL).
Примечание
Компонент Компонент Database Engine может быть установлен с учетом регистра и без учета регистра. Если компонент Компонент Database Engine установлен с учетом регистра, имена объектов должны иметь одно и тоже имя. Например, таблица с именем OrderData будет отличаться от таблицы ORDERDATA. Если компонент Компонент Database Engine установлен без учета регистра, эти два имени таблицы будут рассматриваться как одна таблица, то есть имя может быть использовано только один раз.
Переключение соединения редактора запросов на базу данных TestData
В окне редактора запросов введите и выполните следующий код, чтобы изменить соединение на базу данных TestData
.
USE TestData
GO
Создание таблицы
В окне редактора запросов введите и выполните следующий код, чтобы создать таблицу Products
. Столбцы таблицы имеют имена ProductID
, ProductName
, Price
и ProductDescription
. Столбец ProductID
является первичным ключом таблицы. int
, varchar(25)
, money
и varchar(max)
. Только столбцы Price
и ProductionDescription
могут быть пустыми при вставке или изменении строки. Данная инструкция содержит необязательный элемент (dbo.
), называемый схемой. Схема — это объект базы данных, к которому принадлежит таблица. Если вы являетесь администратором, схемой по умолчанию будет схема dbo
. dbo
означает владельца базы данных.
CREATE TABLE dbo.Products
(ProductID int PRIMARY KEY NOT NULL,
ProductName varchar(25) NOT NULL,
Price money NULL,
ProductDescription varchar(max) NULL)
GO
Вставка данных в таблицу и их обновление
Теперь, когда таблица создана Products
, можно приступать к вставке данных в нее с помощью инструкции INSERT. После вставки данных содержимое строки изменяется с помощью инструкции UPDATE. Предложение WHERE предназначено для ограничения числа строк, изменяемых в процессе выполнения инструкции UPDATE до одной строки. Чтобы ввести следующие данные, потребуется четыре инструкции.
ProductID | ProductName | Цена | ProductDescription |
---|---|---|---|
1 | Clamp | 12,48 | Workbench clamp |
50 | Screwdriver | 3,17 | Flat head |
75 | Tire Bar | Tool for changing tires. | |
3000 | 3 mm Bracket | 0,52 |
Базовый синтаксис: INSERT, имя таблицы, список столбцов, VALUES, а затем список добавляемых значений. Два дефиса в начале строки означают, что строка является примечанием и текст не будет обрабатываться компилятором. В этом случае примечание описывает возможные варианты синтаксиса.
Вставка данных в таблицу
Выполните следующую инструкцию, чтобы добавить строку в таблицу
Products
, которая была создана в предыдущей задаче.-- Standard syntax INSERT dbo.Products (ProductID, ProductName, Price, ProductDescription) VALUES (1, 'Clamp', 12.48, 'Workbench clamp') GO
Если вставка выполнена, перейдите к следующему шагу.
Если вставка завершается сбоем, это может быть вызвано тем, что в таблице
Product
уже есть строка с таким ИД продукта. Чтобы продолжить, удалите все строки в таблице и повторите предыдущий шаг. TRUNCATE TABLE удаляет все строки в таблице.Выполните следующую команду, чтобы удалить все строки в таблице:
TRUNCATE TABLE TestData.dbo.Products; GO
После усечения таблицы повторите команду
INSERT
на этом шаге.В следующей инструкции показано, как можно изменить порядок, в котором приведены параметры, изменив расположение
ProductID
иProductName
одновременно как в списке полей (в круглых скобках), так и в списке значений.-- Changing the order of the columns INSERT dbo.Products (ProductName, ProductID, Price, ProductDescription) VALUES ('Screwdriver', 50, 3.17, 'Flat head') GO
Следующая инструкция показывает, что имена столбцов перечислять не обязательно, если значения перечислены в нужном порядке. Этот синтаксис является распространенным, но не рекомендуется, так как другим пользователям может быть сложнее понять ваш код.
NULL
параметр указан для столбца,Price
так как цена на этот продукт еще не известна.-- Skipping the column list, but keeping the values in order INSERT dbo.Products VALUES (75, 'Tire Bar', NULL, 'Tool for changing tires.') GO
Имя схемы указывать не обязательно, пока доступ и изменение таблицы осуществляются с помощью схемы по умолчанию. Поскольку в столбце
ProductDescription
разрешены значения NULL и значение для столбца не приведено, имя и значение столбцаProductDescription
в инструкции могут быть полностью опущены.-- Dropping the optional dbo and dropping the ProductDescription column INSERT Products (ProductID, ProductName, Price) VALUES (3000, '3 mm Bracket', 0.52) GO
Обновление таблицы продуктов
Введите и выполните следующую инструкцию UPDATE
, чтобы изменить значение ProductName
второго продукта со значения Screwdriver
на значение Flat Head Screwdriver
.
UPDATE dbo.Products
SET ProductName = 'Flat Head Screwdriver'
WHERE ProductID = 50
GO
Чтение данных из таблицы
Для чтения данных в таблице используется инструкция SELECT. Инструкция SELECT является одной из наиболее важных инструкций Transact-SQL, и для нее существует много разновидностей синтаксиса. В этом учебнике будет показана работа с пятью простыми вариантами.
Чтение данных в таблице
Чтобы прочитать данные из таблицы
Products
, введите и выполните следующие инструкции.-- The basic syntax for reading data from a single table SELECT ProductID, ProductName, Price, ProductDescription FROM dbo.Products GO
Чтобы выбрать все столбцы в таблице, можно использовать звездочку (
*
). Звездочка используется для нерегламентированных запросов. В постоянном коде укажите список всех столбцов, чтобы инструкция возвращала нужные столбцы, даже если какой-то столбец будет добавлен в таблицу позднее.-- Returns all columns in the table -- Does not use the optional schema, dbo SELECT * FROM Products GO
Столбцы, которые не требуется возвращать, можно опустить. Столбцы возвращаются в том порядке, в котором они перечислены.
-- Returns only two of the columns from the table SELECT ProductName, Price FROM dbo.Products GO
Чтобы ограничить количество строк, возвращаемых пользователю, используйте предложение
WHERE
.-- Returns only two of the records in the table SELECT ProductID, ProductName, Price, ProductDescription FROM dbo.Products WHERE ProductID < 60 GO
Можно работать со значениями столбцов, по мере того как столбцы возвращаются. В следующем примере выполняется математическая операция над столбцом
Price
. Столбцы, которые были изменены таким образом, не будут иметь имени, если вы не укажете его с помощью ключевогоAS
слова .-- Returns ProductName and the Price including a 7% tax -- Provides the name CustomerPays for the calculated column SELECT ProductName, Price * 1.07 AS CustomerPays FROM dbo.Products GO
Полезные функции в инструкции SELECT
Сведения о некоторых функциях, которые можно использовать для работы с данными в инструкциях SELECT, см. в следующих статьях:
Создание представлений и хранимых процедур
Представление является хранимой инструкцией SELECT, а хранимая процедура представляет собой одну или более инструкций Transact-SQL, выполняемых в виде пакета.
Представления запрашиваются как таблицы и не принимают параметры. Хранимые процедуры сложнее, чем представления. Хранимые процедуры содержат как входные, так и выходные параметры и могут содержать инструкции, которые управляют потоком кода, например IF и WHILE. Использование хранимых процедур для всех повторяющихся действий в базе данных является хорошим стилем программирования.
В этом примере вы будете использовать CREATE VIEW для создания представления, которое выбирает только два столбца в Products
таблице. Затем с помощью инструкции CREATE PROCEDURE создается хранимая процедура, которая принимает цену в качестве параметра и возвращает только те продукты, цена которых меньше значения, указанного в качестве параметра.
Создание представления
Выполните следующую инструкцию, создающую представление, которое выполняет инструкцию select и возвращает названия и цены продуктов пользователю.
CREATE VIEW vw_Names
AS
SELECT ProductName, Price FROM Products;
GO
Тестирование представления
С представлениями обращаются так же, как с таблицами. Используйте инструкцию SELECT
, чтобы получить доступ к представлению.
SELECT * FROM vw_Names;
GO
Создание хранимой процедуры
В следующем примере создается хранимая процедура pr_Names
с входным параметром @VarPrice
типа money
. Эта хранимая процедура печатает инструкцию Products less than
, соединенную операцией сцепления с входным параметром, тип которого преобразуется из money
в varchar(10)
. Затем процедура выполняет инструкцию SELECT
на представлении, передавая входной параметр в предложение WHERE
. Возвращаются все продукты, цена которых меньше значения входного параметра.
CREATE PROCEDURE pr_Names @VarPrice money
AS
BEGIN
-- The print statement returns text to the user
PRINT 'Products less than ' + CAST(@VarPrice AS varchar(10));
-- A second statement starts here
SELECT ProductName, Price FROM vw_Names
WHERE Price < @VarPrice;
END
GO
Тестирование хранимой процедуры
Чтобы выполнить хранимую процедуру, введите и выполните следующую инструкцию. Эта процедура должна возвратить названия двух продуктов, введенных в таблицу Products
на занятии 1, цена которых меньше 10.00
.
EXECUTE pr_Names 10.00;
GO
Дальнейшие действия
В следующей статье вы узнаете, как настроить разрешения в объектах базы данных. Объекты, созданные в уроке 1, также будут использоваться в уроке 2.
Дополнительные сведения см. в следующей статье: