
- •Управление транзакциями
- •Журнализация
- •Поддержка языков бд
- •№6 Иерархические базы данных
- •№7 Сетевые базы данных
- •Теоретико-множественные операторы Объединение
- •Пересечение
- •Вычитание
- •Декартово произведение
- •Проекция
- •Деление
- •Общая операция соединения
- •Тэта-соединение
- •Экви-соединение
- •Естественное соединение
- •Операторы dml (Data Manipulation Language) - операторы манипулирования данными предоставляет возможность выборки информации из базы данных и ее преобразования.
- •Операторы защиты и управления данными
- •Синтаксис команды update
- •5.1.2.4 Страница Date
- •5.1.2.5 Страница Time
- •5.1.2.6 Страница Number
- •Определение индексов и ссылочной целостности.
- •Заполнение таблицы данными.
- •Создание приложения для работы с базой данных «Телефонная книжка».
- •Удаление триггера
Операторы dml (Data Manipulation Language) - операторы манипулирования данными предоставляет возможность выборки информации из базы данных и ее преобразования.
SELECT - отобрать строки из таблиц
INSERT - добавить строки в таблицу
UPDATE - изменить строки в таблице
DELETE - удалить строки в таблице
COMMIT - зафиксировать внесенные изменения
ROLLBACK - откатить внесенные изменения
Операторы защиты и управления данными
CREATE ASSERTION - создать ограничение
DROP ASSERTION - удалить ограничение
GRANT - предоставить привилегии пользователю или приложению на манипулирование объектами
REVOKE - отменить привилегии пользователя или приложения
Кроме того, есть группы операторов установки параметров сеанса, получения информации о базе данных, операторы статического SQL, операторы динамического SQL. Наиболее важными для пользователя являются операторы манипулирования данными (DML).
№23 Оператор SELECT является фактически самым важным для пользователя и самым сложным оператором SQL. Он предназначен для выборки данных из таблиц, т.е. он, собственно, и реализует одно их основных назначение базы данных - предоставлять информацию пользователю.
<SELECT ><[ALL|DISTINCT] ><набор_атрибутов
><FROM ><набор_>отношений
><[WHERE ><условие_отбора_строк]
><[GROUP ><BY ><спецификация ><группировки]
><[HAVING ><спецификация ><выбора_групп]
><[ORDER ><BY ><спецификация ><сортировки]>
Раздел >< >< ><FROM >< >< >< ><определяет >< >< ><таблицы >< >< ><или >< >< ><запросы, >< >< >< ><служащие ><источником ><данных. ><В ><случае, ><если ><указано ><более ><одного ><имени ><таблицы ><по ><умолчанию ><предполагается, ><что ><над ><перечисленными ><таблицами ><будет ><выполнена ><операция ><декартова ><произведения. ><Например, ><запрос ><SELECT ><* ><FROM ><А, ><В ><соответствует ><декартову ><произведению ><отношений ><А ><и ><В.
Пример . Выбрать все данные из таблицы поставщиков (ключевые слова SELECT… FROM…):
SELECT *
FROM P
№24
<Раздел ><WHERE>< ><задает ><условия ><отбора ><строк. ><Имена ><атрибутов, ><входящие ><в ><предложение ><WHERE ><могут ><не ><входить ><в ><набор ><атрибутов, ><перечисленных ><в ><предложении ><SELECT.>
<В ><выражении ><условий ><раздела ><WHERE ><могут ><быть ><использованы ><следующие ><предикаты:>
<Предикаты ><сравнения ><{=, ><>, ><<, ><>=, ><<=, ><<>.}.>
<Предикат ><BETWEEN ><A ><AND ><В. ><Предикат ><истинен, ><когда ><сравниваемое ><значение ><попадает ><в ><заданный ><диапазон, ><включая ><границы ><диапазона.>< ><>
<Предикат ><вхождения ><в ><множество ><IN ><(множество) ><истинен ><тогда, ><когда ><сравниваемое ><значение ><входит ><в ><множество ><заданных ><значений. ><При ><этом ><множество ><может ><быть ><задано ><простым ><перечислением ><или ><встроенным ><подзапросом. ><Одновременно ><существует ><противоположный ><предикат ><NOT ><IN ><(множество).>
<Предикаты ><сравнения ><с ><образцом ><LIKE ><и ><NOT ><LIKE. ><Предикат ><LIKE ><требует ><задания ><шаблона, ><с ><которым ><сравнивается ><заданное ><значение.>
Пример:
Написать запрос, выбирающий из таблицы STUDENT сведения о студентах, фамилии которых начинаются на букву «Р».
SELECT *
FROM STUDENT
WHERE surname LIKE 'Р%';
Предикат ><сравнения ><с ><неопределенным ><значением ><IS ><NULL. ><Неопределенное ><значение ><интерпретируется ><в ><реляционной ><модели ><как ><значение, ><неизвестное ><в ><данный ><момент ><времени. ><Это ><значение ><при ><появлении ><некоторой ><дополнительной ><информации ><в ><любой ><момент ><времени ><может ><быть ><заменено ><некоторым ><конкретным ><значением.>
<■ ><Предикаты ><существования ><EXISTS ><и ><не ><существования ><NOT ><EXISTS.
<<Когда ><запрос ><включает ><предложение ><WHERE, ><СУБД ><просматривает ><всю ><таблицу ><по ><одной ><записи, ><чтобы ><определить ><является ><ли ><предикат ><истинным. ><Предикат ><может ><включать ><неограниченное ><число ><условий, ><содержащих ><булевы ><операторы. ><Стандартными ><булевыми ><операторами ><в ><SQL ><являются ><AND, ><OR ><и ><NOT.
№25 Ключевое слово <GROUP BY >> используется ><для ><создания ><итоговых ><запросов. ><Итоговые ><запросы ><имеют ><одно ><общее ><свойство – ><в ><предложении ><SELECT ><<таких ><запросов ><используется, ><по ><крайней ><мере, ><одна ><агрегатная ><функция.
<Синтаксис: ><GROUP ><BY ><имя_ ><столбца>
<Имя ><столбца ><- ><имя ><любого ><столбца ><из ><любой ><из ><упомянутой ><в ><разделе ><FROM ><таблицы.>
<Если ><GROUP ><BY ><расположено ><после ><WHERE ><создаются ><группы ><из ><строк, ><выбранных ><после ><применения ><раздела ><WHERE.>
<При ><включении ><раздела ><GROUP ><BY ><в ><инструкцию ><SELECT ><список ><полей ><должен ><состоять ><из ><итоговых ><функций ><SQL ><(AVG, COUNT, ><MAX, MIN, SUM ><и ><др.) ><и ><из ><имен ><столбцов, ><указанных ><в ><разделе ><GROUP ><BY. ><В ><раздел ><GROUP ><BY ><должны ><быть ><включены ><все ><атрибуты, ><входящие ><в ><раздел ><SELECT.>
<В ><предложение ><GROUP ><BY ><могут ><быть ><указаны ><одновременно ><несколько ><столбцов. ><Группы ><при ><этом ><определяются ><слева ><направо. ><Предложение ><GROUP ><BY ><автоматически ><устанавливает ><сортировку ><по ><возрастанию ><(если ><надо ><по ><убыванию ><- ><задать ><в ><ORDER ><BY).
Раздел ORDER BY.
Оператор ORDER BY (сортировать по) применяется для упорядочения (сортировки) записей. Если он используется в запросе, то в самом конце запроса. Этот оператор сортирует строки всей таблицы или отдельных ее групп (в случае применения оператора GROUP BY). Если в выражении запроса оператора GROUP BY нет, то оператор ORDER BY рассматривает все записи таблицы как одну группу.
Вслед за ключевым словом ORDER BY указывается столбец, по значениям которого следует произвести сортировку. После имени столбца можно указать ключевое слово, задающее порядок (режим) сортировки:
ASC – по возрастанию.
DESC – по убыванию.
Если в выражении ORDER BY указаны несколько столбцов сортировки, то сначала записи упорядочиваются по значениям первого столбца, затем для каждого значения первого столбца записи упорядочиваются по значениям второго столбца и т.д.
<Ра><здел ><HAVING>< ><задает ><условие ><отбора ><групп ><строк, ><которые ><включаются ><в ><таблицу, ><определяемую ><инструкцией ><SELECT.>
<Условия ><отбора ><применяется ><к ><столбцам, ><указанным ><в ><разделе ><GROUP ><BY, ><к ><столбцам ><итоговых ><функций ><или ><к ><выражениям, ><содержащим ><итоговые ><функции. ><Если ><некоторая ><группа ><не ><удовлетворяет ><условию ><отбора, ><она ><не ><попадает ><в ><набор ><записей.>
<Синтаксис: ><HAVING ><условие_отбора>
<Разница ><между ><HAVING ><и ><WHERE ><заключается ><в ><том, ><что ><условие ><отбора, ><заданное ><в ><разделе ><WHERE ><применяется ><к ><отдельным ><записям, ><перед ><их ><группировкой, ><а ><условие ><отбора ><раздела ><HAVING ><применяется ><к ><группам ><строк.>
<Если ><раздел ><GROUP ><BY ><находится ><перед ><HAVING, ><условие ><отбора ><применяется ><к ><каждой ><из ><групп, ><сформированных ><на ><основе ><совпадения ><значений ><в ><заданных ><столбцах. ><В ><случае ><отсутствия ><раздела ><GROUP ><BY ><условие ><отбора ><применяется ><ко ><всей ><таблице ><определенной ><инструкцией ><SELECT. ><Агрегатные ><функции ><могут ><применяться ><как ><в ><выражении ><вывода ><результатов ><строки ><SELECT, ><так ><и ><в ><выражении ><обработки ><сформированных ><групп ><HAVING.>
26 SQL (англ. Structured Query Language — «язык структурированных запросов») — универсальный компьютерный информационно-логический язык, появившийся в результате разработки реляционной модели данных, применяемый для создания, модификации и управления данными в реляционных базах данных.
TRANSLATE Функция TRANSLATE(str1, SRC, DEST) возвращает строку Параметры : str1 - строка которая будет преобразована SRC - символы исходные преобразования DEST - в которые будет осуществляться преобразование Описание преобразовывает каждый символ в последовательности SRC в символ в той же позиции в последовательности DEST
nstr INSTR(STR1, STR2, POSn , direction) -- возвращает позицию STR2 в строке STR1 -- где поиск осуществляется в позиции POSn -- в направлении direction -- параметры
Substr SUBSTR(STR1, POS, LEN) -- выделяет LEN символов в строке str1 начиная с позиции POS STR1 -- оригинальная строка POS -- позиция с которой начинается выделение NEWSUB -- подстрока на которую заменяем по умолчанию ""
Length length(str) -- возвращает длинну строки str1 в символах
Replace replace(SRCSTR,OLDSUB,NEWSUB) -- функция возвращает пребразованную строку SRCSTR , где подстрока OLDSUB из строки SRCSTR заменяется на подсрорку NEWSUB SRCSTR -- оригинальная строка OLDSUB -- заменяемая подстрока NEWSUB -- подстрока на которую заменяем по умолчанию ""
27
NULLIF(V1,V2) := CASE
WHEN (V1= V2)
THEN NULL
ELSE V1 END;
Это означает, что, если первый параметр равен второму, функция возвращает NULL, иначе — значение первого параметра. Свойства функции позволяют использовать ее с самыми разными целями. Посмотрите на список наиболее важных из этих свойств.
Функция COALESCE(<value expression> . . . , <value expression>) сканирует список всех <value expression> слева направо и возвращает первое не-NULL-значение в нем. Если все они равны NULL, результат также будет NULL. Аналогом этой функции в DB2 и других основанных на ней реализациях SQL является функция VALUE(<value expression> . . . , <value expression>).
ABS(x) — возвращает абсолютное значение х. SIGN(x) — возвращает 1, если х является отрицательным числом, 0, если это 0, и +1, если это положительное число.
POWER (х, n) — возводит число х в степень п. SQRT(x) — возвращает квадратный корень из х. LOG10(x) — возвращает логарифм х по основанию 10. См. пояснение к функции LN(x). LN(x) или LOG(x) — возвращает натуральный логарифм от х. Проблема состоит в том, что логарифмы определяются при х —> 0. В некоторых реализациях SQL возвращается сообщение об ошибке, в других — NULL, а в DB2/400 Version 3 Rel.l будет возвращено значение *NEGINF" (сокращение от negative infinity — отрицательная бесконечность). ЕХР(х) — возвращает число ев степени х, функция, обратная натуральному логарифму.
ROUND(x, p) — округляет число х до p десятичных знаков. TRUNCATE(x, p) — усекает число х до р десятичных знаков. FLOOR(х) — возвращает самое большое целое число, меньшее или равное х. CEILING(x) — возвращает самое маленькое целое число, большее или равное х.
COUNTERS), NUMBER(), IDENTITY() — при каждом обращении к функции в выражении возвращает значение, увеличенное на 1. Таким способом генерируются уникальные идентификаторы.
(х MOD m) или M0D(x, m) находит модуль или арифметический остаток.
28
TO_CHAR
Преобразует свои аргументы в символьный тип
TO_DATE
Преобразует свои аргументы в тип DATE
TRANSLATE Функция TRANSLATE(str1, SRC, DEST) возвращает строку Параметры : str1 - строка которая будет преобразована SRC - символы исходные преобразования DEST - в которые будет осуществляться преобразование Описание преобразовывает каждый символ в последовательности SRC в символ в той же позиции в последовательности DEST
функции MySQL
date_format(date,format) - дату в строку;
time_format(time,format) - время в строку;
format(number,precision) - число в cтроку типа '#,###,###.##', где число знаков определяется вторым аргументом.
select date_format(date '2010-02-01',
'%c месяца %d дней %Y год') as c
Функции CAST
и CONVERT преобразуют
значение (локальную переменную, столбец
или выражение) из одного типа данных в
другой. Например,
приведенная ниже функция CAST
преобразует
числовое значение $157.27
в
строку символов '157.27'
:
CAST ( $157.27 AS VARCHAR(10) )
29
Рассмотрим перечень агрегирующих функций.
- count определяет количество записей данного поля в группе строк.
- sum вычисляет арифметическую сумму всех выбранных значений данного поля.
- avg рассчитывает арифметическое среднее (усреднение) всех выбранных значений данного поля.
- max находит наибольшее из всех выбранных значений данного поля.
- min находит наименьшее из всех выбранных значений данного поля.
Пример: select sum(Цена) from Туры select avg(Цена) from Туры select max(Цена) from Туры select min(Цена) from Туры
30
Подзапрос - это оператор выбора, который содержится внутри другого оператора выбора, вставки, обновления или удаления, внутри условного оператора или внутри другого подзапроса.
Простой запрос содержит одно условие, а сложный запрос содержит несколько условий для различных полей.
ЗАПРОС – объект БД, который позволяет проводить основные операции по обработке данных – сортировку, фильтрацию, объединение данных из разных источников – и сохранять результаты с некоторым именем, чтобы в дальнейшем применять эти операции по мере необходимости.
31
Оператор UNION принимает две таблицы и строит из них третью. Эти таблицы должны быть совместимы по объединению, т.е. содержать одинаковое количество столбцов, и каждый столбец первой таблицы должен быть того же типа данных (или автоматически приводиться к нему), что и находящийся в том же месте столбец второй таблицы. Это означает, что их строки должны иметь одинаковую структуру, поэтому могут быть размещены в окончательной результирующей таблице. Большинство реализаций при создании результата осуществляют некоторое преобразование данных, но его характер зависит от конкретного продукта.
(SELECT a, b, с FROM TableA WHERE city = 'Boston')
UNION
(SELECT x, y, z FROM TableB WHERE city = 'New York');
TABLE [Новые учетные записи] UNION ALL
SELECT *
FROM Клиенты
WHERE СуммаЗаказов > 1000;
Операторы INTERSECT [имеют более высокий приоритет, чем UNION, так что в цепочке операций сначала выполняется пересечение:
INTERSECT удаляет из пересечения все дубликаты строк.
(SELECT col1 FROM TableA)
INTERSECT
(SELECT col1 FROM TableB)
EXCEPT. Разность множеств дает все строки первой таблицы, кроме тех, которые присутствуют также и во второй таблице. Этот оператор дает ответ на вопрос типа: "Покажите мне список сотрудников фирмы, кроме торговых агентов". Сначала оператор EXCEPT в SQL-92 отбрасывает повторяющиеся строки первой таблицы, а затем удаляет из нее все строки, встречающиеся также и во второй таблице. Это чистый оператор множеств:
(SELECT coll FROM TableA)
EXCEPT
(SELECT coll FROM TableB)
32
операции соединения таблиц
INNER JOIN возвращает пересечение двух множеств. В терминах таблиц, оно возвращает только записи из обеих таблиц, отвечающие указанному критерию.
Таблица Table1
key1 |
field1 |
field2 |
key2 |
key3 |
3 |
Erik |
8 |
1 |
6 |
4 |
John |
3 |
4 |
4 |
6 |
Mark |
3 |
7 |
1 |
7 |
Peter |
6 |
8 |
5 |
8 |
Harry |
0 |
9 |
2 |
Таблица Table2
key2 |
field1 |
field2 |
field3 |
1 |
New York |
A |
N |
2 |
Sao Paulo |
B |
N |
4 |
Paris |
C |
Y |
5 |
London |
C |
Y |
6 |
Rome |
C |
Y |
9 |
Madrid |
C |
Y |
0 |
Bangalore |
D |
N |
SELECT t1.key1,
t1.field1 as Name,
t1.key2 as T1Key,
t2.key2 as T2Key,
t2.field1 as City
FROM Table1 t1 INNER JOIN Table2 t2 ON t1.key2 = t2.key2;
LEFT OUTER JOIN
Дает все запрошенные данные из таблицы в левой части JOIN плюс данные из правой таблицы, пересекающиеся с первой таблицей. На рисунке 4 показана диаграмма Венна, иллюстрирующая LEFT JOIN для двух таблиц.
SELECT t1.key1,
t1.field1 as Name,
t1.key2 as T1Key,
t2.key2 as T2Key,
t2.field1 as City
FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.key2 = t2.key2 ;
RIGHT JOIN
выдает все запрошенные данные из таблицы, стоящей в правой части оператора JOIN, плюс данные из левой таблицы, пересекающиеся с правой
SELECT t1.key1,
t1.field1 as Name,
t1.key2 as T1Key,
t2.key2 as T2Key,
t2.field1 as City
FROM Table1 t1 RIGHT JOIN Table2 t2 ON t1.key2 = t2.key2 ;
33.
Оператор INSERT вставляет новые записи в таблицу. При этом значения столбцов могут представлять собой литеральные константы, либо являться результатом выполнения подзапроса. В первом случае для вставки каждой строки используется отдельный оператор INSERT; Синтаксис оператора следующий:
INSERT INTO <имя таблицы>[(<имя столбца>,...)]
{VALUES (<значение столбца>,…)}
| <выражение запроса>
| {DEFAULT VALUES}
34.
Обновление записи осуществляется командой UPDATE.