SQL Join

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 7

SQL join

SQL join/холбох үйлдэл нь хоёр болон түүнээс дээш хүснэгтээс холбоо хамаарал
бүхий мөрүүдийг холбох замаар мэдээлэлүүдийг нэгтгэх үйлдэл юм. Хоёр хүснэгтийн
харгалзах баганууд дахь ижил утгаараа мөрүүд нь хос үүсгэнэ. Хэрэв нэг болон хэд хэдэн
хүснэгтээс мэдээлэл харуулах бол дэд асуулга/subquery болон Join холбоосыг ашигладаг.
Join/холбоос үүсгэх бол ашиглагдах хүснэгтүүдийн нэрийг FROM хэсэгт таслалаар тусгаалах
бичих ба холбоос хийгдэх баганын нөхцөлийг WHERE хэсэгт тодорхойлно. Мөн хүснэгтийн
нэрийн оронд товчлол/alias ашиглаж болно. Товчлолыг хүснэгтийн нэрийн оронд хаана ч
ашиглаж болно. SQL дэх холбоосууд нь үндсэндээ Inner Join болон Outer Join гэж хоёр
хуваагдах ба гадаад холбоос цааш Left Outer Join, Right Outer Join, ба Full Outer Join гэж дэд
хэсгүүдэд хуваагдана.

Жишээ: Энгийн холбоос/Simple join


Үл хөдлөхийг үзсэн хэрэгэлэгчдийн нэрсийн жагсаалтыг тайлбаруудын хамтаар харуулсан
байдал.

SELECT c.clientNo, fName, IName, propertyNo, comment


FROM Client c, Viewing v
WHERE c.clientNo = v.clientNo;

SQL Join-ийг өөрөөр илэрхийлэх арга:

FROM Client c JOIN Viewing v ON c.clientNo = v.clientNo


FROM Client JOIN Viewing USING clientNo
FROM Client NATURAL JOIN Viewing

Эрэмбэлэлттэй холбоос
SELECT s.branchNo, s.staffNo, fName, IName, propertyNo
FROM Staff s, PropertyForRent p
WHERE s.staffNo = p.staffNo
ORDER BY s.branchNo, s.staffNo, propertyNo;
Гурван хүснэгтийн холболт/Three-table join

SELECT b.branchNo, b.city, s.staffNo, fName, IName, propertyNo


FROM Branch b, Staff s, PropertyForRent p
WHERE b.branchNo = s.branchNo AND s.staffNo = p.staffNo
ORDER BY b.branchNo, s.staffNo, propertyNo;

Join/Холбоос Картесийн үржвэр буюу кросс холбоос гэж нэрлэгддэг хоёр хүснэгтийн хослолын дэд
олонлог. Хоёр хүснэгтийн Картесийн продакт/үржвэр гэдэг бол хоёр хүснэгтийн мөрүүдийн бүх
боломжит хослолоос бүрдэх өөр нэг хүснэгт юм.

Cartesian product:

SELECT [DISTINCT | ALL] {* | columnList}


FROM TableName1 CROSS JOIN TableName2
Жишээлбэл Client болон Viewing хүснэгтийн Картесийн продакт хүснэгт нь 20 мөртэй байна (4
clients * 5 viewings = 20 rows).
холбоотой SELECT -ийн үр дүн дараах хэлбэртэй байна:

(1) FROM клаузд нэр дурьдагдсан хүснэгтүүдийн мөрүүдийн нийлбэр буюу Картесийн продакт
хэлбэр.
(2) WHERE клауз ашиглагдсан бол хайлтын нөхцөлийг мөр бүрт хэрэгжүүлэх ба нөхцөл
хангадаж буй мөрүүдийг буцаана.
(3) Үлдсэн бүх мөрүүдийн хувьд, determine the value of each item in the SELECT list to produce a
single row in the result table.
(4) Хэрэв SELECT DISTINCT тодорхойлогдсон бол үр дүнгийн хүснэгтээс давхардсан мөрүүдийг
хасна.
(5) ORDER BY клаук тодорхойлогдсон бол үр дүнгийн хүснэгтийг эрэмблэнэ.

Гадаа холбоос/Outer joins


Outer Join хоёр хүснэгтээс тохирох утгуудтай мөрүүд болон тохирохгүй мөрүүдийг ч үр
дүнгийн хүснэгтэд багтааж өгнө. Тохирохгүй утгуудыг үр дүнд оруулдгаараа Outer join нь
Inner join-оосо ялгарна.
Жишээ нь:

Дотоод (Inner join) холбоос:


SELECT b.*, p.*
FROM Branch1 b, PropertyForRent1 p
WHERE b.bCity = p.pCity;

Хэрэв харгалзах утга олдоогүй мөрүүдийг үр дүнгийн хүснэгтэд оруулах бол Гадаад холбоос/Outer
join ашиглана. 3 Төрлийн гадаад холбоос бий: Left, Right, Full Outer joins.

Left Outer join:

SELECT b.*, p.*


FROM Branch1 b LEFT JOIN PropertyForRent1 p ON b.bCity = p.pCity;
Right Outer join
SELECT b.*, p.*
FROM Branch1 b RIGHT JOIN PropertyForRent1 p ON b.bCity = p.pCity;

Full Outer join

SELECT b.*, p.*


FROM Branch1 b FULL JOIN PropertyForRent1 p ON b.bCity = p.pCity;
SQL EXISTS Operator
EXISTS оператор нь дэд асуулгын үр дүнд ямар нэгэн бичлэг бий эсэхийг шалгахад ашиглагддаг.
Хэрэв нэг эсвэл хэд хэдэн бичлэг дэд олонлогт олдвол EXISTS оператор TRUE утга буцаана.

SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE Products.Supplier
ID = Suppliers.supplierID AND Price < 20);

SQL IN Operator
IN оператор нь WHERE клаус дахь олон утгууд тодорхойлоход ашиглагдана. Өрөөр хэлбэл IN
оператор нь OR нөхцөлийг олон удаа ашиглахыг товчилсон хэлбэр юм.

SELECT * FROM Customers


WHERE Country IN ('Germany', 'France', 'UK');

SELECT * FROM Customers


WHERE Country NOT IN ('Germany', 'France', 'UK');

SELECT * FROM Customers


WHERE Country IN (SELECT Country FROM Suppliers);

You might also like