Upload
sai17
View
88
Download
0
Embed Size (px)
Citation preview
Структурированный язык SQL
Основные дидактические единицы
Домены, базовые таблицы, информационные схемы, табличные выражения, условные выражения.
Введение
Большинство современных СУБД построено на реляционной модели данных. Для получения информации из отношений (таблиц) базы данных в качестве языка манипулирования данными в теоретическом плане используются три абстрактных языка:
Введение
oЯзык реляционной алгебры1
Язык реляционного исчисления на кортежах
2
oЯзык реляционного исчисления на доменах3
В качестве практического языка работы с данными в середине 70-х годов фирмой IBM разработан язык структурных запросов [SQL], ставший впоследствии стандартом [de-facto] при работе с базами данных.
Наметившееся в настоящее время переход к крупным корпоративным СУБД типа [Oracle], [Informix],[Sybase], [DB2], [Progress] делает актуальным изучение языка SQL как в практическом плане, так и чисто теоретически, поскольку в основе элементов языка SQL лежат положения теории отношений, теории множеств и логики.
SQL
SQLSQL Будем исходить из того, что в нашем распоряжении имеется база данных поставщиков, деталей и поставок, таблицы которой описаны следующим образом:
SQL
SQL
P
Таблица деталей Р:
Create table P (n_det char(6) ,
name char(20),
cvet char(7),
ves smallint,town char(15))ю
SP
Таблица поставок SP:
Create table SP (n_post char(5) ,
n_det char(6),
date_post date,kol smallint)ю
S
Таблица поставщиков S:
Create table S (n_post char(5) not NULL,
name char(20),
reiting smallint,town char(15))
Атенс30АдамсS5
Лондон20КларкS4
Париж30БлейкS3
Париж10ДжонсS2
Лондон20СмитS1
ГоpодРейтингФамилияHомеpпоставщика
Лондон19КрасныйБлюмP6
Париж12ГолубойКулачокP5
Лондон14КрасныйВинтP4
Рим17ГолубойВинтP3
Париж17ЗеленыйБолтP2
Лондон12КрасныйГайкаP1
ГоpодВесЦветНазваниеНомер детали
SQL
40008/22/95P5S4
30006/17/95P4S4
20003/23/95P2S4
20004/04/95P2S3
40006/12/95P2S2
30003/03/95P1S2
10008/13/95P6S1
10007/22/95P5S1
20006/15/95P4S1
40005/12/95P3S1
20004/05/95P2S1
30002/01/95P1S1
КоличествоДата поставки
Номер детали
Номер поставщика
S
P
SP
Простые запросы на языке SQL
• для выборки данных из базы данных;
• для получения новых строк в составе оператора Insert;
• для обновления информации в составе оператора Update.
Оператор
Select
• спецификатор Select;
• спецификатор From;
• спецификатор Where;
• спецификатор Group by;
• спецификатор Having;
• спецификатор Order by;
• спецификатор Into temp.
SQLSQL Обязательными являются только спецификаторы Select и From. Эти два спецификатора составляют основу каждого запроса к базе данных, поскольку они определяют таблицы, из которых выбираются данные, и столбцы, которые требуется выбрать.
SQL
SQLSQL Спецификатор Where добавляется для выборки определенных строк или указания условия соединения. Спецификатор Order by добавляется для изменения порядка получаемых данных. Спецификатор Into temp добавляется для сохранения этих результатов в виде таблицы с целью выполнения последующих запросов. Два дополнительных спецификатора оператора Select - Group by (спецификатор группирования) и Having (спецификатор условия выборки группы) - позволяют выполнять более сложные выборки данных.
SQL
Простые запросы на языке SQL
Запрос
Выдать полную информацию о поставщиках.
Select * from S
Результат: таблица S в полном объеме.
Атенс30АдамсS5
Лондон20КларкS4
Париж30БлейкS3
Париж10ДжонсS2
Лондон20СмитS1
ГоpодРейтингФамилияHомеpпоставщика
Простые запросы на языке SQL
Запрос
Выдать таблицу S в следующем порядке: фамилия, город, рейтинг, номер_поставщика.
Select фамилия, город, рейтинг, номер_поставщика from S
Результат: таблица S в требуемом порядке.
Простые запросы на языке SQL
Запрос
Выдать номера всех поставляемых деталей.
Select номер_детали from SP
Результат: столбец номер_детали таблицы SP
Простые запросы на языке SQL
Запрос
Выдать номера всех поставляемых деталей, исключая дублирование.
Select distinct номер_детали from SP
P6
P5
P4
P3
P2
P1
Номер_деталиРезультат:
Простые запросы на языке SQL
Запрос
Select номер_детали,
"вес в граммах", вес*454 from PP6 вес в граммах=8226
---------------------
---------------------
P1 вес в граммах=5448Результат:
Простые запросы на языке SQL
Запрос
Выдать сокращение фамилий до двух букв и рейтинг поставщика.
Select фамилия[1,2], рейтинг from S
30Ад
20Кл
30Бл
10Дж
20СмРезультат:
Простые запросы на языке SQL
Запрос
Выдать список поставщиков, упорядоченных по городу, в пределах
города - по рейтингу.
Select * from S order by 4, 3
Париж30БлейкS3
Париж10ДжонсS2
Лондон20КларкS4
Лондон20СмитS1
Атенс30АдамсS5
ГоpодРейтингФамилияHомеpпоставщика
Обозначения
SQLSQL Включение в выражение ключевого слова NOT порождает условие c обратным смыслом. Ключевое слово LIKE соответствует стандарту ANSI, а MATCHES является расширением INFORMIX.
отменяет специальное назначение следующего за ним символа \
служит для замены одиночного символа или символа из диапазона[]
заменяет любой одиночный символ?
заменяет последовательность символов*
MATCHES
отменяет специальное назначение следующего за ним символа\
заменяет любой одиночный символ-
заменяет последовательность символов%
LIKE
ЗНАЧЕНИЕСИМВОЛ
Обозначения
Запрос
Выбрать список деталей, начинающихся с буквы «Б»
Select номер_детали, название, вес from P
where название like "Б%"
19БлюмP6
12БолтP5
весназваниеномер_детали
Запросы на языке SQL
SQLSQLcount - число значений в столбце
sum - сумма значений по столбцу
avg - среднее значение в столбце
Агрегатные функции
Запрос
Выдать средний, минимальный и максимальный объем поставок для поставщика S1 с соответствующим заголовком.
Select avg(количество) average,
min(количество) minimum,
max(количество) maximum
from SP where номер_поставщика='S1'
Запросы на языке SQL
400100216.6
maximumminimumaverage
Временные функции
SQLSQL day - день месяца
current - текущая дата
month - значение месяца
Запрос
Выдать перечень поставок и их количество, а также день, месяц, день недели и количество дней, прошедших с момента поставки на сегодняшний день.
Select номер_детали, количество
Day(дата_поставки) day,
Month(дата_поставки) month,
Weekday(дата_поставки) weekday,
Day(дата_поставки) - -current
from SP
Запросы на языке SQL
. . .. . .. . .. . .. . .. . .
. . .345200P2
. . .321300P1
(Expression)ю
weekdaymonthDayКоличествоНомердетали
Другие функции
SQLSQLlength - размер в байтах символьной строки ( поля таблицы )ю
hex - 16-й код выражения
round - округленное значение выражения
trunc - обрезание значения выражения
Выдать все комбинации информации о поставщиках и деталях, расположенных в одном городе.
Select S.*,P.* from S, Pwhere S.город=P.город
Запросы на языке SQL
Запрос
. . .. . .. . .. . .. . .. . .. . .. . .. . .
Париж17зеленыйБолтP2Париж10ДжонсS2
Лондон19красныйБлюмP6Лондон20СмитS1
Лондон14красныйВинтP4Лондон20СмитS1
Лондон12красныйГайкаP1Лондон20СмитS1
p.городвесцветназв-ен_детs.городрейтингфам-ян_пост
Группирование
SQLSQLОператор group by группирует таблицу, представленную фразой from в группы т.о., чтобы в каждой группе все строки имели одно и тоже значение поля, указанного во фразе group by. Далее, к каждой группе перекомпанованной таблицы ( а не к каждой строке исходной таблицы) применяется фраза select, в результате чего, каждое выражение во фразе select принимает единственное значение для группы.
Выдать для каждой поставляемой детали ее номер и общий объем поставок, за исключением поставок поставщика S1.
Select номер_детали, sum( количество)ю
from SP
where номер_поставщика
group by номер_детали
Запросы на языке SQL
Запрос
400P5
300P4
800P2
300P1
(Sum)юHомеpпоставщика
ОБЪЕДЕНЕНИЕ
SQLSQL Объединяемые оператором UNION таблицы должны быть совместны по объединению:
• иметь одинаковое число столбцов;
• соответствующие столбцы должны иметь одинаковые типы.
Любое число предложений select может быть соединено оператором union. Избыточные дубликаты исключаются из результата объединения.
Выдать номера деталей, которые имеют вес более 16 фунтов, либо поставляются поставщиком S2.
Select номер_детали
from P
where вес>16
unionSelect номер_детали
from SP
where номер_поставщика='S2'
Запросы на языке SQL
Запрос
P6
P3
P2
P1
Номер_детали
Удалить все поставки для поставщиков из Лондона.
delete from SP
where 'Лондон'=(Select город from Swhere S.номер_поставщика=SP.номер_поставщика)ю
Результат: таблица SP с отсутствующими строками о поставках для поставщиков из Лондона.
Запрос
Удаление