Презентация_БД13_Язык_SQL_Кренке.ppt
- Количество слайдов: 24
Язык SQL Исходные таблицы Таблица СТУДЕНТ Таблица ЗАНЯТИЯ Таблица ЗАПИСЬ
Здесь, в основном, версия стандарта SQL, называемого SQL 92 Проектирование (операция проекции) в SQL SELECT Личный. Номер, Имя, Специальность FROM СТУДЕНТ
SELECT Специальность FROM СТУДЕНТ SELECT DISTINCT Специальность FROM СТУДЕНТ
Выборка в SQL SELECT Личный. Номер, Имя, Специальность, Курс FROM СТУДЕНТ WHERE Специальность = 'МАТЕМАТИКА' SELECT* FROM СТУДЕНТ WHERE Специальность = 'МАТЕМАТИКА'
Выборку и проектирование можно объединить: SELECT Имя, Курс FROM СТУДЕНТ WHERE Специальность = 'МАТЕМАТИКА' В предложении WHERE можно указать несколько условий. Например, выражение SELECT Имя, Курс FROM СТУДЕНТ WHERE Специальность = 'МАТЕМАТИКА' AND Курс = 'АС' приведет к следующей таблице:
SELECT Имя FROM СТУДЕНТ WHERE Специальность IN ['МАТЕМАТИКА', 'БУХГАЛТЕРСКИЙ УЧЕТ'] SELECT Имя FROM СТУДЕНТ WHERE Специальность NOT IN ['МАТЕМАТИКА', 'БУХГАЛТЕРСКИЙ УЧЕТ']
SELECT Имя, Специальность FROM СТУДЕНТ WHERE Личный. Номер BETWEEN 200 AND 300 Это выражение эквивалентно записи SELECT Имя, Специальность FROM СТУДЕНТ WHERE Личный. Номер >= 200 AND Личный. Номер <= 300 SELECT Имя, Курс FROM СТУДЕНТ WHERE Курс LIKE 'C_' Оператор IS NULL предназначен для поиска пустых (или отсутствующих) значений: SELECT Имя FROM СТУДЕНТ WHERE Курс IS NULL
Сортировка SELECT Имя. Специальность, Курс FROM СТУДЕНТ WHERE Специальность = 'БУХГАЛТЕРСКИЙ УЧЕТ' ORDER BY Имя SELECT Имя, Специальность, Курс FROM СТУДЕНТ WHERE Курс IN ['С 1', 'С 2', 'С 4'] ORDER BY Специальность ASC, Курс DESC
Встроенные функции SQL: COUNT, SUM, AVG, MAX и MIN SELECT COUNT(*) FROM СТУДЕНТ SELECT COUNT (Специальность) FROM СТУДЕНТ SELECT COUNT (DISTINCT Специальность) FROM СТУДЕНТ SELECT Имя, COUNT (*) Проверить!!! НЕДОПУСТИМА в стандарте SQL
Встроенные функции и группировка SELECT Специальность, COUNT(*) FROM СТУДЕНТ GROUP BY Специальность SELECT Специальность, COUNT (*) FROM СТУДЕНТ GROUP BY Специальность HAVING COUNT (*) > 2 SELECT Специальность, МАХ (Личный. Номер) FROM СТУДЕНТ WHERE Курс = 'С 4' GROUP BY Специальность HAVING COUNT (*) > 1
Запрос нескольких таблиц Вложенные запросы SELECT Имя FROM СТУДЕНТ WHERE Личный. Номер IN [100. 200] SELECT Номер. Студента FROM ЗАПИСЬ WHERE Название. Предмета='BD 445' SELECT Имя FROM СТУДЕНТ WHERE Личный. Номер IN (SELECT Номер. Студента FROM ЗАПИСЬ WHERE Название. Предмета = 'BD 445')
SELECT ЗАНЯТИЯ. Название. Предмета FROM ЗАНЯТИЯ WHERE Время = 'ПСЯЗ' SELECT ЗАПИСЬ. Номер. Студента FROM ЗАПИСЬ WHERE ЗАПИСЬ. Название. Предмета IN (SELECT ЗАНЯТИЯ. Название. Предмета FROM ЗАНЯТИЯ WHERE Время = 'ПСЯЗ') SELECT СТУДЕНТ. Имя FROM СТУДЕНТ WHERE СТУДЕНТ. Личный. Номер IN SELECT ЗАПИСЬ. Номер. Студента FROM ЗАПИСЬ WHERE ЗАПИСЬ. Название. Предмета IN (SELECT ЗАНЯТИЯ. Название. Предмета FROM ЗАНЯТИЯ WHERE ЗАНЯТИЯ. Время = 'ПСЯЗ')
Соединение с помощью SQL SELECT СТУДЕНТ. Личный. Номер, СТУДЕНТ. Имя, ЗАПИСЬ. Название. Предмета FROM СТУДЕНТ, ЗАПИСЬ WHERE СТУДЕНТ. Личный. Номер = ЗАПИСЬ. Номер. Студента
SELECT СТУДЕНТ. Личный. Номер, ЗАПИСЬ. Название. Предмета FROM СТУДЕНТ, ЗАПИСЬ WHERE СТУДЕНТ. Личный. Номер = ЗАПИСЬ. Номер. Студента AND СТУДЕНТ. Имя = 'РАЙ' AND ЗАПИСЬ. Порядковый. Номер = 1 SELECT СТУДЕНТ. Личный. Номер, ЗАНЯТИЯ. Название. Предмета, ЗАНЯТИЯ. Время. ЗАПИСЬ Порядковый. Номер FROM СТУДЕНТ, ЗАПИСЬ, ПРЕДМЕТ WHERE СТУДЕНТ. Личный. Номер = ЗАПИСЬ. Номер. Студента AND ЗАПИСЬ. Название. Предмета = ЗАНЯТИЯ. Название. Предмета AND СТУДЕНТ. Имя = 'БЕЙКЕР' 200 BD 44 ПСЯ 5 З 2 200 CS 25 0 ПСЯ 12 1 300 CS 15 0 ПСЯ З 1
Сравнение вложенного запроса и соединения Соединение вместо ранее использованного вложенного запроса: SELECT СТУДЕНТ Имя FROM СТУДЕНТ, ЗАПИСЬ WHERE СТУДЕНТ. Личный. Номер = ЗАПИСЬ. Номер. Студента AND ЗАПИСЬ. Название. Предмета = 'BD 445' Соединение: SELECT СТУДЕНТ. Имя FROM СТУДЕНТ, ЗАПИСЬ, ЗАНЯТИЯ WHERE СТУДЕНТ. Личный. Номер = ЗАПИСЬ. Номер. Студента AND ЗАПИСЬ. Название. Предмета = ЗАНЯТИЯ. Название. Предмета AND ЗАНЯТИЯ. Время = 'ПСЯЗ'
Вложенный запрос: SELECT DISTINCT Название. Предмета FROM ЗАПИСЬ WHERE Номер. Студента IN (SELECT Личный. Номер FROM СТУДЕНТ WHERE Курс NOT = 'AC') или в виде соединения: SELECT DISTINCT Название. Предмета FROM ЗАПИСЬ, СТУДЕНТ WHERE ЗАПИСЬ. Номер. Студента = СТУДЕНТ. Личный. Номер AND Курс NOT = 'АС'
Правильный ответ выдаст следующий запрос: SELECT DISTINCT ЗАПИСЬ. Название. Предмета, СТУДЕНТ. Курс FROM ЗАПИСЬ, СТУДЕНТ WHERE ЗАПИСЬ. Номер. Студента = СТУДЕНТ. Личный. Номер AND СТУДЕНТ. Курс NOT = 'AC' ВА 200 С 2 CS 150 С 4 ВА 200 С 1 BF 410 С 1 CS 250 С 1 ВА 200 С 4
Внешнее соединение SELECT Имя, Название. Предмета FROM СТУДЕНТ LEFT JOIN ЗАПИСЬ ON Личный. Номер = Номер. Студента; ДЖ BD 4 ОНС 45 (Это в ACCESS !!!) ПАР ВА 2 КС 00 БЕЙ BD 4 КЕР 45 БЕЙ CS 2 КЕР 50 ГЛА Null СС БЕЙ CS 1 КЕР 50 РАС Null СЕЛ РАЙ ВА 2 00
Операторы EXISTS и NOT EXISTS SELECT DISTINCT Номер. Студента FROM ЗАПИСЬ А WHERE EXISTS (SELECT* FROM ЗАПИСЬ В WHERE А. Номер. Студента = В. Номер. Студента AND А. Название. Предмета NOT = В. Название. Предмета)
Требуется узнать имена студентов, которые записаны на ВСЕ предметы (т. е. это вариант реализации в SQL реляционной операции ДЕЛЕНИЯ): SELECT Студент. Имя FROM Студент WHERE NOT Exists (SELECT * FROM Занятия WHERE NOT EXISTS (SELECT * FROM Запись WHERE Занятия. Название. Предмета=Запись. Название. Предмета AND Запись. Номер. Студента=Студент. Личный. Номер));
Вот этот же запрос, переделанный ACCESS'ом: SELECT Студент. Имя FROM Студент WHERE (((Exists (SELECT * FROM Занятия WHERE NOT EXISTS (SELECT * FROM Запись WHERE Занятия. Название. Предмета=Запись. Название. Предмета AND Запись. Номер. Студента=Студент. Личный. Номер)))=False));
Вставка данных INSERT INTO ЗАПИСЬ VALUES (400, 'BD 445', 44) INSERT INTO ЗАПИСЬ (Номер. Студента. Название. Предмета) VALUES (400, 'BD 445', 44) Пусть также есть таблица ТРЕТЬЕКУРСНИК (Ст. Номер, Имя, Специальность) INSERT INTO ТРЕТЬЕКУРСНИК VALUES (SELECT Личный. Номер, Имя, Специальность FROM СТУДЕНТ WHERE Курс = 'С 3')
Удаление данных DELETE FROM СТУДЕНТ WHERE СТУДЕНТ. Личный. Номер = 100 DELETE FROM ЗАПИСЬ WHERE ЗАПИСЬ. Номер. Студента IN (SELECT СТУДЕНТ. Личный. Номер FROM СТУДЕНТ WHERE СТУДЕНТ. Специальность = 'Бухгалтерский учет') DELETE FROM СТУДЕНТ WHERE СТУДЕНТ. Специальность = 'Бухгалтерский учет'
Модификация данных UPDATE ЗАПИСЬ SET Порядковый. Номер = 44 WHERE Номер. Студента = 400 UPDATE ЗАПИСЬ SET Порядковый. Номер = МАХ(Порядковый. Номер) + 1 WHERE Номер. Студента = 400 UPDATE ЗАПИСЬ SET Название. Предмета = 'BD 564' WHERE Название. Предмета = 'ВD 445' UPDATE ЗАНЯТИЯ SET Название. Предмета = 'BD 564' WHERE Название. Предмета = 'BD 445'
Презентация_БД13_Язык_SQL_Кренке.ppt