πŸ”— Как ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² SQL связями: простой ΠΈ понятный способ

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² SQL с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ связСй, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ JOIN. Он позволяСт ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ нСсколько Ρ‚Π°Π±Π»ΠΈΡ† ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:


-- ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1: Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ соСдинСниС (INNER JOIN)
SELECT *
FROM Ρ‚Π°Π±Π»ΠΈΡ†Π°1
JOIN Ρ‚Π°Π±Π»ΠΈΡ†Π°2
    ON Ρ‚Π°Π±Π»ΠΈΡ†Π°1.ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° = Ρ‚Π°Π±Π»ΠΈΡ†Π°2.ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°;

-- ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2: Π›Π΅Π²ΠΎΠ΅ соСдинСниС (LEFT JOIN)
SELECT *
FROM Ρ‚Π°Π±Π»ΠΈΡ†Π°1
LEFT JOIN Ρ‚Π°Π±Π»ΠΈΡ†Π°2
    ON Ρ‚Π°Π±Π»ΠΈΡ†Π°1.ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° = Ρ‚Π°Π±Π»ΠΈΡ†Π°2.ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°;

-- ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3: ΠŸΡ€Π°Π²ΠΎΠ΅ соСдинСниС (RIGHT JOIN)
SELECT *
FROM Ρ‚Π°Π±Π»ΠΈΡ†Π°1
RIGHT JOIN Ρ‚Π°Π±Π»ΠΈΡ†Π°2
    ON Ρ‚Π°Π±Π»ΠΈΡ†Π°1.ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° = Ρ‚Π°Π±Π»ΠΈΡ†Π°2.ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°;

Π’ этих ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… "Ρ‚Π°Π±Π»ΠΈΡ†Π°1" ΠΈ "Ρ‚Π°Π±Π»ΠΈΡ†Π°2" - это ΠΈΠΌΠ΅Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ, Π° "ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°" - это общая ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ соСдинСниС.

Π”Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ‚Π²Π΅Ρ‚

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, студСнт! БСгодня ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² SQL с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ связСй. Π­Ρ‚ΠΎ ваТная Ρ‚Π΅ΠΌΠ° для понимания, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ связи ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ ΠΈΠ³Ρ€Π°ΡŽΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π±Π°Π·Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

НачнСм с Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ расскаТу Ρ‚Π΅Π±Π΅ ΠΎ Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠ°Ρ… связСй Π² SQL: Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ ΠΈ внСшнСй. ВнутрСнняя связь - это ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ объСдинСния Π΄Π²ΡƒΡ… Ρ‚Π°Π±Π»ΠΈΡ† ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠ΅ значСния Π² столбцах, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² условии объСдинСния. Π’Π½Π΅ΡˆΠ½ΡΡ связь, Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, позволяСт Π½Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ всС строки ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ строки ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΈ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ связи Π² SQL. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° прСдставим, Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ - "users" (ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ) ΠΈ "orders" (Π·Π°ΠΊΠ°Π·Ρ‹). ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ нСсколько Π·Π°ΠΊΠ°Π·ΠΎΠ², поэтому ΠΌΠ΅ΠΆΠ΄Ρƒ этими Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ сущСствуСт связь. Π”Π°Π²Π°ΠΉ посмотрим, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ эти Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² SQL:

SELECT *
FROM users
JOIN orders ON users.id = orders.user_id;

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ JOIN для объСдинСния Ρ‚Π°Π±Π»ΠΈΡ† "users" ΠΈ "orders". УсловиС объСдинСния (users.id = orders.user_id) ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ строки Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² столбцС "id" Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ "users" совпадаСт со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π² столбцС "user_id" Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ "orders". Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ этого запроса Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π°, содСрТащая всС строки ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ† "users" ΠΈ "orders", Π³Π΄Π΅ значСния Π² столбцах "id" ΠΈ "user_id" ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚. Π­Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ объСдинСниС Ρ‚Π°Π±Π»ΠΈΡ†.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉ посмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ внСшнСго объСдинСния Ρ‚Π°Π±Π»ΠΈΡ†:

SELECT *
FROM users
LEFT JOIN orders ON users.id = orders.user_id;

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ LEFT JOIN для объСдинСния Ρ‚Π°Π±Π»ΠΈΡ† "users" ΠΈ "orders". ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ LEFT JOIN Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ всС строки ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ "users" ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ строки ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ "orders". Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ запроса ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ всС строки ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ "users", нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρƒ Π½ΠΈΡ… ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ "orders".

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ JOIN ΠΈ LEFT JOIN - это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° ΠΈΠ· мноТСства ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² объСдинСния Ρ‚Π°Π±Π»ΠΈΡ†, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдоставляСт SQL. Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ RIGHT JOIN ΠΈ FULL JOIN, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ситуациях.

Π’ΠΎΡ‚, студСнт, я рассказал Ρ‚Π΅Π±Π΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² SQL с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ связСй. Π­Ρ‚ΠΎ ваТная Ρ‚Π΅ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. НадСюсь, эта ΡΡ‚Π°Ρ‚ΡŒΡ Π±Ρ‹Π»Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ для тСбя!

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

Π‘ΠžΠ•Π”Π˜ΠΠ•ΠΠ˜Π• Π’ΠΠ‘Π›Π˜Π¦ #1 - SQL

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ SQL Π‘Π” ΠΈ связь Ρ‚Π°Π±Π»ΠΈΡ†

Π£Ρ€ΠΎΠΊΠΈ ΠΏΠΎ SQL | Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… | Бвязь ΠΎΠ΄ΠΈΠ½ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

πŸ”— Как ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² SQL связями: простой ΠΈ понятный способ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ слоТныС запросы Π² SQL: основы ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Как ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… SQL Server: ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ