mysql join tutorial inner
구문 및 프로그래밍 예제를 통해 Inner, Outer, Cross, Left, Right 및 Self와 같은 다양한 MySQL JOIN 문에 대해 알아 봅니다.
이 자습서에서는 MySQL JOIN에 대해 배우고 MySQL에서 지원되는 다양한 유형의 조인도 이해합니다. 가장 간단한 형태의 JOIN은 단일 쿼리에 대해 여러 테이블에서 데이터를 검색 / 업데이트 또는 삭제하는 수단으로 생각할 수 있습니다.
따라서 본질적으로 JOIN은 2 개 이상의 테이블을 결합하여 주어진 조건에 대해 데이터를 가져옵니다.
MySQL은 또한 하위 쿼리를 사용하고 UNION 등을 사용하여 여러 쿼리를 결합하여 여러 테이블에서 데이터를 쿼리하는 다른 방법을 지원합니다.
학습 내용 :
정규화 된 테이블
정규화 된 MySQL 데이터베이스에서 테이블은 외래 키와 같은 키 제약 조건을 통해 공통 열에 대한 관계를 갖습니다.
예를 들어 이것을 이해하려고 노력합시다 – EMPLOYEE 및 EMPLOYEE_DEPARTMENT의 두 테이블이 있다고 가정합니다. 이제 비정규 화 된 데이터베이스 (즉, 모든 열이있는 단일 테이블)에서 예를 들어 부서에 대한 많은 정보가 중복됩니다. 동일한 부서에 속한 많은 직원이있을 수 있기 때문입니다.
따라서 이러한 중복을 줄이고 스토리지를 절약하기 위해 데이터베이스는 정규화 된 상태로 유지됩니다.
따라서이 경우 EMPLOYEE 테이블의 Department_id 필드로 부서를 참조하고 부서 정보, 부서장 등과 같은 부서와 관련된 모든 관련 정보는 EMPLOYEE_DEPARTMENT 테이블의 일부로 유지 될 수 있습니다.
즉, EMPLOYEE 및 EMPLOYEE_DEPARTMENT는 EMPLOYEE 테이블의 경우 FOREIGN KEY 및 EMPLOYEE_DEPARTMENT 테이블의 경우 PRIMARY KEY 역할을하는 Department_id 필드를 통해 서로 연결됩니다.
아래 이미지는 다음과 같은 수단을 통해 두 테이블 사이의 관계를 그림으로 표현한 것입니다. 외래 키 제약
MySQL 가입
MySQL JOIN은 주어진 조건에 대해 2 개 이상의 테이블에서 데이터를 가져 오거나 업데이트하거나 삭제하는 데 사용됩니다. 따라서 JOIN은 항상 SELECT, UPDATE 또는 DELETE 문과 함께 사용됩니다.
JOIN 명령 구문 :
SELECT로 가입
SELECT {column_list} FROM tableName1 {joinType} tableName2 ON {joinCondition}
UPDATE로 가입
DELETE FROM tableName1 {joinType} tableName2 ON {joinCondition} WHERE {condition}
DELETE로 가입
UPDATE tableName1 SET targetColumn = targetValue FROM tableName1 {joinType} tableName2 ON {joinCondition} WHERE {condition}
JOIN은 단일 쿼리로 여러 테이블에 적용 할 수 있지만 간단하게하기 위해 먼저 2 개의 테이블에 Joins를 사용하는 방법을 이해해 보겠습니다.
구문의 다른 부분은 다음과 같습니다.
- {column_list} – 이것은 쿼리의 결과로 검색하려는 열의 이름을 나타냅니다.
- {JoinType} – 이것은 우리가 적용하는 조인 유형을 나타냅니다. 데이터를 가져올 수있는 다음과 같은 다양한 유형의 JOINS가 있습니다.
- 내부 조인
- 외부 조인
- 왼쪽 외부 조인
- 오른쪽 외부 조인
- 크로스 조인
튜토리얼의 다음 섹션에서 이러한 모든 유형의 MySQL JOINS에 대해 배웁니다.
- {JoinCondition} – 이것은 JOIN이 데이터를 쿼리하고 가져 오는 데 사용되는 열 조건입니다.
다음 섹션에서는 MySQL에서 사용할 수있는 다양한 유형의 조인에 대해 설명합니다.
MySQL JOIN 유형
샘플 데이터 준비
JOINS를 사용하기 위해 아래 세부 정보와 함께 Employee 및 Employee_Department 테이블 2 개를 사용합니다. 유용한 사이트를 사용 / 참조 할 수 있습니다. 여기 스키마에 대한 더미 데이터를 생성하기 위해.
테이블 생성 및 삽입을위한 쿼리 나열 :
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'),
내부 조인
INNER JOIN은 JOIN의 가장 일반적인 형태이며 매우 널리 사용됩니다. 거의 모든 사람들이 이것을 어느 시점에서 사용 했어야합니다. 구문과 몇 가지 샘플 쿼리를 살펴 보겠습니다.
통사론:
SELECT {column_list} FROM tableName1 INNER JOIN tableName2 ON {joinCondition}
위에서 선언 한 테이블 (Employee 및 Employee_Department)에서 모든 Employees에 대한 Department_names를 가져 오는 쿼리 :
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
위 쿼리의 출력은 다음과 같습니다.
직원 _ 이름 | 부서 이름 |
---|---|
소지품 | 보안 |
WHO | 정보 기술 |
과 | HR |
생기다 | HR |
나는 | 재원 |
필요 | 회계 |
Fgit | 가정 |
간식 | 보안 |
부디 | 보안 |
그 | 지원하다 |
과 | 계약 직원 |
열의 | 계약 직원 |
회복력 | 계약 직원 |
몸 | 계약 직원 |
공정한 | 계약 직원 |
진력 | 매상 |
소지품 | 매상 |
성가심 | 조치 |
고생 | 조치 |
밖 | 조치 |
노트 : 여기에서는 열 이름 별칭을 사용했습니다. 예: Employee.name as Employee_name – 결과를 더 읽기 쉽고 포괄적으로 만들기 위해서입니다.
문자‘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%'
다음은 출력입니다.
직원 _ 이름 | 부서 이름 | |||||
---|---|---|---|---|---|---|
간식 | 7 | 6961 Weissnat Drive Donnellyfort, MT 53947 | 6 | 없는 | 없는 | 없는 |
성가심 | 조치 | |||||
회복력 | 계약 직원 |
이제 아래와 같이 Venn Diagram을 이용하여 INNER JOIN을 이해해 보겠습니다. 반환 된 결과 행은 JOIN 조건과 일치하는 두 테이블 사이의 겹치는 데이터로 구성됩니다.
외부 조인
OUTER JOIN은 일치하지 않는 행 (또는 쿼리 된 열에 대해 null 데이터가있는 행)을 포함하는 경우를 제외하고 2 개 이상의 테이블에서 데이터를 가져 오는 데 사용됩니다.
외부 조인을 더 잘 이해하려면 필드 (id 및 address)가있는 새 테이블 office_locations를 추가하고 원래 생성 된 Employee 테이블에`office_id '라는 새 열을 추가합니다.
동일한 쿼리는 다음과 같습니다.
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;
OUTER JOINS를 그림으로 이해하려면 아래 벤 다이어그램을 참조하십시오.
OUTER JOIN에는 2 가지 유형이 있습니다.
a) 왼쪽 외부 조인
이름에서 알 수 있듯이이 유형의 Join은 JOIN 쿼리의 왼쪽에있는 테이블에서 모든 행 (NULL 값 포함)을 가져옵니다. 간단히 말해서 JOIN 조건과 일치하지 않는 모든 결과 / 행은 오른쪽 테이블에 대해 NULL 값을 갖는 결과와 함께 반환됩니다.
예를 들면 모든 직원에 대한 위치 데이터가 필요합니다. 즉, 모든 직원의 사무실 주소가 무엇인지 알아 내야합니다.
SELECT * from Employee LEFT OUTER JOIN office_locations ON Employee.office_id = office_locations.id
위 쿼리의 출력 :
이름 | 신분증 | 주소 | Department_id | Office_id | 사무실 주소 | 신분증 |
---|---|---|---|---|---|---|
나는 | 1 | 640 데이먼 정션 East Mathew, NY 68818 | 삼 | 없는 | 없는 | 없는 |
성가심 | 두 | 6658 홀리스 Club Ernamouth, TX 19743 | 10 | 1 | 방갈로르 | 1 |
진력 | 삼 | 59965 Mason Neck Apt. 985 카림 버러, NV 85535 | 9 | 두 | 뭄바이 | 두 |
소지품 | 4 | 91067 지오바니 포트) Hanefort, WA 92863 | 6 | 1 | 방갈로르 | 1 |
과 | 5 | 7647 레바 쇼어 스위트 970 New Audrafort, OH 17846-5397 | 두 | 없는 | 없는 | 없는 |
과 | 6 | 9419 Carmela Burg Apt. 687 Aimeebury, SD 32389-4489 | 8 | 두 | 뭄바이 | 두 |
열의 | 8 | 117 넬리 서밋 스위트 982 사우스 헤븐 푸르트, CA 45675 | 8 | 1 | 방갈로르 | 1 |
생기다 | 9 | 9086 마리암 스퀘어 스위트 698 South Dulce, MT 82861-3079 | 두 | 두 | 뭄바이 | 두 |
소지품 | 10 | 783 Goodwin Burgs Apt. 429 Willmsfort, UT 42820-1019 | 9 | 1 | 방갈로르 | 1 |
WHO | 열한 | 42928 에르네스토 트레일 East Jules, WV 87169-2851 | 1 | 없는 | 없는 | 없는 |
그 | 12 | 161 Kassulke Stravenue Apt. 937 Williamsonton, MS 62622 | 7 | 두 | 뭄바이 | 두 |
고생 | 13 | 22811 Liliana Trail Apt. 890 사우스 에르네스토, MT 04134 | 10 | 없는 | 없는 | 없는 |
밖 | 14 | 981 라론 육교 스위트 361 West Olahaven, FL 46982-7801 | 10 | 1 | 방갈로르 | 1 |
회복력 | 열 다섯 | 411 루이 자 밀 사우스 막심 포트, MA 04903 | 8 | 두 | 뭄바이 | 두 |
필요 | 16 | 2853 조나 톤 턴 파이크 Quitzonville, KY 54776 | 4 | 1 | 방갈로르 | 1 |
FLED | 17 | 3647 로잘린다 코너 Maureenstad, RI 96605 | 5 | 없는 | 없는 | 없는 |
몸 | 18 | 03559 Nicholas Circle Apt. 364 West Zettaberg, ID 58592-3447 | 8 | 두 | 뭄바이 | 두 |
또는 | 19 | 56111 Alysson Gateway Apt. 212 Leschbury, VT 90605-2306 | 8 | 없는 | 없는 | 없는 |
부디 | 이십 | 263 O'Keefe Avenue Apt. 884 West Missouri, IL 50303 | 6 | 1 | 방갈로르 | 1 |
b) 오른쪽 외부 조인
LEFT JOIN과 유사하게이 유형의 Join에서는 오른쪽 테이블에서 일치하지 않는 모든 레코드가 왼쪽 테이블의 열에 NULL 값과 함께 반환됩니다.
PC 용 무료 비디오 변환 소프트웨어
예를 들면 샘플 테이블을 사용하여 LEFT JOIN에 사용한 것과 동일한 쿼리에 대해 RIGHT JOIN을 실행하면 Employee 테이블에 위치가 설정된 행이 없기 때문에 'Seattle'및 'Santa Clara'도시에 대해 NULL 값을 얻게됩니다. 이러한 가치에.
SELECT * from Employee RIGHT OUTER JOIN office_locations ON Employee.office_id = office_locations.id
위 쿼리의 출력 :
이름 | 신분증 | 주소 | Department_id | Office_id | 사무실 주소 | 신분증 |
---|---|---|---|---|---|---|
부디 | 이십 | 263 O'Keefe Avenue Apt. 884 West Missouri, IL 50303 | 6 | 1 | 방갈로르 | 1 |
성가심 | 두 | 6658 홀리스 Club Ernamouth, TX 19743 | 10 | 1 | 방갈로르 | 1 |
소지품 | 4 | 91067 Geovany 요새 Hanefort, WA 92863 | 6 | 1 | 방갈로르 | 1 |
열의 | 8 | 117 넬리 서밋 스위트 982 사우스 헤븐 푸르트, CA 45675 | 8 | 1 | 방갈로르 | 1 |
소지품 | 10 | 783 Goodwin Burgs Apt. 429 Willmsfort, UT 42820-1019 | 9 | 1 | 방갈로르 | 1 |
밖 | 14 | 981 라론 육교 스위트 361 West Olahaven, FL 46982-7801 | 10 | 1 | 방갈로르 | 1 |
필요 | 16 | 2853 조나 톤 턴 파이크 Quitzonville, KY 54776 | 4 | 1 | 방갈로르 | 1 |
진력 | 삼 | 59965 Mason Neck Apt. 985 카림 버러, NV 85535 | 9 | 두 | 뭄바이 | 두 |
과 | 6 | 9419 Carmela Burg Apt. 687 Aimeebury, SD 32389-4489 | 8 | 두 | 뭄바이 | 두 |
생기다 | 9 | 9086 마리암 스퀘어 스위트 698 South Dulce, MT 82861-3079 | 두 | 두 | 뭄바이 | 두 |
그 | 12 | 161 Kassulke Stravenue Apt. 937 Williamsonton, MS 62622 | 7 | 두 | 뭄바이 | 두 |
회복력 | 열 다섯 | 411 루이 자 밀 사우스 막심 포트, MA 04903 | 8 | 두 | 뭄바이 | 두 |
몸 | 18 | 03559 Nicholas Circle Apt. 364 West Zettaberg, ID 58592-3447 | 8 | 두 | 뭄바이 | 두 |
없는 | 없는 | 없는 | 없는 | 없는 | 시애틀 | 삼 |
없는 | 없는 | 없는 | 없는 | 없는 | 산타 클라라 | 4 |
참고 / 팁 :
- Microsoft SQL과 같은 다른 관계형 데이터베이스에서는 FULL OUTER JOIN이라는 다른 유형의 OUTER JOIN을 찾을 수 있습니다. INNER 및 OUTER 조인의 조합 일뿐입니다. 즉, LEFT 및 RIGHT 테이블 모두에서 NULL 값을 반환합니다.
- INNER와 OUTER JOINS의 차이점에 대한 설명 및 예제와 함께 자세한 토론은 자습서를 참조하십시오. 여기.
- OUTER JOIN 쿼리에서 – RIGHT OUTER JOIN 및 LEFT OUTER JOIN은 가독성을 높이기 위해 각각 RIGHT JOIN 및 LEFT JOIN으로 지정 될 수 있습니다.
크로스 조인
CROSS JOIN은 Cartesian Product라고도합니다. 총 m x n 개의 행과 일치하는 Join 조건에 대한 결과를 반환합니다. 여기서 m과 n은 JOIN 조건에 대해 table1 및 table2에서 일치하는 행의 수입니다.
Employee 및 office_locations의 두 테이블에서 결과를 가져 오는 CROSS JOIN에 대한 샘플 쿼리를 살펴 보겠습니다.
SELECT * from Employee CROSS JOIN office_locations
반환 된 출력에는 두 테이블의 행의 곱일 뿐인 총 80 개의 행이 포함됩니다 – Employee (20) x office_locations (4) => 80
점에 유의하시기 바랍니다, CROSS JOIN을 수행하는 동안 어쨌든 m x n 결과를 얻는 것처럼 JOIN 조건을 지정할 필요가 없습니다.
참고 / 팁 :
관련 사용 사례가 많지 않기 때문에 CROSS JOIN을 사용하는 경우가 많지 않습니다. 이 조인은 일반적으로 누군가가 두 테이블의 데이터에 대해 가능한 모든 조합을 얻으려고 할 때 실행됩니다.
예를 들면 : 당신이 의류 수출업자이고 2 개의 테이블이 있다고 가정합니다. 하나에는 색상 데이터가 있고 다른 하나에는 크기 데이터가 있습니다. 여기에서 재고를 확보하기 위해 두 테이블의 CROSS JOIN을 수행하여 모든 의류가 모든 크기 및 색상 조합에 대해 조달되도록 할 수 있습니다.
셀프 조인
SELF JOIN은 다른 INNER 또는 OUTER Join과 동일하지만 두 테이블, 즉 Joining 및 Joined 테이블이 동일하다는 유일한 예외가 있습니다.
일반적으로 동일한 테이블의 행 간의 관계를 알아 내고 싶을 때 SELF 조인을 사용합니다. 예를 들면 테이블에 직원 ID와 감독자 직원 ID가 모두있는 경우 직원 이름과 비교하여 관리자 이름을 찾으려면 테이블 자체에 대해 조인 할 수 있습니다.
SELF JOIN의 경우 올바른 테이블을 참조하여 Join 조건을 지정할 수 있도록 테이블 별칭을 사용해야합니다.
여기에서 예를 살펴 보겠습니다.
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
여기서는 Employee 테이블을 자체에 결합하여 사무실 위치와 부서가 동일한 직원 이름을 찾습니다.
직원 1 | 직원 2 |
---|---|
과 | 회복력 |
성가심 | 성가심 |
성가심 | 밖 |
Oficiis | 진력 |
소지품 | 소지품 |
소지품 | 부디 |
과 | 과 |
과 | 몸 |
열의 | 열의 |
생기다 | 생기다 |
소지품 | 소지품 |
그 | 그 |
밖 | 성가심 |
밖 | 밖 |
회복력 | 과 |
회복력 | 회복력 |
회복력 | 몸 |
필요 | 필요 |
몸 | 과 |
몸 | 회복력 |
몸 | 몸 |
부디 | 소지품 |
부디 | 부디 |
앞서 논의했듯이 SELF JOIN은 Joining 및 Joined 테이블을 동일하게 가지고 있으므로 INNER 또는 OUTER 조인과 함께 SELF JOIN을 사용할 수 있습니다.
업데이트 및 삭제를 사용하여 MySQL 가입
지금까지 SELECT 문을 사용한 조인에 대해 설명했습니다. 그러나 조인은 MySQL DELETE 및 UPDATE 문과 함께 사용할 수도 있습니다.
구문은 여기서 동일하게 유지됩니다. 개념을 더 잘 이해하기 위해 몇 가지 예를 살펴 보겠습니다.
INNER JOIN으로 업데이트
Employee 테이블의 주소를 office_locations 테이블에있는 사무실 위치의 이름으로 변경한다고 가정합니다. 여기서 INNER JOIN을 사용하여 office_locations에서 도시 이름을 가져오고 동일한 쿼리를 업데이트 할 수 있습니다.
샘플 쿼리 :
UPDATE Employee emp inner join office_locations off_loc on emp.office_id = off_loc.id set emp.address = off_loc.address;
이와 유사하게 UPDATE는 특정 사용 사례에 대한 요구 사항에 따라 다른 유형의 조인과 함께 사용할 수 있습니다.
INNER JOIN으로 삭제
예를 들어 Employee 및 Employee_Departments 테이블을 사용합니다. 영업 부서에 속한 모든 직원 레코드를 삭제하고 영업 부서에 대한 항목도 삭제한다고 가정합니다.
Department_id를 FOREIGN KEY 제약 조건으로 사용 했으므로 여러 테이블에 대해 JOIN과 함께 DELETE를 사용하기 전에 먼저 해당 제약 조건을 DROP해야합니다.
먼저 Employee 테이블에서 Department_id에 대해 생성 된 제약 조건의 이름을 찾아 보겠습니다. 명령을 실행하여 CREATE TABLE 명령을 가져옵니다.
show create table Employee
출력은 다음과 같이 표시됩니다.
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
이제 위 명령에서 FOREIGN_KEY 제약 조건의 이름 인‘Employee_ibfk_1’을 참조 할 수 있으며이 이름을 사용하여 아래 명령을 실행하여 Employee 테이블에서이 제약 조건을 삭제할 수 있습니다.
alter table Employee drop constraint Employee_ibfk_1
이제 INNER JOIN을 사용하여 DELETE 명령을 실행하겠습니다.
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
이 명령의 출력은 no입니다. 삭제 된 행 수 (위의 JOIN 쿼리에서 참조한 두 테이블의 행을 성공적으로 삭제해야 함)
자주 묻는 질문
Q # 1) MySQL에는 몇 가지 유형의 조인이 있습니까?
대답: MySQL은 주로 3 가지 유형의 조인을 지원합니다. 이것들은:
- 내부 조인
- 외부 결합 – 왼쪽 외부 결합 및 오른쪽 외부 결합
- 교차 결합
Q # 2) 조인은 2 개의 테이블에만 사용할 수 있나요?
대답: 조인은 2 개 이상의 테이블에 적용 할 수 있습니다. 대부분의 경우 조인은 2 개의 테이블에 사용됩니다.
다음은 3 개의 테이블을 사용하는 INNER JOIN의 예입니다.
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
위 쿼리의 출력 :
emp_name | 부서 _ 이름 | 사무실 _ 위치 |
---|---|---|
밖 | 조치 | 방갈로르 |
성가심 | 조치 | 방갈로르 |
소지품 | 보안 | 방갈로르 |
과 | 계약 직원 | 뭄바이 |
열의 | 계약 직원 | 방갈로르 |
생기다 | HR | 뭄바이 |
그 | 지원하다 | 뭄바이 |
회복력 | 계약 직원 | 뭄바이 |
필요 | 회계 | 방갈로르 |
몸 | 계약 직원 | 뭄바이 |
부디 | 보안 | 방갈로르 |
Q # 3) 조인에 테이블 별칭을 사용하는 방법은 무엇입니까?
대답: 별칭은 쿼리 내에서 참조 할 테이블의 임시 이름을 갖는 방법입니다. JOIN 쿼리는 때때로 복잡하고 쿼리를 읽기 쉽게 만들고 각 열 참조에 대한 테이블 이름을 참조하지 않기 위해 별칭을 사용하여 단축 된 이름을 가질 수 있습니다.
각각 Employee 및 Employee_Departments 테이블에서 모든 직원 이름 및 부서 이름에 대한 데이터를 가져 오는 INNER JOIN 쿼리를 작성해 보겠습니다.
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
위의 쿼리에서 Employee 테이블을 emp로 별칭을 지정하고 Employee_Department 테이블을 Department로 별칭을 지정했으며 열 이름 및 조인 조건을 참조하기 위해 별칭을 사용했음을 알 수 있습니다.
Q # 4) CROSS JOIN이 무엇인가요?
대답: CROSS JOIN은 사용자가 조인되는 테이블의 카티 전 곱을 가져 오려는 조인 유형입니다.
CROSS JOIN의 결과는 m x n입니다. 여기서 m은 첫 번째 테이블에서 일치하는 행의 수이고 n은 두 번째 테이블에서 일치하는 행의 수입니다.
Q # 5) MySQL에서 FULL OUTER JOIN을 얻는 방법
대답: MySQL은 Microsoft SQL과 같은 다른 데이터베이스와 달리 별도의 조인 유형으로 FULL OUTER JOIN을 제공하지 않습니다. 그러나 FULL OUTER JOIN이 가져 왔을 때 결과를 얻기 위해 LEFT OUTER JOIN과 RIGHT OUTER JOIN의 결과를 결합 할 수 있습니다.
예를 들어 직원 및 부서 세부 정보를 가져 와서 왼쪽 및 오른쪽 외부 조인에 유니온을 적용 할 수 있습니다.
.apk 파일이란?
추천 읽기 = >> MySQL 통합 연산자
결론
이 자습서에서는 MySQL에서 사용할 수있는 다양한 유형의 조인에 대해 배웠습니다.
INNER, OUTER, CROSS 및 SELF 조인에 대해 논의하고 조인 쿼리를 UPDATE 및 DELETE 문과 함께 사용하여 2 개 이상의 테이블간에 조인 된 데이터에 대해 효율적이고 최적화 된 쿼리를 갖는 방법도 살펴 보았습니다.
JOINS는 가장 기본적으로 사용되는 쿼리 중 하나이며 SQL 기반 데이터베이스를 사용하거나 배우는 사람은 SQL 조인에 대해 철저히 이해해야합니다.