SQL: podzapytania a JOIN
Podzapytania i sprzężenia to dwa ważne pojęcia w SQL, standardowym języku programowania służącym do zarządzania bazami danych i manipulowania nimi. Na tym blogu zbadamy, czym są podzapytania i sprzężenia, czym się różnią i kiedy używać każdego z nich w zapytaniach SQL.
Co to są podzapytania?
Podzapytanie to zapytanie w zapytaniu. Jest to sposób na zagnieżdżenie instrukcji SELECT w innej instrukcji SELECT, INSERT, UPDATE lub DELETE albo w instrukcji CREATE VIEW. Podkwerendy mogą być używane do wykonywania różnych zadań, takich jak:
- Filtrowanie wierszy na podstawie warunku
- Obliczanie wartości do użycia w zapytaniu zewnętrznym
- Zwracanie jednej wartości lub wielu wartości jako części zapytania zewnętrznego
Sprzężenie to sposób łączenia wierszy z dwóch lub więcej tabel na podstawie powiązanej między nimi kolumny. Istnieje kilka rodzajów połączeń, w tym INNER JOIN, OUTER JOIN i CROSS JOIN.
INNER JOIN zwraca tylko te wiersze, które spełniają warunek łączenia.
OUTER JOIN zwraca wszystkie wiersze z obu tabel, w tym te, które nie spełniają warunku łączenia. Istnieją dwa typy sprzężeń zewnętrznych: LEFT JOIN i RIGHT JOIN. LEFT JOIN zwraca wszystkie wiersze z lewej tabeli (pierwszej tabeli w zapytaniu) i wszystkie pasujące wiersze z prawej tabeli. RIGHT JOIN zwraca wszystkie wiersze z prawej tabeli (druga tabela w zapytaniu) i wszystkie pasujące wiersze z lewej tabeli.
CROSS JOIN zwraca iloczyn kartezjański dwóch tabel, który jest kombinacją wszystkich wierszy z obu tabel.
Praktyczny przykład:
W tym scenariuszu mamy bazę danych Hogwartu, a poniższe tabele są wymienione poniżej:
- Course_table: Ta tabela zawiera dane dotyczące nazw kursów i jest identyfikowana za pomocą unikalnego klucza podstawowego
- student_table: Ta tabela zawiera dane dotyczące nazwisk uczniów, które są identyfikowane przez unikalny klucz podstawowy
- Registration_table: Ta tabela jest tabelą JOIN, która określa relacje między studentami a kursami. Za każdym razem, gdy student zapisuje się na kurs, tworzony jest nowy rekord. id_kursu jest kluczem obcym identyfikującym kurs z tabeli_kursów, a id_ucznia jest kluczem obcym identyfikującym studenta z tabeli_uczniów.
course:
+─────+────────────────────────────────+
| id | course |
+─────+────────────────────────────────+
| 1 | Defense against the dark arts |
| 2 | Potions |
| 3 | History of magic |
+─────+────────────────────────────────+
student:
+─────+────────────────────────────────+
| id | student |
+─────+────────────────────────────────+
| 1 | Harry Potter |
| 2 | Hermione Granger |
| 3 | Ron Weasly |
| 4 | Voldemort |
| 5 | Draco Malfoy |
+─────+────────────────────────────────+
enrollment:
+─────+────────────+─────────────+
| id | course_id | student_id |
+─────+────────────+─────────────+
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 3 | 2 |
| 4 | 2 | 3 |
| 5 | 3 | 4 |
| 6 | 1 | 5 |
| 7 | 3 | 1 |
| 8 | 1 | 4 |
+─────+────────────+─────────────+
Poniżej znajduje się przykład podejścia opartego na podzapytaniu.
SELECT * FROM enrollment
WHERE enrollment.course_id IN (SELECT * FROM courses WHERE course_id = 1);
PRZYSTĄP
Poniżej wymieniono podejście Join.
SELECT * FROM course AS c
LEFT JOIN enrollment AS e ON c.id = e.course_id
WHERE e.course_id = 1
Kiedy używać podzapytań i sprzężeń
Zarówno zapytania podrzędne, jak i sprzężenia mogą być używane do pobierania danych z wielu tabel, ale mają różne przypadki użycia. Podkwerendy są zwykle używane, gdy chcesz użyć wyników kwerendy wewnętrznej w klauzuli WHERE lub HAVING kwerendy zewnętrznej. Są również przydatne, gdy chcesz zwrócić pojedynczą wartość lub wiele wartości jako część zewnętrznego zapytania.
Złączenia są zwykle używane, gdy chcesz pobrać dane z wielu tabel na podstawie powiązanej między nimi kolumny. Są również przydatne, gdy chcesz zwrócić wszystkie wiersze z obu tabel, w tym te, które nie spełniają warunku łączenia.
Ogólnie rzecz biorąc, podzapytania są zwykle bardziej wydajne, gdy trzeba zwrócić tylko kilka wierszy, podczas gdy sprzężenia są bardziej wydajne, gdy trzeba zwrócić dużą liczbę wierszy. Jednak różnica w wydajności między tymi dwoma może się różnić w zależności od rozmiaru tabel i złożoności zapytań.
Podsumowując, podzapytania i sprzężenia to dwa ważne narzędzia do pobierania danych z wielu tabel w SQL. Podzapytania są przydatne do filtrowania wierszy i zwracania wartości w ramach zapytania zewnętrznego, natomiast sprzężenia są przydatne do łączenia wierszy z wielu tabel na podstawie powiązanej kolumny. Oba mogą służyć do osiągnięcia podobnych celów, ale wybór, którego użyć, zależy od konkretnych wymagań zapytania.

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































