1 БАЗЫ ДАННЫХ ЯЗЫК СТРУКТУРИРОВАННЫХ ЗАПРОСОВ SQL - Structured Query Language
2 ПЕРВОЕ ПРЕДСТАВЛЕНИЕ О РЕЛЯЦИОННЫХ СУБД Id Name Address Status Student John123 mainfreshman Mary456 cedarsophmore Art77 so. 3rdsenior Pat88 no. 4thsophmore
3 ПЕРВИЧНЫЙ КЛЮЧ – ВНЕШНИЙ КЛЮЧ a2 v3 v5 v1 v6 v2 v7 v4 a1 v1 v2 v3 v4 -- v3 R1R2 Внешний ключ Первичный ключ
4 PROJ PNOPNAMEBUDGET P1Instrumentation P3CAD/CAM P2Database Develop P4Maintenance P5CAD/CAM ПЕРВИЧНЫЙ КЛЮЧ – ВНЕШНИЙ КЛЮЧ ENOENAMETITLE E1J. DoeElect. Eng. E2M. SmithSyst. Anal. E3A. LeeMech. Eng. E4J. MillerProgrammer E5B. CaseySyst. Anal. E6L. ChuElect. Eng. E7R. DavisMech. Eng. E8J. JonesSyst. Anal. EMP ENOPNORESP E1P1Manager12 DUR E2P1Analyst24 E2P2Analyst 6 E3P3Consultant10 E3P4Engineer48 E4P2Programmer18 E5P2Manager24 E6P4Manager48 E7P3Engineer36 E8P3Manager40 WORKS E7P5Engineer23
5 ОТНОШЕНИЯ: ОДИН К ОДНОМУ, ОДИН КО МНОГИМ, МНОГИЕ КО МНОГИМ ОДИН К ОДНОМУ ОДИН КО МНОГИМ МНОГИЕ КО МНОГИМ
6 РЕЛЯЦИОННАЯ МОДЕЛЬ - ТЕРМИНОЛОГИЯ СТОЛБЕЦ, КОЛОНКА ПОЛЕ АТРИБУТ СТРОКАЗАПИСЬКОРТЕЖ ТАБЛИЦАОТНОШЕНИЕСУЩНОСТЬ
7 SQL - ИСТОРИЯ Edgar Frank 'Ted' Codd (Эдгар Френк Кодд) [ , Dorset, England , Williams Island, Florida] создал и описал концепцию реляционных баз данных и реляционную алгебру [ ]; для проектирования БД предложил аппарат нормализации отношений Edgar Frank 'Ted' Codd (Эдгар Френк Кодд) [ , Dorset, England , Williams Island, Florida] создал и описал концепцию реляционных баз данных и реляционную алгебру [ ]; для проектирования БД предложил аппарат нормализации отношений
Реляционная СУБД должна быть способна полностью управлять базой данных через ее реляционные возможности. Реляционная СУБД должна быть способна полностью управлять базой данных через ее реляционные возможности. Информационное правило - вся информация в реляционной БД (включая имена таблиц и столбцов) должна определяться строго как значения в таблицах. Информационное правило - вся информация в реляционной БД (включая имена таблиц и столбцов) должна определяться строго как значения в таблицах. Гарантированный доступ - любое значение в реляционной БД должно быть гарантированно доступно для использования через комбинацию имени таблицы, значения первичного ключа и имени столбца Гарантированный доступ - любое значение в реляционной БД должно быть гарантированно доступно для использования через комбинацию имени таблицы, значения первичного ключа и имени столбца Реляционная СУБД должна быть способна полностью управлять базой данных через ее реляционные возможности. Реляционная СУБД должна быть способна полностью управлять базой данных через ее реляционные возможности. Информационное правило - вся информация в реляционной БД (включая имена таблиц и столбцов) должна определяться строго как значения в таблицах. Информационное правило - вся информация в реляционной БД (включая имена таблиц и столбцов) должна определяться строго как значения в таблицах. Гарантированный доступ - любое значение в реляционной БД должно быть гарантированно доступно для использования через комбинацию имени таблицы, значения первичного ключа и имени столбца Гарантированный доступ - любое значение в реляционной БД должно быть гарантированно доступно для использования через комбинацию имени таблицы, значения первичного ключа и имени столбца 12 ПРАВИЛ КОДДА
Поддержка пустых значений (null value) - СУБД должна уметь работать с пустыми значениями (неизвестными или неиспользованными значениями), в отличие от значений по умолчанию и независимо для любых доменов. Поддержка пустых значений (null value) - СУБД должна уметь работать с пустыми значениями (неизвестными или неиспользованными значениями), в отличие от значений по умолчанию и независимо для любых доменов. Онлайновый реляционный каталог - описание БД и ее содержания должны быть представлены на логическом уровне как таблицы, к которым можно применять запросы, используя язык базы данных. Онлайновый реляционный каталог - описание БД и ее содержания должны быть представлены на логическом уровне как таблицы, к которым можно применять запросы, используя язык базы данных. Исчерпывающий язык управления данными - по крайней мере, один из поддерживаемых языков должен иметь четко определенный синтаксис и быть всеобъемлющим. Он должен поддерживать описание структуры данных и манипулирование ими, правила целостности, авторизацию и транзакции. Исчерпывающий язык управления данными - по крайней мере, один из поддерживаемых языков должен иметь четко определенный синтаксис и быть всеобъемлющим. Он должен поддерживать описание структуры данных и манипулирование ими, правила целостности, авторизацию и транзакции. Поддержка пустых значений (null value) - СУБД должна уметь работать с пустыми значениями (неизвестными или неиспользованными значениями), в отличие от значений по умолчанию и независимо для любых доменов. Поддержка пустых значений (null value) - СУБД должна уметь работать с пустыми значениями (неизвестными или неиспользованными значениями), в отличие от значений по умолчанию и независимо для любых доменов. Онлайновый реляционный каталог - описание БД и ее содержания должны быть представлены на логическом уровне как таблицы, к которым можно применять запросы, используя язык базы данных. Онлайновый реляционный каталог - описание БД и ее содержания должны быть представлены на логическом уровне как таблицы, к которым можно применять запросы, используя язык базы данных. Исчерпывающий язык управления данными - по крайней мере, один из поддерживаемых языков должен иметь четко определенный синтаксис и быть всеобъемлющим. Он должен поддерживать описание структуры данных и манипулирование ими, правила целостности, авторизацию и транзакции. Исчерпывающий язык управления данными - по крайней мере, один из поддерживаемых языков должен иметь четко определенный синтаксис и быть всеобъемлющим. Он должен поддерживать описание структуры данных и манипулирование ими, правила целостности, авторизацию и транзакции. 12 ПРАВИЛ КОДДА
Правило обновления представлений (views) - все представления, теоретически обновляемые, могут быть обновлены через систему. Правило обновления представлений (views) - все представления, теоретически обновляемые, могут быть обновлены через систему. Вставка, обновление и удаление - СУБД поддерживает не только запрос на отбор данных, но и вставку, обновление и удаление Вставка, обновление и удаление - СУБД поддерживает не только запрос на отбор данных, но и вставку, обновление и удаление Физическая независимость данных - на программы-приложения и специальные программы логически не влияют изменения физических методов доступа к данным и структур хранилищ данных. Физическая независимость данных - на программы-приложения и специальные программы логически не влияют изменения физических методов доступа к данным и структур хранилищ данных. Правило обновления представлений (views) - все представления, теоретически обновляемые, могут быть обновлены через систему. Правило обновления представлений (views) - все представления, теоретически обновляемые, могут быть обновлены через систему. Вставка, обновление и удаление - СУБД поддерживает не только запрос на отбор данных, но и вставку, обновление и удаление Вставка, обновление и удаление - СУБД поддерживает не только запрос на отбор данных, но и вставку, обновление и удаление Физическая независимость данных - на программы-приложения и специальные программы логически не влияют изменения физических методов доступа к данным и структур хранилищ данных. Физическая независимость данных - на программы-приложения и специальные программы логически не влияют изменения физических методов доступа к данным и структур хранилищ данных. 12 ПРАВИЛ КОДДА
Логическая независимость данных - на программы- приложения и специальные программы логически не влияют, в пределах разумного, изменения структур таблиц. Логическая независимость данных - на программы- приложения и специальные программы логически не влияют, в пределах разумного, изменения структур таблиц. Независимость целостности - язык БД должен быть способен определять правила целостности. Они должны сохраняться в онлайновом справочнике, и не должно существовать способа их обойти. Независимость целостности - язык БД должен быть способен определять правила целостности. Они должны сохраняться в онлайновом справочнике, и не должно существовать способа их обойти. Независимость распределения - на программы- приложения и специальные программы логически не влияет, первый раз используются данные или повторно. Независимость распределения - на программы- приложения и специальные программы логически не влияет, первый раз используются данные или повторно. Неподрывность - невозможность обойти правила целостности, определенные через язык базы данных, использованием языков низкого уровня Неподрывность - невозможность обойти правила целостности, определенные через язык базы данных, использованием языков низкого уровня Логическая независимость данных - на программы- приложения и специальные программы логически не влияют, в пределах разумного, изменения структур таблиц. Логическая независимость данных - на программы- приложения и специальные программы логически не влияют, в пределах разумного, изменения структур таблиц. Независимость целостности - язык БД должен быть способен определять правила целостности. Они должны сохраняться в онлайновом справочнике, и не должно существовать способа их обойти. Независимость целостности - язык БД должен быть способен определять правила целостности. Они должны сохраняться в онлайновом справочнике, и не должно существовать способа их обойти. Независимость распределения - на программы- приложения и специальные программы логически не влияет, первый раз используются данные или повторно. Независимость распределения - на программы- приложения и специальные программы логически не влияет, первый раз используются данные или повторно. Неподрывность - невозможность обойти правила целостности, определенные через язык базы данных, использованием языков низкого уровня Неподрывность - невозможность обойти правила целостности, определенные через язык базы данных, использованием языков низкого уровня 12 ПРАВИЛ КОДДА
Реляционная СУБД должна быть способна полностью управлять базой данных через ее реляционные возможности. Реляционная СУБД должна быть способна полностью управлять базой данных через ее реляционные возможности. Информационное правило - вся информация в реляционной БД (включая имена таблиц и столбцов) должна определяться строго как значения в таблицах. Информационное правило - вся информация в реляционной БД (включая имена таблиц и столбцов) должна определяться строго как значения в таблицах. Гарантированный доступ - любое значение в реляционной БД должно быть гарантированно доступно для использования через комбинацию имени таблицы, значения первичного ключа и имени столбца Гарантированный доступ - любое значение в реляционной БД должно быть гарантированно доступно для использования через комбинацию имени таблицы, значения первичного ключа и имени столбца Поддержка пустых значений (null value) - СУБД должна уметь работать с пустыми значениями (неизвестными или неиспользованными значениями), в отличие от значений по умолчанию и независимо для любых доменов. Поддержка пустых значений (null value) - СУБД должна уметь работать с пустыми значениями (неизвестными или неиспользованными значениями), в отличие от значений по умолчанию и независимо для любых доменов. Онлайновый реляционный каталог - описание БД и ее содержания должны быть представлены на логическом уровне как таблицы, к которым можно применять запросы, используя язык базы данных. Онлайновый реляционный каталог - описание БД и ее содержания должны быть представлены на логическом уровне как таблицы, к которым можно применять запросы, используя язык базы данных. Исчерпывающий язык управления данными - по крайней мере, один из поддерживаемых языков должен иметь четко определенный синтаксис и быть всеобъемлющим. Он должен поддерживать описание структуры данных и манипулирование ими, правила целостности, авторизацию и транзакции. Исчерпывающий язык управления данными - по крайней мере, один из поддерживаемых языков должен иметь четко определенный синтаксис и быть всеобъемлющим. Он должен поддерживать описание структуры данных и манипулирование ими, правила целостности, авторизацию и транзакции. Правило обновления представлений (views) - все представления, теоретически обновляемые, могут быть обновлены через систему. Правило обновления представлений (views) - все представления, теоретически обновляемые, могут быть обновлены через систему. Вставка, обновление и удаление - СУБД поддерживает не только запрос на отбор данных, но и вставку, обновление и удаление Вставка, обновление и удаление - СУБД поддерживает не только запрос на отбор данных, но и вставку, обновление и удаление Физическая независимость данных - на программы-приложения и специальные программы логически не влияют изменения физических методов доступа к данным и структур хранилищ данных. Физическая независимость данных - на программы-приложения и специальные программы логически не влияют изменения физических методов доступа к данным и структур хранилищ данных. Логическая независимость данных - на программы-приложения и специальные программы логически не влияют, в пределах разумного, изменения структур таблиц. Логическая независимость данных - на программы-приложения и специальные программы логически не влияют, в пределах разумного, изменения структур таблиц. Независимость целостности - язык БД должен быть способен определять правила целостности. Они должны сохраняться в онлайновом справочнике, и не должно существовать способа их обойти. Независимость целостности - язык БД должен быть способен определять правила целостности. Они должны сохраняться в онлайновом справочнике, и не должно существовать способа их обойти. Независимость распределения - на программы-приложения и специальные программы логически не влияет, первый раз используются данные или повторно. Независимость распределения - на программы-приложения и специальные программы логически не влияет, первый раз используются данные или повторно. Неподрывность - невозможность обойти правила целостности, определенные через язык базы данных, использованием языков низкого уровня Неподрывность - невозможность обойти правила целостности, определенные через язык базы данных, использованием языков низкого уровня Реляционная СУБД должна быть способна полностью управлять базой данных через ее реляционные возможности. Реляционная СУБД должна быть способна полностью управлять базой данных через ее реляционные возможности. Информационное правило - вся информация в реляционной БД (включая имена таблиц и столбцов) должна определяться строго как значения в таблицах. Информационное правило - вся информация в реляционной БД (включая имена таблиц и столбцов) должна определяться строго как значения в таблицах. Гарантированный доступ - любое значение в реляционной БД должно быть гарантированно доступно для использования через комбинацию имени таблицы, значения первичного ключа и имени столбца Гарантированный доступ - любое значение в реляционной БД должно быть гарантированно доступно для использования через комбинацию имени таблицы, значения первичного ключа и имени столбца Поддержка пустых значений (null value) - СУБД должна уметь работать с пустыми значениями (неизвестными или неиспользованными значениями), в отличие от значений по умолчанию и независимо для любых доменов. Поддержка пустых значений (null value) - СУБД должна уметь работать с пустыми значениями (неизвестными или неиспользованными значениями), в отличие от значений по умолчанию и независимо для любых доменов. Онлайновый реляционный каталог - описание БД и ее содержания должны быть представлены на логическом уровне как таблицы, к которым можно применять запросы, используя язык базы данных. Онлайновый реляционный каталог - описание БД и ее содержания должны быть представлены на логическом уровне как таблицы, к которым можно применять запросы, используя язык базы данных. Исчерпывающий язык управления данными - по крайней мере, один из поддерживаемых языков должен иметь четко определенный синтаксис и быть всеобъемлющим. Он должен поддерживать описание структуры данных и манипулирование ими, правила целостности, авторизацию и транзакции. Исчерпывающий язык управления данными - по крайней мере, один из поддерживаемых языков должен иметь четко определенный синтаксис и быть всеобъемлющим. Он должен поддерживать описание структуры данных и манипулирование ими, правила целостности, авторизацию и транзакции. Правило обновления представлений (views) - все представления, теоретически обновляемые, могут быть обновлены через систему. Правило обновления представлений (views) - все представления, теоретически обновляемые, могут быть обновлены через систему. Вставка, обновление и удаление - СУБД поддерживает не только запрос на отбор данных, но и вставку, обновление и удаление Вставка, обновление и удаление - СУБД поддерживает не только запрос на отбор данных, но и вставку, обновление и удаление Физическая независимость данных - на программы-приложения и специальные программы логически не влияют изменения физических методов доступа к данным и структур хранилищ данных. Физическая независимость данных - на программы-приложения и специальные программы логически не влияют изменения физических методов доступа к данным и структур хранилищ данных. Логическая независимость данных - на программы-приложения и специальные программы логически не влияют, в пределах разумного, изменения структур таблиц. Логическая независимость данных - на программы-приложения и специальные программы логически не влияют, в пределах разумного, изменения структур таблиц. Независимость целостности - язык БД должен быть способен определять правила целостности. Они должны сохраняться в онлайновом справочнике, и не должно существовать способа их обойти. Независимость целостности - язык БД должен быть способен определять правила целостности. Они должны сохраняться в онлайновом справочнике, и не должно существовать способа их обойти. Независимость распределения - на программы-приложения и специальные программы логически не влияет, первый раз используются данные или повторно. Независимость распределения - на программы-приложения и специальные программы логически не влияет, первый раз используются данные или повторно. Неподрывность - невозможность обойти правила целостности, определенные через язык базы данных, использованием языков низкого уровня Неподрывность - невозможность обойти правила целостности, определенные через язык базы данных, использованием языков низкого уровня 12 ПРАВИЛ КОДДА
13 SQL - ИСТОРИЯ
14 SQL - ИСТОРИЯ Работы по созданию языка запросов к СУБД проводились в гг. в исследовательском центре IBM. Результатом этой работы стало создание экспериментальной реляционной СУБД SYSTEM R. Одним из важнейших элементов SYSTEM R стал язык SEQUEL (Structered English Query Language) явившийся прототипом для SQL. Основными авторами языка являются Д. Чемберлен и Р. Бойс. На ряду с работами Чемберлена и Бойса в IBM развивалось другое направление в области реляционных языков, которым руководил М. Злуф. В отличае от SEQUEL это был графически-ориентированный язык для интерактивной работы. Он получил название QBE (Query-By-Example) – запросы на примерах.
15 ПРЕДЛОЖЕНИЯ SQL ОПРЕДЕЛЕНИЕ ДАННЫХ Создать: CREATE TABLE – создать таблицу CREATE INDEX – создать индекс CREATE VIEW – создать представление Удалить: DROP TABLE – удалить таблицу DROP INDEX – удалить индекс DROP VIEW – удалить представление Очистить таблицу: TRUNCATE TABLE
16 ПРЕДЛОЖЕНИЯ SQL МАНИПУЛИРОВАНИЕ ДАННЫМИ INSERT – добавить записи DELETE – удалить записи UPDATE – обновить (изменить значение) записи SELECT – выбрать
17 ПРЕДЛОЖЕНИЯ SQL СОЗДАТЬ ТАБЛИЦУ - CREATE CREATE TABLE name (column1_name column1_type, column2_name column2_type,...); column2_name column2_type,...);
18 ПРЕДЛОЖЕНИЯ SQL ТИПЫ ДАННЫХ Дата и время.date(yyyymmdd) Строка переменной длины (может содержать символы, числа, и специальные символы). Длина строки не может быть больше, чем указанная в скобках. Меньше – может! varchar(size) Строка заданной длинны (может содержать символы, числа, и специальные характеры). char(size) Число с плавающей точкой.float Десятичные числа с фиксированной точкой. Максимальное число значащих цифр определено size. Максимальное число цифр после запятой определено "d". decimal(size,d) numeric(size,d) Только целые числа. Максимальное число цифр определено значением в круглых скобках. integer(size) int(size) smallint(size) tinyint(size) ОПИСАНИЕТИП ДАННЫХ
19 ПРЕДЛОЖЕНИЯ SQL СОЗДАТЬ ТАБЛИЦУ - CREATE CREATE TABLE Student ( Id INTEGER, Name CHAR(20), Address CHAR(50), Status CHAR(10)); John 10 Cedar St Freshman Mary 22 Main St Sophomore IdNameAddress Status Student
20 ПРЕДЛОЖЕНИЯ SQL СОЗДАТЬ ТАБЛИЦУ - CREATE CREATE TABLE Student ( Id INTEGER, Name CHAR(20) NOT NULL, Address CHAR(50), Status CHAR(10) DEFAULT freshman, PRIMARY KEY (Id)); Значение по умолчанию
21 ПРЕДЛОЖЕНИЯ 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 < ) );
22 ПРЕДЛОЖЕНИЯ SQL СОЗДАТЬ ТАБЛИЦУ - CREATE Ограничения на значения (продолжение) CREATE TABLE Employee ( Id INTEGER, Name CHAR(20), Salary INTEGER, MngrSalary INTEGER, CHECK ( MngrSalary > Salary));
23 ПРЕДЛОЖЕНИЯ 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 );
ПРЕДЛОЖЕНИЯ SQL СОЗДАТЬ ИНДЕКС - CREATE CREATE [UNIQUE] INDEX index_name ON table_name (column_name) DESC – убывание ASC - возрастание CREATE INDEX PersonIndex ON Person (LastName) CREATE INDEX PersonIndex ON Person (LastName DESC) CREATE INDEX PersonIndex ON Person (LastName, FirstName)
25 ПРЕДЛОЖЕНИЯ SQL УДАЛЕНИЕ ТАБЛИЦ И ДАННЫХ DROP TABLE Students; TRUNCATE TABLE Students; Удалить все записи из таблицы Удалить таблицу полностью
26 ПРЕДЛОЖЕНИЯ SQL МОДИФИКАЦИЯ ТАБЛИЦ Добавить столбец в таблицу ALTER TABLE table_name ADD column_name datatype Person: Storgt 20KariPettersen AddressFirstNameLastName ALTER TABLE Person ADD City varchar(30); Person: Storgt 20KariPettersen CityAddressFirstNameLastName
27 ПРЕДЛОЖЕНИЯ SQL МОДИФИКАЦИЯ ТАБЛИЦ ALTER TABLE table_name DROP COLUMN column_name Удалить столбец из таблицы Person: Storgt 20KariPettersen CityAddressFirstNameLastName ALTER TABLE Person DROP COLUMN Address Person: KariPettersen CityFirstNameLastName
28 ПРЕДЛОЖЕНИЯ SQL ДОБАВЛЕНИЕ ЗАПИСЕЙ - INSERT INSERT INTO "table_name" ("column1", "column2",...) VALUES ("value1", "value2",...); INSERT INTO Store_Information (store_name, Sales, Date) VALUES ('Los Angeles', 900, 'Jan '); 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 ;
29 ПРЕДЛОЖЕНИЯ SQL ИЗМЕНЕНИЕ УЖЕ СУЩЕСТВУЮЩИХ ЗАПИСЕЙ - UPDATE UPDATE "table_name" SET "column_1" = [new value], "column_2" = [new value]… WHERE {condition} Store_Information Jan $700Boston Jan $300Los Angeles Jan $250San Diego Jan $1500Los Angeles DateSalesstore_name UPDATE Store_Information SET Sales = 500 WHERE store_name = "Los Angeles" AND Date = "Jan "; Store_Information Jan $700Boston Jan $500Los Angeles Jan $250San Diego Jan $1500Los Angeles DateSalesstore_name UPDATE TABLE "table_name" SET ("column_1", "column_2") = ([new value 1], [new value 2]) WHERE {condition}
30 ПРЕДЛОЖЕНИЯ SQL УДАЛЕНИЕ ЗАПИСЕЙ - DELETE DELETE FROM "table_name" WHERE {condition} Store_Information Jan $700Boston Jan $300Los Angeles Jan $250San Diego Jan $1500Los Angeles DateSalesstore_name DELETE FROM Store_Information WHERE store_name = Los Angeles ; Store_Information Jan $700Boston Jan $250San Diego DateSalesstore_name
31 ПРЕДЛОЖЕНИЯ SQL ВЫБОРКА - SELECT SELECT [предикат] { * | таблица.* | [таблица.]поле_1 [AS псевдоним_1] [, [таблица.]поле_2 [AS псевдоним_2] [,...]]} FROM выражение [,...] [IN внешняяБазаДанных] [WHERE... ] [GROUP BY... ] [HAVING... ] [ORDER BY... ] [WITH OWNERACCESS OPTION]