шкан бир же эки таблицанын бардык саптарын кайтарат.
Outer Join төмөнкү расмий синтаксиске ээ:
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>ТАНДОО мамычалар</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
1-таблицадан</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
{СОЛ|ОҢ} [ТЫШКЫ] 2-таблицага кошулуу 1-шарт</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
[{СОЛ|ОҢ} [ТЫШКЫ] 3-таблицага кошулуу 2-шартында]...</font></font><font></font>
@A@
JOIN операторунун алдында LEFT же RIGHT ачкыч сөздөрүнүн бири турат , алар кошулуунун түрүн аныктайт:
LEFT : тандоо биринчи же сол таблицадагы бардык саптарды камтыйт
RIGHT : тандоо экинчи же оң таблицадагы бардык саптарды камтыйт
OUTER ачкыч сөзү JOIN операторунун алдында да колдонулушу мүмкүн , бирок аны колдонуу милдеттүү эмес. Андан кийин, JOINден кийин кошула турган таблица көрсөтүлөт, андан кийин кошулуу шарты келет.
Мисалы, Заказдар жана Кардарлар таблицаларын бириктирели:
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>Атын, CreatedAt, ProductCount, Price, ProductId тандаңыз</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
КАЛГАН Заказдардан Кардарларга КОШУЛУҢУЗ</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
ON
Orders.CustomerId = Customers.Id</font></font><font></font>
@A@
Буйрутмалар таблицасы биринчи же сол таблица, ал эми Кардарлар таблицасы оң жадыбал. Ошондуктан, бул жерде сол жадыбалдан тандоо колдонулгандыктан, адегенде Буйрутмалардагы бардык саптар тандалып алынат, андан кийин Orders.CustomerId = Customers.Id
аларга шартка ылайык Кардарлардан тиешелүү саптар кошулат.
Жогорудагы жыйынтыкка караганда, сол тараптагы кошулуу INNER кошулууга окшош окшойт, бирок андай эмес. Inner Join шарт аткарылганда эки таблицадагы саптарды бириктирет. Эгерде таблицалардын биринде бул шартка жооп бербеген саптар бар болсо, анда ал саптар чыгаруу үлгүсүнө кирбейт. Left Join биринчи таблицадагы бардык саптарды тандап, андан кийин аларга оң жадыбалдын саптарын бириктирет. Мисалы, Кардарлар таблицасын алып, кардарларга алардын заказдары тууралуу маалыматты кошолу:
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>#ИЧКИ КОШУЛУНУЗ</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
SELECT
First
Name
, CreatedAt, ProductCount, Price</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
Кардарлардан Заказдарга кошулуңуз</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
ON
Orders.CustomerId = Customers.Id;</font></font><font></font>
<font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
#СОЛ КОШУЛУҢУЗ</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
SELECT
First
Name
, CreatedAt, ProductCount, Price</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
КАЛГАН кардарлардан КОШУЛУУ Заказдар</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
ON
Orders.CustomerId = Customers.Id;</font></font><font></font>
@A@
LEFT JOIN болгон учурда, MySQL адегенде Кардарлар таблицасынан бардык кардарларды тандайт, андан кийин шарттын жардамы менен аларды Заказдар таблицасындагы буйрутмалар менен дал келтирет Orders.CustomerId = Customers.Id
. Бирок, бардык сатып алуучулардын заказы жок. Бул учурда, сатып алуучу NULL маанилерге тиешелүү мамычаларды коет.
Жогорудагы мисалда OUTER JOIN үчүн бириктирүү түрүн сол-тараптан оң-тараптууга өзгөртөлү:
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
SELECT
First
Name
, CreatedAt, ProductCount, Price</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
Кардарлардан ТУУРА КОШУЛУУ Заказдарга</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
ON
Orders.CustomerId = Customers.Id;</font></font><font></font>
@A@
Эми Буйрутмалардагы бардык саптар (оң таблицадан) тандалып алынат жана аларга Кардарлар таблицасынан шарттуу түрдө байланышкан саптар тиркелет:
Биз буйрутмаларга колдонуучулар жана өнүмдөр тууралуу маалыматты кошуу үчүн сол тарапты колдонобуз:
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
SELECT
Customers.FirstName, Orders.CreatedAt,</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
Products.ProductName, Products.Manufacturer</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
Заказдардан</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
СОЛ КОШУЛУУ Клиенттерди Orders.CustomerId = Customers.Id</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
СОЛ КОШУЛУУ Өнүмдөр
ON
Orders.ProductId = Products.Id;</font></font><font></font>
@A@
Ошондой эле чыпкалоо жана сорттоо менен татаал шарттарды колдоно аласыз. Мисалы, кардарлар жана өнүмдөр тууралуу маалыматы бар бардык буйрутмаларды тандап, баасы 45 000ден жогору болгон өнүмдөрдүн датасы боюнча иргеп алалы:
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
SELECT
Customers.FirstName, Orders.CreatedAt,</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
Products.ProductName, Products.Manufacturer</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
Заказдардан</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
СОЛ КОШУЛУУ Клиенттерди Orders.CustomerId = Customers.Id</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
СОЛ КОШУЛУУ Өнүмдөр
ON
Orders.ProductId = Products.Id</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
КАЙДА Продукциялар.Баасы > 45000</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
ORDER
BY
Orders.CreatedAt;</font></font><font></font>
@A@
Же Буйрутмалар жадыбалында буйрутмасы жок Кардарлардан бардык колдонуучуларды тандаңыз:
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>Кардарлардан аты-жөнүн тандаңыз</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
СОЛ КОШУЛУУ буйрутмалары Customers.Id = Orders.CustomerId</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
WHERE
Orders.CustomerId
NULL
IS
;</font></font><font></font>
@A@
Сиз ошондой эле ички кошулууну жана тышкы кошулууну айкалыштыра аласыз:
<font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
SELECT
Customers.FirstName, Orders.CreatedAt,</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
Products.ProductName, Products.Manufacturer</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
Заказдардан</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
Orders.ProductId = Products.Id
AND
Products.Price > 45000.</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
СОЛ КОШУЛУУ Клиенттерди Orders.CustomerId = Customers.Id</font></font><font></font><font style=
"vertical-align: inherit;"
><font style=
"vertical-align: inherit;"
>
ORDER
BY
Orders.CreatedAt;</font></font><font></font>
@A@
Биринчиден, шарт боюнча, Продукттардан тиешелүү маалымат Заказдар таблицасына Inner Join аркылуу кошулат, андан кийин Кардарлар таблицасындагы маалымат тышкы кошулуу аркылуу кошулат.