mysql join tutorial inner
Dowiedz się o różnych instrukcjach MySQL JOIN, takich jak Inner, Outer, Cross, Left, Right i Self z przykładami składni i programowania:
W tym samouczku nauczymy się MySQL JOIN, a także zrozumiemy różne typy połączeń, które są obsługiwane w MySQL. JOIN w swojej najprostszej formie można traktować jako sposób pobierania / aktualizowania lub usuwania danych z wielu tabel w ramach jednego zapytania.
W skrócie, JOIN łączy 2 lub więcej tabel w celu pobrania danych dla danego warunku.
MySQL obsługuje również inne sposoby wykonywania zapytań o dane z wielu tabel przy użyciu - podzapytań i łącząc wiele zapytań za pomocą UNION itp.
Czego się nauczysz:
Tabele znormalizowane
W znormalizowanych bazach danych MySQL tabele mają relacje ze wspólnymi kolumnami za pomocą kluczowych ograniczeń, takich jak klucze obce.
Spróbujmy to zrozumieć na przykładzie - Załóżmy, że istnieją 2 tabele, EMPLOYEE i EMPLOYEE_DEPARTMENT. Teraz w zdenormalizowanej bazie danych - tj. Pojedynczej tabeli zawierającej wszystkie kolumny, wiele informacji, na przykład o dziale, byłoby zduplikowanych, ponieważ może być wielu pracowników, którzy są częścią tego samego działu.
W związku z tym, aby zmniejszyć te duplikacje i zaoszczędzić na pamięci, bazy danych są utrzymywane w znormalizowanym stanie.
W tym przypadku odwołalibyśmy się do działu za pomocą pola Department_id w tabeli PRACOWNIK, a wszystkie istotne informacje związane z działem, takie jak informacje o oddziale, kierownik działu itp., Mogą być przechowywane jako część tabeli EMPLOYEE_DEPARTMENT.
A więc w skrócie - EMPLOYEE i EMPLOYEE_DEPARTMENT są ze sobą połączeni za pośrednictwem pola Department_id, które działa jako FOREIGN KEY dla tabeli EMPLOYEE i PRIMARY KEY dla tabeli EMPLOYEE_DEPARTMENT.
Poniższy obraz to obrazowe przedstawienie związku między obiema tymi tabelami za pomocą Ograniczenie klucza obcego
DOŁĄCZ DO MySQL
MySQL JOIN służy do pobierania, aktualizowania lub usuwania danych z 2 lub więcej tabel pod zadanym warunkiem. Dlatego JOIN jest zawsze używany w połączeniu z instrukcjami SELECT, UPDATE lub DELETE
Składnia polecenia JOIN:
DOŁĄCZ z SELECT
SELECT {column_list} FROM tableName1 {joinType} tableName2 ON {joinCondition}
DOŁĄCZ z UPDATE
DELETE FROM tableName1 {joinType} tableName2 ON {joinCondition} WHERE {condition}
DOŁĄCZ z DELETE
UPDATE tableName1 SET targetColumn = targetValue FROM tableName1 {joinType} tableName2 ON {joinCondition} WHERE {condition}
Należy pamiętać, że JOIN można zastosować do wielu tabel w jednym zapytaniu, ale dla uproszczenia spróbujmy najpierw zrozumieć, jak używać połączeń z 2 tabelami.
Różne części składni obejmują:
- {column_list} - Reprezentuje nazwy kolumn, które chcemy pobrać jako wynik naszego zapytania.
- {JoinType} - Wskazuje to na typ łączenia, którego używamy. Istnieją różne typy POŁĄCZEŃ, które mogą pobierać dane:
- WEWNĘTRZNE DOŁĄCZENIE
- DOŁĄCZ ZEWNĘTRZNE
- POŁĄCZENIE LEWE ZEWNĘTRZNE
- PRAWE POŁĄCZENIE ZEWNĘTRZNE
- CROSS JOIN
Dowiemy się o wszystkich tych różnych typach POŁĄCZEŃ MySQL w kolejnych sekcjach samouczka.
- {JoinCondition} - To są warunki kolumny, które będą używane przez JOIN do wykonywania zapytań i pobierania danych.
W następnej sekcji omówimy różne typy połączeń, które są dostępne w MySQL.
Typy MySQL DOŁĄCZ
Przygotowanie przykładowych danych
Aby skorzystać z JOINS, użyjemy 2 tabel Pracownik i Dział_Pracownika z poniższymi szczegółami. Możesz użyć / odnieść się do pomocnej witryny tutaj w celu wygenerowania fikcyjnych danych dla schematu.
Zapytania ofertowe dotyczące tworzenia i wstawiania tabeli:
CREATE TABLE IF NOT EXISTS Employee_Department ( name varchar(100), id INT NOT NULL auto_increment, PRIMARY KEY (id) ); CREATE TABLE IF NOT EXISTS Employee ( name varchar(100), id int not null auto_increment, address varchar(100), Department_id int, PRIMARY KEY (id), FOREIGN KEY (Department_id) references Employee_Department(id) ); INSERT INTO `Employee_Department` VALUES ('Information Technology','1'), ('HR','2'), ('Finance','3'), ('Accounting','4'), ('Housekeeping','5'), ('Security','6'), ('Support','7'), ('Contract Staff','8'), ('Sales','9'), ('Management','10'); INSERT INTO `Employee` VALUES ('Veniam','1','640 Damon Junction
East Mathew, NY 68818','3'), ('Molestiae','2','6658 Hollis Club
Ernamouth, TX 19743','10'), ('Officiis','3','59965 Mason Neck Apt. 985
Kareemborough, NV 85535','9'), ('Rerum','4','91067 Geovany Fort
Hanefort, WA 92863','6'), ('Et','5','7647 Reva Shores Suite 970
New Audrafort, OH 17846-5397','2'), ('Et','6','9419 Carmela Burg Apt. 687
Aimeebury, SD 32389-4489','8'), ('Laborum','7','6961 Weissnat Drive
Donnellyfort, MT 53947','6'), ('Cupiditate','8','117 Nellie Summit Suite 982
South Heavenfurt, CA 45675','8'), ('Eveniet','9','9086 Mariam Square Suite 698
South Dulce, MT 82861-3079','2'), ('Rerum','10','783 Goodwin Burgs Apt. 429
Willmsfort, UT 42820-1019','9'), ('Quis','11','42928 Ernesto Trail
East Jules, WV 87169-2851','1'), ('Esse','12','161 Kassulke Stravenue Apt. 937
Williamsonton, MS 62622','7'), ('Dolores','13','22811 Liliana Trail Apt. 890
South Ernesto, MT 04134','10'), ('Ut','14','981 Laron Overpass Suite 361
West Olahaven, FL 46982-7801','10'), ('Mollitia','15','411 Louisa Mill
South Maximefort, MA 04903','8'), ('Necessitatibus','16','2853 Jonathon Turnpike
Quitzonville, KY 54776','4'), ('Fugit','17','3647 Rosalinda Corner
Maureenstad, RI 96605','5'), ('Corporis','18','03559 Nicholas Circle Apt. 364
West Zettaberg, ID 58592-3447','8'), ('Neque','19','56111 Alysson Gateway Apt. 212
Leschbury, VT 90605-2306','8'), ('Velit','20','263 O'Keefe Avenue Apt. 884
West Missouri, IL 50303','6'),
WEWNĘTRZNE DOŁĄCZENIE
INNER JOIN jest najpowszechniejszą formą JOIN i jest bardzo szeroko stosowana. Prawie wszyscy z was powinni byli tego użyć w jakimś momencie. Zobaczmy składnię, a następnie kilka przykładowych zapytań.
Składnia:
SELECT {column_list} FROM tableName1 INNER JOIN tableName2 ON {joinCondition}
Zapytanie do pobrania Nazwy_działów dla wszystkich pracowników z podanych powyżej tabel (Pracownik i Dział_Pracownika):
SELECT Employee.name as Employee_name, Employee_Department.name as Department_name FROM Employee INNER JOIN Employee_Department ON Employee.Department_id = Employee_Department.id
Oto wynik powyższego zapytania:
Imię i nazwisko pracownika | Nazwa oddziału |
---|---|
rzeczy | Bezpieczeństwo |
WHO | Technologia informacyjna |
I | HR |
zdarzać się | HR |
ja | Finanse |
wymagania | Księgowość |
Fgit | Gospodarowanie |
przekąski | Bezpieczeństwo |
Proszę | Bezpieczeństwo |
Że | Wsparcie |
I | Personel kontraktowy |
zapał | Personel kontraktowy |
sprężystość | Personel kontraktowy |
ciało | Personel kontraktowy |
Targi | Personel kontraktowy |
biura | Sprzedaż |
rzeczy | Sprzedaż |
irytacje | Zarządzanie |
Trud | Zarządzanie |
Na zewnątrz | Zarządzanie |
Uwaga: Tutaj użyliśmy aliasów nazw kolumn. Przykład: Employee.name jako Employee_name - tylko po to, aby wyniki były bardziej czytelne i wyczerpujące.
Zmodyfikujmy to zapytanie, aby pobierało tylko nazwy zaczynające się na literę „m”.
SELECT Employee.name as Employee_name, Employee_Department.name as Department_name FROM Employee INNER JOIN Employee_Department ON Employee.Department_id = Employee_Department.id WHERE Employee.name like 'm%'
Poniżej znajduje się wynik:
Imię i nazwisko pracownika | Nazwa oddziału | |||||
---|---|---|---|---|---|---|
przekąski | 7 | 6961 Weissnat Drive Donnellyfort, MT 53947 | 6 | ZERO | ZERO | ZERO |
irytacje | Zarządzanie | |||||
sprężystość | Personel kontraktowy |
A teraz zrozummy WEWNĘTRZNE POŁĄCZENIE za pomocą diagramu Venna, jak poniżej. Zwrócone wiersze wynikowe składają się z nakładających się danych z obu tabel, dopasowanych do warunku JOIN.
DOŁĄCZ ZEWNĘTRZNE
OUTER JOIN służy do pobierania danych z 2 lub więcej tabel, z wyjątkiem dołączania niedopasowanych wierszy (lub wierszy zawierających dane zerowe dla zapytanych kolumn).
Aby lepiej zrozumieć Outer Join, dodaj nową tabelę office_locations zawierającą pola - id i adres oraz dodaj nową kolumnę o nazwie `office_id` do pierwotnie utworzonej tabeli Employee.
Oto pytania dotyczące tego samego:
CREATE TABLE IF NOT EXISTS office_locations ( address varchar(100), id INT NOT NULL auto_increment, PRIMARY KEY (id) ); ALTER TABLE Employee ADD COLUMN office_id int; INSERT INTO `office_locations`(address) VALUES('Bangalore'), ('Mumbai'), ('Seattle'), ('Santa Clara'); UPDATE Employee SET office_id=1 where id % 2 = 0; UPDATE Employee SET office_id=2 where id % 3 = 0;
Proszę zapoznać się z poniższym Diagramem Venna, aby obrazowo zrozumieć POŁĄCZENIA ZEWNĘTRZNE:
Istnieją 2 typy POŁĄCZEŃ ZEWNĘTRZNYCH
a) LEWE POŁĄCZENIE ZEWNĘTRZNE
Jak sama nazwa wskazuje, ten typ Join pobierałby wszystkie wiersze (w tym wartości NULL) z tabeli, która znajduje się po lewej stronie zapytania JOIN. Mówiąc prościej, wszystkie wyniki / wiersze, które nie są zgodne z warunkiem JOIN, zostaną zwrócone z wynikiem o wartości NULL dla prawej tabeli.
Na przykład, potrzebujemy danych lokalizacyjnych dla wszystkich Pracowników - czyli dowiedzieć się, jaki jest adres biura wszystkich Pracowników.
SELECT * from Employee LEFT OUTER JOIN office_locations ON Employee.office_id = office_locations.id
Wynik powyższego zapytania:
Nazwa | ID | Adres | Department_id | Office_id | Adres biura | ID |
---|---|---|---|---|---|---|
ja | 1 | 640 Damon Junction East Mathew, NY 68818 | 3 | ZERO | ZERO | ZERO |
irytacje | dwa | 6658 Hollis Club Ernamouth, TX 19743 | 10 | 1 | Bangalore | 1 |
biura | 3 | 59965 Mason Neck Apt. 985 Kareemborough, NV 85535 | 9 | dwa | Bombaj | dwa |
rzeczy | 4 | 91067 Fort Geovany) Hanefort, WA 92863 | 6 | 1 | Bangalore | 1 |
I | 5 | 7647 Reva Shores Suite 970 Nowy Audrafort, OH 17846-5397 | dwa | ZERO | ZERO | ZERO |
I | 6 | 9419 Carmela Burg Apt. 687 Aimeebury, SD 32389-4489 | 8 | dwa | Bombaj | dwa |
zapał | 8 | Nellie Summit Suite 117 982 South Heavenfurt, CA 45675 | 8 | 1 | Bangalore | 1 |
zdarzać się | 9 | Leśniczówka 9086 South Dulce, MT 82861-3079 | dwa | dwa | Bombaj | dwa |
rzeczy | 10 | 783 Goodwin Burgs Apt. 429 Willmsfort, UT 42820-1019 | 9 | 1 | Bangalore | 1 |
WHO | jedenaście | 42928 Ernesto Trail East Jules, WV 87169-2851 | 1 | ZERO | ZERO | ZERO |
Że | 12 | 161 Kassulke Stravenue Apt. 937 Williamsonton, MS 62622 | 7 | dwa | Bombaj | dwa |
Trud | 13 | 22811 Liliana Trail Apt. 890 South Ernesto, MT 04134 | 10 | ZERO | ZERO | ZERO |
Na zewnątrz | 14 | 981 Laron Overpass Suite 361 West Olahaven, FL 46982-7801 | 10 | 1 | Bangalore | 1 |
sprężystość | piętnaście | 411 Louisa Mill South Maximefort, MA 04903 | 8 | dwa | Bombaj | dwa |
wymagania | 16 | 2853 Jonathon Turnpike Quitzonville, KY 54776 | 4 | 1 | Bangalore | 1 |
FLED | 17 | 3647 Rosalinda Corner Maureenstad, RI 96605 | 5 | ZERO | ZERO | ZERO |
ciało | 18 | 03559 Nicholas Circle Apt. 364 West Zettaberg, dowód tożsamości 58592-3447 | 8 | dwa | Bombaj | dwa |
lub | 19 | 56111 Alysson Gateway Apt. 212 Leschbury, VT 90605-2306 | 8 | ZERO | ZERO | ZERO |
Proszę | 20 | 263 O'Keefe Avenue Apt. 884 West Missouri, IL 50303 | 6 | 1 | Bangalore | 1 |
b) PRAWE POŁĄCZENIE ZEWNĘTRZNE
Podobnie jak LEFT JOIN, w tym typie Join wszystkie rekordy, które nie pasują do prawej tabeli, są zwracane z wartościami NULL w kolumnach tabeli po lewej stronie.
programy, które mogą edytować pliki pdf
Na przykład, z naszymi przykładowymi tabelami, jeśli uruchomimy RIGHT JOIN dla tego samego zapytania, którego użyliśmy dla LEFT JOIN, otrzymamy wartości NULL dla miast „Seattle” i „Santa Clara”, ponieważ w tabeli Employee nie ma wierszy z ustawioną lokalizacją do tych wartości.
SELECT * from Employee RIGHT OUTER JOIN office_locations ON Employee.office_id = office_locations.id
Wynik powyższego zapytania:
Nazwa | ID | Adres | Department_id | Office_id | Adres biura | ID |
---|---|---|---|---|---|---|
Proszę | 20 | 263 O'Keefe Avenue Apt. 884 West Missouri, IL 50303 | 6 | 1 | Bangalore | 1 |
irytacje | dwa | 6658 Hollis Club Ernamouth, TX 19743 | 10 | 1 | Bangalore | 1 |
rzeczy | 4 | 91067 Fort Geovany Hanefort, WA 92863 | 6 | 1 | Bangalore | 1 |
zapał | 8 | Nellie Summit Suite 117 982 South Heavenfurt, CA 45675 | 8 | 1 | Bangalore | 1 |
rzeczy | 10 | 783 Goodwin Burgs Apt. 429 Willmsfort, UT 42820-1019 | 9 | 1 | Bangalore | 1 |
Na zewnątrz | 14 | 981 Laron Overpass Suite 361 West Olahaven, FL 46982-7801 | 10 | 1 | Bangalore | 1 |
wymagania | 16 | 2853 Jonathon Turnpike Quitzonville, KY 54776 | 4 | 1 | Bangalore | 1 |
biura | 3 | 59965 Mason Neck Apt. 985 Kareemborough, NV 85535 | 9 | dwa | Bombaj | dwa |
I | 6 | 9419 Carmela Burg Apt. 687 Aimeebury, SD 32389-4489 | 8 | dwa | Bombaj | dwa |
zdarzać się | 9 | Leśniczówka 9086 South Dulce, MT 82861-3079 | dwa | dwa | Bombaj | dwa |
Że | 12 | 161 Kassulke Stravenue Apt. 937 Williamsonton, MS 62622 | 7 | dwa | Bombaj | dwa |
sprężystość | piętnaście | 411 Louisa Mill South Maximefort, MA 04903 | 8 | dwa | Bombaj | dwa |
ciało | 18 | 03559 Nicholas Circle Apt. 364 West Zettaberg, dowód tożsamości 58592-3447 | 8 | dwa | Bombaj | dwa |
ZERO | ZERO | ZERO | ZERO | ZERO | Seattle | 3 |
ZERO | ZERO | ZERO | ZERO | ZERO | Święta Clara | 4 |
Uwagi / wskazówki:
- W innych relacyjnych bazach danych, takich jak Microsoft SQL - możesz znaleźć inny typ POŁĄCZENIA ZEWNĘTRZNEGO, który nazywa się FULL POŁĄCZENIE ZEWNĘTRZNE. To nic innego jak kombinacja połączeń INNER i OUTER - tj. Zwróci wartości NULL z obu tabel LEFT i RIGHT.
- Aby uzyskać szczegółową dyskusję wraz z wyjaśnieniem i przykładami dotyczącymi różnic między POŁĄCZENIAMI WEWNĘTRZNYMI i ZEWNĘTRZNYMI, zapoznaj się z naszym samouczkiem tutaj.
- W zapytaniach OUTER JOIN - RIGHT OUTER JOIN i LEFT OUTER JOIN można po prostu określić odpowiednio jako RIGHT JOIN i LEFT JOIN dla większej czytelności.
CROSS JOIN
CROSS JOIN jest również nazywany produktem kartezjańskim. Zwraca wynik dla pasujących warunków łączenia z całkowitą liczbą m x n wierszy, gdzie m i n to liczba pasujących wierszy w tabeli1 i tabela2 względem warunku JOIN.
Zobaczmy przykładowe zapytanie dotyczące CROSS JOIN w celu uzyskania wyników z 2 tabel - Employee i office_locations
SELECT * from Employee CROSS JOIN office_locations
Zwrócone dane wyjściowe będą zawierać łącznie 80 wierszy, co jest niczym innym jak iloczynem wierszy w obu tabelach - Pracownik (20) x office_locations (4) => 80
Proszę to zanotować, podczas wykonywania CROSS JOIN nie musisz określać żadnego warunku JOIN, ponieważ i tak uzyskasz wynik m x n.
Uwagi / wskazówki:
Nie znajdziesz wiele razy przy użyciu CROSS JOIN, ponieważ nie ma wielu powiązanych przypadków użycia. To sprzężenie jest zwykle wykonywane, gdy ktoś szuka wszystkich możliwych kombinacji danych z 2 tabel.
Na przykład: Załóżmy, że jesteś eksporterem odzieży i masz dwie tabele - jedną z danymi o kolorze, a drugą z danymi o rozmiarze. W celu zapewnienia zapasów możesz rozważyć wykonanie CROSS JOIN obu tabel, aby upewnić się, że wszystkie ubrania są dostępne dla wszystkich kombinacji rozmiarów i kolorów.
SELF DOŁĄCZ
SELF JOIN działa tak samo, jak każde inne połączenie INNER lub OUTER, z jedynymi wyjątkami, że oba stoły, tj. Tabela łącząca i łączona, są takie same.
Zwykle używamy SELF Joins, gdy chcemy znaleźć związek między wierszami tej samej tabeli. Na przykład, jeśli tabela zawiera zarówno identyfikator pracownika, jak i identyfikator pracownika przełożonego, możemy dołączyć do tabeli przeciwko sobie, jeśli chcemy znaleźć nazwisko kierownika w porównaniu z nazwiskiem pracownika.
Należy pamiętać, że w przypadku SELF JOIN należy używać aliasów tabel, aby można było określić warunki łączenia odnoszące się do odpowiedniej tabeli.
Zobaczmy tutaj przykład:
SELECT e1.name as Employee1, e2.name as Employee2 from Employee e1 inner join Employee e2 on e1.office_id = e2.office_id where e1.Department_id = e2.Department_id
Tutaj dołączyliśmy do tabeli Pracownicy, aby znaleźć nazwiska pracowników, które mają tę samą lokalizację biura i dział
Pracownik 1 | Pracownik 2 |
---|---|
I | sprężystość |
irytacje | irytacje |
irytacje | Na zewnątrz |
Oficiis | biura |
rzeczy | rzeczy |
rzeczy | Proszę |
I | I |
I | ciało |
zapał | zapał |
zdarzać się | zdarzać się |
rzeczy | rzeczy |
Że | Że |
Na zewnątrz | irytacje |
Na zewnątrz | Na zewnątrz |
sprężystość | I |
sprężystość | sprężystość |
sprężystość | ciało |
wymagania | wymagania |
ciało | I |
ciało | sprężystość |
ciało | ciało |
Proszę | rzeczy |
Proszę | Proszę |
Jak już wspomnieliśmy, SELF JOIN to po prostu tabele łączenia i łączenia jako takie same, możemy użyć SELF JOIN z połączeniami INNER lub OUTER.
MySQL DOŁĄCZ Z AKTUALIZACJĄ I USUŃ
Do tej pory omawialiśmy Joins z instrukcjami SELECT. Jednak łączenia mogą być również używane z instrukcjami MySQL DELETE i UPDATE.
Składnia pozostaje tutaj taka sama. Zobaczmy kilka przykładów, aby lepiej zrozumieć tę koncepcję.
AKTUALIZUJ Z INNER JOIN
Załóżmy, że chcemy zmienić adres w tabeli Employee na nazwę lokalizacji biura obecną w tabeli office_locations. Tutaj możemy użyć INNER JOIN, aby pobrać nazwę miasta z office_locations i zaktualizować to samo zapytanie.
Przykładowe zapytanie:
UPDATE Employee emp inner join office_locations off_loc on emp.office_id = off_loc.id set emp.address = off_loc.address;
Podobnie, UPDATE może być używane również z innymi typami złączeń, w zależności od wymagań w określonych przypadkach użycia.
niezdefiniowane odwołanie do C ++
USUŃ Z INNER JOIN
Jako przykładu użyjemy tabel Employee i Employee_Departments. Załóżmy, że chcemy usunąć wszystkie rekordy pracowników, które należą do działu sprzedaży, a także chcemy usunąć wpis dotyczący działu sprzedaży.
Ponieważ użyliśmy Department_id jako ograniczenia FOREIGN KEY, dlatego powinniśmy najpierw DROP to ograniczenie, zanim użyjemy DELETE z JOIN dla wielu tabel.
Najpierw dowiedzmy się, jaka jest nazwa ograniczenia, które zostało utworzone dla id_ działu w tabeli Pracownik. Po prostu uruchom polecenie, aby uzyskać polecenie CREATE TABLE.
show create table Employee
Otrzymasz wynik jako:
CREATE TABLE `Employee` ( `name` varchar(100) DEFAULT NULL, `id` int NOT NULL AUTO_INCREMENT, `address` varchar(100) DEFAULT NULL, `Department_id` int DEFAULT NULL, `office_id` int DEFAULT NULL, PRIMARY KEY (`id`), KEY `Department_id` (`Department_id`), CONSTRAINT `Employee_ibfk_1` FOREIGN KEY (`Department_id`) REFERENCES `Employee_Department` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
Teraz możesz odwołać się do nazwy ograniczenia FOREIGN_KEY z powyższego polecenia, którym jest „Employee_ibfk_1” i możemy użyć tej nazwy do usunięcia tego ograniczenia z tabeli Employee, uruchamiając poniższe polecenie:
alter table Employee drop constraint Employee_ibfk_1
Teraz uruchommy polecenie DELETE z INNER JOIN
delete emp_dept, emp from Employee emp inner join Employee_Department emp_dept on emp.Department_id = emp_dept.id where emp.Department_id = 9
Wynik tego polecenia byłby nie. usuniętych wierszy (i powinno to pomyślnie USUNĄĆ wiersze z obu tabel, do których odwołuje się zapytanie JOIN powyżej)
Często Zadawane Pytania
Pytanie 1) Ile typów połączeń występuje w MySQL?
Odpowiedź: MySQL obsługuje głównie 3 typy połączeń. To są:
- Połączenie wewnętrzne
- Łączenie zewnętrzne - Łączenie zewnętrzne lewe i Łączenie zewnętrzne prawe
- Łączenie krzyżowe
P # 2) Czy Join może być używany tylko przy 2 stołach?
Odpowiedź: Łączenia można zastosować do 2 lub więcej niż 2 tabel. W większości przypadków łączenia są używane w przypadku 2 tabel.
Poniżej znajduje się przykład WEWNĘTRZNEGO JOIN przy użyciu 3 tabel:
select Employee.name as emp_name, Employee_Department.name as dept_name, office_locations.address as office_location from Employee inner join Employee_Department on Employee.Department_id = Employee_Department.id inner join office_locations on Employee.office_id = office_locations.id
Wynik powyższego zapytania:
emp_name | dept_name | Lokalizacja biura |
---|---|---|
Na zewnątrz | Zarządzanie | Bangalore |
irytacje | Zarządzanie | Bangalore |
rzeczy | Bezpieczeństwo | Bangalore |
I | Personel kontraktowy | Bombaj |
zapał | Personel kontraktowy | Bangalore |
zdarzać się | HR | Bombaj |
Że | Wsparcie | Bombaj |
sprężystość | Personel kontraktowy | Bombaj |
wymagania | Księgowość | Bangalore |
ciało | Personel kontraktowy | Bombaj |
Proszę | Bezpieczeństwo | Bangalore |
Pytanie 3) Jak używać aliasów tabel z połączeniami?
Odpowiedź: Aliasy to sposób na określenie tymczasowej nazwy tabeli, do której należy się odwoływać w zapytaniu. Ponieważ zapytania JOIN są czasami złożone i aby zapytania były czytelne i aby uniknąć odwoływania się do nazw tabel dla każdego odwołania do kolumny, możemy mieć skrócone nazwy z aliasami.
Napiszmy zapytanie INNER JOIN, aby pobrać dane dla wszystkich nazwisk pracowników i nazw działów odpowiednio z tabel Employee i Employee_Departments.
select emp.name as emp_name, Department.name as dept_name from Employee emp inner join Employee_Department as Department on emp.Department_id = Department.id
W powyższym zapytaniu widać, że utworzyliśmy alias tabeli Employee jako emp, a tabela Employee_Department jako Department i użyliśmy aliasów do odwoływania się do nazw kolumn i warunków łączenia.
P # 4) Co to jest CROSS JOIN?
Odpowiedź: CROSS JOIN to typ łączenia, w którym użytkownik chce pobrać iloczyn kartezjański łączonych tabel.
Wynik CROSS JOIN to m x n, gdzie m to liczba pasujących wierszy w pierwszej tabeli, an to liczba pasujących wierszy w drugiej tabeli.
Q # 5) Jak uzyskać FULL OUTER JOIN w MySQL
Odpowiedź: MySQL nie zapewnia PEŁNEGO DOŁĄCZENIA ZEWNĘTRZNEGO jako oddzielnego typu łączenia, w przeciwieństwie do innych baz danych, takich jak Microsoft SQL. Jednak aby uzyskać wyniki, które przyniosłaby FULL OUTER JOIN, możemy połączyć wyniki LEFT OUTER JOIN i RIGHT OUTER JOIN.
Na przykład, możemy pobrać dane pracownika i działu oraz zastosować połączenie do lewych i prawych połączeń zewnętrznych.
Zalecana literatura = >> Operator MySQL Union
Wniosek
W tym samouczku poznaliśmy różne typy połączeń, które są dostępne w MySQL.
Omówiliśmy połączenia INNER, OUTER, CROSS i SELF, a także zobaczyliśmy, jak można używać zapytań JOIN z instrukcjami UPDATE i DELETE w celu uzyskania wydajnych i zoptymalizowanych zapytań dla połączonych danych między 2 lub więcej niż 2 tabelami.
JOINS to jedne z najbardziej podstawowych używanych zapytań, a każdy, kto używa lub uczy się baz danych opartych na języku SQL, powinien dokładnie zrozumieć połączenia SQL.
rekomendowane lektury
- Połączenie wewnętrzne kontra Połączenie zewnętrzne: dokładna różnica w przykładach
- MySQL Create View - samouczek z przykładami kodu
- Instrukcja usuwania MySQL - składnia polecenia usuwania i przykłady
- MySQL Wstaw do tabeli - Wstaw składnię instrukcji i przykłady
- Instrukcja MySQL Update - składnia i przykłady aktualizacji zapytania
- Różnica między SQL a MySQL i SQL Server (z przykładami)
- Co to jest MySQL i dlaczego jest używany?
- Ponad 20 samouczków MongoDB dla początkujących: bezpłatny kurs MongoDB