π ΠΠ°ΠΊ Π² SQL ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ²ΡΠ·ΠΈ ΡΠ°Π±Π»ΠΈΡ: ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ
ΠΠ°ΠΊ Π² SQL ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ²ΡΠ·ΠΈ ΡΠ°Π±Π»ΠΈΡ?
ΠΠ»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° ΡΠ²ΡΠ·Π΅ΠΉ ΡΠ°Π±Π»ΠΈΡ Π² SQL ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ JOIN. ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π΄Π²ΡΡ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π±Π»ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ:
SELECT *
FROM ΡΠ°Π±Π»ΠΈΡΠ°1
JOIN ΡΠ°Π±Π»ΠΈΡΠ°2 ON ΡΠ°Π±Π»ΠΈΡΠ°1.ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1 = ΡΠ°Π±Π»ΠΈΡΠ°2.ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2;
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ JOIN Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ1 ΠΈ ΡΠ°Π±Π»ΠΈΡΡ2 Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅1 ΡΠ°Π±Π»ΠΈΡΡ1 ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅2 ΡΠ°Π±Π»ΠΈΡΡ2.
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ INNER JOIN:
SELECT DISTINCT *
FROM ΡΠ°Π±Π»ΠΈΡΠ°1
INNER JOIN ΡΠ°Π±Π»ΠΈΡΠ°2 ON ΡΠ°Π±Π»ΠΈΡΠ°1.ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°1 = ΡΠ°Π±Π»ΠΈΡΠ°2.ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°2;
Π’Π°ΠΊΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΈΠΏΡ JOIN, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ LEFT JOIN, RIGHT JOIN ΠΈ FULL JOIN, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡΠΌΠΈ ΡΠ²ΡΠ·ΠΈ.
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ Π² SQL ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ²ΡΠ·ΠΈ ΡΠ°Π±Π»ΠΈΡ?
SQL (Structured Query Language) ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΠΌΠΈ Π² ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΡ Π±Π°Π·Π°Ρ Π΄Π°Π½Π½ΡΡ . Π SQL, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ JOIN ΠΈ FOREIGN KEY.
1. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ JOIN:
ΠΠΎΠΌΠ°Π½Π΄Π° JOIN Π² SQL ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Π΄Π²ΡΡ ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π±Π»ΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΈΡ ΡΠ²ΡΠ·Π΅ΠΉ. ΠΠ½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΎΠ»Π±ΡΠ°ΠΌΠΈ ΡΠ°Π±Π»ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΈΠ»ΠΈ Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
ΠΡΠΈΠ²Π΅Π΄Ρ ΠΏΡΠΈΠΌΠ΅Ρ, Π³Π΄Π΅ Ρ Π½Π°Ρ Π΅ΡΡΡ Π΄Π²Π΅ ΡΠ°Π±Π»ΠΈΡΡ: "Customers" (ΠΠ°ΠΊΠ°Π·ΡΠΈΠΊΠΈ) ΠΈ "Orders" (ΠΠ°ΠΊΠ°Π·Ρ), ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π·Π°ΠΊΠ°Π·Ρ ΡΠ΄Π΅Π»Π°Π»ΠΈ Π½Π°ΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡ:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ JOIN, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΡΠ°Π±Π»ΠΈΡΡ "Customers" ΠΈ "Orders" ΠΏΠΎ ΡΡΠΎΠ»Π±ΡΡ "CustomerID", ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠΈΠΌ Π΄Π»Ρ ΠΎΠ±Π΅ΠΈΡ ΡΠ°Π±Π»ΠΈΡ. ΠΡ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΠΈΠΌΠ΅Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ "Customers" ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ Π·Π°ΠΊΠ°Π·ΠΎΠ² ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ "Orders". Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΡΡΡΠΎΠΊΠΈ, Π³Π΄Π΅ Π΅ΡΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ Π² ΠΎΠ±ΠΎΠΈΡ ΡΠ°Π±Π»ΠΈΡΠ°Ρ .
2. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΊΠ»ΡΡΠ° (FOREIGN KEY):
Π ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΡΡ Π±Π°Π·Π°Ρ Π΄Π°Π½Π½ΡΡ ΡΠ²ΡΠ·ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ (FOREIGN KEY). ΠΠ½Π΅ΡΠ½ΠΈΠΉ ΠΊΠ»ΡΡ - ΡΡΠΎ ΡΡΠΎΠ»Π±Π΅Ρ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΡΡΠΎΠ»Π±ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ Π΄Π²Π΅ ΡΠ°Π±Π»ΠΈΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΡΡΠΎΠ»Π±ΡΠ° ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ° Π΄ΡΡΠ³ΠΎΠΉ ΡΠ°Π±Π»ΠΈΡΡ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ, Π³Π΄Π΅ Ρ Π½Π°Ρ Π΅ΡΡΡ Π΄Π²Π΅ ΡΠ°Π±Π»ΠΈΡΡ: "Employees" (Π‘ΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΈ) ΠΈ "Departments" (ΠΡΠ΄Π΅Π»Ρ). Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠ° Π΅ΡΡΡ ΠΎΡΠ΄Π΅Π», ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΠ½ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ. ΠΡ Ρ ΠΎΡΠΈΠΌ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΈ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΠΊΠ°ΠΊΠΈΠΌ ΠΎΡΠ΄Π΅Π»Π°ΠΌ:
SELECT Employees.EmployeeName, Departments.DepartmentName
FROM Employees
JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ Π½Π°Ρ Π΅ΡΡΡ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠ»ΡΡ "DepartmentID" Π² ΡΠ°Π±Π»ΠΈΡΠ΅ "Employees", ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° ΡΡΠΎΠ»Π±Π΅Ρ "DepartmentID" Π² ΡΠ°Π±Π»ΠΈΡΠ΅ "Departments". ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ JOIN, ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΡΠ°Π±Π»ΠΈΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ Π² ΡΡΠΈΡ ΡΡΠΎΠ»Π±ΡΠ°Ρ . Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΈΠΌΠ΅Π½Π° ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΎΠ² ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΠΎΠ², ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΠ½ΠΈ ΠΎΡΠ½ΠΎΡΡΡΡΡ.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² ΠΎΠ±ΠΎΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ JOIN Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠ°Π±Π»ΠΈΡ ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ . JOIN - ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ²ΡΠ·ΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π±Π»ΠΈΡΠ°ΠΌΠΈ Π² SQL.