mysql의 좌우 연결 사용법 실례
예를 들어 mysql의 왼쪽 연결, 오른쪽 연결, 내부 연결을 분석합니다
create table user_id ( id decimal(18) );
create table user_profile ( id decimal(18) , name varchar(255) ) ;
insert into user_id values (1);
insert into user_id values (2);
insert into user_id values (3);
insert into user_id values (4);
insert into user_id values (5);
insert into user_id values (6);
insert into user_id values (1);
insert into user_profile values (1, "aa");
insert into user_profile values (2, "bb");
insert into user_profile values (3, "cc");
insert into user_profile values (4, "dd");
insert into user_profile values (5, "ee");
insert into user_profile values (5, "EE");
insert into user_profile values (8, 'zz');
하나.왼쪽 연결:
mysql> select a.id id , ifnull(b.name, 'N/A') name from user_id a left join user_profile b on a.id = b.id;
mysql> select a.id id , ifnull(b.name, 'N/A') name from user_id a left join user_profile b on a.id = b.id;
+------+------+
| id | name |
+------+------+
| 1 | aa |
| 2 | bb |
| 3 | cc |
| 4 | dd |
| 5 | ee |
| 5 | EE |
| 6 | N/A |
| 1 | aa |
+------+------+
8 rows in set (0.00 sec)
user_id는 왼쪽에 있기 때문에 왼쪽 연결이라고 합니다.이 경우 userid 위주, 즉userid의 모든 기록이 열거됩니다.다음과 같은 세 가지 상황으로 나뉜다.
1.userid의 모든 기록에 대응하는 id가user 에 있다면프로필에도 딱 하나 있고 딱 하나 있으면 되돌아오는 결과에 새로운 기록이 만들어집니다.위 1, 2, 3, 4에 대응하는 경우.2.user 의 경우id의 모든 기록에 대응하는 id가user 에 있다면프로필에도 마침 존재하고 N개가 있으면 되돌아오는 결과에 N개의 새로운 기록이 만들어집니다.위의 5에 대응하는 상황.3. userid의 모든 기록에 대응하는 id가user 에 있다면프로필에 존재하지 않으면 되돌아오는 결과에 새로운 기록이 하나씩 만들어지고 그 기록의 오른쪽에 있는 모든 NULL이 생성됩니다.위의 6에 대응하는 상황.
위의 세 가지 규칙에 부합되지 않는 기록은 열거되지 않을 것이다.
예를 들어 관련 테이블에 존재하지 않는 데이터를 조회하려면 id 관련을 통해user 를 찾아야 한다id 테이블에user 있음profile에 없는 레코드:
select count(*) from user_id left join user_profile on user_id.id = user_profile.id where user_profile.id is null;
둘.오른쪽 연결
user_프로필은 오른쪽에 있기 때문에 오른쪽 연결이라고 합니다.이 경우 userprofile 위주, 즉user프로필의 모든 기록이 열거됩니다.다음과 같은 세 가지 상황으로 나뉜다.
1.userprofile의 모든 기록에 대응하는 id가user 에 있다면id에도 딱 하나 존재하고 딱 하나 있으면 되돌아오는 결과에 새로운 기록이 만들어집니다.위 2, 3, 4, 5에 대응하는 경우.2.user 의 경우profile의 모든 기록에 대응하는 id가user 에 있다면id에도 마침 존재하고 N개가 있으면 되돌아오는 결과에 N개의 새로운 기록이 만들어집니다.위의 1에 대응하는 상황.3. userprofile의 모든 기록에 대응하는 id 만약userid에 존재하지 않으면 되돌아오는 결과에 새로운 기록이 하나씩 만들어지고 이 기록의 왼쪽은 모두 NULL입니다.위의 8에 대응하는 상황.
위의 세 가지 규칙에 부합되지 않는 기록은 열거되지 않을 것이다.
셋.내부 연결
MySQL 내 연결된 데이터 로깅에는 필드가 NULL인 경우는 없습니다.내부 링크의 결과는 왼쪽 연결 또는 오른쪽 연결 결과에서 NULL이 존재하는 기록을 제거한 결과로 간단하게 볼 수 있으며, MySQL은full join을 지원하지 않습니다
mysql> select * from user_id a inner join user_profile b on a.id = b.id;
+------+------+------+
| id | id | name |
+------+------+------+
| 1 | 1 | aa |
| 1 | 1 | aa |
| 2 | 2 | bb |
| 3 | 3 | cc |
| 4 | 4 | dd |
| 5 | 5 | ee |
| 5 | 5 | EE |
+------+------+------+
7 rows in set (0.00 sec)
mysql> select * from user_id a, user_profile b where a.id = b.id;
+------+------+------+
| id | id | name |
+------+------+------+
| 1 | 1 | aa |
| 1 | 1 | aa |
| 2 | 2 | bb |
| 3 | 3 | cc |
| 4 | 4 | dd |
| 5 | 5 | ee |
| 5 | 5 | EE |
+------+------+------+
7 rows in set (0.00 sec)
mysql> select * from user_id a join user_profile b on a.id = b.id;
+------+------+------+
| id | id | name |
+------+------+------+
| 1 | 1 | aa |
| 1 | 1 | aa |
| 2 | 2 | bb |
| 3 | 3 | cc |
| 4 | 4 | dd |
| 5 | 5 | ee |
| 5 | 5 | EE |
+------+------+------+
7 rows in set (0.00 sec)
본고에서 서술한 것이 여러분의 MySQL 프로그램 설계에 도움이 되었으면 합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.