mysql의 좌우 연결 사용법 실례

4432 단어
본고의 실례는 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 프로그램 설계에 도움이 되었으면 합니다.

좋은 웹페이지 즐겨찾기