КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Внутренние и внешние объединения
Работа с несколькими таблицами Условия поиска групп HAVING Точно также, как предложение WHERE используется для отбора отдельных строк, участвующих в запросе, предложение HAVING можно применить для отбора групп строк. Его формат соответствует формату предложения WHERE. Предложение HAVING состоит из ключевого слова HAVING, за которым следует условие поиска. Таким образом, данное предложение определяет условие поиска для групп. Основным отличием предложения HAVING от WHERE, что оно применяется уже непосредственно после самого запроса и в условие поиска включается поле с примененной к нему агрегатной функцией. Вывести те дни месяца, когда оборот превышал 1000 руб. SELECT ДАТА_ДОК, SUM (КОЛ-ВО*ЦЕНА) SUM (КОЛ-ВО*ЦЕНА) FROM ПЕРЕМЕЩЕНИЕ WHERE ДАТА_ДОК BETWEEN ‘1.01.2000’ AND ’31.01.2000’ GROUP BY ДАТА_ДОК HAVING SUM (КОЛ-ВО*ЦЕНА)>1000
Вывести все идентификаторы городов, если количество клиентов из них больше трех. SELECT IDN_ГОРОДА FROM КЛИЕНТ GROUP BY IDN_ГОРОДА HAVING COUNT(*) >3
6.3.1 Объединение при помощи оператора WHERE На практике многие запросы считывают данные сразу из нескольких таблиц базы данных. Например, у нас существуют две таблицы. Таблица Города
Таблица Клиент
Вывести всех клиентов с указанием города. SELECT ГОРОДА.НАЗВАНИЕ, КЛИЕНТ.НАЗВАНИЕ(ИМЯ) FROM ГОРОДА,КЛИЕНТ WHERE ГОРОДА.IDN=КЛИЕНТ.IDN_ГОРОДА Результат этого запроса.
Если бы нам нужны были клиенты только из Москвы. То этот запрос дополнился бы еще одной строкой. AND ГОРОДА.НАЗВАНИЕ =’Москва’
В качестве упрощенного варианта этот же запрос можно записать следующим образом. SELECT Г.НАЗВАНИЕ, К.НАЗВАНИЕ(ИМЯ) FROM ГОРОДА Г., КЛИЕНТ К. WHERE Г.IDN=K.IDN_ГОРОДА AND Г.НАЗВАНИЕ=’Москва’
Нас интересует на какую сумму был оборот по каждой группе товаров за какой-то промежуток времени. SELECT ГР.НАЗВАНИЕ, SUM(П.КОЛ-ВО*П.ЦЕНА) FROM ГРУППЫ ГР., ПЕРЕМЕЩЕНИЕ П. WHERE ГР.IDN=П.IDN_ГРУППЫ AND П.ДАТА_ДОК BETWEEN ‘1.02.2000’ AND ’16.03.2000’ GROUP BY ГР.НАЗВАНИЕ HAVING SUM(П.КОЛ-ВО*П.ЦЕНА)>1000 ORDER BY SUM(П.КОЛ-ВО*П.ЦЕНА) Примеры рассмотренные в предыдущем разделе формально относятся к так называемым внутренним объединениям. Внутреннее объединение возвращает строки, только если условия объединения выполнено. Приведем еще раз пример запроса с использованием оператора JOIN (соединять).
Вывести всех клиентов с указанием города. SELECT ГОРОДА.НАЗВАНИЕ, КЛИЕНТ.НАЗВАНИЕ(ИМЯ) FROM ГОРОДА INNER JOIN КЛИЕНТ ON ГОРОДА.IDN=КЛИЕНТ.IDN_ГОРОДА Результат этого запроса.
Обратите внимание, что ни город Париж ни клиент Рога&Копыта в результаты запроса не попали. На то, что мы имеем дело с внутренним объединением, указывает ключевое слово INNER (внутренний). Помимо внутренних объединений часто имеет смысл использовать внешние объединения, которые возвращают строки независимо от того выполнено условия объединение или нет. Когда условия объединения не выполнено для данной строки во внешнем объединении, поля из внутренней таблицы возвращаются как NULL. Различают правые и левые внешние объединения, которые различаются тем, из какой таблицы (внутренней или внешней) извлекаются все строки. Приведем примеры. Левое внешнее объединение: Вывести всех клиентов, если для клиента указан город, показать его. SELECT ГОРОДА.НАЗВАНИЕ, КЛИЕНТ.НАЗВАНИЕ(ИМЯ) FROM ГОРОДА LEFT OUTER JOIN КЛИЕНТ ON ГОРОДА.IDN=КЛИЕНТ.IDN_ГОРОДА Результат этого запроса.
Обратите внимание, что был выведен клиент Рога&Копыта, для которого город не указан. В этом запросе были использованы ключевые слова LEFT (левый) OUTER (внешний). Правое внешнее объединение: Вывести все города и клиентов из этих городов. SELECT ГОРОДА.НАЗВАНИЕ, КЛИЕНТ.НАЗВАНИЕ(ИМЯ) FROM ГОРОДА RIGHT OUTER JOIN КЛИЕНТ ON ГОРОДА.IDN=КЛИЕНТ.IDN_ГОРОДА Результат этого запроса.
В результате теперь присутствует Париж.
Дата добавления: 2014-12-07; Просмотров: 792; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |