SlideShare a Scribd company logo
Язык SQL
Современное состояние дел в области создания и поддержки ИС характеризуется наличием пока единственного
стандартного языка для работы с БД. Практически все крупнейшие разработчики СУБД создают свои продукты
с использованием языка SQL.
Язык SQL был разработан фирмой IBM в конце 1970-х годов.
Развитие языка определяется и контролируется стандартом ISO/ANSI.
Существует несколько стандартов языка: SQL1 (1987г.), SQL2 (1992г), SQL3 (1999г -
содержит некоторые объектно-ориентированные расширения. Эта версия не привлекла особого
внимания со стороны фирм-разработчиков СУБД.).
Компании, поставляющие СУБД, предлагают свои реализации SQL, все они в большей или
меньшей степени отличаются от стандарта. Существует три уровня соответствия стандарту
ANSI: начальный, промежуточный и полный.
1. Типы данных
В разных реализациях SQL поддерживаются различные типы данных. Например, в SQL2:
числовой, строковый, логический, даты-времени, интервальный.
Внутри каждого из этих типов может быть несколько подтипов.
Точные числовые типы - позволяют точно выразить значение числа. Точность -это
максимально возможное количество цифр.
INTEGER или INT (целый) - точность зависит от конкретной реализации SQL (например, 32
битовое двоичное число), и соответственно не может быть установлена разработчиком БД.
SMALLINT (малый целый) - его точность не может быть больше точности типа INTEGER
(например, 16 битовое двоичное число).
NUMERIC [(n,m)] (числовой) - кроме целого компонента может быть и дробный. n - общее кол-во
цифр в числе, m - кол-во цифр слева от десятичной точки.?
Например, для числа 567,56 тип данных NUMERIC(5,2). Точность равна 5, а масштаб 2. Для
этого типа нельзя поместить числа, большие 999,99).
DECIMAL[(n,m)] или DEC[(n,m)] (десятичный)
Приблизительные числовые типы - для чисел с плавающей запятой. Для чисел с большим
диапазоном возможных значений, когда компьютер с данным размером регистра (32, 64, 128 бита) не может в
точности представить их.
REAL (действительное число) - точность определяется используемым оборудованием
DOUBLE PRECISION (двойная точность) - точность зависит от аппаратуры
FLOAT [(n)] (плавающий) - дает возможность указывать точность, n - число байтов,
резервируемое под хранение одного числа.
Строковые данные
CHARACTER [(n)] или CHAR[(n)] - символьные строки постоянной длины в n символов.
Если символов вводится меньше, чем может поместиться в поле, то свободные позиции
заполняются пробелами.
CHARACTER VARYING или VARCHAR(n) - строки символов переменной длины, n -
максимально разрешенное кол-во символов. Дает возможность сохранять то количество
символов, которое ввел пользователь (нет заполнения пробелами).
Логические данные - BOOLEAN (булев) - имеет значения true (истина), false (ложь),
unknown (неизвестное) .
Интервалы - INTERVAL - это разница между двумя значениями даты-времени.
2. Операторы языка SQL
Операторы SQL подразделяются на несколько категорий.
1) Операторы определения данных (DDL) - применяются для описания структур
используемых данных.
CREATE (создать) TABLE CREATE VIEW
ALTER (изменить) TABLE ALTER VIEW
DROP(прекратить) TABLE DROP VIEW
Не предусмотренные стандартом (дополнительные средства)
CREATE DOMAIN CREATE INDEX
ALTER DOMAIN DROP INDEX
DROP DOMAIN
2) Операторы манипулирования данными (DML) - предназначены для заполнения
таблиц данными и для обновления загруженной в них информации.
DELETE - удаляет из таблицы одну или несколько строк, соответствующих условиям
фильтрации.
INSERT - вставляет одну строку в таблицу
UPDATE - обновляет значения одного или нескольких столбцов в одной или нескольких
строках, соответствующих условиям фильтрации
3) Оператор запросов - SELECT - для выборки информации из БД.
4) Операторы управления транзакциями
COMMIT - завершить транзакцию
ROLLBACK - откатить транзакцию
SAVEPOINT- сохранить промежуточную точку выполнения транзакции.
5) Средства администрирования данных
CREATE DATABASE - создать новую БД
ALTER DATABASE - изменить набор основных объектов в БД, ограничений, касающихся
всей БД.
DROP DATABASE - удалить существующую БД
CREATE DBAREA - создать новую область хранения и сделать ее доступной для
размещения данных.
ALTER DBAREA - изменить ранее созданную область хранения
DROP DBAREA - удалить существующую область хранения
ALTER PASSWORD - изменить пароль для всей БД
GRANT - предоставить права доступа на ряд действий над некоторым объектом БД
REVOKE - лишить права доступа к некоторому объекту или некоторым действиям над
объектом.
Соглашения, применяемые для записи операторов:
− прописные буквы используются для записи зарезервированных слов;
− строчные буквы - для записи определяемых пользователем слов;
− вертикальная черта "|" указывает на необходимость выбора одного из нескольких
значений;
− { } - определяют обязательный элемент;
− [ ] - определяют необязательный элемент
− многоточие "…" используется для указания необязательной возможности повторения
конструкции.
3. Операторы определения данных
Создание таблиц
- создавать таблицы необходимо в определенным порядке: вначале родительские, затем
дочерние.
Формат оператора:
CREATE TABLE ИмяТаблицы (
{ИмяСтолбца ТипДанных [NOT NULL] [UNIQUE]
[DEFAULT значение по умолчанию]
[CHECK (условие проверки на допустимость),]
[…] }
[PRIMARY KEY (список столбцов),]
[UNIQUE (список столбцов), […] ]
[FOREIGN KEY (список столбцов внешних ключей)
REFERENCES имя род таб [(список столбцов первичных ключей)],
[ON UPDATE правило ссылочной целостности]
[ON DELETE правило ссылочной целостности] ,]
[CHECK (условие проверки на допустимость)] [, …]} );
Ключевое слово:
1. NULL означает, что столбец может содержать неопределенные значения.
2. CHECK(ограничение) задает ограничения для доменов атрибутов.
3. PRIMARY KEY обеспечивает смысловую целостность данных.
4. UNIQUE обеспечивает уникальность альтернативных ключей.
5. FOREIGN KEY - для определения внешних ключей.
Поддержка ссылочной целостности предполагает определение поведения системы в случае попытки обновить
или удалить значение первичного ключа в родительской таблице, если с ним связана хотя бы одна строка
дочерней таблицы.
Поддержка ссылочной целостности осуществляется фразами ON UPDATE и ON DELETE
предложения FOREIGN KEY, где необходимо выбрать один из возможных квалификаторов:
− NO ACTION - удаление или изменение строки из родительской таблицы отменяется;
используется по умолчанию также и в том случае, когда фраза ON DELETE или ON UPDATE опущена.
− CASCADE - удаление или изменение строки из родительской таблицы приводит к
автоматическому удалению или изменению всех ссылающихся на нее строк дочерней
таблицы; если дочерняя таблица связана с другими таблицами, то изменения распространяются далее
аналогичным образом:
− SET NULL - удаление строки из родительской таблицы приводит к автоматическому
присвоению внешним ключам ссылающихся строк дочерней таблицы NULL-значений;
этот вариант может использоваться только в том случае, если в определении столбца внешнего ключа
отсутствует ключевое слово NOT NULL.
− SET DEFAULT - удаление строки из родительской таблицы приводит к автоматическому
присвоению внешним ключам ссылающихся строк дочерней таблицы значений,
принимаемых по умолчанию; этот вариант может использоваться только в том случае, если в
определении столбца внешнего ключа присутствует ключевое слово DEFAULT и задано значение,
используемое по умолчанию.
Удаление таблиц
Формат оператора:
DROP TABLE имя_таблицы [RISTRICT | CASCADE]
Ключевые слова RISTRICT и CASCADE определяют условия удаления таблицы в том
случае, если в БД присутствуют ее дочерние таблицы.
− RISTRICT вызовет отмену удаления;
− CASCADE вызывает автоматическое удаление всех объектов БД, существование
которых зависит отданной таблицы.
Обновление таблиц
В уже созданную таблицу изменения могут быть внесены с помощью оператора ALTER TABLE.
Формат оператора:
ALTER TABLE имя_таблицы
[ADD [COLUMN] имя_столбца тип_данных [NOT NULL] [UNIQUE]
[DEFAULT значение по умолчанию]
[CHECK (условие проверки на допустимость)]]
[DROP [COLUMN] имя_столбца [RISTRICT | CASCADE]]
[ADD [CONSTRAINT [имя ограничения]]ограничение]
[DROP CONSTRAINT имя ограничения [RISTRICT | CASCADE]]
[ALTER [COLUMN] SET DEFAULT значение по умолчанию]
[ALTER [COLUMN] DROP DEFAULT]
В данном формате предусмотрены возможности для выполнения ряда действий:
− ADD (DROP) COLUMN - добавить (удалить) новый столбец.
− ADD (DROP) CONSTRAINT - добавить (удалить) новое ограничение
− ALTER [COLUMN] SET (DROP) DEFAULT - задать (отменить) для существующего
столбца значение по умолчанию
Фразы, связанные с удалением компонентов таблиц (столбца или ограничения), содержат
дополнительное кл. слово, позволяющее уточнить порядок удаления:
− CASCADE - удаление осуществляется каскадным образом с удалением ссылок на
удаляемый компонент;
− RISTRICT (используется по умолчанию) - удаление отменяется, если существуют
ссылки на удаляемый компонент.
Одним оператором ALTER TABLE можно провести только одно изменение таблицы,
например, за один раз можно добавить один столбец. Чтобы добавить два столбца в
таблицу, необходимо использовать два оператора.
4. Операторы манипулирования данными
Оператор ввода данных
Формат оператора для ввода одиночной строки:
INSERT INTO имя_таблицы [(список столбцов)]
VALUES (список значений);
Между списком имен столбцов и списком значений должно быть строгое соответствие:
− Кол-во элементов в обоих списках должно быть одинаковым
− Между положением элементов в списках должно быть строгое соответствие, которое определяется слева
направо: первый элемент одного списка соответствует первому элементу второго и т.д.
− Типы данных соответствующих элементов списков должны быть одинаковые и принадлежать к одному м
тому же домену.
Например, дана таблица: СОТРУДНИКИ (ТабN, ФИО, Стаж_работы, Дата_рождения, Адрес)
Пример 1 INSERT INTO Сотрудники (ТабN, ФИО, Стаж)
VALUES (101,'Сидоров П.П.', 15,);
Если вводится строка с заданием значений для всех столбцов, то задание списка столбцов
необязательно.
Пример 2 INSERT INTO Сотрудники
VALUES (101,'Сидоров П.П.', 15, '05.04.1978', 'Омск');
Формат оператора ввода сразу нескольких строк, при копировании их из другой таблицы:
INSERT INTO имя_таблицы [(список столбцов)]
SELECT …
Пример 3 INSERT INTO Сотрудники1 (ТабN, ФИО)
SELECT ТабN, ФИО
FROM Сотрудники;
Оператор удаления данных
Формат оператора:
DELETE FROM имя_таблицы
[WHERE условия_отбора]
Пример DELETE FROM Сотрудники
WHERE ТабN =101
Если условия отбора не задаются, то из таблицы удаляются все существующие в ней строки.
Таблица при этом остается пустой, незаполненной.
Оператор обновления данных
Имеет следующий формат:
UPDATE имя_таблицы
SET имя_столбца1 = новое_значение, [имя столбца2 = новое_значение2…]
[WHERE условие_отбора]
Новые данные должны быть совместимы с теми данными, которые они заменяют.
Если условие отбора не задается, то операция модификации будет применена ко всем
строкам таблицы.
Например, для таблицы ДОЛЖОКЛАД (Должность, Оклад)
Пример 1 UPDATE ДолжОклад
SET Оклад = Оклад*1,3
Пример2 UPDATE ДолжОклад
SET Оклад = Оклад*1,3
WHERE Должность='Лаборант' AND Должность = 'Ст.лаборант';
5. Оператор выбора SELECT
Назначение оператора в выборке и отображении данных одной или нескольких таблиц БД. Этот исключительно
мощный (и самый сложный), часто используемый оператор.… реализует все операции реляционной
алгебры.
Формат оператора:
SELECT [DISTINCT | ALL] {* | [список столбцов] }
FROM СписокТаблиц
[WHERE условие выборки или соединения]
[GROUP BY список столбцов группировки]
[HAVING условие для группы]
[ORDER BY список столбцов и условие упорядочивания]
Указанный порядок следования предложений в операторе SELECT не может быть изменен.
В предложении SELECT:
1) кл. слово ALL (используется по умолчанию) - в результирующую таблицу включаются
все строки, удовлетворяющие условиям запроса, что может привести к появлению
одинаковых строк;
2) кл. слово DISTINCT (отличающийся) устраняет дублирование строк;
3) "*" - символ-маска означает "все", в результирующую таблицу включаются все столбцы
из исходной.
Уточняющие предложение:
1) FROM (из) задает перечень исходных таблиц запроса.
2) WHERE (где) фильтрует строки, удовлетворяющие условию поиска, и отбрасывает все
остальные.
В качестве условий отбора могут быть использованы следующие предикаты (предикаты -
это используемые в SQL эквиваленты логических высказываний. Предикат - это выражение,
которое утверждает факт, относящийся к значениям из этого выражения):
− сравнения "=, <>, <, >, >=, <= - для сравнения результатов вычисления двух выражений; более
сложные выражения строятся с помощью логических операторов AND, OR, NOT;
− BETWEEN (между) A AND B (NOT BETWEEN A AND B) - предикат истинен, когда
вычисленное значение выражения попадает (не попадает) в заданный диапазон;
− IN(в) (NOT IN (не в) ) - предикат истинен тогда, когда сравниваемое значение входит (не входит) в
множество заданных значений;
− LIKE (похожий) (NOT LIKE (не похожий) ) предикат истинен тогда, когда сравниваемое
значение соответствует шаблону, и ложен в противном случае (и наоборот);
− IS NULL - предикат, применяющийся для выявления равенства значения некоторого атрибута
неопределенному значению:
3. GROUP BY (группировать по) группирует строки в соответствии со значениями в
столбцах группирования.
4. HAVING (при условии) задаются предикаты-условия, накладываемые на каждую группу.
5. ORDER BY (упорядочивать по) задается список полей упорядочения результата, ASC
-по возрастанию, DESC - по убыванию.
Порядок выполнения этих предложений: FROM, WHERE, GROUP BY, HAVING, SELECT и
ORDER BY.
Предложения работают по принципу конвейера, когда каждое из них получает результат выполнения
предыдущего предложения, обрабатывает этот результат и передает то, что получилось, следующему
предложению.
SELECT(HEVING(GROUR BY(WHERE(FROM…))))
Чтение заданных столбцов и строк из одиночной таблицы
Например, дана таблица: СОТРУДНИКИ (ТабN, ФИО, Стаж_работы, Дата_рождения, Адрес)
Запрос 1: Вывести все сведения о всех сотрудниках
SELECT *
FROM Сотрудники;
Результатом выполнения запроса будет вся таблица сотрудники.
Запрос 2: Вывести адреса сотрудников
SELECT Фамилия, Адрес
FROM Сотрудники;
В сформированных выше запросах требовалось вывести все строки таблицы. Если при выборке требуется
ограничить количество выводимых строк в соответствии с каким-то условием, то этого можно достичь,
используя в запросе предложение WHERE. В предложение WHERE можно включать одно или несколько
условий отбора.
Запрос 3: Вывести сведения о конкретном сотруднике
SELECT *
FROM Сотрудники
WHERE Фамилия = 'Иванов';
Запрос 4: Вывести сведения о сотрудниках, ТабN которых лежит в диапазоне от 12 до 44.
SELECT *
FROM Сотрудники
WHERE ТабN BETWEEN 12 and 44;
Сортировка результатов
По умолчанию сортировка производится в порядке возрастания.
Запрос 5: Cведения о сотрудниках, отсортированные по столбцу ФИО в порядке
возрастания.
SELECT *
FROM Сотрудники
ORDER BY ФИО;
Сортировать можно и более чем по одному столбцу.
Запрос 6: Сортировка столбец ФИО - по возрастанию, стаж - по убыванию.
SELECT ФИО, Стаж
FROM Сотрудники
ORDER BY Фамилия ASC, Стаж DESC;
Итоговые функции SQL
Итоговые функции: SUM, AVG, MIN, MAX, COUNT - применяются к наборам строк из
таблицы. В набор могут входить все строки или только те из них, которые определяются
предложением WHERE.
COUNT(счет) - подсчитывает кол-во значений в указанном столбце
В качестве операнда итоговых функций может использоваться наименование только одного
столбца, и все они возвращают единственное значение.
С ф-ями SUM и AVG могут использоваться только числовые поля. С ф-ями COUNT, MIN,
MAX - как числовые так и символьные поля.
Стандарт языка не позволяет применять итоговые функции в предложении WHERE, потому
что предикаты оцениваются в терминах одиночной строки, а итоговые функции - в терминах
групп строк.
Запрос 7: Подсчитать и вывести общее число сотрудников
SELECT COUNT(*) AS Всего_сотрудников
FROM Сотрудники;
Аргумент представлен символом "*", определяющим подсчет всех строк.
Результат запроса:
Всего_сотрудников
55
Запрос 8: Вывести средний стаж работы сотрудников
SELECT AVG(Стаж_работы) AS Средний_стаж
FROM Сотрудники;
Результат запроса:
Средний_стаж
9
Итоговые функции и группировка
В приведенных выше запросах агрегатные функции применялись ко всей таблице и выдавали сводные данные
на основании обработки значений всего выделенного столбца.
Однако часто встречаются ситуации, когда в отчет необходимо поместить и промежуточные результаты,
опирающиеся на вычисления обобщенных групповых значений. Для применения итоговых функций в
подобных случаях предполагается предварительная операция группировки.
Суть группировки - все множество строк таблицы разбивается на группы, в каждой из
которых собираются строки, имеющие одинаковые значения атрибутов. Обработка такой
информации реализуется применением итоговых функций к каждой отдельной группе.
Если в запросе должна использоваться группировка, то каждый элемент списка в
предложении SELECT должен иметь единственное значение для всей группы.
Например, дана таблица СЕССИЯ.
Код ФИО Дисциплина Оценка
1 И И 4
2 П И 3
3 С И 5
4 И Ф 4
5 С Ф 5
6 И М 3
7 К М 3
Запрос 9: Для каждого студента определить количество сданных им экзаменов
SELECT ФИО, COUNT(Оценка) AS Сдано_экз
FROM Сессия
GROUP BY ФИО;
Результат запроса:
ФИО Сдано_экз
И 3
К 1
П 1
С 2
Совместно с фразой GROUP BY может быть использована фраза HAVING, предназначенная для задания
ограничений отбора групп, которые будут помещены в результирующую таблицу запроса. Стандарт языка
требует, чтобы имена столбцов во фразе HAVING обязательно присутствовали в списке фразы GROUP BY или
применялись в агрегатных функциях.
Агрегатные функции могут применяться не только в выражении вывода результатов строки SELECT, но и в
выражении условия обработки сформированных групп HAVING. В этом случае каждая агрегатная функция
вычисляется для каждой выделенной группы.
В результат можно включить значение поля группировки и несколько агрегатных функций, а в условиях
группировки можно использовать несколько полей. При этом группы образуются по набору заданных полей
группировки. Операции с агрегатными функциями могут быть применены к объединению множества исходных
таблиц.
Запрос 10: Вывести ФИО студентов, сдавших все три экзамена.
SELECT ФИО, COUNT(Оценка) AS сдано_экз
FROM Сессия
GROUP BY ФИО
HAVING COUNT(ФИО) = 3;
Результат запроса:
ФИО Сдано_экз
И 3
Вложенные запросы (подзапросы)
… создаются, когда в тело одного оператора SELECT (внешнего), внедряют другой оператор
SELECT (внутренний).
Обычно внутренний запрос генерирует значение, которое проверяется в предикате внешнего
запроса (в предложении WHERE или HAVING), определяющего верно оно или нет.
Подзапросы могут быть нескольких видов:
− Скалярный подзапрос, возвращающий единственное значение
− Строковый подзапрос, возвращающий несколько значений в виде одной строки
− Табличный подзапрос, возвращающий данные в виде таблицы.
Подзапрос может указываться непосредственно после операторов сравнения (<,>,=, <=, >=).
Правила организации вложенных запросов:
− подзапрос, участвующий в операции, может быть только правым операндом.
− текст запроса должен быть заключен в скобки
− по умолчанию имена столбцов в подзапросе относятся к таблице, указанной во фразе
FROM
− в подзапросе не должна использоваться фраза ORDER BY
Запрос 11. Вывести фамилии студентов и дисциплины по которым у них оценки выше
средней за сессию. (3,7)
SELECT ФИО, Дисциплина, Оценка
FROM Сессия
WHERE Оценка > (SELECT AVG(Оценка) FROM Сессия);
Стандарт языка не позволяет применять агрегатные функции в предложении WHERE, поэтому оценки
необходимо сравнивать с результатом подзапроса, вычисляющего среднее значение начислений всех строк
таблицы. Данный скалярный подзапрос вернет значение, равное 3,85, и уже с этим значением будут
сравниваться все начисления и отбираться для помещения в таблицу вывода.
Результат запроса
ФИО Дисциплина Оценка
И И 4
С И 5
И Ф 4
С Ф 5
Многотабличные запросы
Все запросы, рассмотренные нами до сих пор, считывали данные из одиночной таблицы. Во многих случаях
для получения ответа на запрос необходимо объединить информацию из нескольких исходных таблиц.
Чтение данных из нескольких таблиц осуществляется с помощью операторов реляционной
алгебры JOIN (соединение), UNION (объединение), INTERSECT (пересечение) и EXCEPT
(разность), а также возможно с помощью вложенных запросов (в том случае, если
результаты, т.е. столбцы в предложении SELECT относятся к одной и той же таблице).
1. Использование операции соединения (JOIN).
Использование операции соединения позволяет получать данные из таблиц, имеющих
разную структуру.
Самый простой оператор соединения - это оператор SELECT, выполняемый с двумя
таблицами не имеющий никаких ограничителей из предложения WHERE. Результат
соединения - это декартово произведение исходных таблиц (каждая строка из первой
таблицы объединяется с каждой строкой из второй).
Запрос 12. Получить экзаменационную ведомость
СТУДЕНТЫ ЭКЗАМЕНЫ
Nзачкн ФИО
В-02 И
В-03 П
В-04 С
SELECT *
FROM Студенты, Экзамены;
Результат запроса
(соответствует декартову произведению таблиц СТУДЕНТЫ и ЭКЗАМЕНЫ.)
Nзачкн ФИО КодДис Дисциплина Дата Оценка
В-02 И 01 Ф 01.05.05
В-02 И 02 М 15.05.05
В-03 П 01 Ф 01.05.05
В-03 П 02 М 15.05.05
В-04 С 01 Ф 01.05.05
В-04 С 02 М 15.05.05
Часто таблица, получаемая простым соединением (декартово произведение) имеет
значительный излишек данных и не имеет особого смысла. Получить более содержательный
результат можно, отфильтровав из объединения ненужные строки с помощью ограничений
предложения WHERE.
Запрос 13. В ведомость СЕССИЯ добавить сведения о группе студентов.
СЕССИЯ
Код ФИО Дисциплина Оценка
1 И И 4
2 П И 4
4 И Ф 4
5 С Ф 5
6 И М 3
SELECT Сессия.ФИО, Дисциплина, Оценка, Группа
ГРУППА
ФИО Группа
И В-443
П В-443
С В-442
КодДис Дисциплина Дата Оценка
01 Ф 01.05.05
02 М 15.05.05
FROM Сессия,Группа
WHERE Сессия.ФИО=Группа.ФИО;
Результат запроса:
ФИО Дисциплина Оценка Группа
И И 4 В-443
П И 4 В-443
И Ф 4 В-443
С Ф 5 В-442
И М 3 В-443
Для облегчения ввода и чтения кода SQL используют псевдонимы таблиц. Псевдоним - это
другое, более короткое имя таблицы.
Предыдущий запрос с использованием псевдонимов:
SELECT С.ФИО, Дисциплина, Оценка, Группа
FROM Сессия AS С, Группа AS Г
WHERE С.ФИО=Г.ФИО;
Ключевое слово AS можно опустить:
SELECT С.ФИО, Дисциплина, Оценка, Группа
FROM Сессия С, Группа Г
WHERE С.ФИО=Г.ФИО;
В стандарте SQL2 введен альтернативный синтаксис соединения. Здесь вместо WHERE
используются ключевые слова JOIN и ON.
SELECT С.ФИО, Дисциплина, Оценка, Группа
FROM Сессия С JION Группа Г
ON С.ФИО=Г.ФИО;
Таблицу, получившуюся в результате соединения можно обрабатывать, как и любую другую.
Запрос 14. Вывести группы, в которых на экзаменах получены четверки.
SELECT Группа
FROM Сессия С, Группа Г
WHERE С.ФИО=Г.ФИО AND Оценка=4
GROUP BY Группа;
Группа
В-443
2. Использование операторов UNION, INTERSECT, EXCEPT.
Перечисленные операторы дают возможность получать информацию из таблиц, имеющих
одинаковую структуру.
Одинаковая структура означает:
1. Во всех таблицах имеется одинаковое количество столбцов.
2. У всех соответствующих столбцов должны быть идентичный тип данных и одинаковая
длина.
Схема построения всех указанных операторов одинакова:
(SELECT - запрос)
Оператор
(SELECT - запрос)
Оператор
(SELECT - запрос)
Запрос 15. Какие типы деталей входят в состав обоих изделий?
ИЗДЕЛИЕ1 ИЗДЕЛИЕ2
Код_д Назв. Вес
1 A 1
3 B 2
4 C 3
(SELECT * FROM Изделие1)
UNION
(SELECT * FROM Изделие2);
Результат запроса:
Код_д Назв. Вес
1 A 1
2 D 2
3 В 2
4 С 3
Операция UNION убирает любые повторяющиеся строки. В большинстве случает это
желаемый результат. Но иногда повторяющиеся строки требуется сохранять. В таких
случаях используется ключевое слово ALL (UNION ALL).
(SELECT * FROM Изделие1)
UNION ALL
(SELECT * FROM Изделие2);
Результат запроса:
Код_д Назв. Вес
1 A 1
2 D 2
3 В 2
4 С 3
3 B 2
4 C 3
Аналогично используются операторы INTERSECT, EXCEPT.
3. Использование вложенных запросов.
Код_д Назв. Вес
2 D 2
3 В 2
4 С 3

More Related Content

What's hot

Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Java
metaform
 
работа с потоками ввода вывода
работа с потоками ввода выводаработа с потоками ввода вывода
работа с потоками ввода выводаmetaform
 
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
Technopark
 
Стажировка-2013, разработчики, занятие 11. Базы данных
Стажировка-2013, разработчики, занятие 11. Базы данныхСтажировка-2013, разработчики, занятие 11. Базы данных
Стажировка-2013, разработчики, занятие 11. Базы данных7bits
 
Aleksey Mashanov Rit
Aleksey  Mashanov RitAleksey  Mashanov Rit
Aleksey Mashanov Ritrit2010
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
Technopark
 
бд шпора2
бд шпора2бд шпора2
бд шпора2elgin690
 
Эффективное программирование на NodeJS
Эффективное программирование на NodeJSЭффективное программирование на NodeJS
Эффективное программирование на NodeJS
Yura Bogdanov
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 087bits
 
Использование хранимых процедур в MySQL (Константин Осипов)
Использование хранимых процедур в MySQL (Константин Осипов)Использование хранимых процедур в MySQL (Константин Осипов)
Использование хранимых процедур в MySQL (Константин Осипов)Ontico
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Javametaform
 
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьСергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Tanya Denisyuk
 
InterBase XE7: Применение Change Views для синхронизации данных
InterBase XE7: Применение Change Views для синхронизации данныхInterBase XE7: Применение Change Views для синхронизации данных
InterBase XE7: Применение Change Views для синхронизации данных
Andrew Sovtsov
 
JDBC
JDBCJDBC
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
Technopark
 
Стажировка-2014, занятие 5. Базы данных
Стажировка-2014, занятие 5. Базы данныхСтажировка-2014, занятие 5. Базы данных
Стажировка-2014, занятие 5. Базы данных7bits
 
Реляционные базы данных
Реляционные базы данныхРеляционные базы данных
Реляционные базы данных
Levon Avakyan
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"
Technopark
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
Technopark
 

What's hot (20)

Работа с БД в Java
Работа с БД в JavaРабота с БД в Java
Работа с БД в Java
 
работа с потоками ввода вывода
работа с потоками ввода выводаработа с потоками ввода вывода
работа с потоками ввода вывода
 
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
 
Стажировка-2013, разработчики, занятие 11. Базы данных
Стажировка-2013, разработчики, занятие 11. Базы данныхСтажировка-2013, разработчики, занятие 11. Базы данных
Стажировка-2013, разработчики, занятие 11. Базы данных
 
Aleksey Mashanov Rit
Aleksey  Mashanov RitAleksey  Mashanov Rit
Aleksey Mashanov Rit
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 
бд шпора2
бд шпора2бд шпора2
бд шпора2
 
Эффективное программирование на NodeJS
Эффективное программирование на NodeJSЭффективное программирование на NodeJS
Эффективное программирование на NodeJS
 
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 08
 
Использование хранимых процедур в MySQL (Константин Осипов)
Использование хранимых процедур в MySQL (Константин Осипов)Использование хранимых процедур в MySQL (Константин Осипов)
Использование хранимых процедур в MySQL (Константин Осипов)
 
Классы и объекты в Java
Классы и объекты в JavaКлассы и объекты в Java
Классы и объекты в Java
 
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьСергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 
InterBase XE7: Применение Change Views для синхронизации данных
InterBase XE7: Применение Change Views для синхронизации данныхInterBase XE7: Применение Change Views для синхронизации данных
InterBase XE7: Применение Change Views для синхронизации данных
 
JDBC
JDBCJDBC
JDBC
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
 
Jquery
JqueryJquery
Jquery
 
Стажировка-2014, занятие 5. Базы данных
Стажировка-2014, занятие 5. Базы данныхСтажировка-2014, занятие 5. Базы данных
Стажировка-2014, занятие 5. Базы данных
 
Реляционные базы данных
Реляционные базы данныхРеляционные базы данных
Реляционные базы данных
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
 

Similar to 0044

0039
00390039
0039JIuc
 
Базы данных лекция №7
Базы данных лекция №7Базы данных лекция №7
Базы данных лекция №7
Vitaliy Pak
 
Управление данными (sql)
Управление данными (sql)Управление данными (sql)
High Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHigh Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHighLoad2009
 
High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9HighLoad2009
 
Оптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросовОптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросовAlex.Kolonitsky
 
Новые возможности языка SQL в Firebird 3.0
Новые возможности языка SQL в Firebird 3.0Новые возможности языка SQL в Firebird 3.0
Новые возможности языка SQL в Firebird 3.0
Alexey Kovyazin
 
презентация лекции №8
презентация лекции №8презентация лекции №8
презентация лекции №8student_kai
 
Jdbc in java
Jdbc in javaJdbc in java
Jdbc in java
Asya Dudnik
 
СУБД осень 2012 лекция 8
СУБД осень 2012 лекция 8СУБД осень 2012 лекция 8
СУБД осень 2012 лекция 8Technopark
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Ontico
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
PostgreSQL-Consulting
 
Query perfomance tuning
Query perfomance tuningQuery perfomance tuning
Query perfomance tuningcollabock
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEB
Alexandre Kalendarev
 
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
pgdayrussia
 
лабораторная работа 7
лабораторная работа 7лабораторная работа 7
лабораторная работа 7student_kai
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXMLSlach
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_ru
mcroitor
 

Similar to 0044 (20)

0039
00390039
0039
 
Базы данных лекция №7
Базы данных лекция №7Базы данных лекция №7
Базы данных лекция №7
 
Управление данными (sql)
Управление данными (sql)Управление данными (sql)
Управление данными (sql)
 
My sql 0
My sql 0My sql 0
My sql 0
 
High Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus ReadyHigh Load 2009 Dimaa Rus Ready
High Load 2009 Dimaa Rus Ready
 
лабраб 7
лабраб 7лабраб 7
лабраб 7
 
High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9High Load 2009 Dimaa Rus Ready 16 9
High Load 2009 Dimaa Rus Ready 16 9
 
Оптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросовОптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросов
 
Новые возможности языка SQL в Firebird 3.0
Новые возможности языка SQL в Firebird 3.0Новые возможности языка SQL в Firebird 3.0
Новые возможности языка SQL в Firebird 3.0
 
презентация лекции №8
презентация лекции №8презентация лекции №8
презентация лекции №8
 
Jdbc in java
Jdbc in javaJdbc in java
Jdbc in java
 
СУБД осень 2012 лекция 8
СУБД осень 2012 лекция 8СУБД осень 2012 лекция 8
СУБД осень 2012 лекция 8
 
Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)Что такое Postgresql (Максим Богук)
Что такое Postgresql (Максим Богук)
 
Максим Богук. Postgres-XC
Максим Богук. Postgres-XCМаксим Богук. Postgres-XC
Максим Богук. Postgres-XC
 
Query perfomance tuning
Query perfomance tuningQuery perfomance tuning
Query perfomance tuning
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEB
 
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
PG Day'14 Russia, PostgreSQL как платформа для разработки приложений, часть 2...
 
лабораторная работа 7
лабораторная работа 7лабораторная работа 7
лабораторная работа 7
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXML
 
05 db server_deployment_ru
05 db server_deployment_ru05 db server_deployment_ru
05 db server_deployment_ru
 

More from JIuc

выступление на совет директоров
выступление на совет директороввыступление на совет директоров
выступление на совет директоровJIuc
 
тест по теме системы счисления
тест по теме системы счислениятест по теме системы счисления
тест по теме системы счисленияJIuc
 
тест по теме компьютерные коммуникации
тест по теме компьютерные коммуникациитест по теме компьютерные коммуникации
тест по теме компьютерные коммуникацииJIuc
 
тест по теме аппаратное обеспечение эвм
тест по теме аппаратное обеспечение эвмтест по теме аппаратное обеспечение эвм
тест по теме аппаратное обеспечение эвмJIuc
 
тест по теме устройство компьютера (20 вопросов)
тест по теме  устройство компьютера (20 вопросов)тест по теме  устройство компьютера (20 вопросов)
тест по теме устройство компьютера (20 вопросов)JIuc
 
тест Atutor аппаратное обеспечение
тест Atutor аппаратное обеспечениетест Atutor аппаратное обеспечение
тест Atutor аппаратное обеспечениеJIuc
 
итоговый тест по дисциплине аппаратное обеспечение эвм
итоговый тест по дисциплине аппаратное обеспечение эвмитоговый тест по дисциплине аппаратное обеспечение эвм
итоговый тест по дисциплине аппаратное обеспечение эвмJIuc
 
тест по теме основные устройства компьютера
тест по теме основные устройства компьютератест по теме основные устройства компьютера
тест по теме основные устройства компьютераJIuc
 
тесты сортировка в бд Excel
тесты сортировка в бд Excelтесты сортировка в бд Excel
тесты сортировка в бд ExcelJIuc
 
тест создание и модифиация структуры бд
тест создание и модифиация структуры бдтест создание и модифиация структуры бд
тест создание и модифиация структуры бдJIuc
 
тест система управления базами данных
тест система управления базами данныхтест система управления базами данных
тест система управления базами данныхJIuc
 
тест работа с макросами и внешними данными
тест работа с макросами и внешними даннымитест работа с макросами и внешними данными
тест работа с макросами и внешними даннымиJIuc
 
тест по Sql
тест по Sqlтест по Sql
тест по SqlJIuc
 
тест ключи, связи, индексы поиск и фильтрация
тест ключи, связи, индексы поиск и фильтрациятест ключи, связи, индексы поиск и фильтрация
тест ключи, связи, индексы поиск и фильтрацияJIuc
 
тест запросы
тест запросытест запросы
тест запросыJIuc
 
тест бд
тест бдтест бд
тест бдJIuc
 
тест база данных. основные функции
тест база данных. основные функциитест база данных. основные функции
тест база данных. основные функцииJIuc
 
тестирование по разделу архитектура эвм
тестирование по разделу архитектура эвмтестирование по разделу архитектура эвм
тестирование по разделу архитектура эвмJIuc
 
тест треннинг по архитектуре
тест треннинг по архитектуретест треннинг по архитектуре
тест треннинг по архитектуреJIuc
 
тест треннинг по архитектуре
тест треннинг по архитектуретест треннинг по архитектуре
тест треннинг по архитектуреJIuc
 

More from JIuc (20)

выступление на совет директоров
выступление на совет директороввыступление на совет директоров
выступление на совет директоров
 
тест по теме системы счисления
тест по теме системы счислениятест по теме системы счисления
тест по теме системы счисления
 
тест по теме компьютерные коммуникации
тест по теме компьютерные коммуникациитест по теме компьютерные коммуникации
тест по теме компьютерные коммуникации
 
тест по теме аппаратное обеспечение эвм
тест по теме аппаратное обеспечение эвмтест по теме аппаратное обеспечение эвм
тест по теме аппаратное обеспечение эвм
 
тест по теме устройство компьютера (20 вопросов)
тест по теме  устройство компьютера (20 вопросов)тест по теме  устройство компьютера (20 вопросов)
тест по теме устройство компьютера (20 вопросов)
 
тест Atutor аппаратное обеспечение
тест Atutor аппаратное обеспечениетест Atutor аппаратное обеспечение
тест Atutor аппаратное обеспечение
 
итоговый тест по дисциплине аппаратное обеспечение эвм
итоговый тест по дисциплине аппаратное обеспечение эвмитоговый тест по дисциплине аппаратное обеспечение эвм
итоговый тест по дисциплине аппаратное обеспечение эвм
 
тест по теме основные устройства компьютера
тест по теме основные устройства компьютератест по теме основные устройства компьютера
тест по теме основные устройства компьютера
 
тесты сортировка в бд Excel
тесты сортировка в бд Excelтесты сортировка в бд Excel
тесты сортировка в бд Excel
 
тест создание и модифиация структуры бд
тест создание и модифиация структуры бдтест создание и модифиация структуры бд
тест создание и модифиация структуры бд
 
тест система управления базами данных
тест система управления базами данныхтест система управления базами данных
тест система управления базами данных
 
тест работа с макросами и внешними данными
тест работа с макросами и внешними даннымитест работа с макросами и внешними данными
тест работа с макросами и внешними данными
 
тест по Sql
тест по Sqlтест по Sql
тест по Sql
 
тест ключи, связи, индексы поиск и фильтрация
тест ключи, связи, индексы поиск и фильтрациятест ключи, связи, индексы поиск и фильтрация
тест ключи, связи, индексы поиск и фильтрация
 
тест запросы
тест запросытест запросы
тест запросы
 
тест бд
тест бдтест бд
тест бд
 
тест база данных. основные функции
тест база данных. основные функциитест база данных. основные функции
тест база данных. основные функции
 
тестирование по разделу архитектура эвм
тестирование по разделу архитектура эвмтестирование по разделу архитектура эвм
тестирование по разделу архитектура эвм
 
тест треннинг по архитектуре
тест треннинг по архитектуретест треннинг по архитектуре
тест треннинг по архитектуре
 
тест треннинг по архитектуре
тест треннинг по архитектуретест треннинг по архитектуре
тест треннинг по архитектуре
 

0044

  • 1. Язык SQL Современное состояние дел в области создания и поддержки ИС характеризуется наличием пока единственного стандартного языка для работы с БД. Практически все крупнейшие разработчики СУБД создают свои продукты с использованием языка SQL. Язык SQL был разработан фирмой IBM в конце 1970-х годов. Развитие языка определяется и контролируется стандартом ISO/ANSI. Существует несколько стандартов языка: SQL1 (1987г.), SQL2 (1992г), SQL3 (1999г - содержит некоторые объектно-ориентированные расширения. Эта версия не привлекла особого внимания со стороны фирм-разработчиков СУБД.). Компании, поставляющие СУБД, предлагают свои реализации SQL, все они в большей или меньшей степени отличаются от стандарта. Существует три уровня соответствия стандарту ANSI: начальный, промежуточный и полный. 1. Типы данных В разных реализациях SQL поддерживаются различные типы данных. Например, в SQL2: числовой, строковый, логический, даты-времени, интервальный. Внутри каждого из этих типов может быть несколько подтипов. Точные числовые типы - позволяют точно выразить значение числа. Точность -это максимально возможное количество цифр. INTEGER или INT (целый) - точность зависит от конкретной реализации SQL (например, 32 битовое двоичное число), и соответственно не может быть установлена разработчиком БД. SMALLINT (малый целый) - его точность не может быть больше точности типа INTEGER (например, 16 битовое двоичное число). NUMERIC [(n,m)] (числовой) - кроме целого компонента может быть и дробный. n - общее кол-во цифр в числе, m - кол-во цифр слева от десятичной точки.? Например, для числа 567,56 тип данных NUMERIC(5,2). Точность равна 5, а масштаб 2. Для этого типа нельзя поместить числа, большие 999,99). DECIMAL[(n,m)] или DEC[(n,m)] (десятичный) Приблизительные числовые типы - для чисел с плавающей запятой. Для чисел с большим диапазоном возможных значений, когда компьютер с данным размером регистра (32, 64, 128 бита) не может в точности представить их. REAL (действительное число) - точность определяется используемым оборудованием DOUBLE PRECISION (двойная точность) - точность зависит от аппаратуры FLOAT [(n)] (плавающий) - дает возможность указывать точность, n - число байтов, резервируемое под хранение одного числа. Строковые данные CHARACTER [(n)] или CHAR[(n)] - символьные строки постоянной длины в n символов. Если символов вводится меньше, чем может поместиться в поле, то свободные позиции заполняются пробелами. CHARACTER VARYING или VARCHAR(n) - строки символов переменной длины, n - максимально разрешенное кол-во символов. Дает возможность сохранять то количество символов, которое ввел пользователь (нет заполнения пробелами). Логические данные - BOOLEAN (булев) - имеет значения true (истина), false (ложь), unknown (неизвестное) . Интервалы - INTERVAL - это разница между двумя значениями даты-времени.
  • 2. 2. Операторы языка SQL Операторы SQL подразделяются на несколько категорий. 1) Операторы определения данных (DDL) - применяются для описания структур используемых данных. CREATE (создать) TABLE CREATE VIEW ALTER (изменить) TABLE ALTER VIEW DROP(прекратить) TABLE DROP VIEW Не предусмотренные стандартом (дополнительные средства) CREATE DOMAIN CREATE INDEX ALTER DOMAIN DROP INDEX DROP DOMAIN 2) Операторы манипулирования данными (DML) - предназначены для заполнения таблиц данными и для обновления загруженной в них информации. DELETE - удаляет из таблицы одну или несколько строк, соответствующих условиям фильтрации. INSERT - вставляет одну строку в таблицу UPDATE - обновляет значения одного или нескольких столбцов в одной или нескольких строках, соответствующих условиям фильтрации 3) Оператор запросов - SELECT - для выборки информации из БД. 4) Операторы управления транзакциями COMMIT - завершить транзакцию ROLLBACK - откатить транзакцию SAVEPOINT- сохранить промежуточную точку выполнения транзакции. 5) Средства администрирования данных CREATE DATABASE - создать новую БД ALTER DATABASE - изменить набор основных объектов в БД, ограничений, касающихся всей БД. DROP DATABASE - удалить существующую БД CREATE DBAREA - создать новую область хранения и сделать ее доступной для размещения данных. ALTER DBAREA - изменить ранее созданную область хранения DROP DBAREA - удалить существующую область хранения ALTER PASSWORD - изменить пароль для всей БД GRANT - предоставить права доступа на ряд действий над некоторым объектом БД REVOKE - лишить права доступа к некоторому объекту или некоторым действиям над объектом. Соглашения, применяемые для записи операторов: − прописные буквы используются для записи зарезервированных слов; − строчные буквы - для записи определяемых пользователем слов; − вертикальная черта "|" указывает на необходимость выбора одного из нескольких значений; − { } - определяют обязательный элемент; − [ ] - определяют необязательный элемент − многоточие "…" используется для указания необязательной возможности повторения конструкции.
  • 3. 3. Операторы определения данных Создание таблиц - создавать таблицы необходимо в определенным порядке: вначале родительские, затем дочерние. Формат оператора: CREATE TABLE ИмяТаблицы ( {ИмяСтолбца ТипДанных [NOT NULL] [UNIQUE] [DEFAULT значение по умолчанию] [CHECK (условие проверки на допустимость),] […] } [PRIMARY KEY (список столбцов),] [UNIQUE (список столбцов), […] ] [FOREIGN KEY (список столбцов внешних ключей) REFERENCES имя род таб [(список столбцов первичных ключей)], [ON UPDATE правило ссылочной целостности] [ON DELETE правило ссылочной целостности] ,] [CHECK (условие проверки на допустимость)] [, …]} ); Ключевое слово: 1. NULL означает, что столбец может содержать неопределенные значения. 2. CHECK(ограничение) задает ограничения для доменов атрибутов. 3. PRIMARY KEY обеспечивает смысловую целостность данных. 4. UNIQUE обеспечивает уникальность альтернативных ключей. 5. FOREIGN KEY - для определения внешних ключей. Поддержка ссылочной целостности предполагает определение поведения системы в случае попытки обновить или удалить значение первичного ключа в родительской таблице, если с ним связана хотя бы одна строка дочерней таблицы. Поддержка ссылочной целостности осуществляется фразами ON UPDATE и ON DELETE предложения FOREIGN KEY, где необходимо выбрать один из возможных квалификаторов: − NO ACTION - удаление или изменение строки из родительской таблицы отменяется; используется по умолчанию также и в том случае, когда фраза ON DELETE или ON UPDATE опущена. − CASCADE - удаление или изменение строки из родительской таблицы приводит к автоматическому удалению или изменению всех ссылающихся на нее строк дочерней таблицы; если дочерняя таблица связана с другими таблицами, то изменения распространяются далее аналогичным образом: − SET NULL - удаление строки из родительской таблицы приводит к автоматическому присвоению внешним ключам ссылающихся строк дочерней таблицы NULL-значений; этот вариант может использоваться только в том случае, если в определении столбца внешнего ключа отсутствует ключевое слово NOT NULL. − SET DEFAULT - удаление строки из родительской таблицы приводит к автоматическому присвоению внешним ключам ссылающихся строк дочерней таблицы значений, принимаемых по умолчанию; этот вариант может использоваться только в том случае, если в определении столбца внешнего ключа присутствует ключевое слово DEFAULT и задано значение, используемое по умолчанию.
  • 4. Удаление таблиц Формат оператора: DROP TABLE имя_таблицы [RISTRICT | CASCADE] Ключевые слова RISTRICT и CASCADE определяют условия удаления таблицы в том случае, если в БД присутствуют ее дочерние таблицы. − RISTRICT вызовет отмену удаления; − CASCADE вызывает автоматическое удаление всех объектов БД, существование которых зависит отданной таблицы. Обновление таблиц В уже созданную таблицу изменения могут быть внесены с помощью оператора ALTER TABLE. Формат оператора: ALTER TABLE имя_таблицы [ADD [COLUMN] имя_столбца тип_данных [NOT NULL] [UNIQUE] [DEFAULT значение по умолчанию] [CHECK (условие проверки на допустимость)]] [DROP [COLUMN] имя_столбца [RISTRICT | CASCADE]] [ADD [CONSTRAINT [имя ограничения]]ограничение] [DROP CONSTRAINT имя ограничения [RISTRICT | CASCADE]] [ALTER [COLUMN] SET DEFAULT значение по умолчанию] [ALTER [COLUMN] DROP DEFAULT] В данном формате предусмотрены возможности для выполнения ряда действий: − ADD (DROP) COLUMN - добавить (удалить) новый столбец. − ADD (DROP) CONSTRAINT - добавить (удалить) новое ограничение − ALTER [COLUMN] SET (DROP) DEFAULT - задать (отменить) для существующего столбца значение по умолчанию Фразы, связанные с удалением компонентов таблиц (столбца или ограничения), содержат дополнительное кл. слово, позволяющее уточнить порядок удаления: − CASCADE - удаление осуществляется каскадным образом с удалением ссылок на удаляемый компонент; − RISTRICT (используется по умолчанию) - удаление отменяется, если существуют ссылки на удаляемый компонент. Одним оператором ALTER TABLE можно провести только одно изменение таблицы, например, за один раз можно добавить один столбец. Чтобы добавить два столбца в таблицу, необходимо использовать два оператора.
  • 5. 4. Операторы манипулирования данными Оператор ввода данных Формат оператора для ввода одиночной строки: INSERT INTO имя_таблицы [(список столбцов)] VALUES (список значений); Между списком имен столбцов и списком значений должно быть строгое соответствие: − Кол-во элементов в обоих списках должно быть одинаковым − Между положением элементов в списках должно быть строгое соответствие, которое определяется слева направо: первый элемент одного списка соответствует первому элементу второго и т.д. − Типы данных соответствующих элементов списков должны быть одинаковые и принадлежать к одному м тому же домену. Например, дана таблица: СОТРУДНИКИ (ТабN, ФИО, Стаж_работы, Дата_рождения, Адрес) Пример 1 INSERT INTO Сотрудники (ТабN, ФИО, Стаж) VALUES (101,'Сидоров П.П.', 15,); Если вводится строка с заданием значений для всех столбцов, то задание списка столбцов необязательно. Пример 2 INSERT INTO Сотрудники VALUES (101,'Сидоров П.П.', 15, '05.04.1978', 'Омск'); Формат оператора ввода сразу нескольких строк, при копировании их из другой таблицы: INSERT INTO имя_таблицы [(список столбцов)] SELECT … Пример 3 INSERT INTO Сотрудники1 (ТабN, ФИО) SELECT ТабN, ФИО FROM Сотрудники; Оператор удаления данных Формат оператора: DELETE FROM имя_таблицы [WHERE условия_отбора] Пример DELETE FROM Сотрудники WHERE ТабN =101 Если условия отбора не задаются, то из таблицы удаляются все существующие в ней строки. Таблица при этом остается пустой, незаполненной. Оператор обновления данных Имеет следующий формат: UPDATE имя_таблицы SET имя_столбца1 = новое_значение, [имя столбца2 = новое_значение2…] [WHERE условие_отбора] Новые данные должны быть совместимы с теми данными, которые они заменяют. Если условие отбора не задается, то операция модификации будет применена ко всем строкам таблицы. Например, для таблицы ДОЛЖОКЛАД (Должность, Оклад) Пример 1 UPDATE ДолжОклад SET Оклад = Оклад*1,3 Пример2 UPDATE ДолжОклад SET Оклад = Оклад*1,3
  • 6. WHERE Должность='Лаборант' AND Должность = 'Ст.лаборант'; 5. Оператор выбора SELECT Назначение оператора в выборке и отображении данных одной или нескольких таблиц БД. Этот исключительно мощный (и самый сложный), часто используемый оператор.… реализует все операции реляционной алгебры. Формат оператора: SELECT [DISTINCT | ALL] {* | [список столбцов] } FROM СписокТаблиц [WHERE условие выборки или соединения] [GROUP BY список столбцов группировки] [HAVING условие для группы] [ORDER BY список столбцов и условие упорядочивания] Указанный порядок следования предложений в операторе SELECT не может быть изменен. В предложении SELECT: 1) кл. слово ALL (используется по умолчанию) - в результирующую таблицу включаются все строки, удовлетворяющие условиям запроса, что может привести к появлению одинаковых строк; 2) кл. слово DISTINCT (отличающийся) устраняет дублирование строк; 3) "*" - символ-маска означает "все", в результирующую таблицу включаются все столбцы из исходной. Уточняющие предложение: 1) FROM (из) задает перечень исходных таблиц запроса. 2) WHERE (где) фильтрует строки, удовлетворяющие условию поиска, и отбрасывает все остальные. В качестве условий отбора могут быть использованы следующие предикаты (предикаты - это используемые в SQL эквиваленты логических высказываний. Предикат - это выражение, которое утверждает факт, относящийся к значениям из этого выражения): − сравнения "=, <>, <, >, >=, <= - для сравнения результатов вычисления двух выражений; более сложные выражения строятся с помощью логических операторов AND, OR, NOT; − BETWEEN (между) A AND B (NOT BETWEEN A AND B) - предикат истинен, когда вычисленное значение выражения попадает (не попадает) в заданный диапазон; − IN(в) (NOT IN (не в) ) - предикат истинен тогда, когда сравниваемое значение входит (не входит) в множество заданных значений; − LIKE (похожий) (NOT LIKE (не похожий) ) предикат истинен тогда, когда сравниваемое значение соответствует шаблону, и ложен в противном случае (и наоборот); − IS NULL - предикат, применяющийся для выявления равенства значения некоторого атрибута неопределенному значению: 3. GROUP BY (группировать по) группирует строки в соответствии со значениями в столбцах группирования. 4. HAVING (при условии) задаются предикаты-условия, накладываемые на каждую группу. 5. ORDER BY (упорядочивать по) задается список полей упорядочения результата, ASC -по возрастанию, DESC - по убыванию. Порядок выполнения этих предложений: FROM, WHERE, GROUP BY, HAVING, SELECT и ORDER BY.
  • 7. Предложения работают по принципу конвейера, когда каждое из них получает результат выполнения предыдущего предложения, обрабатывает этот результат и передает то, что получилось, следующему предложению. SELECT(HEVING(GROUR BY(WHERE(FROM…)))) Чтение заданных столбцов и строк из одиночной таблицы Например, дана таблица: СОТРУДНИКИ (ТабN, ФИО, Стаж_работы, Дата_рождения, Адрес) Запрос 1: Вывести все сведения о всех сотрудниках SELECT * FROM Сотрудники; Результатом выполнения запроса будет вся таблица сотрудники. Запрос 2: Вывести адреса сотрудников SELECT Фамилия, Адрес FROM Сотрудники; В сформированных выше запросах требовалось вывести все строки таблицы. Если при выборке требуется ограничить количество выводимых строк в соответствии с каким-то условием, то этого можно достичь, используя в запросе предложение WHERE. В предложение WHERE можно включать одно или несколько условий отбора. Запрос 3: Вывести сведения о конкретном сотруднике SELECT * FROM Сотрудники WHERE Фамилия = 'Иванов'; Запрос 4: Вывести сведения о сотрудниках, ТабN которых лежит в диапазоне от 12 до 44. SELECT * FROM Сотрудники WHERE ТабN BETWEEN 12 and 44; Сортировка результатов По умолчанию сортировка производится в порядке возрастания. Запрос 5: Cведения о сотрудниках, отсортированные по столбцу ФИО в порядке возрастания. SELECT * FROM Сотрудники ORDER BY ФИО; Сортировать можно и более чем по одному столбцу. Запрос 6: Сортировка столбец ФИО - по возрастанию, стаж - по убыванию. SELECT ФИО, Стаж FROM Сотрудники ORDER BY Фамилия ASC, Стаж DESC; Итоговые функции SQL Итоговые функции: SUM, AVG, MIN, MAX, COUNT - применяются к наборам строк из таблицы. В набор могут входить все строки или только те из них, которые определяются предложением WHERE. COUNT(счет) - подсчитывает кол-во значений в указанном столбце В качестве операнда итоговых функций может использоваться наименование только одного столбца, и все они возвращают единственное значение.
  • 8. С ф-ями SUM и AVG могут использоваться только числовые поля. С ф-ями COUNT, MIN, MAX - как числовые так и символьные поля. Стандарт языка не позволяет применять итоговые функции в предложении WHERE, потому что предикаты оцениваются в терминах одиночной строки, а итоговые функции - в терминах групп строк. Запрос 7: Подсчитать и вывести общее число сотрудников SELECT COUNT(*) AS Всего_сотрудников FROM Сотрудники; Аргумент представлен символом "*", определяющим подсчет всех строк. Результат запроса: Всего_сотрудников 55 Запрос 8: Вывести средний стаж работы сотрудников SELECT AVG(Стаж_работы) AS Средний_стаж FROM Сотрудники; Результат запроса: Средний_стаж 9 Итоговые функции и группировка В приведенных выше запросах агрегатные функции применялись ко всей таблице и выдавали сводные данные на основании обработки значений всего выделенного столбца. Однако часто встречаются ситуации, когда в отчет необходимо поместить и промежуточные результаты, опирающиеся на вычисления обобщенных групповых значений. Для применения итоговых функций в подобных случаях предполагается предварительная операция группировки. Суть группировки - все множество строк таблицы разбивается на группы, в каждой из которых собираются строки, имеющие одинаковые значения атрибутов. Обработка такой информации реализуется применением итоговых функций к каждой отдельной группе. Если в запросе должна использоваться группировка, то каждый элемент списка в предложении SELECT должен иметь единственное значение для всей группы. Например, дана таблица СЕССИЯ. Код ФИО Дисциплина Оценка 1 И И 4 2 П И 3 3 С И 5 4 И Ф 4 5 С Ф 5 6 И М 3 7 К М 3 Запрос 9: Для каждого студента определить количество сданных им экзаменов SELECT ФИО, COUNT(Оценка) AS Сдано_экз FROM Сессия GROUP BY ФИО; Результат запроса: ФИО Сдано_экз И 3 К 1 П 1 С 2
  • 9. Совместно с фразой GROUP BY может быть использована фраза HAVING, предназначенная для задания ограничений отбора групп, которые будут помещены в результирующую таблицу запроса. Стандарт языка требует, чтобы имена столбцов во фразе HAVING обязательно присутствовали в списке фразы GROUP BY или применялись в агрегатных функциях. Агрегатные функции могут применяться не только в выражении вывода результатов строки SELECT, но и в выражении условия обработки сформированных групп HAVING. В этом случае каждая агрегатная функция вычисляется для каждой выделенной группы. В результат можно включить значение поля группировки и несколько агрегатных функций, а в условиях группировки можно использовать несколько полей. При этом группы образуются по набору заданных полей группировки. Операции с агрегатными функциями могут быть применены к объединению множества исходных таблиц. Запрос 10: Вывести ФИО студентов, сдавших все три экзамена. SELECT ФИО, COUNT(Оценка) AS сдано_экз FROM Сессия GROUP BY ФИО HAVING COUNT(ФИО) = 3; Результат запроса: ФИО Сдано_экз И 3 Вложенные запросы (подзапросы) … создаются, когда в тело одного оператора SELECT (внешнего), внедряют другой оператор SELECT (внутренний). Обычно внутренний запрос генерирует значение, которое проверяется в предикате внешнего запроса (в предложении WHERE или HAVING), определяющего верно оно или нет. Подзапросы могут быть нескольких видов: − Скалярный подзапрос, возвращающий единственное значение − Строковый подзапрос, возвращающий несколько значений в виде одной строки − Табличный подзапрос, возвращающий данные в виде таблицы. Подзапрос может указываться непосредственно после операторов сравнения (<,>,=, <=, >=). Правила организации вложенных запросов: − подзапрос, участвующий в операции, может быть только правым операндом. − текст запроса должен быть заключен в скобки − по умолчанию имена столбцов в подзапросе относятся к таблице, указанной во фразе FROM − в подзапросе не должна использоваться фраза ORDER BY Запрос 11. Вывести фамилии студентов и дисциплины по которым у них оценки выше средней за сессию. (3,7) SELECT ФИО, Дисциплина, Оценка FROM Сессия WHERE Оценка > (SELECT AVG(Оценка) FROM Сессия); Стандарт языка не позволяет применять агрегатные функции в предложении WHERE, поэтому оценки необходимо сравнивать с результатом подзапроса, вычисляющего среднее значение начислений всех строк таблицы. Данный скалярный подзапрос вернет значение, равное 3,85, и уже с этим значением будут сравниваться все начисления и отбираться для помещения в таблицу вывода. Результат запроса ФИО Дисциплина Оценка И И 4 С И 5 И Ф 4 С Ф 5
  • 10. Многотабличные запросы Все запросы, рассмотренные нами до сих пор, считывали данные из одиночной таблицы. Во многих случаях для получения ответа на запрос необходимо объединить информацию из нескольких исходных таблиц. Чтение данных из нескольких таблиц осуществляется с помощью операторов реляционной алгебры JOIN (соединение), UNION (объединение), INTERSECT (пересечение) и EXCEPT (разность), а также возможно с помощью вложенных запросов (в том случае, если результаты, т.е. столбцы в предложении SELECT относятся к одной и той же таблице). 1. Использование операции соединения (JOIN). Использование операции соединения позволяет получать данные из таблиц, имеющих разную структуру. Самый простой оператор соединения - это оператор SELECT, выполняемый с двумя таблицами не имеющий никаких ограничителей из предложения WHERE. Результат соединения - это декартово произведение исходных таблиц (каждая строка из первой таблицы объединяется с каждой строкой из второй). Запрос 12. Получить экзаменационную ведомость СТУДЕНТЫ ЭКЗАМЕНЫ Nзачкн ФИО В-02 И В-03 П В-04 С SELECT * FROM Студенты, Экзамены; Результат запроса (соответствует декартову произведению таблиц СТУДЕНТЫ и ЭКЗАМЕНЫ.) Nзачкн ФИО КодДис Дисциплина Дата Оценка В-02 И 01 Ф 01.05.05 В-02 И 02 М 15.05.05 В-03 П 01 Ф 01.05.05 В-03 П 02 М 15.05.05 В-04 С 01 Ф 01.05.05 В-04 С 02 М 15.05.05 Часто таблица, получаемая простым соединением (декартово произведение) имеет значительный излишек данных и не имеет особого смысла. Получить более содержательный результат можно, отфильтровав из объединения ненужные строки с помощью ограничений предложения WHERE. Запрос 13. В ведомость СЕССИЯ добавить сведения о группе студентов. СЕССИЯ Код ФИО Дисциплина Оценка 1 И И 4 2 П И 4 4 И Ф 4 5 С Ф 5 6 И М 3 SELECT Сессия.ФИО, Дисциплина, Оценка, Группа ГРУППА ФИО Группа И В-443 П В-443 С В-442 КодДис Дисциплина Дата Оценка 01 Ф 01.05.05 02 М 15.05.05
  • 11. FROM Сессия,Группа WHERE Сессия.ФИО=Группа.ФИО; Результат запроса: ФИО Дисциплина Оценка Группа И И 4 В-443 П И 4 В-443 И Ф 4 В-443 С Ф 5 В-442 И М 3 В-443 Для облегчения ввода и чтения кода SQL используют псевдонимы таблиц. Псевдоним - это другое, более короткое имя таблицы. Предыдущий запрос с использованием псевдонимов: SELECT С.ФИО, Дисциплина, Оценка, Группа FROM Сессия AS С, Группа AS Г WHERE С.ФИО=Г.ФИО; Ключевое слово AS можно опустить: SELECT С.ФИО, Дисциплина, Оценка, Группа FROM Сессия С, Группа Г WHERE С.ФИО=Г.ФИО; В стандарте SQL2 введен альтернативный синтаксис соединения. Здесь вместо WHERE используются ключевые слова JOIN и ON. SELECT С.ФИО, Дисциплина, Оценка, Группа FROM Сессия С JION Группа Г ON С.ФИО=Г.ФИО; Таблицу, получившуюся в результате соединения можно обрабатывать, как и любую другую. Запрос 14. Вывести группы, в которых на экзаменах получены четверки. SELECT Группа FROM Сессия С, Группа Г WHERE С.ФИО=Г.ФИО AND Оценка=4 GROUP BY Группа; Группа В-443 2. Использование операторов UNION, INTERSECT, EXCEPT. Перечисленные операторы дают возможность получать информацию из таблиц, имеющих одинаковую структуру. Одинаковая структура означает: 1. Во всех таблицах имеется одинаковое количество столбцов. 2. У всех соответствующих столбцов должны быть идентичный тип данных и одинаковая длина. Схема построения всех указанных операторов одинакова: (SELECT - запрос) Оператор
  • 12. (SELECT - запрос) Оператор (SELECT - запрос) Запрос 15. Какие типы деталей входят в состав обоих изделий? ИЗДЕЛИЕ1 ИЗДЕЛИЕ2 Код_д Назв. Вес 1 A 1 3 B 2 4 C 3 (SELECT * FROM Изделие1) UNION (SELECT * FROM Изделие2); Результат запроса: Код_д Назв. Вес 1 A 1 2 D 2 3 В 2 4 С 3 Операция UNION убирает любые повторяющиеся строки. В большинстве случает это желаемый результат. Но иногда повторяющиеся строки требуется сохранять. В таких случаях используется ключевое слово ALL (UNION ALL). (SELECT * FROM Изделие1) UNION ALL (SELECT * FROM Изделие2); Результат запроса: Код_д Назв. Вес 1 A 1 2 D 2 3 В 2 4 С 3 3 B 2 4 C 3 Аналогично используются операторы INTERSECT, EXCEPT. 3. Использование вложенных запросов. Код_д Назв. Вес 2 D 2 3 В 2 4 С 3