Равносилен предикату
Явные операции соединения В предложении FROM может быть указана явная операция соединения двух и более таблиц. Среди ряда операций соединения, описанных в стандарте языка SQL, многими серверами баз данных поддерживается только операция соединения по предикату. Синтаксис соединения по предикату имеет вид: 1. FROM <таблица 1> 2. [INNER] 3. {{LEFT | RIGHT | FULL } [OUTER]} JOIN <таблица 2> 4. [ON <предикат>] Соединение может быть либо внутренним (INNER), либо одним из внешних (OUTER). Служебные слова INNER и OUTER можно опускать, поскольку внешнее соединение однозначно определяется его типом — LEFT (левое), RIGHT (правое) или FULL (полное), а просто JOIN будет означать внутреннее соединение. Предикат определяет условие соединения строк из разных таблиц. При этом INNER JOIN означает, что в результирующий набор попадут только те соединения строк двух таблиц, для которых значение предиката равно TRUE. Как правило, предикат определяет эквисоединение по внешнему и первичному ключам соединяемых таблиц, хотя это не обязательно. Пример: Найти производителя, номер модели и цену каждого компьютера, имеющегося в базе данных: 1. SELECT maker, Product.model AS model_1, PC.model AS model_2, price 2. FROM Product INNER JOIN 3. PC ON PC.model = Product.model 4. ORDER BY maker, PC.model В данном примере в результирующем наборе будут соединяться только те строки из таблиц РС и Product, у которых совпадают номера моделей. Внешнее соединение LEFT JOIN означает, что помимо строк, для которых выполняется условие предиката, в результирующий набор попадут все остальные строки из первой таблицы (левой). При этом отсутствующие значения столбцов из правой таблицы будут заменены NULL -значениями. Соединение RIGHT JOIN обратно соединению LEFT JOIN, то есть в результирующий набор попадут все строки из второй таблицы, которые будут соединяться только с теми строками из первой таблицы, для которых выполняется условие соединения. В нашем случае левое соединение
Product LEFT JOIN PC ON PC.model = Product.model будет эквивалентно правому соединению PC RIGHT JOIN Product ON PC.model = Product.model Наконец, при полном соединении (FULL JOIN) в результирующую таблицу попадут не только те строки, которые имеют одинаковые значения в сопоставляемых столбцах, но и все остальные строки исходных таблиц, не имеющие соответствующих значений в другой таблице. В этих строках все столбцы той таблицы, в которой не было найдено соответствия, заполняются NULL -значениями. То есть полное соединение представляет собой комбинацию левого и правого внешних соединений. Объединение Для объединения запросов используется служебное слово UNION: 1. <запрос 1> 2. UNION [ALL] 3. <запрос 2> Предложение UNION приводит к появлению в результирующем наборе всех строк каждого из запросов. При этом, если определен параметр ALL, то сохраняются все дубликаты выходных строк, в противном случае в результирующем наборе присутствуют только уникальные строки. Заметим, что можно связывать вместе любое число запросов. Кроме того, с помощью скобок можно задавать порядок объединения. Операция объединения может быть выполнена только при выполнении следующих условий: · количество выходных столбцов каждого из запросов должно быть одинаковым; · выходные столбцы каждого из запросов должны быть совместимы между собой (в порядке их следования) по типам данных; · в результирующем наборе используются имена столбцов, заданные в первом запросе; · предложение ORDER BY применяется к результату соединения, поэтому оно может быть указано только в конце всего составного запроса. Пример: Найти тип продукции, номер модели и цену ПК и портативных компьютеров: 1. SELECT Product.type, PC.model, price 2. FROM PC INNER JOIN 3. Product ON PC.model = Product.model 4. UNION 5. SELECT Product.type, Laptop.model, price 6. FROM Laptop INNER JOIN 7. Product ON Laptop.model = Product.model 8. ORDER BY price DESC;
Читайте также: Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|