Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
26
Добавлен:
27.04.2015
Размер:
433.66 Кб
Скачать

Определить студентов, у которых стипендии превышают начисления хотя бы одного студента в группе 1223

SELECT fam, stip FROM student

WHERE stip > ANY (SELECT stip

FROM student WHERE gruppa=1223)

Определить студентов, у которых стипендии превышают начисления любого студента в группе 1223

SELECT fam, stip FROM student

WHERE stip > ALL (SELECT stip

FROM student WHERE gruppa=1223)

Предложение HAVING

применяется после группировки для определения предиката, фильтрующие группы по значениям агрегатных функций.

Это предложение необходимо для проверки значений, полученных с помощью агрегатных функций, для групп строк.

Запрос: Получить группы, количество студентов в группе, среднюю стипендию для групп, у которых средняя стипендия меньше 800

SELECT gruppa, count(gruppa) as kol, avg(stip) as cred FROM zaproc

GROUP BY gruppa

HAVING avg(stip) < 800

Where здесь не годится, т.к. анализируется несколько строк.

Порядок обработки предложений в SELECT:

1.FROM

2.WHERE

3.GROUP BY

4.HAVING

5.SELECT

6.ORDER BY

Многотабличные запросы

Для того чтобы осуществить объединение информации из нескольких таблиц, необходимо выполнить операцию соединения.

При этой операции объединение информации из таблиц происходит посредством образования пар связанных строк, выбранных из каждой таблицы.

Таблицам можно присвоить имена-псевдонимы, что полезно для осуществления операции соединения таблицы с самой собою и в других ситуациях.

Самый простой запрос:

SELECT *

FROM R1, R2 – соответствует декартову произведению таблиц R1, R2 .

A

 

B

 

a

b

c

d

1

2

2

4

2

1

3

3

SELECT * FROM A, B

a

b

c

d

1

2

2

4

1

2

3

3

2

1

2

4

2

1

3

3

Поэтому перечисление таблиц используется с условием соединения записей из разных таблиц в предложении WHERE:

SELECT *

FROM A, B WHERE a = c Результат:

a b c d 2 1 2 4

Соединения равенства

SELECT table1.field1,… tableN.fieldN FROM table1, … tableN

WHERE table1.common_field1= table2.common_field1 {AND table1.common_field2= table2.common_field2}