Слайд 1Лекция №7
“SQL
Structured Query Language)”
Слайд 2SQL является инструментом, предназначенным для обработки и чтения данных, содержащихся
в компьютерной базе данных. SQLэто сокращенное название структурированного языка запросов.
Слайд 3В SQL используется приблизительно тридцать операторов (мы будем рассматривать намного
меньше). Каждый оператор «просит » СУБД выполнить определенное действие, например
прочитать данные, создать таблицу или добавить в таблицу новые данные. Все операторы SQL имеют одинаковую структуру.
Слайд 4Каждый оператор SQL начинается с глагола , т.е. ключевого слова,
описывающего действие, выполняемое оператором. Типичными глаголами являются SELECT (выбрать), CREATE
(создать), INSERT (добавить), DELETE (удалить). После глагола идет одно или несколько предложений. Предложение описывает данные, с которыми работает оператор, или содержит уточняющую информацию о действии, выполняемом оператором. Каждое предложение также начинается с ключевого слова, такого как WHERE (где), FROM (откуда), HAVING (имеющий). Конкретная структура и содержимое предложения могут изменяться.
Слайд 6Список основных операторов SQL
Слайд 7Список основных ключевых слов SQL
Слайд 8Оператор SELECT
Язык SQL предназначен в первую очередь для выполнения запросов.
Оператор SELECT, который используется для построения SQLзапросов, является наиболее мощным
из всех операторов SQL. Несмотря на богатство возможностей этого оператора, его изучение можно начать с создания простых запросов, а затем постепенно увеличивать их сложность.
Оператор SELECT читает из базы данных и возвращает их в виде таблицы результатов запроса.
Слайд 9Запрос к одной таблице.
Вывести все поля из таблицы «Документ».
SELECT *
FROM ДОКУМЕНТ
* означает все поля, вместо нее можно указать какие-либо
поля
Слайд 10Вывести поля КОД, ДАТА, НОМЕР из таблицы «Документ».
SELECT КОД,ДАТА,НОМЕР FROM
ДОКУМЕНТ
Слайд 11Cинтаксическая диаграмма оператора SELECT
Слайд 12Он состоит из шести предложений. Предложения SELECT и FROM являются
обязательными. Четыре остальных включаются в оператор только при необходимости.
Слайд 13В предложении SELECT указывается список столбцов, которые должны быть возвращены
оператором SELECT. Возвращаемые столбцы могут содержать значения, считываемые из столбцов
таблиц базы данных, или значения, вычисляемые во время выполнения запроса.
Столбцы в таблице результатов будут расположены в том же порядке, что и элементы списка возвращаемых столбцов.
Слайд 14Повторяющиеся строки (ключевое слово DISTINCT).
Если в списке возвращаемых столбцов запроса
на чтение указать первичный ключ таблицы, то каждая строка результатов
запроса будет уникальной (из-за того, что значения первичного ключа во всех строках разные). Если первичный ключ не указан, результаты запроса могут содержать повторяющиеся строки.
SELECT DISTINCT ДАТА FROM ДОКУМЕНТ
Слайд 15Предложение FROM
Предложение FROM состоит из ключевого слова FROM, за которым
следует список спецификаторов таблиц, разделенных запятыми. Каждый спецификатор таблицы идентифицирует
таблицу, содержащую данные, которые считывает запрос. Такие таблицы называются исходными таблицами запроса (и оператора SELECT), поскольку все данные, содержащиеся в таблице результатов запроса, берутся из них.
Слайд 16Предложение WHERE
Обычно требуется выбрать из таблицы несколько строк и включить
в результаты запроса только их. Чтобы указать, какие строки требуется
отобрать, следует использовать предложение WHERE. Для отбора строк, включаемых в результаты запроса, используется условие поиска.
Слайд 17Нам нужно достать все IDN_КЛИЕНТА за 7 мая:
SELECT IDN_КЛИЕНТА
FROM ДОКУМЕНТ
WHERE
ДАТА=’7.05.2000’
Слайд 18Нам нужно достать все документы, полученные за март месяц
SELECT *
FROM
ДОКУМЕНТ
WHERE ДАТА > ’1.03.2000’ AND ДАТА
Слайд 19Нам нужно достать все IDN_КЛИЕНТА, у которых IDN_СКЛАДА=1
SELECT IDN_КЛИЕНТА
FROM
ДОКУМЕНТ
WHERE IDN_СКЛАДА=1(ЭУН,ГСХ)
Слайд 22Предложение GROUP BY (ГРУППИРОВКА) позволяет создать итоговый запрос.
Итоговый запрос,
вначале группирует строки базы данных по определенному признаку, а затем
включает в результаты запроса одну итоговую строку для каждой группы.
Слайд 23Select Tovary, avg(kolvo) as summa
From Prihod
Group by Tovary
Слайд 25Предложение HAVING показывает, что в результаты запроса следует включать только
некоторые из групп, созданных с помощью предложения GROUP BY. В
этом предложении, как и в предложении WHERE, для отбора включаемых групп используется условие поиска.
Слайд 27Предложение ORDER BY сортирует результаты запроса на основании данных, содержащихся
в одном или нескольких столбцах. Если это предложение не указано,
результаты запроса не будут отсортированы.
Слайд 29Условия поиска
В SQL используется множество условий поиска, позволяющих эффективно
и естественным образом создавать различные типы запросов. Ниже рассматриваются пять
основных условий поиска:
Слайд 30Сравнение (=,,=)
Наиболее распространенным условием поиска в SQL является сравнение. При
сравнении SQL вычисляет и сравнивает значения двух выражений для каждой
строки данных.
В SQL имеется шесть различных способов сравнения двух выражений:
Слайд 31Когда SQL сравнивает значения двух выражений, могут получиться три результата:
если
сравнение истинно, то результат проверки имеет значение TRUE;
если сравнение ложно,
то результат проверки имеет значение FALSE;
если хотя бы одно из двух выражений имеет значение NULL, то результатом проверки будет значение NULL.
Слайд 32Проверка на принадлежность диапазону значений (BETWEEN)
Проверяется, находится ли значение
данных между двумя определенными значениями. В условие поиска входят три
выражения. Первое выражение определяет проверяемое значение; второе и третье выражения определяют верхний и нижний пределы проверяемого диапазона. Типы данных трех выражений должны быть сравнимыми.
Слайд 33Синтаксическая диаграмма проверки на принадлежность диапазону (BETWEEN).
Слайд 34Найти все товары за март 2003 года.
Слайд 35Вывести все товары для первых пяти номеров.
Слайд 36Составные условия поиска (AND, OR и NOT)
Простые условия поиска, описанные
выше, после применения к некоторой строке возвращают значения TRUE, FALSE
или NULL. С помощью правил логики эти простые условия можно объединять в более сложные.
Слайд 38Предположим, что нам нужно отразить все товары за определенные промежутки
времени
Слайд 42(ГСХ) Проверка на соответствие шаблону (LIKE)
Для чтения строк, в которых
содержимое некоторого текстового столбца совпадает с заданным текстом, можно использовать
простое сравнение. Например, следующий запрос считывает строку из таблицы КЛИЕНТ
SELECT НАЗВАНИЕ
FROM КЛИЕНТ
WHERE НАЗВАНИЕ(ИМЯ) =’Баранов Ко’
Слайд 43Можно выяснить, подходит ли символьная строка под определенный шаблон, или
нет.
Для этого используются две операции сравнения по шаблону -
LIKE и MATCHES.
Слайд 44Синтаксическая диаграмма проверки на соответствие шаблону (LIKE).
Слайд 45LIKE имеет более простой шаблон. В нем используются только два
спецсимвола: (%) замещает произвольное количество символов, (_) замещает ровно один
символ. Все остальные символы в шаблоне обозначают сами себя. Если мы хотим включить в шаблон % или _ отменив их специальный смысл, то перед ними надо поставить ESC символ (по умолчанию это (\)).
Слайд 46Подстановочные знаки
Подстановочный знак % совпадает с любой последовательностью из нуля
или более символов. Ниже приведена измененная версия предыдущего запроса, в
которой используется шаблон, содержащий знак процента
Слайд 49Подстановочный знак «_» (символ подчеркивания) совпадает с любым отдельным символом.
Слайд 51Допустим нам нужно выбрать из таблицы tab8 все строки, в
кото- рых символьный столбец string1 содержит символ "+" а предпос-
ледняя буква в нем - "Ы". Оператор выборки будет выглядеть так:
SELECT * FROM tab8
WHERE string1 LIKE ‘%+%Ы_’
Слайд 52Если мы хотим включить в шаблон % или _ отменив
их специальный смысл, то перед ними надо поставить ESC символ
(по умолчанию это (\)).
Слайд 53MATCHES
* заменяет любое количество символов ? заменяет один любой символ
[...] заменяет один символ из перечисленных в скобках возможно указание
от и до (-), и не (^)
[abH] - любой из символов a, b, H
[^d-z] - любой символ, исключая d,e,f,g, ... ,y,z
\ отменяет спецсмысл спецсимволов *,?,[,]
Слайд 54УСЛОВИЯ С ПОДЗАПРОСОМ
SELECT Tovar FROM tovary WHERE Zena= (SELECT
MAX(Zena) FROM Tovary
Слайд 55Синтаксическая диаграмма проверки на членство в множестве (IN)
Слайд 56Вывести все документы за восьмое число января, февраля, и марта.
SELECT *
FROM ДОКУМЕНТ
WHERE ДАТА IN (‘8.01.2000’, ‘8.02.2000’, ‘8.03.2000’,)
Слайд 57Вывести все перемещения, у которых цена равна 2000, 3000, 4000.
SELECT
*
FROM ПЕРЕМЕЩЕНИЕ
WHERE ЦЕНА IN (‘2000’,’3000’,’4000’)
С помощью формы NOT IN можно
убедиться в том , что значение данных не является членом заданного множества. Поверяемое выражение в проверке IN может быть любым допустимым выражением, однако обычно оно представляет собой короткое имя столбца.
Слайд 58Проверка на равенство значению NULL (IS NULL)
Значения NULL обеспечивают
возможность применения трехзначной логики в условиях поиска. Для любой заданной
строки результат применения условия может быть TRUE, FALSE или NULL (в случае, когда в одном из столбцов содержится значение NULL). Иногда бывает необходимо явно проверять значения столбцов на равенство NULL и непосредственно обрабатывать их. Для этого в SQL имеется специальная проверка на равенство значению NULL (IS NULL), синтаксическая диаграмма которой показана ниже
Слайд 59Синтаксическая диаграмма проверки на равенство значению NULL (IS NULL)
Вывести всех
клиентов, у которых город не определен.
SELECT *
FROM КЛИЕНТ
WHERE IDN_ГОРОДА IS
NULL
Слайд 60Сортировка результатов запроса (предложение ORDER BY)
Слайд 61Для сортировки в обратном порядке используется ключевое слово DESC.
Слайд 62Агрегатные функции
Для подведения итогов по информации, содержащейся в базе
данных, в SQL предусмотрены агрегатные (статистические) функции. Агрегатная функция принимает
в качестве аргумента какой-либо столбец данных целиком, а возвращает одно значение, которое определенным образом подытоживает этот столбец. Таким образом, все запросы, использующие агрегатные функции могут иметь в списке возвращаемых столбцов только результаты применения агрегатных функций к полям или к их комбинациям и, кроме этого, возвращать только одну строку (за исключением запросов с использованием предложения GROUP BY, которые рассмотрены ниже).
Стандартными агрегатными функциями являются SUM, MIN, MAX, AVG, COUNT
Слайд 63Вычисление суммы столбца (SUM)
Агрегатная функция SUM () вычисляет сумму
всех значений, содержащихся в столбце. При этом столбец должен иметь
числовой тип данных (содержать целые числа, десятичные числа, числа с плавающей запятой или денежные величины). Результат, возвращаемый этой функцией, имеет тот же тип данных, что и столбец.
Слайд 64Вычислить оборот за каждый день в течение месяца.
SELECT ДАТА_ДОК,
SUM
(КОЛ-ВО*ЦЕНА)
FROM ПЕРЕМЕЩЕНИЕ
WHERE ДАТА_ДОК BETWEEN ‘1.01.2000’ AND ’31.01.2000’
Слайд 65Вычисление экстремумов (MIN и MAX)
Агрегатные функции MIN () и MAX
() позволяют найти соответственно наименьшее и наибольшее значения в столбце.
При этом столбец может содержать числовые или строковые значения либо значения даты/времени. Результат возвращаемый этими функциями, имеет точно такой же тип данных, что и сам столбец.
Слайд 66Вывести максимальную цену товара.
SELECT MAX (ЦЕНА)
FROM ПЕРЕМЕЩЕНИЕ
Когда был сделан самый
первый из всех содержащихся в базе данных документ?
SELECT MIN (ДАТА)
FROM
ДОКУМЕНТ
Слайд 67В случае применения агрегатных функций MIN () и MAX ()
к числовым данным числа сравниваются по арифметическим правилам (большие отрицательные
числа меньше, чем маленькие отрицательные числа, которые меньше нуля; нуль меньше любого положительного числа). Сравнение дат происходит последовательно (более ранние значения дат считаются меньшими, чем более поздние). Сравнение интервалов времени выполняется на основании их продолжительности (более короткие интервалы времени меньше, чем более длинные).
Слайд 68Вычисление среднего значения (AVG)
Агрегатная функция AVG () вычисляет среднее всех
значений, содержащихся в столбце. Данные, содержащиеся в столбце, должны иметь
числовой тип. Поскольку функция AVG () вначале суммирует все значения, содержащиеся в столбце, а затем делит сумму на число этих значений, возвращаемый ею результат может иметь не такой тип данных, как столбец. Например, если применить функцию AVG () к столбцу целых чисел, результат будет либо десятичным числом, либо числом с плавающей запятойв зависимости от используемой СУБД.
Слайд 69Вычислить среднее значение цены и количества в таблице «Остатки».
SELECT AVG(ЦЕНА),AVG(КОЛИЧЕСТВО)
FROM
ОСТАТКИ
Слайд 70Вычисление количества значений в столбце (COUNT)
Агрегатная функция COUNT () подсчитывает
количество значений в столбце(кол-во строк). При этом тип данных может
быть любым. Функция COUNT () всегда возвращает целое число независимо от типа данных столбца.
Вывести количество фирм, являющихся ЗАО.
SELECT COUNT(*)
FROM КЛИЕНТ
WHERE НАЗВАНИЕ LIKE ‘%ЗАО%’
Слайд 71Запросы с группировкой (предложение GROUP BY)
Итоговые запросы напоминают итоговую информацию,
находящуюся обычно в конце отчета. Эти запросы «сжимают» подробные данные,
содержащиеся в отчете, в одну строку итоговых результатов. Но, как известно, в отчетах иногда используются также промежуточные итоги. И точно так же бывает необходимо получать промежуточные итоги результатов запроса. Эту возможность предоставляет предложение GROUP BY
Слайд 72Вычислить оборот за каждый день в течение месяца.
SELECT ДАТА_ДОК, SUM
(КОЛ-ВО*ЦЕНА)
FROM ПЕРЕМЕЩЕНИЕ
WHERE ДАТА_ДОК BETWEEN ‘1.01.2000’ AND ’31.01.2000’
GROUP BY ДАТА_ДОК
ORDER
BY ДАТА_ДОК
Слайд 73Какова средняя цена для каждой материальной ценности
SELECT IDN_МАТ.ЦЕН, AVG(ЦЕНА)
FROM
ПЕРЕМЕЩЕНИЕ
GROUP BY IDN_МАТ.ЦЕН
Как это видно из приведенных примеров, в предложении
GROUP BY обязательно перечисляются те поля, которые в списке возвращаемых столбцов указываются без агрегатных функций, то есть по этим полям производится группировка.
Слайд 74Условия поиска групп HAVING
Точно также, как предложение WHERE используется для
отбора отдельных строк, участвующих в запросе, предложение HAVING можно применить
для отбора групп строк. Его формат соответствует формату предложения WHERE. Предложение HAVING состоит из ключевого слова HAVING, за которым следует условие поиска. Таким образом, данное предложение определяет условие поиска для групп. Основным отличием предложения HAVING от WHERE, что оно применяется уже непосредственно после самого запроса и в условие поиска включается поле с примененной к нему агрегатной функцией.
Слайд 75Вывести те дни месяца, когда оборот превышал 1000 руб
SELECT
ДАТА_ДОК, SUM (КОЛ-ВО*ЦЕНА)
FROM ПЕРЕМЕЩЕНИЕ
WHERE ДАТА_ДОК BETWEEN ‘1.01.2000’ AND ’31.01.2000’
GROUP BY
ДАТА_ДОК
HAVING SUM (КОЛ-ВО*ЦЕНА)>1000
Слайд 76Вывести все идентификаторы банков, если их количество >1