> 데이터 베이스 > MySQL 튜토리얼 > Mysql 공동 테이블 쿼리의 특징은 무엇입니까?

Mysql 공동 테이블 쿼리의 특징은 무엇입니까?

WBOY
풀어 주다: 2023-05-29 11:28:05
앞으로
1735명이 탐색했습니다.

머리말

데이터베이스에 대한 쿼리 수를 줄이기 위해, 예를 들어 관련되지 않은 테이블의 시스템에 대한 부담을 줄이기 위해 Union all 키워드를 사용하여 여러 테이블에서 발견된 데이터에 대해 공동 쿼리를 수행할 수 있습니다. tables

(편리함 통계 분석에 서로 다른 데이터를 사용하고 하나의 요청만 사용함)

예: Student 테이블의 전체 남학생 수와 Teacher 테이블의 전체 남교사 수를 SQL 문을 통해 쿼리합니다. 하나의 쿼리

Mysql 공동 테이블 쿼리의 특징은 무엇입니까?

Mysql 공동 테이블 쿼리의 특징은 무엇입니까?

데이터베이스 테이블 준비:

1. 학생 테이블

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '',
  `birth` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '',
  `sex` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('01', '赵雷', '1990-01-01', '男');
INSERT INTO `student` VALUES ('02', '钱电', '1990-12-21', '男');
INSERT INTO `student` VALUES ('03', '孙风', '1990-05-20', '男');
INSERT INTO `student` VALUES ('04', '李云', '1990-08-06', '男');
INSERT INTO `student` VALUES ('05', '周梅', '1991-12-01', '女');
INSERT INTO `student` VALUES ('06', '吴兰', '1992-03-01', '女');
INSERT INTO `student` VALUES ('07', '郑竹', '1989-07-01', '女');
INSERT INTO `student` VALUES ('08', '王菊', '1990-01-20', '女');
SET FOREIGN_KEY_CHECKS = 1;
로그인 후 복사

2. 교사 테이블

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for teacher
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher`  (
  `id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '',
  `sex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES ('01', '张三', '男');
INSERT INTO `teacher` VALUES ('02', '李四', '女');
INSERT INTO `teacher` VALUES ('03', '王五', '男');
SET FOREIGN_KEY_CHECKS = 1;
로그인 후 복사

1. 기존 방법(쿼리 성능이 좋지 않음)

쿼리된 데이터를 테이블로 캡슐화하고 그런 다음 테이블의 데이터 쿼리가 표시됩니다.

이 방법은 비교적 간단하지만 데이터베이스 쿼리 수가 크게 늘어납니다

SELECT
	t1.学生男生总数,
	t2.男教师总数 
FROM
	( SELECT count( id ) AS 学生男生总数 FROM student WHERE student.sex = '男' ) t1,
	( SELECT count( id ) AS 男教师总数 FROM teacher WHERE teacher.sex = '男' ) t2
로그인 후 복사

Mysql 공동 테이블 쿼리의 특징은 무엇입니까?

2. Union all을 사용하여 여러 테이블을 하나의 테이블 쿼리로 결합합니다

	select t.*  from
	( SELECT count(id) as a,0 as b FROM student WHERE student.sex = '男'
			union all
	SELECT 0 as a,count(id) as b FROM teacher WHERE teacher.sex = '男' ) t
로그인 후 복사

1. 이때 a는 학생의 성별을 나타냅니다. a boy. 총 인원수 b는 남교사의 총 수를 나타냅니다

Mysql 공동 테이블 쿼리의 특징은 무엇입니까?

2. 이때, 남학생과 남교사의 총 수를 알아보려면 각각 a와 b만 합산하면 됩니다.

	select sum(t.a) as 学生男生总数,sum(t.b) as 男教师总数 from
	( SELECT count(id) as a,0 as b FROM student WHERE student.sex = '男'
			union all
	SELECT 0 as a,count(id) as b FROM teacher WHERE teacher.sex = '男' ) t
로그인 후 복사

Mysql 공동 테이블 쿼리의 특징은 무엇입니까?

위 내용은 Mysql 공동 테이블 쿼리의 특징은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿