Справочник Transact-SQL – основы для новичков

В данном материале я попытался объединить все основные моменты Transact-SQL (Что такое T-SQL), которые помогут начинающим программистам баз данных освоить данный язык и писать запросы и приложения на языке Transact-SQL.

Справочник Transact-SQL

Программирование баз данных, а если говорить конкретней, то баз данных под управлением Microsoft SQL Server, стало очень популярно, именно поэтому я решил сделать своего рода мини справочник, в котором можно найти все основные моменты с пояснениями и, конечно же, с примерами.

Для того чтобы потренироваться писать SQL запросы или создавать объекты базы данных, можете использовать бесплатную редакцию SQL Server Express, на момент составления справочника последней версией является Microsoft SQL Server 2014 Express.

Transact-SQL справочник для начинающих — описание справочника

Данный справочник будет выглядеть следующим образом, сначала я приведу небольшое оглавление с навигацией, затем начнется сам справочник, по каждому пункту будут комментарии, пояснения и примеры. Также, если мы уже подробно рассматривали или использовали где-либо в материалах на нашем сайте тот или иной объект или действие, я, конечно же, буду ставить ссылки, для того чтобы Вы могли посмотреть подробные примеры или как использовать то или иное действие на практике.

Так как охватить абсолютно все просто невозможно, поэтому не удивляйтесь, если Вы что-то здесь не обнаружили. Еще раз повторю, что данный справочник создан для начинающих программистов на Transact-SQL, а также для простых админов, которым периодически требуется выгружать какие-то данные с SQL сервера.

Для детального изучения языка SQL рекомендую почитать мою книгу «SQL код – самоучитель по SQL для начинающих программистов», в которой я максимально подробно, с большим количеством примеров рассказываю о языке SQL. Для изучения языка T-SQL на профессиональном уровне рекомендую посмотреть мои видеокурсы по T-SQL.

База данных

ДДаже начинающий программист Transact-SQL должен знать, как создается база данных или изменяются ее свойства, поэтому прежде чем рассматривать таблицы, представления, функции и все остальное, давайте разберем процесс создания, изменения и удаления базы данных на Transact-SQL.

Создание

Для того чтобы создать базу данных, необходимо выполнить следующий запрос:

 
   CREATE DATABASE test

где, test это название базы данных.

Подробней о создании базы данных на SQL сервере, мы разговаривали в материале Как создать базу данных в MS SQL Server

Удаление

Если Вам необходимо удалить базу данных, то можете использовать запрос:

 
   DROP DATABASE test

Изменение

Для изменений параметров базы данных можно использовать графический интерфейс Management Studio, в котором все параметры подробно описаны, а можно посылать запросы ALTER DATABASE, например, для включения автоматического сжатия базы данных test, используем следующий запрос

   
   ALTER DATABASE test SET AUTO_SHRINK ON;
   --А для выключения
   ALTER DATABASE test SET AUTO_SHRINK OFF;

Надеюсь понятно, ALTER DATABASE команда на изменение, test название изменяемой базы данных, SET команда, указывающая на то, что мы будем изменять параметры базы данных, AUTO_SHRINK непосредственно сам параметр, ON/OFF значение параметра.

Типы данных

Самые распространенные и часто используемые

Точные числа

  • tinyint — 1 байт
  • smallint — 2 байта
  • int — 4 байта
  • bigint — 8 байт
  • numeric и decimal (тип с фиксированной точностью и масштабом)
  • money — 8 байт
  • smallmoney —  4 байт

Приблизительные числа

  • float [ (n) ] – размер зависит от n (n может быть от 1 до 53, по умолчанию 53)
  • real — 4 байта

Дата и время

  • date – дата
  • time — время
  • datetime — дата, включающая время дня с долями секунды в 24-часовом формате.

Символьные строки

  • char [ ( n ) ] – строка с фиксированной длиной, где n длина строки (от 1 до 8000). Размер при хранении составляет n байт.
  • varchar [ ( n | max ) ] — строка с фиксированной длиной, где n длина строки (от 1 до 8000). Если указать max, то, максимальный размер при хранении составит 2^31-1 байт (2 ГБ), а при указании n то фактическая длина введенных данных плюс 2 байта.
  • text – строковые данные переменной длины, максимальный размер 2 147 483 647 байт (2 ГБ).
  • nchar [ ( n ) ] — строка с фиксированной длиной в Юникоде, где n длина строки (от 1 до 4000). Размер при хранении составляет удвоенное значение n в байтах
  • nvarchar [ ( n | max ) ]  — строка с фиксированной длиной в Юникоде, где n длина строки (от 1 до 4000). При указании max, максимальный размер при хранении составит 2^31-1 байт (2 ГБ), а если n, то удвоенная фактическая длина введенных данных плюс 2 байта.
  • ntext — строковые данные переменной длины, с максимальной длиной строки 1 073 741 823 байт.

Двоичные данные

  • binary [ ( n ) ]  — двоичные данные с фиксированной длиной, размером n байт, где n значение от 1 до 8000. Размер при хранении составляет n байт.
  • varbinary [ ( n | max) ] — двоичные данные с переменной длиной, где n может иметь значение от 1 до 8000. Если указать max то максимальный размер при хранении составит 2^31-1 байт(2 ГБ). При указании n то размер хранения  это фактическая длина введенных данных плюс 2 байта.
  • image — двоичные данные переменной длины, размером от 0 до 2^31 – 1 (2 147 483 647) байт.

Другие

  • xml –хранение xml данных. Подробно рассматривали в материале Transact-sql – работа с xml, а если Вы вообще не знаете что такое XML, то об это мы разговаривали в статье Основы XML для начинающих.
  • table – хранение результирующего набора строк.

Таблицы

Примеров создания таблиц на этом сайте достаточно, так как практически в каждой статье связанной с SQL я привожу пример создания тестовой таблицы, но для закрепления знаний, давайте создадим, модифицируем и удалим тестовую таблицу. Как раз посмотрим на то, как задаются типы данных полей в таблицах на Transact-SQL.

Создание

   
   CREATE TABLE test_table(
      [id] [int] IDENTITY(1,1) NOT NULL,--идентификатор, целое число int, не разрешены значения NULL
      [fio] [varchar](50) NULL, --ФИО, строка длиной 50 символов, значения NULL разрешены
      [summa] [float] NULL, --сумма, приблизительное числовое значение,  значения NULL разрешены
      [date_create] [datetime] NULL, --дата и время, значения NULL разрешены
      [comment] [varchar](100) NULL --строка длиной 100 символов, значения NULL разрешены
   ) ON [PRIMARY]
   GO

Добавление колонки

  
   ALTER TABLE test_table ADD prosto_pole  numeric(18, 0) NULL

Где,

  • test_table — это название таблицы;
  • add — команда на добавление;
  • prosto_pole – название колонки;
  • pole  numeric(18, 0) – тип данных новой колонки;
  • NULL – параметр означающий что в данном поле можно хранить значение NULL.

Изменение типа данных

Давайте изменим, тип данных нового поля, которое мы только что создали (prosto_pole) с numeric(18, 0) на bigint и увеличим длину поля comment до 300 символов.

  
   ALTER TABLE test_table ALTER COLUMN prosto_pole bigint;
   ALTER TABLE test_table ALTER COLUMN comment varchar(300);

Примечание! SQL сервер не сможет выполнить изменение типа данных, если преобразование значений в этих полях невозможно, в этом случае придется удалять колонку, со всем данными, и добавлять заново или очищать все данные в этом поле.

Удаление колонки

Для удаления определенной колонки используем команду drop, например, для удаления поля prosto_pole используем следующий запрос

  
   ALTER TABLE test_table DROP COLUMN prosto_pole

Удаление таблицы

Для того чтобы удалить таблицу, напишем вот такой простой запрос, где test_table и есть таблица для удаления

   
   DROP TABLE test_table

Представления

Очень полезным объектом в базе данных является представление (VIEW) или по-нашему просто вьюха. Если кто не знает, то представление, это своего рода хранимый запрос, к которому можно обращаться также как и к таблице. Давайте создадим представление на основе тестовой таблицы test_table, и допустим, что очень часто нам требуется писать запрос, например, по условию сумма больше 1000, поэтому для того чтобы каждый раз не писать этот запрос мы один раз напишем представление, и впоследствии будем обращаться уже к нему.

Создание

   
   CREATE VIEW test_view
   AS
        SELECT id, fio, comment 
        FROM test_table
        WHERE summa > 1000
   GO

Пример обращения к представлению:

  
   SELECT * FROM test_view

Изменение

   
   ALTER VIEW test_view
   AS
        SELECT id, fio, comment 
        FROM test_table
        WHERE summa > 1500
   GO

Удаление

  
   DROP VIEW test_view

Системные представления

В СУБД MS SQL Server есть таки системные объекты, которые могут предоставить иногда достаточно полезную информацию, например системные представления. Сейчас мы разберем парочку таких представлений. Обращаться к ним можно также как и к обычным представлениям (например, select * from название представление)

  • sys.all_objects – содержит все объекты базы данных, включая такие параметры как: название, тип, дата создания и другие.
  • sys.all_columns – возвращает все колонки таблиц с подробными их характеристиками.
  • sys.all_views – возвращает все представления базы данных.
  • sys.tables – все таблицы базы данных.
  • sys.triggers – все триггеры базы данных.
  • sys.databases – все базы данных на сервере.
  • sys.sysprocesses – активные процессы, сессии в базе данных.

Их на самом деле очень много, поэтому все разобрать, не получиться. Если Вы хотите посмотреть, как их можно использовать на практике, то это мы уже делали, например, в материалах Как узнать активные сеансы пользователей в MS Sql 2008

Функции

MS SQL сервер позволяет создавать функции, которые будут возвращать определенные данные, другими словами, пользователь сам может написать функцию и в дальнейшем ее использовать, например, когда необходимо получить значения, требующие сложных вычислений или сложную выборку данных. Иногда просто для уменьшения кода, когда вызов функции заменят часто требующиеся значения в разных запросах и приложениях.

Создание

   
   CREATE FUNCTION test_function
     (@par1 bigint, @par2 float)
   RETURNS varchar(300)
   AS                   
     BEGIN
       DECLARE @rezult varchar(300)
       SELECT @rezult=comment 
       FROM test_table 
       WHERE id = @par1 AND summa > @par2
       
       RETURN @rezult
     END

Где,

  • CREATE FUNCTION – команда на создание объекта функция;
  • test_function – название новой функции;
  • @par1 и @par2 – входящие параметры;
  • RETURNS varchar(300) – тип возвращаемого результата;
  • DECLARE @rezult varchar(300) – объявление переменной с типом varchar(300);
  • Инструкция select в нашем случае и есть действия функции;
  • RETURN @rezult – возвращаем результат;
  • BEGIN и END – соответственно начала и конец кода функции.

Пример использования ее в запросе:

   
   SELECT test_function(1, 20)

Изменение

   
   ALTER FUNCTION test_function 
    (@par1 bigint, @par2 float)
   RETURNS varchar(300)
   AS                   
    BEGIN
     DECLARE @rezult varchar(300)
     SELECT @rezult=comment 
     FROM test_table_new 
     WHERE id =  @par1 AND summa >= @par2

     RETURN @rezult
   END

Удаление

  
   DROP FUNCTION test_function

Встроенные функции

Помимо того, что SQL сервер позволяет создавать пользовательские функции, он также предоставляет возможность использовать встроенные функции, которые за Вас уже написали разработчики СУБД. Их очень много, поэтому самые распространенные я разбил на группы и попытался их кратко описать.

Системные функции

Здесь я приведу несколько примеров функций, которые возвращают различные системные данные

  • @@VERSION – возвращает версию SQL сервера;
  • @@SERVERNAME – возвращает имя сервера;
  • SUSER_NAME() – имя входа пользователя на сервер, другими словами, под каким логином работает тот или иной пользователь;
  • user_name() – имя пользователя базы данных;
  • @@SERVICENAME – название сервиса СУБД;
  • @@IDENTITY — последний вставленный в таблицу идентификатор;
  • db_name()  — имя текущей базы данных;
  • db_id() – идентификатор базы данных.

Агрегатные функции

Функции, которые вычисляют какое-то значение на основе набора (группы) значений. Если при вызове этих функций нужно указать колонку для вывода результата, то необходимо выполнить группировку данных (group by) по данному полю. Подробно данную конструкцию мы рассматривали в статье Transact-SQL группировка данных group by

  • avg – возвращает среднее значение;
  • count – количество значений;
  • max – максимальное значение;
  • min – минимальное значение;
  • sum – сумма значений.

Пример использования:

   
   SELECT COUNT(*) as count, 
           SUM(summa) as sum, 
           MAX(id) as max, 
           MIN(id) as min, 
           AVG(summa) as avg  
   FROM test_table

Строковые функции

Данный вид функций соответственно работает со строками.

Left (строковое выражение, количество символов) – возвращает указанное число символов строки начиная слева.

Пример

   
   SELECT LEFT('Пример по работе функции left', 10)
   --Результат 'Пример по'

Right (строковое выражение, количество символов) – возвращает указанное число символов строки начиная справа

Пример

   
   SELECT Right('Пример по работе функции Right', 10)
   -- Результат 'кции Right'

Len (строка) – возвращает длину строки.

Пример

   
   SELECT len('Пример по работе функции len')
   --Результат 28

Lower (строка) – возвращает строку, в которой все символы приведены к нижнему регистру.

Пример

   
   SELECT lower('Пример по работе функции lower')
   --Результат 'пример по работе функции lower'

Upper (строка) — возвращает строку, в которой все символы приведены к верхнему регистру.

Пример

   
   SELECT Upper('Пример по работе функции Upper')
   --Результат 'ПРИМЕР ПО РАБОТЕ ФУНКЦИИ UPPER'

Ltrim (строка) – возвращает строку, в которой все начальные пробелы удалены.

Пример

   
   SELECT ltrim('     Пример по работе функции ltrim')
   --Результат 'Пример по работе функции ltrim'

Rtrim (строка)  – возвращает строку, в которой все пробелы справа удалены

Пример

   
   SELECT Rtrim ('     Пример по работе функции Rtrim      ')
   -- Результат'     Пример по работе функции Rtrim'

Заметка! Подробнее про функции TRIM, LTRIM и RTRIM в T-SQL.

Replace (строка, что ищем, на что заменяем) – заменяет в строковом выражении все вхождения указанные во втором параметре, символами указанным в третьем параметре.

Пример

   
   SELECT Replace  ('Пример по работе функции Replace', 'по работе', 'ЗАМЕНА' )
   -- Результат 'Пример ЗАМЕНА функции Replace'

Replicate (строка, количество повторений) – повторяет строку (первый параметр) столько раз, сколько указанно во втором параметре.

Пример

   
   SELECT Replicate  ('Пример Replicate ', 3 )
   -- Результат 'Пример Replicate Пример Replicate Пример Replicate '

Reverse (строка) – возвращает все в обратном порядке.

Пример

   
   SELECT Reverse ('Пример по работе функции Reverse')
   -- Результат 'esreveR иицкнуф етобар оп ремирП'

Space (число пробелов) – возвращает строку в виде указанного количества пробелов.

Пример

   
   SELECT Space(10)
   -- Результат '          '      

Substring (строка, начальная позиция, сколько символов) – возвращает строку, длиной в число указанное в третьем параметре, начиная с символа указанного во втором параметре.

Пример

   
   SELECT Substring('Пример по работе функции Substring', 11, 14)
   -- Результат 'работе функции'

Про строковые функции мы также разговаривали в материале Сочетание строковых функций на Transact-SQL

Математические функции

Round (число, точность округления) – округляет числовое выражение до числа знаков указанного во втором параметре

Пример

   
   SELECT Round(10.4569, 2)
   -- Результат '10.4600'

Floor (число) – возвращает целое число, округленное в меньшую сторону.

Пример

   
   SELECT Floor(10.4569)
   -- Результат '10'

Ceiling (число) – возвращает целое число, округленное в большую сторону.

Пример

   
   SELECT Ceiling (10.4569)
   -- Результат '11'

Power (число, степень) — возвращает число возведенное в степень указанную во втором параметре.

Пример

   
   SELECT Power(5,2)
   -- Результат '25'

Square (число) – возвращает числовое значение, возведенное в квадрат

Пример

   
   SELECT Square(5)
   -- Результат '25'

Abs (число) – возвращает абсолютное положительное значение

Пример

   
   SELECT Abs(-5)
   -- Результат '5'

Log(число) – натуральный логарифм с плавающей запятой.

Пример

   
   SELECT Log(5)
   -- Результат '1,6094379124341'

Pi – число пи.

Пример

   
   SELECT Pi()
   -- Результат '3,14159265358979'

Rand – возвращает случайное число с плавающей запятой от 0 до 1

Пример

   
   SELECT rand()
   -- Результат '0,713273187517105'

Функции даты и времени

Getdate() – возвращает текущую дату и время

Пример

   
   SELECT Getdate()
   -- Результат '2014-10-24 16:36:23.683'

Day(дата) – возвращает день из даты.

Пример

   
   SELECT Day(Getdate())
   -- Результат '24'

Month(дата) – возвращает номер месяца из даты.

Пример

   
   SELECT Month(Getdate())
   -- Результат '10'

Year (дата) –возвращает год из даты

Пример

   
   SELECT year(Getdate())
   -- Результат '2014'

DATEPART(раздел даты, дата) – возвращает из даты указанный раздел (DD,MM,YYYY и др.)

Пример

   
   SELECT DATEPART(MM,GETDATE())
   -- Результат '10'

Isdate (дата) – проверяет введенное выражение, является ли оно датой

Пример

   
   SELECT Isdate(GETDATE())
   -- Результат '1'

Функции преобразование

Cast (выражение as тип данных) – функция для преобразования одного типа в другой. В примере мы преобразуем тип float в int

Пример

   
   SELECT CAST(10.54 as int)
   --результат 10

Convert – (тип данных, выражение, формат даты) – функция для преобразования одного типа данных в другой. Очень часто ее используют для преобразования даты, используя при этом третий необязательный параметр — формат даты.

Пример

   
   SELECT GETDATE(), CONVERT(DATE, GETDATE(), 104)
   --Результат 
   --2014-10-24 15:20:45.270 – без преобразования;
   --2014-10-24 после преобразования.

Табличные функции

Создаются, для того чтобы получать из них данные как из таблиц, но после различного рода вычислений. Подробно о табличных функциях мы разговаривали в материале Transact-sql – Табличные функции и временные таблицы

Создание

  
   --название нашей функции
  CREATE FUNCTION fun_test_tabl 
   (    
     --входящие параметры и их тип
     @id INT
   )
   --возвращающее значение, т.е. таблица
   RETURNS TABLE 
   AS
   --сразу возвращаем результат
   RETURN 
   (
        --сам запрос или какие то вычисления
        SELECT * FROM test_table where id = @id
   )
   GO

Изменение

   
   --название нашей функции
   ALTER FUNCTION fun_test_tabl 
   (    
     --входящие параметры и их тип
     @id INT
   )
  --возвращающее значение, т.е. таблица
   RETURNS TABLE 
   AS
   --сразу возвращаем результат
   RETURN 
   (
        --сам запрос или какие то вычисления
        SELECT * FROM test_table where id = @id and summa > 100
   )
   GO

Удаление

  
   DROP FUNCTION fun_test_tabl

Как видите, для того чтобы создать, изменить или удалить такие функции используются такие же операторы, как и для обычных функций, отличия лишь в том, какой тип возвращает функция.

Пример обращения к этой функции

  
   SELECT * FROM fun_test_tabl(1)

Процедуры

Процедуры – это набор SQL инструкций, которые компилируются один раз, и могут принимать, как и функции, различные параметры. Используются для упрощения расчетов, выполнения групповых действий.

Создание

   
   CREATE PROCEDURE sp_test_procedure
   (@id INT) 
   AS 
     --объявляем переменные
     DECLARE @sum FLOAT
    --SQL инструкции
     SET @sum = 100
     UPDATE test_table SET summa = summa + @sum 
     WHERE id = @id
   
   GO

Изменение

   
   ALTER PROCEDURE sp_test_procedure
   (@id int) 
   AS 
   --объявляем переменные
   DECLARE @sum float
   --SQL инструкции
   SET @sum = 500
   UPDATE test_table SET summa = summa + @sum WHERE id = @id
   
   GO

Удаление

  
   DROP PROCEDURE sp_test_procedure

Вызов процедуры

Можно вызывать по разному, например:

   
   EXECUTE sp_test_procedure 1
     --или
   EXEC sp_test_procedure 1

Где, EXECUTE и EXEC вызов процедуры, sp_test_procedure соответственно название нашей процедуры, 1 значение параметра

Системные процедуры

Системные процедуры – это процедуры для выполнения различных административных действий как над объектами на сервере, так и над конфигурацией самого сервера. Вызываются они также как и обычные процедуры, но в контексте любой базы данных.

Их огромное множество, поэтому приведу всего несколько примеров.

sp_configure – процедура для отображения и внесения изменений в конфигурацию ядра СУБД. Первый параметр название параметра конфигурации, второй параметр значение.

Пример

   
   --изменяем значение параметра
   EXEC sp_configure 'Ad Hoc Distributed Queries',1 
   reconfigure --применяем
   EXEC sp_configure --просто просматриваем значения всех параметров

где, ‘Ad Hoc Distributed Queries’ — это название параметра, 1 соответственно значение, на которое мы хотим изменить, reconfigure применят введенное значение.

На практике мы применяли эту процедуру в материале Межбазовый запрос на Transact-SQL

sp_executesql – выполняет инструкцию или набор инструкций Transact-SQL, которые могут формироваться динамически. Данную процедуры мы использовали в материале журналирование изменений данных в таблице на Transact-SQL

Пример

  
   EXECUTE sp_executesql N'SELECT * FROM test_table WHERE id = @id',  N'@id int', @id = 1

Где, первый параметр — sql инструкция (строка в Юникоде), второй — определение всех параметров встроенных в sql инструкцию, третий — значение параметров.

sp_help – возвращает подробные сведения о любом объекте базы данных.

Пример

  
   EXECUTE sp_help 'test_table'

sp_rename – переименовывает объект в базе данных. Можно использовать для переименования таблиц, индексов, название колонок в таблицах, Не рекомендуется использовать эту процедуру для переименования пользовательских процедур, триггеров, функций.

Пример переименования таблицы

 
   EXEC sp_rename 'test_table', 'test_table_new'

где, первым параметром идет объект со старым названием, а второй параметр — это новое название объекта.

Пример переименования столбца в таблице

  
   EXEC sp_rename 'test_table.summa', 'summa_new', 'COLUMN'

Третьим параметром указывается, что переименовывается колонка.

Триггеры

Триггер – это обычная процедура, но вызывается она событием, а не пользователем. Событие, например, может быть вставка новой строки в таблицу (insert), обновление данных в таблице (update) или удаление данных из таблицы (delete).

Создание

   
   CREATE TRIGGER trg_test_table_update ON test_table
        for UPDATE --можно также delete, insert
   AS
        BEGIN
        --sql инструкции в случае UPDATE
        END
   GO

Изменение

   
   ALTER TRIGGER trg_test_table_update ON test_table
        for insert --можно также delete, update
   AS
        BEGIN
        --sql инструкции в случае insert
        END
   GO

Удаление

  
   DROP TRIGGER trg_test_table_update

Включение/Отключение

   
   --отключение
   DISABLE TRIGGER trg_test_table_update ON test_table;
   --включение
   ENABLE TRIGGER trg_test_table_update ON test_table;

О триггерах мы разговаривали в статье — Как создать триггер на Transact-SQL.

Индексы

Это объект базы данных, который повышает производительность поиска данных, за счет сортировки данных по определенному полю. Если провести аналогию то, например, искать определенную информацию в книге намного легче и быстрей по его оглавлению, чем, если бы этого оглавления не было. В СУБД MS SQL Server существует следующие типы индексов:

Кластеризованный индекс — при таком индексе строки в таблице сортируются с заданным ключом, т.е. указанным полем. Данный тип индексов у таблицы в MS SQL сервере может быть только один и, начиная с MS SQL 2000, он автоматически создается при указании в таблице первичного ключа (PRIMARY KEY).

Некластеризованный индекс – при использовании такого типа индексов в индексе содержатся отсортированные по указанному полю указатели строк, а не сами строки, за счет чего происходит быстрый поиск необходимой строки. Таких индексов у таблицы может быть несколько.

Колоночный индекс (columnstore index) – данный тип индексов основан на технологии хранения данных таблиц не виде строк, а виде столбцов (отсюда и название), у таблицы может быть один columnstore индекс.

При использовании такого типа индексов таблица сразу становится только для чтения, другими словами, добавить или изменить данные в таблице уже будет нельзя, для этого придется отключать индекс, добавлять/изменять данные, затем включать индекс обратно.

Такие индексы подходят для очень большого набора данных, используемых в хранилищах.

Операции, в которых используются агрегатные функции с использованием группировки, выполняются намного быстрей (в несколько раз!) при наличии такого индекса.

Columnstore index доступен начиная с 2012 версии SQL сервера в редакциях Enterprise, Developer и Evaluation.

Создание

Кластеризованного индекса

   
   CREATE CLUSTERED INDEX idx_clus_one 
     ON test_table(id)
   GO

Где, CREATE CLUSTERED INDEX — это инструкция к созданию кластеризованного индекса, idx_clus_one название индекса, test_table(id) соответственно таблица и ключевое поле для сортировки.

Некластеризованного индекса

  
   CREATE INDEX idx_no_clus 
     ON test_table(summa)
   GO

Columnstore index

   
   CREATE columnstore INDEX idx_columnstore
     ON test_table(date_create)
   GO

Отключение

   
   --отключение
   ALTER INDEX idx_no_clus ON test_table DISABLE
   --включение, перестроение
   ALTER INDEX idx_no_clus ON test_table REBUILD

Удаление

   
   DROP INDEX idx_no_clus ON test_table
   GO

Курсоры

Курсор — это своего рода тип данных, который используется в основном в процедурах и триггерах. Он представляет собой обычный набор данных, т.е. результат выполнения запроса.

Пример (все это в коде процедуры)

   
   --объявляем переменные
   DECLARE @id BIGINT
   DECLARE @fio VARCHAR(100)
   DECLARE @summa FLOAT
   --объявляем курсор
   DECLARE test_cur CURSOR FOR 
        SELECT id, fio, summa FROM test_table
   --открываем курсор
   OPEN test_cur
   --считываем данные первой строки в курсоре
   --и записываем их в переменные
   FETCH NEXT FROM test_cur INTO @id, @fio, @summa
   --запускаем цикл до тех пор, пока не закончатся строки в курсоре
   WHILE @@FETCH_STATUS = 0
   BEGIN
        --на каждую итерацию цикла можем выполнять sql инструкции
        --..................SQL инструкции.................     
        --считываем следующую строку курсора
        FETCH NEXT FROM test_cur INTO @id, @fio, @summa
   END
   --закрываем курсор
   CLOSE test_cur
   DEALLOCATE test_cur

Подробно о курсорах мы разговаривали в материале Использование курсоров и циклов в Transact-SQL.

Запросы DML

DML (Data Manipulation Language) – это операторы SQL, с помощью которых осуществляется манипуляция данными. К ним относятся select, update, insert, delete.

SELECT

Оператор SQL с помощью которого осуществляется выборка данных. Подробно о нем мы разговаривали в материале Язык запросов SQL – Оператор SELECT

Пример

  
   SELECT * FROM test_table

UPDATE

Используется для обновления данных

Пример

   
  --обновятся все строки в таблице
   UPDATE test_table SET summa=500
   --обновятся только строки, у которых id больше 10
   UPDATE test_table SET summa=100
   WHERE id > 10

INSERT

Оператор на добавление данных

   
   --добавление одной строки
   INSERT INTO test_table (fio, summa, date_create, comment)
        VALUES ('ФИО',100, '26.10.2014', 'тестовая запись')
   --массовое добавление на основе запроса
   INSERT INTO test_table
        SELECT fio, summa, date_create, comment 
        FROM test_table

DELETE

С помощью этого оператора можно удалить данные.

Пример

   
   --очищение всей таблицы
   DELETE test_table
   --удаление только строк попавших под условие
   DELETE test_table 
   WHERE summa > 100

Заметка! Для профессионального изучения языка T-SQL рекомендую посмотреть мои видеокурсы по T-SQL.

Вот и все, справочник закончился! Надеюсь, он Вам хоть как-то помог. Удачи!

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Комментарии: 1
  1. Админ (автор)

    Приглашаю всех желающих пройти мои онлайн-курсы по изучению языка T-SQL – https://self-learning.ru/courses/t-sql
    На курсах используется моя авторская последовательная методика обучения и рассматриваются все конструкции языка SQL и T-SQL. Каждый курс включает огромное количество материалов: видео, текстовый материал, тесты, домашние задания, скрипты, а также сертификат о прохождении.
    На курсах Вы можете заниматься в комфортном для себя темпе не выходя из дома в любое удобное для Вас время.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.