Базы данных
и язык SQL

Страница 8. Оператор SELECT для выборки из нескольких таблиц

Навигация по уроку Связанные темы
Назад<<<СодержаниеВперёд>>>

С добавлением минимума средств с помощью оператора SELECT можно получать выборки из двух и более таблиц.

Это может быть сделано двумя способами. Первый - перечисление нужных таблиц в секции FROM и задание равенства значений ключей. Второй - использование подзапросов с оператором IN.

Работаем с базой данных "Недвижимость". Скрипт для создания этой базы данных, её таблиц и заполения таблиц данными - в файле по этой ссылке.

Таблицы Client, Manager и Owner содержат данные соответственно о клиентах, менеджерах фирмы и собственниках объектов недвижимости. В этих таблицах FName и LName соответственно имя и фамилия. Таблица Object содержит данные об объектах. В этой таблице нам понадобятся значения столбцов Project (содержит данные о проекте здания или квартиры) и Space_Total (содержит данные об общей площади объекта). Таблица Deal содержит данные о сделках.

Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке.

Пример 1. Составить список собственников, чьи объекты соответствуют проекту "хрущевка".

Задействованы две таблицы - Owner и Object. Соединение происходит по общему ключу - Owner_ID, который для таблицы Owner является первичным ключом, а для таблицы Object - внешним.

Запрос для выполнения этого задания должен быть таким (если выполняется на MS SQL Server, то с предваряющей конструкцией USE realestate;):

SELECT FName, LName FROM Owner ow, Object ob WHERE ow.Owner_ID=ob.Owner_ID AND Project = 'хрущевка'

Аналогичный результат можно получить с использованием подзапросов.

Пример 2. Составить список собственников, чьи объекты соответствуют проекту "хрущевка".

Способ с подзапросом предусматривает, что значения первичного ключа Owner_ID таблицы Owner (внешний запрос) при помощи секции IN проходят проверку на соответствие элементам множества вторичного ключа Owner_ID таблицы Object (вложенный запрос).

Запрос для выполнения этого задания должен быть таким (если выполняется на MS SQL Server, то с предваряющей конструкцией USE realestate;):

SELECT FName, LName FROM Owner WHERE Owner_ID IN (SELECT Owner_ID FROM Object WHERE Project = 'хрущевка')

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

Пример 3. Вывести список клиентов по сделкам с объектами, имеющими общую площадь больше 50 кв.м.

Запрос для выполнения этого задания должен быть таким (если выполняется на MS SQL Server, то с предваряющей конструкцией USE realestate;):

SELECT FName, LName FROM Client Cl, Deal De, Object Ob WHERE Cl.Client_ID=De.Client_ID AND De.Object_ID=Ob.Obj_ID AND Space_Total > 50

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

Пример 4. Вывести список клиентов по сделкам с объектами, имеющими общую площадь больше 50 кв.м.

Запрос для выполнения этого задания должен быть таким (если выполняется на MS SQL Server, то с предваряющей конструкцией USE realestate;):

SELECT FName, LName FROM Client Cl WHERE Cl.Client_ID IN (SELECT De.Client_ID FROM Deal De WHERE De.Object_ID IN (SELECT Ob.Obj_ID FROM Object Ob WHERE Space_Total > 50))

Действия для получения выборок из нескольких таблиц называются соединениями таблиц. В более сложных случаях и для составления более сложных запросов целесообразно использовать для соединения таблиц оператор JOIN.

Назад<<<СодержаниеВперёд>>>

Поделиться с друзьями