FOREIGN KEY (fk_plant, pr_name)



REFERENCES Plants (id_plant, p_name));

 

Можно определять действия, которые SQL Server будет предпринимать, когда пользователь попытается удалить или обновить ключ, на который указывают еще существующие внешние ключи. Действия указываются с помощью конструкций ON DELETE (при удалении) и ON UPDATE (при обновлении).

 

Существует четыре варианта действий.

 

CASCADE. Внешний ключ будет приведен в соответствие родительскому ключу. При изменении р.к. внешний ключ также изменится, при удалении – будет удалены все содержащие ключ записи.

SET NULL. Значения внешнего ключа будут установлены в NULL.

SET DEFAULT. Для внешнего ключа будет установлено значение по умолчанию, а при отсутствии такового – NULL.

NO ACTION. Применяется по умолчанию. Внешний ключ не меняется, но если в результате применения оператора ссылка может стать недействительной, оператор игнорируется.

По умолчанию выполняется действие NO ACTION, если не указано иное.

 

CREATE TABLE Shop

(id_product int IDENTITY,

Pr_name char(20),

Pr_definition varchar(150),

Pr_cost int,

Fk_plant int REFERENCES Plants (id_plant)

ON DELETE NO ACTION

ON UPDATE CASCADE);

 

 


Выборка данных

 

Для выборки данных в SQL используется инструкция SELECT. Она состоит из следующих основных частей. Части пишутся в определенном порядке.

 

1. Список выборки. Здесь указываются столбцы, которые включаются в результат запроса. Столбцы возвращаются в порядке их перечисления в списке выборки. Чтобы список выборки содержал все столбцы таблицы, можно использовать символ *.

2. Раздел FROM. Определяет источник (или источники) данных для выборки (таблицы или представления).

 

SELECT * FROM Films;  – выводит все данные из таблицы «Films».

SELECT FilmName, PublYear FROM Films; – выборка только названия и года выхода фильма.

 

Имена объектов БД можно уточнить. Уточненное имя записывается в форме:

 

ИмяСервера . ИмяБазы . ИмяВладельца . ИмяТаблицы(для таблицы)

ИмяСервера . ИмяБазы . ИмяВладельца . ИмяТаблицы . ИмяСтолбца(для столбца)

 

Уточнение имени полезно, например, при выборке данных из нескольких таблиц, если таблицы содержат одноимённые столбцы.

Для того чтобы сократить размеры запроса, для громоздких имен объектов в разделе FROM можно задать псевдонимы. После объявления псевдонима нельзя обращаться к объекту по имени в текущем запросе. Служебное слово AS можно опустить.

 

Псевдоним для таблицы:

 

SELECT F.FilmName, F.Duration FROM Films AS F;

 

Псевдоним для поля или функции:

 

SELECT (RTRIM(F.FilmName) + ' - ' + F.Description) AS FilmAbout FROM Films F;

 

RTRIM – функция, которая обрезает все пробелы справа от значения поля. LTRIM – слева.

Запрос, возвращающий список формата «название фильма (год)»:

SELECT RTRIM(FilmName) + ' (' + CONVERT(char(4), PublYear) + ' г.)' as film

FROM Films;

Функция CONVERT преобразует выражение одного типа данных в другой:

CONVERT ( data_type [ ( length ) ] , expression).

Для исключения повторяющихся значений из результата выборки используется функция DISTINCT.

 

SELECT DISTINCT FilmName FROM Films;– выборка названий фильмов без повторений.

 

DISTINCT применяется ко всем столбцам, используемым в предложении SELECT. Альтернатива DISTINCT – функция ALL (повторяющиеся записи сохраняются). ALL применяется по умолчанию.

 

Если требуется вывести на экран определенное число записей, используется предложение TOP. TOP выводит либо точное количество записей, либо процент записей от общего числа. Во втором случае используется аргумент PERCENT (округление в большую сторону).

SELECT TOP 50 PERCENT FilmName FROM Films; – выборка половины списка фильмов (по порядку хранения в БД)

SELECT TOP 2 FilmName FROM Films ORDER BY FilmName; –выборка первых двух фильмов (по алфавиту)

3. Раздел WHERE. Определяет критерий отбора записей. В разделе можно задавать предикаты – условные выражения, которые могут иметь результат TRUE, FALSE или UNKNOWN для каждой строки таблицы. В результат запроса включаются только те строки, для которых предикат имеет значение TRUE. В предикатах используются операторы отношения (больше, меньше, равно и т.д.) и логические операторы (AND, OR, NOT).

 

SELECT FilmName

FROM Films

WHERE FilmCompany = 'New Line Cinema' AND PublYear > 2000;

Сравниваемые объекты не обязаны присутствовать в списке выборки.

Если необходимо выбрать все строки, в которых какое-то поле не содержит значения, используется конструкция IS NULL. Например, выборка всех фильмов, для которых не указан год выпуска:

SELECT FilmName

FROM Films

WHERE PublYear IS NULL;

Для выбора строк, в которых поле содержит любое значение, отличное от NULL, используется конструкция IS NOT NULL. Выборка фильмов, для которых год выпуска указан:

 

SELECT FilmName

FROM Films

WHERE PublYear IS NULL;

 

4. Раздел GROUP BY. Предназначен для группировки записей и вычисления для них агрегатных (статистических) функций. Группировка происходит по одному или нескольким полям, объединяются записи с одинаковым значением полей. Кроме полей для группировки выделяются поля, для которых будет вычислена агрегатная функция.

Агрегатные функции выполняют вычисление на наборе значений и возвращают одиночное значение. Все они, за исключением COUNT, не учитывают значение NULL. В T-SQL используются следующие основные функции:

 

AVG – среднее арифметическое группы значений;

SUM – сумма значений;

MIN – минимальное значение;

MAX – максимальное значение;

COUNT – количество элементов в выборке.

 

Агрегатные функции могут использоваться без раздела GROUP BY. Например, можно посчитать, сколько в БД фильмов:

 

SELECT COUNT(FilmCompany)

FROM Films;

 


 

Если нужно узнать более подробную информацию, например, сколько фильмов вышло в каждом году, значения придется сгруппировать по полю «год выпуска». Поля, по которым происходит группировка, не обязаны присутствовать в списке выборки (в разделе SELECT поле PublYear можно не использовать). Однако, наоборот, любое поле, которое входит в список выборки и не является агрегатной функцией, обязано входить в раздел GROUP BY.

 


Дата добавления: 2018-06-27; просмотров: 214; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!