MySQL 연결 표 조회 기본 작업 의 left-join 흔 한 구덩이

개술
중 소 규모 의 프로젝트 에 있어 서 연결 표 조 회 는 더 이상 흔히 볼 수 없 는 조작 이다.특히 보고 서 를 작성 할 때.그런데 데 이 터 를 교정 할 때 구 덩이 를 발 견 했 습 니까?이 글 은 my sql 에서 자주 사용 하 는 연결 표 조회 에 대해 흔히 볼 수 있 는 구 덩이 를 복원 합 니 다.
기초 환경
건표문

DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `role_name` VARCHAR(50) DEFAULT NULL COMMENT '   ',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='   ';


insert into `role` VALUES(1, '   ');
insert into `role` VALUES(2, '   ');
insert into `role` VALUES(3, '  ');
insert into `role` VALUES(4, '  ');

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `role_id` int(11) NOT NULL COMMENT '  id',
 `user_name` VARCHAR(50) DEFAULT NULL COMMENT '   ',
 `sex` int(1) DEFAULT 0 COMMENT '  ',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='   ';

insert into `user` VALUES(1, 1, 'admin', 1);
insert into `user` VALUES(2, 2, '   ', 1);
insert into `user` VALUES(3, 2, '   ', 2);
insert into `user` VALUES(4, 2, '   ', 2);
insert into `user` VALUES(5, 3, '   ', 1);
insert into `user` VALUES(6, 3, '   ', 1);
insert into `user` VALUES(7, 3, '   ', 2);
insert into `user` VALUES(8, 3, '   ', 1);
insert into `user` VALUES(9, 4, '   ', 2);
insert into `user` VALUES(10, 4, '   ', 2);
insert into `user` VALUES(11, 4, '   ', 1);
데 이 터 는 아래 와 같다.

mysql> select * from role;
+----+-----------+
| id | role_name |
+----+-----------+
| 1 |      |
| 2 |      |
| 3 |      |
| 4 |      |
+----+-----------+
4 rows in set (0.00 sec)

mysql> select * from user;
+----+---------+-----------+------+
| id | role_id | user_name | sex |
+----+---------+-----------+------+
| 1 |    1 | admin   |  1 |
| 2 |    2 |      |  1 |
| 3 |    2 |      |  2 |
| 4 |    2 |      |  2 |
| 5 |    3 |      |  1 |
| 6 |    3 |      |  1 |
| 7 |    3 |      |  2 |
| 8 |    3 |      |  1 |
| 9 |    4 |      |  2 |
| 10 |    4 |      |  2 |
| 11 |    4 |      |  1 |
+----+---------+-----------+------+
11 rows in set (0.00 sec)
기본 업무
단순 정보 보고서:사용자 정보 조회

mysql> SELECT
  -> id,
  -> user_name AS '  ',
  -> ( CASE WHEN sex = 1 THEN ' ' WHEN sex = 2 THEN ' ' ELSE '  ' END ) AS '  '
  -> FROM
  -> USER;
+----+-----------+--------+
| id |      |     |
+----+-----------+--------+
| 1 | admin   |     |
| 2 |      |     |
| 3 |      |     |
| 4 |      |     |
| 5 |      |     |
| 6 |      |     |
| 7 |      |     |
| 8 |      |     |
| 9 |      |     |
| 10 |      |     |
| 11 |      |     |
+----+-----------+--------+
각 캐릭터 명 및 대응 인원 중 여성 수 조회

mysql> SELECT
  -> r.id,
  -> r.role_name AS role,
  -> count( u.sex ) AS sex
  -> FROM
  -> role r
  -> LEFT JOIN USER u ON r.id = u.role_id
  -> AND u.sex = 2
  -> GROUP BY
  -> r.role_name
  -> ORDER BY
  -> r.id ASC;
+----+-----------+-----+
| id | role   | sex |
+----+-----------+-----+
| 1 |      |  0 |
| 2 |      |  2 |
| 3 |      |  1 |
| 4 |      |  2 |
+----+-----------+-----+
4 rows in set (0.00 sec)
만약 우리 가 성별 여과 조건 을 where 작업 결과 로 바꾼다 면 어떻게 될까요?

mysql> SELECT
  -> r.id,
  -> r.role_name AS role,
  -> count( u.sex ) AS sex
  -> FROM
  -> role r
  -> LEFT JOIN USER u ON r.id = u.role_id
  -> WHERE
  -> u.sex = 2
  -> GROUP BY
  -> r.role_name
  -> ORDER BY
  -> r.id ASC;
+----+-----------+-----+
| id | role   | sex |
+----+-----------+-----+
| 2 |      |  2 |
| 3 |      |  1 |
| 4 |      |  2 |
+----+-----------+-----+
3 rows in set (0.00 sec)
여기 서 캐릭터 데이터 가 완전 하지 않 은 것 을 볼 수 있다.
사장 역할 을 맡 은 직원 수 를 찾아내다.

mysql> SELECT
  -> r.id,
  -> r.role_name AS role,
  -> count( u.sex ) AS sex
  -> FROM
  -> role r
  -> LEFT JOIN USER u ON r.id = u.role_id
  -> WHERE
  -> r.role_name = '   '
  -> GROUP BY
  -> r.role_name
  -> ORDER BY
  -> r.id ASC;
+----+-----------+-----+
| id | role   | sex |
+----+-----------+-----+
| 2 |      |  3 |
+----+-----------+-----+
1 row in set (0.00 sec)
마찬가지 로 필터 조건 을 where 에서 on 으로 변경 합 니 다.

mysql> SELECT
  -> r.id,
  -> r.role_name AS role,
  -> count( u.sex ) AS sex
  -> FROM
  -> role r
  -> LEFT JOIN USER u ON r.id = u.role_id
  -> AND r.role_name = '   '
  -> GROUP BY
  -> r.role_name
  -> ORDER BY
  -> r.id ASC;
+----+-----------+-----+
| id | role   | sex |
+----+-----------+-----+
| 1 |      |  0 |
| 2 |      |  3 |
| 3 |      |  0 |
| 4 |      |  0 |
+----+-----------+-----+
4 rows in set (0.00 sec)
여기 서 데이터 가 남아 도 는 것 을 볼 수 있다.
총결산
left join 구문 에서 왼쪽 표 필 터 는 where 조건 에 넣 어야 합 니 다.오른쪽 표 필 터 는 on 조건 에 넣 어야 합 니 다.그래 야 결과 가 많 지 않 고 적당 합 니 다.
MySQL 연결 표 조회 기본 작업 의 left-join 흔 한 구덩이 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 MySQL 연결 표 조회 left-join 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 지원 바 랍 니 다!

좋은 웹페이지 즐겨찾기