- •Язык структурированных запросов
- •История развития sql
- •Стандартизация
- •Описание
- •Операторы
- •Структура sql
- •Преимущества и недостатки
- •Устранение дублирующих строк
- •Операторы Реляционные операторы
- •Булевы операторы
- •Агрегирование данных
- •Упорядочивание значений полей с помощью раздела order by
- •Результат выполнения запроса
- •Соединение таблиц
- •Соединение таблиц при помощи связей. Внутреннее объединение
- •Внешнее объединение
- •Вложение запросов Специальные операторы any и all Оператор any
- •Операторы манипулирования данными
- •Insert into [поступление товара]
- •Inner join ([курс валюты]
- •Current Project (Текущий проект)
- •Объекты ado
Преимущества и недостатки
Преимущества:
независимость от конкретной СУБД;
наличие стандартов;
декларативность;
Недостатки:
несоответствие реляционной модели данных;
cложность;
отступления от стандартов;
cложность работы с иерархическими структурами.
Язык запросов Data Query Lanquaqe (DQL)
Оператор выбора SELECT
Синтаксис оператора SELECT имеет следующий вид:
SELECT[ALL|DISTINCT](<Список полей>|*)
FROM <Список таблиц>
[WHERE <Предикат-условие выборки или соединения>]
[GROUP BY <Список полей результата>]
[HAVING <Предикат-условие для группы>]
[ORDER BY <Список полей, по которым упорядочить вывод>]
Устранение дублирующих строк
Пример 1. Дана таблица Поступление товара, надо выяснить какие товары поступили на склад магазина.
Вариант 1
SELECT [ПОСТУПЛЕНИЕ ТОВАРА].[код товара] FROM [ПОСТУПЛЕНИЕ ТОВАРА];
Тогда на выходе получится
|
Вариант 2
SELECT DISTINCT [ПОСТУПЛЕНИЕ ТОВАРА].[код товара] FROM [ПОСТУПЛЕНИЕ ТОВАРА];
Тогда на выходе получится
|
Выборка по условию. Раздел WHERE
Пример 2. Используя данные из таблицы Поступление товара, найти товары, поступившие на склад магазина 14.03.2007.
SELECT DISTINCT [ПОСТУПЛЕНИЕ ТОВАРА].[код товара], [ПОСТУПЛЕНИЕ ТОВАРА].[дата поступления]
FROM [ПОСТУПЛЕНИЕ ТОВАРА]
WHERE [ПОСТУПЛЕНИЕ ТОВАРА].[дата поступления]=#3/14/2007#;
#мм.дд.гг#
Результат выполнения запроса
Операторы Реляционные операторы
-
Оператор
Назначение
=
Равно
>
Больше,чем
<
Меньше,чем
>=
Больше или равно
<=
Меньше или равно
<>
Неравно
Булевы операторы
AND – берет два булевых выражения (в виде A и B) в качестве аргументов и дает в результате истину, если оба истинны.
OR – берет два булевых выражения (в виде A и B) в качестве аргументов и дает в результате истину, если хотя бы один из них истинен.
NOT– берет единственное булево выражение (в виде not B) в качестве аргумента и изменяет его значение с истинного на ложное или с ложного на истинное.
XOR – берет два булевых выражения (в виде A и B) в качестве аргументов и дает в результате истину, если один из них истинен (исключающее ‘или’, строгая дизъюнкция).
Отличие XOR от OR (таблица истинности)
-
A
B
A or B
A xor B
0
0
0
0
0
1
1
1
1
0
1
1
1
1
1
0
Операция XOR, в отличие от OR, возвращает значение "ложь" (false) и в том случае, когда все связанные ей логические выражения истинны.
Пример 3. Используя данные таблицы Поступление товара, найти товары, поступившие на 14.03.2007, цена которых превышает 300 евро.
SELECT *
FROM [ПОСТУПЛЕНИЕ ТОВАРА]
WHERE [дата поступления]=#3/14/2007# AND цена>300;
Результат выполнения запроса
Оператор IN
Пример 4 .Используя данные таблиц Поставщики и Товары, найти товары, произведенные в Москве и в Спб.
SELECT ТОВАРЫ.[наименование товара], ПОСТАВЩИКИ.Адрес
FROM ПОСТАВЩИКИ, ТОВАРЫ
WHERE ПОСТАВЩИКИ.Адрес In ("Москва","СПб") AND ПОСТАВЩИКИ.[Код поставщика]=ТОВАРЫ.[код поставщика];
Таблица “Поставщики”
Таблица “Товары”
Результат выполнения запроса
Оператор Between
Синтаксическая конструкция этого оператора имеет вид:
<поле> BETWEEN <значение 1> and <значение 2>
Пример 5. Используя данные из таблицы Поступление товара, найти товары, стоимость которых от 300 евро до 500 евро.
SELECT *
FROM [ПОСТУПЛЕНИЕ ТОВАРА]
WHERE [ПОСТУПЛЕНИЕ ТОВАРА].[ЦЕНА] BETWEEN 300 AND 500;
или
SELECT *
FROM [ПОСТУПЛЕНИЕ ТОВАРА]
WHERE ЦЕНА Between 300 And 500;
Результат выполнения запроса
Оператор LIKE
Синтаксис этого оператора:
<поле> LIKE <шаблон>
Правила построения шаблона следующие:
Образец |
В результирующей строке |
? |
Любой одиночный символ |
* |
Любое кол-во символов |
# |
Любая цифра от 0 до 9 |
[набор символов] |
Любой одиночный символ, входящий в набор символов |
[A-Z] |
Любой одиночный символ от ‘A’ до ‘Z’ |
[A-Za-я] |
Любой одиночный символ от ‘A’ до ‘Z’ или из диапазона от ‘а’ до ‘я’ |
P[A-Z]### |
Первый символ ‘Р’, второй из диапазона от ‘A’ до ‘Z ‘и три цифры |
Пример 6. Предположим, мы точно не знаем наименование поставщика. Требуется найти всех поставщиков в таблице Поставщики, наименование которых начинается на ‘ООО’
SELECT *
FROM ПОСТАВЩИКИ
WHERE Поставщик Like "ООО*";
Результат выполнения запроса
Пример 7. на основе таблицы Поступление товара выведите список товаров, поступивших на определенную дату (на одну и ту же дату), цена которых не больше 300 евро.
SELECT DISTINCT [a].[Код товара], [a].[Дата поступления], [a].[Цена]
FROM [ПОСТУПЛЕНИЕ ТОВАРА] as a,[ПОСТУПЛЕНИЕ ТОВАРА] as b
WHERE [a].[Дата поступления]=[b].[Дата поступления] AND [a].[Код товара]<>[b].[Код товара] AND a.Цена<=300;
Результат выполнения запроса
Здесь мы использовали псевдонимы для именования отношения Поступление товара a и b, так как для записи условий поиска нам необходимо работать сразу с двумя экземплярами данного отношения.