русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Выборка из нескольких таблиц


Дата добавления: 2015-07-09; просмотров: 417; Нарушение авторских прав


В самом простом случае список таблиц задаётся перечислением:

Select * /*все поля исходной таблицы*/ from Customer, Employee

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

 

Поля таблицы 1 Поля таблицы 2
Запись 1 Запись 1
Запись 1 Запись 2
Запись 1 Запись 3
   

 

Именно в силу этого данный пример совершенно непотребный: m´n – это очень много.

select * from Orders, Item, Product

where ID=Order_Ref, ID=Product_Ref;

Коллизия имён различных таблиц разрешается, как обычно, использованием полных, или квалифицированных, имён.

where Order.Id=Order_Ref

Product.Id=Product_Ref;

Правда такой приём не спасает при выборке из декартовых степеней.

Выделим однофамильцев:

select cust1.name, cust1.Id, cust2.Id

from Customer.cust1, Customer.cust2

where (cust1.name=cust2.name) and (cust1.Id<cust2.Id);

В таких случаях используют псевдонимы, локальные имена, или алиасы. В более сложном синтаксисе условие связи отделяется от условия фильтрации и записывается в списке выборки: (имя таблицы 1) join (имя таблицы 2) on (условие связи).

select cust1.name, cust1.Id, cust2.Id

from Cusromer. cust1 join

Customer.cust2 on

cust1.name=cust2.name

where cust1.Id<cust2.Id;

Опция joinимеет дополнительные опции, а именно: Inner, Left, Right, Full.

Inner – по умолчанию.

Что делать с официальными сиротами, то есть значениями ключей, равными null? Внутреннее соединение inner join игнорирует такие записи. Left join добавляет в результирующую выборку все записи из левой таблицы со значениями ключа null в комбинации с фиктивной нулевой записью второй таблицы.

select (что-то) from T1,T2 where B(r1,r2) /*предикат*/ /*ri – поле таблицы Ti*/



То же самое:

select (что-то) from T1 join T2 on B(r1,r2)

T1 [inner] join T2 on B(r1,r2)

{r1År2: r1ÎT1 & r2ÎT­2 /*все возможные комбинации записей*/ & B(r1,r2)}

 

T1 left join T2 on B(r1,r2) = {r1År2: r1ÎT1 & r2ÎT­2 & B(r1,r2)} U

U{r1ÅNull2: r1ÎT1 & Ø$ r2ÎT­2 : B(r1,r2)}

Ø$ - not $ - не существует.

Null2­ – фиктивная запись таблицы T2, то есть запись с именами из T2 со значениями, равными null.

select cust1.name, cust1.Id, cust2.Id

from Customer.cust1 left join Customer.cust2

on (cust1.name=cust2.name) and (cust1.Id>cust2.Id)

 

T1 right join T2 on B(r1,r2) = {r1År2: r1ÎT1 & r2ÎT­2 & B(r1,r2)} U

U{r1ÅNull1År2: r1ÎT1 & Ø$ r1ÎT­1 : B(r1,r2)}

T1 full join T2 on B(r1,r2) = Left U Right U Inner –объединение.

 



<== предыдущая лекция | следующая лекция ==>
Команды DML | Группировка и групповые вычисления


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.094 сек.