2
1.1. Основы языка SQL ............................................................................................ 2
1.2. Формы языка SQL ............................................................................................. 2
1.3. Группы операторов SQL ................................................................................... 3
1.4. Инструкции и имена.......................................................................................... 4
1.5. Типы данных ...................................................................................................... 5
1.6. Оператор выборки SELECT ............................................................................. 6
1.6.1. Предложение FROM ................................................................................... 8
1.6.2.. Предложение WHERE ................................................................................ 9
1.6.3. Предложение ORDER BY.......................................................................... 14
1.7. Вычисления и подведение итогов в запросах: ............................................. 15
1.7.1. Построение вычисляемых полей .............................................................. 15
1.7.2. Использование итоговых функций........................................................... 17
1.8. Преобразование вывода из встроенной функции ........................................ 18
1.9. Предложение GROUP BY............................................................................... 18
2.1. Предложение HAVING ................................................................................... 21
2.2. Построение нетривиальных запросов ........................................................... 22
2.2.1. Понятие подзапроса ................................................................................. 22
2.2.2. Использование подзапросов, возвращающих единичное значение ....... 23
2.2.3. Использование подзапросов, возвращающих множество значений .... 25
2.3. Запросы модификации данных ...................................................................... 25
2.3.1. Запрос добавления ..................................................................................... 26
2.3.2. Запрос удаления ......................................................................................... 27
2.3.3. Запрос обновления ..................................................................................... 28
2.4. Понятие «целостность данных»..................................................................... 29
2.5. Операции с индексами .................................................................................... 32
2.6. Объединения таблиц ....................................................................................... 33
2.6.1. Левое объединение таблиц ....................................................................... 35
2.6.2. Правое объединение таблиц..................................................................... 35
2.6.3. Полное объединение таблиц..................................................................... 36
Язык запросов SQL
1.1. Основы языка SQL
ALTER TABLE
модификация таблицы
SELECT UPDATE
извлечение данных из одной или изменение значений полей в
нескольких таблиц таблице
DELETE INSERT
удаление строк из таблицы добавление строк в таблицу
Термины и определения:
Ключевое слово означает оператор, команду, инструкцию
Оператор определения (::=),
[ ] – не обязательный элемент
{ } – обозначают логическую группу
/ – возможны варианты
Встроенные функции
Язык SQL содержит так называемые встроенные функции, которые
реализуют некоторые наиболее распространенные алгоритмы. Основной
особенностью этих функций является возможность их использования при
построении выражений. Встроенные функции, доступные при работе с SQL,
можно условно разделить на следующие группы:
Встроенные функции
функции системы
системные функции
безопасности
функции управления
статистические функции
метаданными
SELECT Fam, Imy FROM Student WHERE Kurs = 3 AND Stip > 0;
Сравнение
SELECT *
FROM Sdelka
WHERE Kolichestvo>20
Более сложные предикаты могут быть построены с помощью логических
операторов AND, OR или NOT, а также скобок, используемых для
определения порядка вычисления выражения. Вычисление выражения в
условиях выполняется по следующим правилам.
Выражение вычисляется слева направо.
Первыми вычисляются подвыражения в скобках.
Операторы NOT выполняются до выполнения операторов AND и OR.
Операторы AND выполняются до выполнения операторов OR.
Для устранения любой возможной неоднозначности рекомендуется
использовать скобки.
Пример 9. Вывести список товаров, цена которых больше или равна 100
и меньше или равна 150.
SELECT Nazvanie,Cena
FROM Tovar
WHERE Cena>=100 And Cena<=150
Диапазон
Принадлежность множеству
Соответствие шаблону
SELECT Klient.Familiya
FP ОМ Klient.
WHERE Klient.Familiya Like "%ро%"
Значение NULL
Пример 33. Рассчитать общую стоимость для каждой сделки. Этот запрос
использует расчет результирующих столбцов на основе арифметических
выражений.
Строковые:
<выражение 1> || <выражение 2> позволяет соединить 2 и более
символьных выражений. Применяется только с символьными полями А.
Показать фамилии и имя студентов 4 – ого курса
SELECT Tovar.Nazvanie,
Sum(Tovar.Cena*Sdelka. Kolichestvo)
AS Stoimosti
FROM Tovar INNER JOIN Sdelka
ON Tovar.KodTovara=Sdelka.KodTovara
GROUP BY Tovar.Nazvanie
SELECT Tovar.Nazvanie,
Sum(Tovar.Cena*Sdelka. Kolichestvo)
AS Stoimosti
FROM Tovar INNER JOIN Sdelka
ON Tovar.KodTovarа=Sdelka.KodTovarа
GRCUP BY Tovar.Nazvanie
HAVING Sum(Tovar.Cena*Sdelka. Kolichestvo)>10000
SELECT Tovar.Nazvanie
FROM Tovar INNER JOIN Sdelka
ON Tovar.KodTovarа=Sdelka.KodTovarа
GROUP BY Tovar.Nazvanie
HAVING Sum(Tovar.Cena*Sdelka. Kolichestvo)>10000
SELECT Klient.Familiya
FROM Klient INNER JOIN Sdelka
ON Klient.KodKlientа=Sdelka.KodKlientа
WHERE Sdelka. Kolichestvo ^
(SELECT Мах(Sdelka. Kolichestvo)
FROM Sdelka)
SELECT Klient.Familiya,
Sdelka.Kolichestvo
FROM Klient
INNER JOIN Sdelka
ON Klient.KodKlientа=Sdelka. Kod Klientа
WHERE Sdelka.Kolichestvo >=0.9*
(SELECT Мах(Sdelka.Kolichestvo)
FROM Sdelka)
Здесь параметр имя таблицы представляет собой либо имя таблицы базы
данных, либо имя обновляемого представления.
Первая форма оператора INSERT с параметром VALUES предназначена для
вставки единственной строки в указанную таблицу. Список столбцов указывает
столбцы, которым будут присвоены значения в добавляемых записях. Список
может быть опущен, тогда подразумеваются все столбцы таблицы (кроме
объявленных как счетчик), причем в определенном порядке, установленном
при создании таблицы. Если в операторе INSERT указывается конкретный
список имен полей, то любые пропущенные в нем столбцы должны быть
объявлены при создании таблицы как допускающие значение NULL, за
исключением тех случаев, когда при описании столбца использовался
параметр DEFAULT. Список значений должен следующим образом
соответствовать списку столбцов:
Количество элементов в обоих списках должно быть одинаковым;
должно существовать прямое соответствие между позицией одного
и того же элемента в обоих списках, поэтому первый элемент списка
значений должен относиться к первому столбцу в списке столбцов, второй –
ко второму столбцу и т.д.
типы данных элементов в списке значений должны быть
совместимы с типами данных соответствующих столбцов таблицы.
INSERT INTO
(Nazvanie, Mesyac, Stoimosti)
SELECT Tovar.Nazvanie, Моnth(Sdelka.Data)
AS Mesyac, Sum(Tovar.Cena*Sdelka.Kolichestvo)
AS Stoimosti
FROM Tovar
INNER JOIN Sdelka
ON Tovar.KodTovarа= Sdelka. Kod Tovarа
GROUP BY Tovar.Nazvanie, Month(Sdelka.Data)
2.3.2. Запрос удаления
<оператор_удаления> : :=DELETE
FROM <имя таблицы>[WHERE <yсловие_отбора>]
Здесь параметр имя таблицы представляет собой либо имя таблицы базы
данных, либо имя обновляемого представления.
Если предложение WHERE присутствует, удаляются записи из таблицы,
удовлетворяющие условию отбора. Если опустить предложение WHERE, из
таблицы будут удалены все записи, однако сама таблица сохранится.
<оператор изменения> : :=
UPDATE имя_таблицы SET имя_столбца=
<выражение>[,...п]
[WHERE <условие отбора>]
Параметр имя таблицы – это либо имя таблицы базы данных, либо
имя обновляемого представления. В предложении SET указываются имена
одного и более столбцов, данные в которых необходимо изменить.
Предложение WHERE является необязательным. Если оно опущено,
значения указанных столбцов будут изменены во всех строках таблицы.
Если предложение WHERE присутствует, то обновлены будут только те
строки, которые удовлетворяют условию отбора. Выражение
представляет собой новое значение соответствующего столбца и должно
быть совместимо с ним по типу данных.
Пример 65. Для товаров первого сорта установить цену в значение 140 и
остаток – в значение 20 единиц.
UPDATE Sdelka
SET Sdelka. Kolichestvo =Sdelka. Kolichestvo * 1.1
WHERE Sdelka. Kolichestvo ^
(SELECT Мах(Sdelka.Kolichestvo)
FROM Sdelka)
Пример 69.
В запросе можно объединить данные двух или более таблиц. Пусть, например,
вы хотите получить список сотрудников всех производственных
подразделений. В таблице Pers мы имеем список сотрудников с указанием в
поле Dep подразделений, в которых они работают. А в таблице Dep мы имеем
список всех подразделений в поле Dep и характеристику каждого
подразделения в поле Proisv («n», если подразделение производственное, и «у»,
если оно относится к управлению). Тогда получить список сотрудников всех
производственных подразделений можно оператором:
SELECT Pers.* FROM Pers, Dep
WHERE (Pers.Dep=Dep.Dep) AND (Dep.Proisv=’n’)
SELECT pl.Fam, p2.Fam, pl.Year) FROM Pers pi, Pers p2 WHERE (pl.Year_b =
p2.Year_b) AND (pl.Fam != p2.Fam) and (pi.Fam < p2.Fam)
Пусть, например, у вас есть таблица сотрудников некоей компании Pers и есть
таблица Chef, в которой занесены данные на членов совета директоров этой
компании. В число членов совета входят и сотрудники компании, и
посторонние лица. Для определенности положим, что в таблице Pers имеются
записи на сотрудников «Иванов» и «Петров», причем Петров является членом
совета, а Иванов – нет. В таблице Chef имеются записи на членов совета
«Петров» и «Сидоров», причем Сидоров – не сотрудник компании.
Тогда оператор
Иванов ………………….
Сидоров ……………..
Иванов ………………….
Сидоров ……………..