Хелпикс

Главная

Контакты

Случайная статья





INNER JOIN



В прошлой теме было рассмотрено неявное соединение таблиц. Оно производилось на основе простой выборки неявно путем сведения данных. Для явного соединения данных из двух таблиц применяется оператор JOIN. Общий формальный синтаксис применения оператора INNER JOIN:

SELECTстолбцы FROMтаблица1 [INNER] JOINтаблица2 ONусловие1 [[INNER] JOINтаблица3 ONусловие2]

После оператора JOIN идет название второй таблицы, из которой надо добавить данные в выборку. Перед JOIN может использоваться необязательное ключевое слово INNER. Его наличие или отсутствие ни на что не влияет. Затем после ключевого слова ON указывается условие соединения. Это условие устанавливает, как две таблицы будут сравниваться. В большинстве случаев для соединения применяется первичный ключ главной таблицы и внешний ключ зависимой таблицы.

Возьмем таблицы с данными из прошлой темы:

USE productsdb;   CREATETABLEProducts ( Id INTIDENTITY PRIMARYKEY, ProductName NVARCHAR(30) NOTNULL, Manufacturer NVARCHAR(20) NOTNULL, ProductCount INTDEFAULT0, Price MONEY NOTNULL ); CREATETABLECustomers ( Id INTIDENTITY PRIMARYKEY, FirstName NVARCHAR(30) NOTNULL ); CREATETABLEOrders ( Id INTIDENTITY PRIMARYKEY, ProductId INTNOTNULLREFERENCESProducts(Id) ONDELETECASCADE, CustomerId INTNOTNULLREFERENCESCustomers(Id) ONDELETECASCADE, CreatedAt DATENOTNULL, ProductCount INTDEFAULT1, Price MONEY NOTNULL );

Используя JOIN, выберем все заказы и добавим к ним информацию о товарах:

SELECTOrders. CreatedAt, Orders. ProductCount, Products. ProductName FROMOrders JOINProducts ONProducts. Id = Orders. ProductId

Поскольку таблицы могут содержать столбцы с одинаковыми названиями, то при указании столбцов для выборки указывается их полное имя вместе с именем таблицы, например, " Orders. ProductCount".

 

Также используя псевдонимы, мы можем сократить код:

SELECTO. CreatedAt, O. ProductCount, P. ProductName FROMOrders ASO JOINProducts ASP ONP. Id = O. ProductId

Подобным образом мы можем присоединять и другие таблицы. Например, добавим к заказу информацию о покупателе из таблицы Customers:

SELECTOrders. CreatedAt, Customers. FirstName, Products. ProductName FROMOrders JOINProducts ONProducts. Id = Orders. ProductId JOINCustomers ONCustomers. Id=Orders. CustomerId

 

Благодаря соединению таблиц мы можем использовать их столбцы для фильтрации выборки или ее сортировки:

SELECTOrders. CreatedAt, Customers. FirstName, Products. ProductName FROMOrders JOINProducts ONProducts. Id = Orders. ProductId JOINCustomers ONCustomers. Id=Orders. CustomerId WHEREProducts. Price < 45000 ORDERBYCustomers. FirstName

Условия после ключевого слова ON могут быть более сложными по составу:

SELECTOrders. CreatedAt, Customers. FirstName, Products. ProductName FROMOrders JOINProducts ONProducts. Id = Orders. ProductId ANDProducts. Manufacturer='Apple' JOINCustomers ONCustomers. Id=Orders. CustomerId ORDERBYCustomers. FirstName

В данном случае выбираем все заказы на товары, производителем которых является Apple.

При использовании оператора JOIN следует учитывать, что процесс соединения таблиц может быть ресурсоемким, поэтому следует соединять только те таблицы, данные из которых действительно необходимы. Чем больше таблиц соединяется, тем больше снижается производительность.

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.