БИЛЕТ № 15

1.Создание базы данных.

CREATE DATABASE [IF NOT EXISTS] db_name [CHARACTER SET charset] [COLLATE collation];

db_name

- Имя, которое будет присвоено создаваемой базе данных.

IF NOT EXISTS

- Если не указать этот параметр, то при попытке создания базы данных с уже существующим именем, возникнет ошибка выполнения команды.

CHARACTER SET, COLLATE

- Используется для задания стандартной кодировки таблицы и порядка сортировки.

Если при создании таблицы эти параметры не указываются, то кодировка и порядок сортировки вновь создаваемой таблицы берутся из значений, указанных для всей базы данных. Если задан параметр CHARACTER SET, но не задан параметр COLLATE, то используется стандартный порядок сортировки. Если задан параметр COLLATE, но не задан CHARACTER SET, то кодировку определяет первая часть имени порядка сортировки в COLLATE.

Кодировка, заданная в CHARACTER SET, должна поддерживаться сервером (latin1 или sjis), а порядок сортировки должен быть допустимым для текущей кодировки.

Примеры использования CREATE DATABASE

Следущий пример создает базу данных "my_db":

CREATE DATABASE `my_db`

или

CREATE DATABASE `my_db` CHARACTER SET utf8 COLLATE utf8_general_ci;

2. Написать SQL- запрос, осуществляющий использование агрегатных функций.

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

COUNT — выводит количество полей, которые выбрал запрос;

SUM — выводит арифметическую сумму всех выбранных значений данного поля;

MAX — выводит наибольшее из всех выбранных значений данного поля;

MIN — выводит наименьшее из всех выбранных значений данного поля;

AVG — выводит усреднение всех выбранных значений данного поля.

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

Пример запроса с группировкой:

SELECT COUNT(p.product_id) cnt,

g.group_name

FROM Products p, Product_groups g

WHERE p.group_id_ref = g.group_id

GROUP BY p.group_id_ref

Запрос выведет нам список групп и количество товаров в каждой:

Select min(Year_r), max(Year_r), avg(Year_r) from Pers

вернет минимальное, максимальное и среднее значение года рождения, а оператор

Select min(GetDate()-Year_r), max(GetDate()-Year_r), avg(GetDate()-Year_r) from Pers

выдаст аналогичные данные, но относящиеся к возрасту сотрудников.

3.Написать вложенный SQL-запрос на примере любой базы данных.

Вложенные запросы

В рамках нашего примера, допустим, что нам понадобилось узнать имена узлов, которые посещали сайт www.dom2.ru. Требуемую информацию можно получить запросом:

SELECT hst_name FROM hosts WHERE hst_pcode IN

(SELECT vis_hstcode FROM visits, sites

WHERE (sit_pcode = vis_sitcode) AND (sit_name LIKE 'www.dom2.ru'));

Рассмотрим этот запрос более пристально. Первый оператор SELECT нужен для выборки имен узлов. Чтобы выбрать требуемые нам имена, в запросе указана секция WHERE, в которой первичный ключ таблицы «Узлы» (hst_pcode) проверяется на принадлежность множеству (оператор IN). Судя по всему, множество для проверки на принадлежность должен вернуть второй оператор SELECT, находящийся в скобках. Рассмотрим его отдельно:

SELECT vis_hstcode FROM visits, sites WHERE (sit_pcode = vis_sitcode)

AND (sit_name LIKE 'www.dom2.ru')

Как видно из списка полей для выборки, запрос возвращает одно поле - vis_hstcode. Это коды узлов из таблицы «Посещения» (visits). Но после слова FROM указано две таблицы - visits и sites. Это нужно для удобства. Дело в том, что имена сайтов хранятся в таблице «Сайты» (sites), а в таблице «Посещения» - только идентификаторы сайтов. Таким образом, чтобы выбрать из таблицы «Посещения» данные только для сайта www.dom2.ru - мы связали две таблицы и указали в условии привычное для человека имя сайта. Подробнее о связывании речь пойдет чуть ниже. Таким образом, запрос, вернувший нам коды узлов будет являться вложенным запросом.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: