- •БАЗЫ ДАННЫХ
- •SQL (Structured Query Language) ─
- •SQL - это гибкий и эффективный язык, все средства которого применяются для манипулирования
- •Структура SQL:
- •Типы данных языка SQL/92 :
- •INTEGER или INT ─ целые числа. SMALLINT ─ целые числа меньшего диапазона.
- •VARCHAR(n) - строка символов переменной длины. BIT(n) ─ строка битов постоянной длины.
- •В стандарте SQL определены стандартные встроенные функции для обработки текста, чисел, даты-времени, определены
- •Операторы определения данных:
- •Операторы манипулирования данными:
- •Администрирование данных:
- •Соглашения:
- •Синтаксис оператора SELECT:
- •Простые запросы:
- •Выборка по условию:
- ••IN – предикат TRUE, когда сравниваемое значение входит в заданное множество (NOT IN
- ••IS NULL – предикат, применяющийся для выявления равенства значения некоторого атрибута неопределенному значению
- •Запросы (использовать все варианты ответа):
- •ORDER BY – список полей упорядочивания результата (ASC – возрастание, DESC – убывание).
- •Агрегатные функции:
- •Запросы:
- •Вычисляемые поля
- •GROUP BY – группирование результатов. SELECT и GROUP BY тесно связаны между собой.
- •Запросы:
- •Вывести среднее значение стипендии по группам:
- •Вложенные подзапросы
- •Виды подзапросов:
- •Накладываемые ограничения:
- ••В стандарте языка операторы сравнения расширены до многократных сравнений с использованием слов ANY
- •Определить студентов, у которых стипендии превышают начисления хотя бы одного студента в группе
- •Определить студентов, у которых стипендии превышают начисления любого студента в группе 1223
- •Предложение HAVING
- •Запрос: Получить группы, количество студентов в группе, среднюю стипендию для групп, у которых
- •Порядок обработки предложений в SELECT:
- •Многотабличные запросы
- •Самый простой запрос:
- •Поэтому перечисление таблиц используется с условием соединения записей из разных таблиц в предложении
- •Соединения равенства
- •Запрос: Вывести сведения о клиентах и их покупках (сведения в таблице ПРОДАЖИ).
- •Запрос: Вывести для каждого клиента суммарное количество покупок
- •Выборка из 3 таблиц проводится аналогично.
- •Внешнее соединения
- •Различают:
- •Синтаксис:
- •Запрос: Выбрать из таблицы «Товары» список товаров, а из таблицы «Продажи» - суммарное
- •Команда создания таблицы — CREATE TABLE
- •ограничение_столбца — с помощью этого предложения указываются ограничения, которые будут определены для столбца.
- •CONSTRAINT — необязательное ключевое слово, после которого указывается название ограничения на значения столбца
- •PRIMARY KEY — определение первичного ключа на уровне одного столбца (т. е. первичный
- •ON DELETE {CASCADE | NO ACTION} - эти ключевые слова определяют действия, предпринимаемые
- •CREATE TABLE Учебный_план (ID_План INTEGER NOT NULL,
- •Изменение структуры таблицы — ALTER TABLE
- •Добавим, например, в таблицу «Студенты» столбец Год_поступления следующим образом:
- •Удаление из таблицы «Студенты» столбца «Год_поступления»:
- •Удаление таблиц — DROP TABLE
- •Добавление данных —INSERT
- •Оператор удаления данных DELETE
- •Операция обновления данных UPDATE
- •Операторы создания и удаления индекса
- •Product
Определить студентов, у которых стипендии превышают начисления хотя бы одного студента в группе 1223
SELECT fam, stip FROM student
WHERE stip > ANY (SELECT stip
FROM student WHERE gruppa=1223)
Определить студентов, у которых стипендии превышают начисления любого студента в группе 1223
SELECT fam, stip FROM student
WHERE stip > ALL (SELECT stip
FROM student WHERE gruppa=1223)
Предложение HAVING
применяется после группировки для определения предиката, фильтрующие группы по значениям агрегатных функций.
Это предложение необходимо для проверки значений, полученных с помощью агрегатных функций, для групп строк.
Запрос: Получить группы, количество студентов в группе, среднюю стипендию для групп, у которых средняя стипендия меньше 800
SELECT gruppa, count(gruppa) as kol, avg(stip) as cred FROM zaproc
GROUP BY gruppa
HAVING avg(stip) < 800
Where здесь не годится, т.к. анализируется несколько строк.
Порядок обработки предложений в SELECT:
1.FROM
2.WHERE
3.GROUP BY
4.HAVING
5.SELECT
6.ORDER BY
Многотабличные запросы
Для того чтобы осуществить объединение информации из нескольких таблиц, необходимо выполнить операцию соединения.
При этой операции объединение информации из таблиц происходит посредством образования пар связанных строк, выбранных из каждой таблицы.
Таблицам можно присвоить имена-псевдонимы, что полезно для осуществления операции соединения таблицы с самой собою и в других ситуациях.
Самый простой запрос:
SELECT *
FROM R1, R2 – соответствует декартову произведению таблиц R1, R2 .
A |
|
B |
|
a |
b |
c |
d |
1 |
2 |
2 |
4 |
2 |
1 |
3 |
3 |
SELECT * FROM A, B
a |
b |
c |
d |
1 |
2 |
2 |
4 |
1 |
2 |
3 |
3 |
2 |
1 |
2 |
4 |
2 |
1 |
3 |
3 |
Поэтому перечисление таблиц используется с условием соединения записей из разных таблиц в предложении WHERE:
SELECT *
FROM A, B WHERE a = c Результат:
a b c d 2 1 2 4
Соединения равенства
SELECT table1.field1,… tableN.fieldN FROM table1, … tableN
WHERE table1.common_field1= table2.common_field1 {AND table1.common_field2= table2.common_field2}