Методические указания по их использованию. Пособие содержит большое количество примеров на использование операторов sql, которые могут быть полезны как на этапе освоения материала, так и выступать в качестве вопросов для самопроверки



Download 441,57 Kb.
bet19/71
Sana15.01.2023
Hajmi441,57 Kb.
#899634
TuriМетодические указания
1   ...   15   16   17   18   19   20   21   22   ...   71
Bog'liq
Методичка SQL(14) (оптимизация)

NULL

15

8

2011-01-03

16

1

NULL

16

1

2011-01-03

25

1

NULL

25

1

2011-01-02

27

2

NULL

27

2

2011-01-02

33

2

NULL

33

2

NULL

NULL

14

2011-01-02

NULL

10

2011-01-03

NULL

4
Рассмотрим пример для нашей БД.
SELECT Дата, Блюдо,
SUM(Количество_порций) as Кол_порций
FROM Заказы
WHERE Блюдо >= 15
GROUP BY CUBE(Дата, Блюдо);


3.2.3.3. Раздел HAVING.


Предложение HAVING обычно используется c предложением GROUP BY. Предложение HAVING подобно предложению WHERE, но применимо только к целым группам (то есть к строкам в результирующем наборе, представляющим собой группы), тогда как предложение WHERE применимо к отдельным строкам. В запросе могут содержаться оба предложения: WHERE и HAVING. В этом случае:

  • Предложение WHERE применяется сначала к отдельным строкам таблиц или возвращающих табличное значение объектов в области схем. Группируются только строки, которые удовлетворяют условиям в предложении WHERE.

  • Затем предложение HAVING применяется к строкам в результирующем наборе. Только строки, которые удовлетворяют условиям HAVING, появляются в результирующем запросе. Можно применить предложение HAVING только к тем столбцам, которые появляются в предложении GROUP BY или статистической функции.

Когда GROUP BY не используется, предложение HAVING работает так же, как и предложение WHERE. (проверить)
Синтаксис
[HAVING условие_отбора_групп]
Пример 15.
Вывести статистику заказов по конкретному блюду
SELECT Дата,
Блюдо, SUM(Количество_порций) AS Количество_порций
FROM Заказы
GROUP BY Дата, Блюдо
HAVING Блюдо = 15;

Результат




Блюдо

Количество_порций

15

6

15

2

Эквивалентный ему запрос, но без HAVING


SELECT Дата, Блюдо, SUM(Количество_порций) AS Количество_порций
FROM Заказы
WHERE Блюдо = 15
GROUP BY Дата, Блюдо;
будет работать быстрее, так как будут заранее (до группировки и вычисления функции) отброшены ненужные строки.
Пример 16.
Вывести названия блюд, у которых количество заказанных порций в день превышает 5:
SELECT Дата, Блюдо, SUM(Количество_порций) AS Кол_порций

Результат







Дата

Блюдо

Кол_порций

2011-01-02

1

10

2011-01-02

15

6
FROM Заказы
GROUP BY Дата, Блюдо
HAVING SUM(Кол_порций) > 5;

Для данного запроса эквивалентного с предложением WHERE не существует.


3.3. Примеры запросов с использованием нескольких таблиц.


Типичен вопрос: как же получить сведения о том, какие продукты необходимы для приготовления того или иного блюда, какова его калорийность и стоимость, если нужные данные "рассыпаны" по нескольким различным таблицам? Не лучше ли иметь одну большую таблицу, содержащую все сведения базы данных «Ресторан»?
База данных - это множество взаимосвязанных сущностей или отношений (таблиц) в терминологии реляционных СУБД. При проектировании стремятся создавать таблицы, в каждой из которых содержалась бы информация об одном и только об одном типе сущностей. Это облегчает модификацию базы данных и поддержание ее целостности. Даже при отсутствии средств одновременного доступа ко многим таблицам нежелателен проект, в котором информация о многих типах сущностей перемешана в одной таблице. SQL же обладает великолепным механизмом для одновременной или последовательной обработки данных из нескольких взаимосвязанных таблиц. В нем реализованы возможности "соединять" или "объединять" несколько таблиц и так называемые "вложенные подзапросы".

3.3.1. Соединения «с условием WHERE».


Вообще, соединения - это подмножества декартова произведения. Так как декартово произведение n таблиц - это таблица, содержащая все возможные строки r, такие, что r является сцеплением какой-либо строки из первой таблицы, строки из второй таблицы, ... и строки из n-й таблицы (а мы уже научились выделять с помощью SELECT любое подмножество реляционной таблицы), то осталось лишь выяснить, можно ли с помощью SELECT получить декартово произведение. Для получения декартова произведения нескольких таблиц, надо указать в предложении FROM перечень перемножаемых таблиц, а в предложении SELECT – все их столбцы.
Пример 17.
Предположим нам необходимо получить состав продуктов для каждого блюда.
Информация для этого запроса хранится в таблицах Блюда, Состав и Продукты. Для получения декартова произведения таблиц Блюда(n-строк), Состав (m-строк) и Продукты (k - строк) надо написать запрос
SELECT Блюда.*, Состав.*, Продукты.*
FROM Блюда, Состав, Продукты;
Получим таблицу, содержащую (n × m × k) строк:

ID_блюда

Блюдо

Вид


Download 441,57 Kb.

Do'stlaringiz bilan baham:
1   ...   15   16   17   18   19   20   21   22   ...   71




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish