Использование в запросе нескольких таблиц. Предложение FROM
Использование в запросе нескольких таблиц. Предложение FROM
Как видно из приведенного в конце предыдущего раздела синтаксиса оператора SELECT, в предложении FROM допускается указание нескольких таблиц. Простое перечисление таблиц практически не используется, поскольку оно соответствует реляционной операции декартова произведения. Т.е. в результирующем наборе каждая запись из одной таблицы будет сочетаться с каждой записью в другой. Например, для таблиц
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. Для приведенных выше таблиц таким условием может быть совпадение значений, скажем, в полях a и c:
SELECT * FROM A, B WHERE a=c;
Теперь результатом выполнения этого запроса будет следующая таблица:
a
b
c
d
2
1
2
4
т.е. соединяются только те строки таблиц, у которых в указанных полях находятся равные значения (эквисоединение). Естественно, могут быть использованы любые условия, хотя эквисоединение используется чаще всего, поскольку эта операция воссоздает некую сущность, декомпозированную на две других в результате процедуры нормализации.
Если разные таблицы имеют столбцы с одинаковыми именами, то для однозначности требуется использовать точечную нотацию:
.
В тех случаях, когда это не вызывает неоднозначности, использование данной нотации не является обязательным.
Пример. Найти номер модели и производителя ПК, имеющих цену менее $600:
SELECT DISTINCT PC.model, maker
FROM PC, Product
WHERE PC.model = Product.model AND price < 600;
В результате каждая модель одного и того же производителя выводится только один раз:
model
maker
1232
A
1260
E
Иногда в предложении FROM требуется указать одну и ту же таблицу несколько раз. В этом случае обязательным является переименование.
Пример. Вывести пары моделей, имеющих одинаковые цены:
SELECT DISTINCT A.model AS model_1, B.model AS model_2
FROM PC AS A, PC B
WHERE A.price = B.price AND A.model < B.model;
Здесь условие A.model < B.model используется для того, чтобы не выводились одинаковые пары, отличающиеся только перестановкой, например: 1232, 1233 и 1233, 1232. DISTINCT применяется для того, чтобы исключить одинаковые строки, поскольку в таблице PC имеются одинаковые модели по одной и той же цене. В результате получим следующую таблицу:
model_1
model_2
1232
1233
1232
1260
Переименование также требуется, если в предложении FROM используется подзапрос. Так, первый пример можно переписать следующим образом:
SELECT DISTINCT PC.model, maker
FROM PC,
(SELECT maker, model
FROM Product) AS prod
WHERE PC.model = prod.model AND price < 600;
Обратите внимание, что в этом случае в других предложениях оператора SELECT уже нельзя использовать квалификатор Product, поскольку таблица Product уже не используется. Вместо него используется псевдоним prod. Кроме того, ссылаться теперь можно только на те поля таблицы Product, которые перечислены в подзапросе.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
26.2. Использование таблиц параметров
26.2. Использование таблиц параметров 26.2.1. Создание содержимого popt может чередовать синтаксический анализ нескольких совокупностей командных строк. Для этого она сохраняет всю информацию о состоянии для определенной совокупности аргументов командных строк в структуре
Использование больших таблиц маршрутизации
Использование больших таблиц маршрутизации Обычно ядро Linux настраивается для работы с таблицами маршрутизации, содержащими не больше 64 записей. Если этих записей не хватает для того, чтобы задать требуемую конфигурацию маршрутизатора, вам надо активизировать опцию IP:
10.8.2 Использование полей заголовка в запросе на соединение
10.8.2 Использование полей заголовка в запросе на соединение Первый сегмент, посылаемый для открытия соединения, имеет значение флага SYN, равное 1, и флага ACK — 0. Начальный SYN является единственным сегментом, имеющим поле ACK со значением 0. Отметим, что средства защиты
Использование нескольких сессий в ADODB
Использование нескольких сессий в ADODB Несмотря на то что модель объектов ADODB не предоставляет прямой возможности одновременного использования нескольких сессий с одним источником данных, это ограничение можно обойти. Решение основывается на применение внутреннего
Объединение связанных таблиц в запросе
Объединение связанных таблиц в запросе Для выборки связанной информации из нескольких таблиц используется объединение (join). Чтобы создать объединение в запросе, необходимо определить первичные (primary) и внешние (foreign) ключи в таблицах, участвующих в объединении (эти
Связывание нескольких таблиц в инструкциях SELECT
Связывание нескольких таблиц в инструкциях SELECT Одна инструкция SELECT может работать с более чем одной таблицей. Просто перечисsiire ULC необходимые таблицы, с которыми должна работать инструкция, как показано ниже:SELECT * FROM Toys, ClerksОднако набор записей, полученный в результате
Резюме: использование операторов if для организации выбора из нескольких вариантов
Резюме: использование операторов if для организации выбора из нескольких вариантов КЛЮЧЕВЫЕ CЛOBA: if, else ОБЩИЕ ЗАМЕЧАНИЯ: В каждой из последующих форм оператором может быть либо простои оператор, либо составной. Выражение "истинно" в обобщенном смысле, если его
8.6. Совместное использование данных из связки ключей в нескольких приложениях
8.6. Совместное использование данных из связки ключей в нескольких приложениях Постановка задачи Требуется, чтобы хранилищем данных связки ключей могли пользоваться два ваших
Использование ORDER BY в группирующем запросе
Использование ORDER BY в группирующем запросе Начиная с Firebird версии 1.5, элементы в списке ORDER BY В группирующем запросе должны быть либо агрегатными функциями, допустимыми в контексте группирования, либо элементами, которые представлены в списке GROUP BY.Firebird 1.0.x является менее
Использование субъектом нескольких сертификатов
Использование субъектом нескольких сертификатов Пары ключей одного субъекта Более широкое распространение инфраструктур открытых ключей, скорее всего, приведет к тому, что субъектам PKI придется иметь целый набор пар ключей одного назначения (например, для цифровой