Базы данных. Лекция 7. Введение в SQL

реклама
БАЗЫ ДАННЫХ
ЯЗЫК СТРУКТУРИРОВАННЫХ
ЗАПРОСОВ
SQL - Structured Query Language
1
ПЕРВОЕ ПРЕДСТАВЛЕНИЕ О РЕЛЯЦИОННЫХ СУБД
Id
Name Address
Status
1111111
John
123 main
freshman
2345678
Mary
456 cedar
sophmore
4433322
Art
77 so. 3rd
senior
7654321
Pat
88 no. 4th
sophmore
Student
2
ПЕРВИЧНЫЙ КЛЮЧ – ВНЕШНИЙ КЛЮЧ
a1
v1
v2
v3
v4
-v3
R1
Внешний ключ
a2
v3
v5
v1
v6
v2
v7
v4
R2
Первичный ключ
3
ПЕРВИЧНЫЙ КЛЮЧ – ВНЕШНИЙ КЛЮЧ
EMP
WORKS
ENO
ENAME
TITLE
E1
E2
E3
E4
E5
E6
E7
E8
J. Doe
M. Smith
A. Lee
J. Miller
B. Casey
L. Chu
R. Davis
J. Jones
Elect. Eng.
Syst. Anal.
Mech. Eng.
Programmer
Syst. Anal.
Elect. Eng.
Mech. Eng.
Syst. Anal.
ENO PNO
E1
E2
E2
E3
E3
E4
E5
E6
E7
E7
E8
P1
P1
P2
P3
P4
P2
P2
P4
P3
P5
P3
RESP
Manager
Analyst
Analyst
Consultant
Engineer
Programmer
Manager
Manager
Engineer
Engineer
Manager
DUR
12
24
6
10
48
18
24
48
36
23
40
PROJ
PNO
PNAME
BUDGET
P1
P2
P3
P4
P5
Instrumentation
Database Develop.
CAD/CAM
Maintenance
CAD/CAM
150000
135000
250000
310000
500000
4
ОТНОШЕНИЯ:
ОДИН К ОДНОМУ, ОДИН КО МНОГИМ,
МНОГИЕ КО МНОГИМ
ОДИН К
ОДНОМУ
ОДИН КО
МНОГИМ
МНОГИЕ КО
МНОГИМ
5
РЕЛЯЦИОННАЯ МОДЕЛЬ - ТЕРМИНОЛОГИЯ
СУЩНОСТЬ
КОРТЕЖ
АТРИБУТ
ОТНОШЕНИЕ
ЗАПИСЬ
ПОЛЕ
ТАБЛИЦА
СТРОКА
СТОЛБЕЦ, КОЛОНКА
6
SQL - ИСТОРИЯ
Edgar Frank 'Ted' Codd (Эдгар Френк Кодд)
[23.08.1923, Dorset, England - 18.04.2003,
Williams Island, Florida]
создал и описал концепцию реляционных
баз данных и реляционную алгебру [19691970]; для проектирования БД предложил
аппарат нормализации отношений
7
12 ПРАВИЛ КОДДА
• Реляционная СУБД должна быть способна полностью
управлять базой данных через ее реляционные
возможности.
• Информационное правило - вся информация в
реляционной БД (включая имена таблиц и столбцов)
должна определяться строго как значения в
таблицах.
• Гарантированный доступ - любое значение в
реляционной БД должно быть гарантированно
доступно для использования через комбинацию
имени таблицы, значения первичного ключа и имени
столбца
12 ПРАВИЛ КОДДА
• Поддержка пустых значений (null value) - СУБД должна
уметь работать с пустыми значениями (неизвестными или
неиспользованными значениями), в отличие от значений по
умолчанию и независимо для любых доменов.
• Онлайновый реляционный каталог - описание БД и ее
содержания должны быть представлены на логическом
уровне как таблицы, к которым можно применять запросы,
используя язык базы данных.
• Исчерпывающий язык управления данными - по
крайней мере, один из поддерживаемых языков должен
иметь четко определенный синтаксис и быть
всеобъемлющим. Он должен поддерживать описание
структуры данных и манипулирование ими, правила
целостности, авторизацию и транзакции.
12 ПРАВИЛ КОДДА
• Правило обновления представлений (views) все представления, теоретически обновляемые, могут
быть обновлены через систему.
• Вставка, обновление и удаление - СУБД
поддерживает не только запрос на отбор данных, но
и вставку, обновление и удаление
• Физическая независимость данных - на
программы-приложения и специальные программы
логически не влияют изменения физических методов
доступа к данным и структур хранилищ данных.
12 ПРАВИЛ КОДДА
• Логическая независимость данных - на программыприложения и специальные программы логически не
влияют, в пределах разумного, изменения структур
таблиц.
• Независимость целостности - язык БД должен быть
способен определять правила целостности. Они должны
сохраняться в онлайновом справочнике, и не должно
существовать способа их обойти.
• Независимость распределения - на программыприложения и специальные программы логически не
влияет, первый раз используются данные или повторно.
• Неподрывность - невозможность обойти правила
целостности, определенные через язык базы данных,
использованием языков низкого уровня
SQL - ИСТОРИЯ
13
SQL - ИСТОРИЯ
Работы по созданию языка запросов к СУБД проводились в
1975-1979 гг. в исследовательском центре IBM. Результатом
этой работы стало создание экспериментальной реляционной
СУБД SYSTEM R. Одним из важнейших элементов SYSTEM R
стал язык SEQUEL (Structered English Query Language)
явившийся прототипом для SQL. Основными авторами языка
являются Д. Чемберлен и Р. Бойс.
На ряду с работами Чемберлена и Бойса в IBM развивалось
другое направление в области реляционных языков, которым
руководил М. Злуф. В отличае от SEQUEL это был
графически-ориентированный язык для интерактивной
работы. Он получил название QBE (Query-By-Example) –
запросы на примерах.
14
ПРЕДЛОЖЕНИЯ SQL
ОПРЕДЕЛЕНИЕ ДАННЫХ
Создать:
CREATE TABLE – создать таблицу
CREATE INDEX – создать индекс
CREATE VIEW – создать представление
Удалить:
DROP TABLE – удалить таблицу
DROP INDEX – удалить индекс
DROP VIEW – удалить представление
Очистить таблицу:
TRUNCATE TABLE
15
ПРЕДЛОЖЕНИЯ SQL
МАНИПУЛИРОВАНИЕ ДАННЫМИ
INSERT – добавить записи
DELETE – удалить записи
UPDATE – обновить (изменить значение) записи
SELECT – выбрать
16
ПРЕДЛОЖЕНИЯ SQL
СОЗДАТЬ ТАБЛИЦУ - CREATE
CREATE TABLE name (column1_name column1_type,
column2_name column2_type, ...);
17
ПРЕДЛОЖЕНИЯ SQL
ТИПЫ ДАННЫХ
ТИП ДАННЫХ
ОПИСАНИЕ
integer(size)
int(size)
smallint(size)
tinyint(size)
Только целые числа. Максимальное число цифр
определено значением в круглых скобках.
decimal(size,d)
numeric(size,d)
Десятичные числа с фиксированной точкой.
Максимальное число значащих цифр определено size.
Максимальное число цифр после запятой определено "d".
float
Число с плавающей точкой.
char(size)
Строка заданной длинны (может содержать символы,
числа, и специальные характеры).
varchar(size)
Строка переменной длины (может содержать символы,
числа, и специальные символы). Длина строки не может
быть больше, чем указанная в скобках. Меньше – может!
date(yyyymmdd)
Дата и время.
18
ПРЕДЛОЖЕНИЯ SQL
СОЗДАТЬ ТАБЛИЦУ - CREATE
CREATE TABLE Student (
Id INTEGER,
Name CHAR(20),
Address CHAR(50),
Status CHAR(10));
Id
101222333
234567890
Name
Address
John 10 Cedar St
Mary 22 Main St
Status
Freshman
Sophomore
Student
19
ПРЕДЛОЖЕНИЯ SQL
СОЗДАТЬ ТАБЛИЦУ - CREATE
Значение по умолчанию
CREATE TABLE Student (
Id INTEGER,
Name CHAR(20) NOT NULL,
Address CHAR(50),
Status CHAR(10) DEFAULT ‘freshman’,
PRIMARY KEY (Id));
20
ПРЕДЛОЖЕНИЯ SQL
СОЗДАТЬ ТАБЛИЦУ - CREATE
Ограничения на значения
CREATE TABLE Transcript (
StudId INTEGER,
CrsCode CHAR(6),
Semester CHAR(6),
Grade CHAR(1),
CHECK (Grade IN (‘A’, ‘B’, ‘C’, ‘D’, ‘F’)),
CHECK (StudId > 0 AND StudId < 1000000000) );
21
ПРЕДЛОЖЕНИЯ SQL
СОЗДАТЬ ТАБЛИЦУ - CREATE
Ограничения на значения (продолжение)
CREATE TABLE Employee (
Id INTEGER,
Name CHAR(20),
Salary INTEGER,
MngrSalary INTEGER,
CHECK ( MngrSalary > Salary));
22
ПРЕДЛОЖЕНИЯ SQL
СОЗДАТЬ ТАБЛИЦУ - CREATE
CREATE TABLE Teaching (
ProfId INTEGER,
CrsCode CHAR (6),
Semester CHAR (6),
PRIMARY KEY (CrsCode, Semester),
FOREIGN KEY (ProfId) REFERENCES Professor (Id)
ON DELETE NO ACTION
ON UPDATE CASCADE,
FOREIGN KEY (CrsCode) REFERENCES Course (CrsCode)
ON DELETE SET NULL
ON UPDATE CASCADE );
23
ПРЕДЛОЖЕНИЯ SQL
СОЗДАТЬ ИНДЕКС - CREATE
CREATE [UNIQUE] INDEX index_name
ON table_name (column_name)
CREATE INDEX PersonIndex ON Person (LastName)
CREATE INDEX PersonIndex ON Person (LastName DESC)
DESC – убывание
ASC - возрастание
CREATE INDEX PersonIndex ON Person (LastName, FirstName)
ПРЕДЛОЖЕНИЯ SQL
УДАЛЕНИЕ ТАБЛИЦ И ДАННЫХ
DROP TABLE Students;
Удалить таблицу полностью
TRUNCATE TABLE Students;
Удалить все записи из таблицы
25
ПРЕДЛОЖЕНИЯ SQL
МОДИФИКАЦИЯ ТАБЛИЦ
Добавить столбец в таблицу
ALTER TABLE table_name ADD column_name datatype
Person:
LastName
FirstName
Pettersen
Kari
Address
Storgt 20
ALTER TABLE Person ADD City varchar(30);
Person:
LastName FirstName Address City
Pettersen
Kari
Storgt 20
26
ПРЕДЛОЖЕНИЯ SQL
МОДИФИКАЦИЯ ТАБЛИЦ
Удалить столбец из таблицы
ALTER TABLE table_name DROP COLUMN column_name
Person:
LastName FirstName Address City
Pettersen
Kari
Storgt 20
ALTER TABLE Person DROP COLUMN Address
Person:
LastName FirstName City
Pettersen
Kari
27
ПРЕДЛОЖЕНИЯ SQL
ДОБАВЛЕНИЕ ЗАПИСЕЙ - INSERT
INSERT INTO "table_name" ("column1", "column2", ...)
VALUES ("value1", "value2", ...);
INSERT INTO Store_Information (store_name, Sales, Date)
VALUES ('Los Angeles', 900, 'Jan-10-1999');
INSERT INTO "table1" ("column1", "column2", ...)
SELECT "column3", "column4", ...
FROM "table2" ;
INSERT INTO Store_Information (store_name, Sales, Date)
SELECT store_name, Sales, Date
FROM Sales_Information
WHERE Year(Date) = 1998 ;
28
ПРЕДЛОЖЕНИЯ SQL
ИЗМЕНЕНИЕ УЖЕ СУЩЕСТВУЮЩИХ ЗАПИСЕЙ UPDATE
UPDATE "table_name"
SET "column_1" = [new value], "column_2" = [new value]…
WHERE {condition}
Store_Information
store_name
Sales
Date
Los Angeles
$1500
Jan-05-1999
San Diego
$250
Jan-07-1999
Los Angeles
$300
Jan-08-1999
Boston
$700
Jan-08-1999
Store_Information
UPDATE Store_Information
SET Sales = 500
WHERE store_name = "Los Angeles"
AND Date = "Jan-08-1999";
store_name
Sales
Date
Los Angeles
$1500
Jan-05-1999
San Diego
$250
Jan-07-1999
Los Angeles
$500
Jan-08-1999
Boston
$700
Jan-08-1999
UPDATE TABLE "table_name"
SET ("column_1", "column_2") = ([new value 1], [new value 2])
WHERE {condition}
29
ПРЕДЛОЖЕНИЯ SQL
УДАЛЕНИЕ ЗАПИСЕЙ - DELETE
DELETE FROM "table_name"
WHERE {condition}
Store_Information
store_name
Sales
Date
Los Angeles
$1500
Jan-05-1999
San Diego
$250
Jan-07-1999
Los Angeles
$300
Jan-08-1999
Boston
$700
Jan-08-1999
DELETE FROM Store_Information
WHERE store_name = ‘Los Angeles’;
Store_Information
store_name
Sales
Date
San Diego
$250
Jan-07-1999
Boston
$700
Jan-08-1999
30
ПРЕДЛОЖЕНИЯ SQL
ВЫБОРКА - SELECT
SELECT [предикат] { * | таблица.* | [таблица.]поле_1
[AS псевдоним_1] [, [таблица.]поле_2 [AS псевдоним_2] [, ...]]}
FROM выражение [, ...] [IN внешняяБазаДанных]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]
31
Скачать