- •3. Детализация реляционной модели данных
- •3.1. Определение и элементы реляционной модели
- •3.2 Связывание таблиц
- •3.2.1 Назначение и основные виды связывания таблиц
- •3.2.2 Межтабличная связь вида 1:1
- •3.2.3 Межтабличные связи вида 1:м и вида м:1
- •Межтабличная связь вида м:м
- •3.3 Контроль целостности связей
- •3.4 Теоретические языки запросов
- •3.5 Основы реляционной алгебры
- •3.5.1 Общая характеристика реляционной алгебры
- •3.5.2 Базовые теоретико-множественные операции реляционной алгебры Кодда
- •3.5.3 Специальные реляционные операции реляционной алгебры Кодда
- •3.5.4 Дополнительные операции реляционной алгебры
- •3.5.5Основные правила записи выраженийреляционной алгебры
- •3.6. Основы реляционного исчисления
- •3.6.1 Сущность реляционного исчисления и его соотношение с реляционной алгеброй
- •3.6.2 Реляционное исчисление, основанное на кортежах
- •3.6.3 Реляционное исчисление, основанное на доменах
- •3.7 Структурированный язык запросовSql
- •3.7.1 Общая характеристика и основные операторы языкаSql
- •3.7.2 Оператор создания таблицы
- •3.7.3 Оператор изменения структуры таблиц
- •3.7.4 Оператор удаления таблицы
- •3.7.5 Оператор создания индекса
- •3.7.6 Оператор удаления индекса
- •3.7.7Оператор создания представления
- •3.7.8 Оператор удаления представления
- •3.7.9 Оператор выборки записей
- •3.7.10 Оператор изменения записей
- •3.7.11 Оператор вставки новых записей
- •3.7.12 Оператор удаления записей
- •3.7.13 Некоторые важные функции sql
- •3.7.14 Триггеры, ограничения, правила и хранимые процедуры
- •3.7.14.1 Определения
- •3.7.14.2 Создание триггеров
- •3.7.14.3 Создание хранимых процедур
- •3.7.14.4 Создание правил и ограничений
3.7.10 Оператор изменения записей
Оператор изменения записей имеет формат вида:
UPDATE <имя таблицы>
SET <имя столбца> = {<выражение>, NULL }
[,SET <имя столбца> = {<выражение> , NULL}... ]
[ WHERE <условие>]
Выполнение оператора UPDATE состоит в изменении значений в определенных операндом SET столбцах таблицы для тех записей, которые удовлетворяют условию, заданному операндом WHERE.
Новые значения полей в записях могут быть пустыми (NULL), либо вычисляться в соответствии с арифметическим выражением. Правила записи арифметических и логических выражений аналогичны соответствующим правилам оператора SELECT.
Пример 8. Изменение записей.
Пусть необходимо увеличить на 500 единиц зарплату тем служащим, которые получают не более 6000 (по таблице ЕМР). Запрос, сформулированный с помощью оператора SELECT, может выглядеть так:
UPDATE emp
SET sal = 6500
WHERE sal <= 6000
3.7.11 Оператор вставки новых записей
Оператор вставки новых записей имеет форматы двух видов:
INSERT INTO <имя таблицы>
[(<список столбцов>)]
VALUES (<список значений>)
и
INSERT INTO <имя таблицы>
[(<список столбцов>)]
<предложение SELECT>
В первом формате оператор INSERT предназначен для ввода новых записей с заданными значениями в столбцах. Порядок перечисления имен столбцов должен соответствовать порядку значений, перечисленных в списке операнда VALUES. Если <список столбцов> опущен, то в <списке значений> должны быть перечислены все значения в порядке столбцов структуры таблицы.
Во втором формате оператор INSE RT предназначен для ввода в заданную таблицу новых строк, отобранных из другой таблицы с помощью предложения SELECT.
Пример 9. Ввод записей.
Ввести в таблицу ЕМР запись о новом сотруднике. Для этого можно записать такой оператор вида:
INSERT INTO emp
VALUES («Ivanov», 7500, «Lee», «cosmetics»)
3.7.12 Оператор удаления записей
Оператор удаления записей имеет формат вида:
DELETE FROM <имя таблицы>
[WHERE <условие>]
Результатом выполнения оператора DELETE является удаление из указанной таблицы строк, которые удовлетворяют условию, определенному операндом WHERE. Если необязательный операнд WHERE опущен, т.е. условие отбора удаляемых записей отсутствует, удалению подлежат все записи таблицы.
Пример 10. Удаление записей.
В связи с ликвидацией отдела игрушек (toy), требуется удалить из таблицы ЕМР всех сотрудников этого отдела. Оператор DELETE для этой задачи будет выглядеть так:
DELETE FROM emp WHERE dept = «toy»
В заключение отметим, что, по словам Дейта, язык SQL является гибридом реляционной алгебры и реляционного исчисления. В нем имеются элементы алгебры (оператор объединения UNION) и исчисления (квантор существования EXISTS). Кроме того, язык SQL обладает реляционной полнотой.
3.7.13 Некоторые важные функции sql
Еще раз напомним, что хотя язык SQLи является стандартным языком для работы с широким кругом БД, он все же несколько отличается при переходе от одной системы к другой. Приводимые ниже примеры в основном рассчитаны наMSSQLServer. Язык SQL системы SQL Server содержит некоторое расширение, которое известно какT(ransact)-SQL.
Рассмотрим некоторые важные функции T-SQL, достаточно часто используемые в запросах (табл. 3.4).
Таблица 3.4
ABS(…) возвращает модуль величины, указываемой в скобках |
CHAR(…) преобразует целое число в строку символов |
GetDate() возвращает текущую системную дату |
IsdATE(выражение) возвращает истину, если выражение соответствует корректной дате |
isNULL(выражение, константа) заменяет значение NULL заданной константой |
isNumeric(выражение) возвращает истину, если выражение является числом |
Len(символьнаястрока) возвращает длину строки |
Lower(строка) преобразует символы строки в нижний регистр |
LTrim(строка) удаляет ведущие пробелы |
STR(число) преоразует число в строку |
SubString(строка, начало, длина) выделяет подстроку из строки, начиная с заданного символа начала и включая указанное число символов |
Upper(выражение) преобразует символы выражения в верхний регистр |
Year(дата) возвращает год из даты в виде целого числа из четырех цифр |
Month(дата) возвращает месяц в виде целого числа |
Следующую группу функций рассмотрим подробнее.
IF EXISTS… проверяет наличие хотя бы одной выбранной записи по запросу.
IF EXISTS (Select * From Склад Where Цена>8000)
Select ”Имеются товары с высокой ценой” From Склад
Else
Select“Нет дорогих товаров”
Можно выбрать указанное число записей из набора:
SELECT TOP2 *fromСклад
Эта команда выбирает ровно две первых записи из таблицы Склад.
Можно произвести отбор первых 10% записей так
SELECT TOP10PERCENT*fromСклад
Для выборки неповторяющихся записей следует указать:
SELECT * from Склад DISTINCT
(dictinct – различные).
Для выборки строк по шаблону применяется функция LIKE.
Пример
SelectНазваниеFromСкладWhereНазваниеLike“б%”
Для проверки попадания значения в диапазон используется конструкция Select сIn:
Select Название from Склад Where Цена In (Select max(Цена) from Склад)
Этот запрос выдает названия всех товаров, цена на которые попадает в запрос
Select max(Цена) from Склад,
т.е. является максимальной ценой.
Можно указать варианты значений явным способом:
Select Название from Склад Where Цена In (1000,1800,2000,3000)
Можно задать диапазон значений:
Select Название from Склад Where Цена Between 1000 AND 5000.
Здесь использовано ключевое слово Between(- между).
При проверке алгебраических соотношений между числовыми величинами используют следующие операции:
= равно
!= , <> не равно
> больше
>= больше или равно
!> не больше
< меньше
<= меньше или равно
!< не меньше