Создание, удаление таблицы

Create table table_name

(column_name data_type [null | not_null] [,…])

Пример:

Create_table tt

(s1 varchar(10) not null,

s2 varchar (20));

drop table tt

 

 

Вставка, удаление и изменение данных

Добавление строк

INSERT

INSERT table_name VALUES (expressions [, …n]

После ключевого слова VALUES в скобках перечисляются значения для всех столбцов таблицы кроме столбца счетчика (IDENTITY) и столбца times-tamp

Примеры:

INSERT authors VALUES(‘237-55-67’,’Malow’,’Gena’,…)

Для нескольких столбцов

INSERT authors (tel,fam)

VALUES (‘244-66-99’,’Ivanow’)

 

SELECT …INTO

Позволяет автоматически создавать новую таблицу на основе результата выборки данных.

SELECT {column_name [ AS column_alias], …n}

INTO new_table FROM {sourse_table, …n} [<select_options>]

column_name – имя столбца одной из таблиц, указанных в списке FROM

AS column_alias – присваивается псевдоним столбцу в новой таблице

INTO new_table – на основе выборки будет создана новая таблица

FROM {…} – список таблиц из которых берутся данные

select_options – подразумевает применение команд Where, Order by, Grup by и т.д.

Пример

SELECT ot AS “Отдел”,tn,f INTO bd10 FROM bd WHERE ot=200 or ot=100

 

 

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

UPDATE

(table_name WITH {<table_hint_limited> […n]) | view_name |rowset_function_limited}

SET

{colum_name={expression | default | null}

| {([FROM {<table_sourse>} […n] [WHERE <search_condition>]}

| [WHERE CURRENT OF {{[GLOBAL] cursor_name} |cursor_variable_name)]}

[OPTION [<query_hint> [,…n])

(table_name WITH {<table_hint_limited> - указывается имя таблицы, которую меняем.

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

view_name – имя изменяемого представления

rowset_function_limited – задается набор изменяемых строк

colum_name={expression | default | null – указывается, какое значение будет записано в столбце.

FROM {<table_sourse> - перечень таблиц в которых используются данные .

WHERE <search_condition – условия выборки изменяемых строк

WHERE CURRENT OF {{[GLOBAL] cursor_name} |cursor_variable_name)]} – обновление данных в курсорах.

OPTION [<query_hint> [,…n] – для контроля оптимизатора при выполнении изменений.

Пример:

UPDATE bd10 SET ot+1, tn=tn-1, f=left(f,1)+’. ‘+f WHERE ot=100

 

Временные таблицы

Создаются в базе данных tempdb и глобальные хранятся до конца сеанса, а локальные видны только с того листа запроса в котором они созданы.

Create Table #CCC (a1 dec(7,2), a2 char(10)) - Локальная

Create Table ##CCC (a1 dec(7,2), a2 char(10)) - Глобальная

 

 

Типы данных

_____________________________________________________________________________________

CHAR, VARCHAR Cимвольный а1 varchar(30)

BIT, BIT VARYING Битовый a1 bit(4)

NUMERIC, DECIMAL (DEC), Точные числа Десятич. формат a1 dec(7,2)

INTEGER (INT), SMALLINT Точные числа Большое число a1 int(17)

Маленькое число а1 smallint

- до 32767

FLOAT, REAL, Округл. числа 5.2E6

DOUBLE PRECISION Округл. числа

DATE, TIME, TIMESTAMP Дата / Время a1 DATE

INTERVAL Интервал interval year(2) to month

Interval hour to second(4)

SQL_VARIANT Может содержать любой тип данных

 

Переменные

Локальные переменные

 

DECLARE @переменная тип_данных ПРИМЕР: DECLARE @a1 int, @a2 int

DECLARE @переменная Table

(определение таблицы)

 

Присвоение значение переменной

Set @a1=’Hello, World’

Select @a1=’Hello, World’

Select @a1=MAX(OK) FROM bd с указанием другого оператора SELECT

INSERT INTO @a1 SELECT * FROM i1

INSERT INTO @a1 VALUES (…) добавить строки в переменную табл.типа

 

--- Пример: Табличные переменные

declare @a2 table

( tn int, ot1 int, f char(20))

 

---Запись в локальную перемену из таблицы

insert int @al

select tn, of, f from bd where ot=200

 

---Измерение локальной переменной

update @al set ot1=222

 

---Запись в локальную переменную данных

insert into @a2

VALUES ( 55,22,’Петров’)

 

Глобальные переменные

Они предоставляются системой SQL Server, не могут создаваться пользователем. Предоставляют информацию о текущем статусе SQL Server.

 

Обозначаются @@.....

Переменные конфигурирования

ПРИМЕР: @@CONNECTIONS – число соединений с момента запуска сервера

Статические переменные

ПРИМЕР: @@CPU_BUSY – время затраченное процессором с момента запуска сервера

Системные переменные

ПРИМЕР: @@ROWCOUNT – кол.строк которые использованы в последнем операторе

 

Индексы

 

Для ускорения поиска данных можно создавать индексы. Индекс - это

системная таблица, построенная по значениям заданного столбца таблицы.

 

Значения столбца Строки, в которых встречается такое значение

Кофе 32 33

Крупа 20 21

Молоко 7 8 12 18 22 24 28 31

Мясо 2 6 9 13 14

Овощи 1 3 17 23 15

Рыба 4 5 10 11

Фрукты 25 26 27 29 30

Яйца 16 19

 

Решение о том, использовать или не использовать какой-либо индекс при обработке

запроса принимается не пользователем, а оптимизатором СУБД, который учитывает множество факторов - размер таблиц, тип используемых структур хранения данных, статистическое распределение данных в таблицах и индексах и т.д.

Несмотря на то, что индексы увеличивают объем базы данных, их следует

использовать как для отдельных столбцов таблицы, так и для комбинации

нескольких ее столбцов (например, для комбинации: Фамилия, Имя, Отчество).

 

CREATE [UNIQUE] INDEX имя_индекса ON базовая_таблица

(столбец [[ASC] | DESC] [, столбец [[ASC] | DESC]] ...);

Пример: CREATE UNIQUE INDEX tn1 ON i1(tn);

 

В больших (более 1000 строк) таблицах поиск индексированных значений

выполняется на порядок быстрее, чем поиск неиндексированных, а в очень

больших таблицах - на два-три порядка.

при удалении или добавлении строки таблицы должны быть перестроены все индексы, построенные для ее столбцов, а при изменении значения индексированного столбца - индекс этого столбца. Когда модифицируется много - несколько сотен (тысяч) строк

- и после модификации каждой строки перестраиваются все ее индексы,

время модификации может быть на порядок (несколько порядков) больше

времени модификации строк с неиндексированными столбцами. Поэтому

перед модификацией множества строк таблицы целесообразно уничтожить

индексы ее столбцов.

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

DROP INDEX имя индекса.

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

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