Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
157
Добавлен:
16.04.2013
Размер:
6.72 Mб
Скачать

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

Например: вывести список жителей, имеющих телефоны, с указанием ФИО и номера телефона.

Операция ПРОЕКЦИИ. PERSON [ADR = ADR] TPHONE.

SELECT FIO, NTEL FROM PERSON, TPHONE

WHERE PERSON.ADR = TPHONE.ADR.

27 Псевдонимы таблиц, самосоединение таблиц.

Формат: ИМЯ_ТАБЛИЦЫ ПСЕВДОНИМ. Например:

SELECT NOM, FIO, SOURSE, MONEY

FROM PERSON A, PROFIT B, HAVE_D C

WHERE A.NOM = C.NOM AND C.ID = B.ID AND NOM = 13.

Можно соединить таблицу саму с собой. Например, для поиска однофамильцев:

SELECT A.ADR, B.ADR

FROM PERSON A, PERSON B

WHERE A.FIO = B.FIO AND A.ADR = B.ADR.

28 Агрегатные функции языкаSql.

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

SUM() – сумма в столбце.

SUM(DISTINCT <имя столбца>) – сумма неповторяющихся значений в столбце.

SELECT SUM(SUMD) FROM PERSON

AVG() – среднее значение в столбце.

AVG(DISTINCT <имя столбца>) – среднее значение для неповторяющихся значений в столбце.

MIN(), MAX()– минимум и максимум.

COUNT() – количество значений в столбце.

COUNT(DISTINCT <имя столбца>) – количество неповторяющихся значений в столбце.

COUNT(*) – количество строк в ТРЗ.

ПРИМЕРЫ:

  1. SELECT ‘СРЕДНЕДУШИВОЙ ДОХОД =’, AVG (SUMD) FROM PERSON.

  2. SELECT AVG(SUMD*0.13) FROM PERSON

  3. SELECT SUM(SUMD) FROM PERSON

  4. SELECT SUM(DISTINCT SUMD) FROM PERSON

  5. SELECT ‘ПОЛУЧЕННО СТЕПЕНДИЙ НА СУММУ’, SUM(MONEYS) FROM HAVE_D, PROFIT WHERE PROFIT.ID = HAVE_D.ID AND SOURSE = ‘СТИПЕНДИЯ’

  6. SELECT MIN(R_DATE), MAX (R_DATE) FROM PERSON

  7. SELECT MIN(FIO), MAX (FIO) FROM PERSON

  8. SELECT COUNT(ADR) FROM PERSON WHERE ADR = ’Зеленоград, 1__-%’

Правила:

1. Если какие-либо значения в столбце имеют значение NULL, то они исключаются из столбцов.

2. Если все значения в столбце имеют значение NULL, то все функции, кромеCOUNTвернутNULL.COUNTвернет 0.

3. COUNT(*) подсчитывает количество строк в ТРЗ, и возвращаемое значение не зависит от наличияNULL. Если строк нет, то вернется 0.

29. Запросы с группировкой и ограничения на них.

SelectADR,AVG(SUMD)FROMPERSON

GROUPBYADR

  1. Сведения о жителях в таблице Personделятся на группы – по одной группе на каждую квартиру. В каждой группе все квартиры имеют 1 адрес.

  2. Для каждой группы вычисляется среднее значение SUMD, генерируется одна итоговая строка в таблице результатов, эта строка содержит значение столбцаADRи средний общий доход для данной группы.

Запрос с группировкой – запрос, в котором используется предложениеGROUPBY.

Столбцы группировки – столбцы, в которые указываются предложенияGROUPBY, по какому признаку строки объединяются в группы.

Примеры.

  1. Количество жителей квартиры и сформировать таблицу результатов

SELECT ADR, COUNT(*) FROM PERSON

GROUP BY ADR.

  1. Нужно подсчитать количество источников дохода у каждого жителя.

SELECT NOM, COUNT(ID) FROM HAVE_D

GROUP BY NOM.

  1. Сколько различных источников дохода имеют жители каждой квартиры.

SELECET ADR, COUNT(DISTINCT ID) FROM HAVE_D, PERSON

WHERE HAVE_D.NOM = PERSON.NOM

GROUPBYADR.

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

Соседние файлы в папке бд