Слайд 1Лекция 17
Построение баз данных с помощью SQL. Манипулирование данными
в SQL
Слайд 2Управление таблицами
CREATE TABLE
ALTER TABLE
DROP TABLE
Управление
данными
SELECT
INSERT
UPDATE
DELETE
Слайд 3Команда создания таблицы –
CREATE TABLE
CREATE TABLE имя_таблицы
({|
}
[,…,{|
>}])
Определение_столбца:
[ ] [,…,]
Слайд 4Ограничение столбца
::=
[ CONSTRAINT ]
{[ DEFAULT ]
| [
NULL | NOT NULL ]
| [ PRIMARY KEY | UNIQUE
]
| [FOREIGN KEY
REFERENCES <имя_главной_таблицы>[(<имя_столбца> [,…,n])]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
]
| [CHECK (<логическое_выражение>)]
}
Слайд 5Ограничения на уровне таблицы
::=
[ CONSTRAINT ]
{
[ { PRIMARY KEY | UNIQUE }
{( [ASC |
DESC] [,…,n] )}]
| FOREIGN KEY
[ ( <имя_колонки>[,..., n ] ) ]
REFERENCES <внешняя_таблица> [ (<имя_колонки_внешней_таблицы> [, ..., n ] ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
| CHECK (<логическое_выражение> )
}
Слайд 6Создание таблицы «Студенты» (БД «Сессия»)
CREATE TABLE Студенты
(ID_Студент INTEGER NOT NULL,
Фамилия CHAR(30) NOT NULL,
Имя CHAR(15) NOT NULL,
Отчество CHAR(20) NOT NULL,
Номер_группы
INTEGER NOT NULL,
Адрес CHAR(30),
Телефон CHAR(8),
PRIMARY KEY (ID_Студент))
Слайд 7Создание таблицы «Дисциплины»
(БД «Сессия»)
CREATE TABLE Дисциплины
(ID_Дисциплина INTEGER NOT NULL,
Наименование VARCHAR(40)
NOT NULL,
PRIMARY KEY (ID_Дисциплина),
UNIQUE (Наименование))
Слайд 8Создание таблицы «Учебный план»
(БД «Сессия»)
CREATE TABLE Учебный_план
(ID_План INTEGER NOT NULL,
ID_Дисциплина INTEGER NOT NULL,
Семестр INTEGER NOT NULL,
Количество_часов INTEGER,
ID_Преподаватель INTEGER,
PRIMARY KEY (ID_План),
CHECK ((Семестр >= 1) OR (Семестр <= 10)))
Слайд 9Создание таблицы «Сводная ведомость»
(БД «Сессия»)
CREATE TABLE Сводная_ведомость
(ID_Студент INTEGER NOT NULL,
ID_План INTEGER NOT NULL,
Оценка INTEGER NOT NULL,
Дата_сдачи DATETIME NOT NULL,
PRIMARY KEY (ID_Студент, ID_Дисциплина),
CHECK ((Оценка >= 0) OR
(Оценка <= 5)))
Слайд 10Создание таблицы «Сводная ведомость»
(БД «Сессия»)
CREATE TABLE Кадровый_состав
(ID_ Преподаватель INTEGER NOT
NULL,
Фамилия CHAR(30) NOT NULL,
Имя CHAR(15) NOT NULL,
Отчество CHAR(20) NOT NULL,
Должность CHAR(20) NOT NULL,
Кафедра CHAR(3) NOT NULL,
Адрес CHAR(30),
Телефон CHAR(8),
PRIMARY KEY (ID_Преподаватель))
Слайд 11Команда ALTER TABLE
добавить в таблицу определение нового столбца;
удалить столбец
из таблицы;
изменить значение по умолчанию для какого-либо столбца;
добавить или удалить
первичный ключ таблицы;
добавить или удалить внешний ключ таблицы;
добавить или удалить условие уникальности;
добавить или удалить условие на значение.
ALTER TABLE <имя_таблицы>
[ALTER COLUMN <имя_столбца> [SET DEFAULT <выражение>]|
[DROP DEFAULT]]
|[ADD <определение_столбца>]
|[DROP COLUMN <имя_столбца> [CASCADE]|[RESTRICT]]
|[ADD [<определение_первичного_ключа>]|[<определение_внешнего_ключа>]|
[<условие_уникальности>]|[<условие_на_значение>]]
|[DROP CONSTRAINT <имя_ограничения> [CASCADE]|[RESTRICT]]
Слайд 12Добавление столбца
ALTER TABLE Студенты
ADD Год_поступления INTEGER NOT NULL
DEFAULT
YEAR(GETDATE())
Модификация столбца
ALTER TABLE Студенты
ALTER COLUMN Номер_группы CHAR(6) NOT NULL
Удаление столбца
ALTER TABLE Студенты
DROP COLUMN Год_поступления
Слайд 13Добавление внешних ключей в таблицу «Учебный_план»
ALTER TABLE Учебный_план
ADD CONSTRAINT
FK_Дисциплина
FOREIGN KEY (ID_Дисциплина)
REFERENCES Дисциплины
ALTER TABLE Учебный_план
ADD CONSTRAINT FK_Кадровый_состав
FOREIGN KEY (ID_Преподаватель)
REFERENCES
Кадровый_состав
ALTER TABLE Сводная_ведомость
ADD CONSTRAINT FK_Студент
FOREIGN KEY (ID_Студент)
REFERENCES Студенты
ALTER TABLE Сводная_ведомость
ADD CONSTRAINT FK_План
FOREIGN KEY (ID_План)
REFERENCES Учебный_план
Добавление
внешних ключей в таблицу «Сводная_ведомость»
Слайд 14Удаление ограничений
ALTER TABLE Студент
ADD CONSTRAINT DEF_Номер_группы DEFAULT 1
FOR
Номер_группы
ALTER TABLE Учебный_план
DROP CONSTRAINT FK_Дисциплина
ALTER TABLE Студент
DROP CONSTRAINT DEF_Номер_группы
Удаление внешнего ключа
Удаление значения по умолчанию
Удаление таблицы
DROP TABLE <имя_таблицы>
Слайд 15Извлечение данных – команда SELECT
SELECT
[ INTO ]
FROM
[ WHERE ]
[ GROUP BY ]
[
HAVING <Условие_отбора> ]
[ ORDER BY <Ключи_сортировки> [ ASC | DESC ] ]
SELECT INTO
FROM WHERE
GROUP BY HAVING
UNION ORDER BY
COMPUTE FOR
OPTION
Слайд 16Раздел SELECT -
SELECT [ ALL | DISTINCT ]
[ TOP
n [ PERCENT ] [ WITH TIES ] ]
обязательный раздел,
который должен указываться в любом запросе: задает набор столбцов, возвращаемых после выполнения запроса, т.е. внешний вид результата
Слайд 17Ключевые слова ALL и DISTINCT
SELECT ALL Семестр, Отчетность
FROM Учебный_план
SELECT
DISTINCT Семестр, Отчетность
FROM Учебный_план
Слайд 18Использование ключевого слова ТОР
SELECT TOP 5 * FROM Студенты
SELECT
TOP 10 PERCENT * FROM Студенты
Слайд 19Влияние порядка сортировки на возвращаемый набор данных
SELECT TOP 10
PERCENT *
FROM Студенты
ORDER BY Номер_Группы
Слайд 20Использование ключевого слова
WITH TIES
SELECT TOP 10 PERCENT WITH
TIES * FROM Студенты
Слайд 21Предложение
::=
{ *
| { | }.*
| {
| }
[ [ AS ] ]
| =
<Выражение>
} [ ,...,n ]
SELECT ID_Дисциплина, Наименование, Семестр
FROM Дисциплина, Учебный_план
SELECT Дисциплина.ID_Дисциплина, Наименование,
Семестр
FROM Дисциплина, Учебный_план
Слайд 22Запрос для таблицы «Студенты», представляющий фамилию, имя и отчество в
одной колонке
Используем операцию конкатенации (сложения) символьных строк и значение ФИО
в качестве псевдонима столбца:
SELECT TOP 10 Фамилия + ' ' + Имя + ' ' + Отчество as ФИО, Номер_Группы
FROM Студенты
Слайд 23Раздел FROM
FROM { } [,...,n]
::=
[
[AS] ]|
Псевдоним
tpl
Имя таблицы
«Учебный_план»
Слайд 24Раздел WHERE
WHERE |
{= | *= | =*}
SELECT Фамилия, Имя, Отчество, Номер_Группы,
Год_поступления
FROM Студенты
WHERE Год_поступления
< 2000
Слайд 25Оператор BETWEEN
[NOT] BETWEEN
AND
(>=) AND (
Наименование, Семестр, Количество_часов
FROM Учебный_план INNER JOIN Дисциплины ON
Учебный_план.ID_Дисциплина = Дисциплины.ID_Дисциплина
WHERE
Количество_часов
BETWEEN 50 AND 100
Слайд 26Оператор IN
[NOT] IN (,…,)
SELECT Наименование, Семестр, Количество_часов
FROM Учебный_план
INNER JOIN Дисциплины ON
Учебный_план.ID_Дисциплина = Дисциплины.ID_Дисциплина
WHERE Наименование IN ('Английский
язык', 'Физическая культура')
Слайд 27Оператор LIKE
[NOT] LIKE
SELECT Фамилия, Имя, Отчество, Должность
FROM
Кадровый_состав
WHERE Должность LIKE '%пр%'
Слайд 28Раздел ORDER BY (сортировка)
SELECT TOP 20 Наименование, Семестр, Количество_часов
FROM Учебный_план,
Дисциплины
WHERE (Учебный_план.ID_Дисциплина = Дисциплины.ID_Дисциплина)
ORDER BY Семестр, Количество_часов DESC
ORDER BY
{<условие_сортировки>[ASC | DESC] }[,...,n]
Слайд 29Раздел UNION
UNION [ALL]
…
[UNION [ALL]]
SELECT Фамилия, Имя, Отчество, Должность,
Телефон
FROM Кадровый_состав
WHERE Телефон LIKE '120%'
UNION
SELECT Фамилия, Имя, Отчество, Новый_столбец =
'Студент', Телефон
FROM Студенты
WHERE Телефон LIKE '120%'
ORDER BY Фамилия