Mysql 단일 테이블 쿼리, 다중 테이블 쿼리 실습

1. 단일 테이블 쿼리
재료: 테이블 이름: 작업자-- 테이블의 필드는 부서 번호, 급여, 작업에 참여하는 직원 번호 등과 같이 모두 중국어입니다.

테이블 만들기:

CREATE TABLE worker (
 部门号 int(11) NOT NULL,
 职工号 int(11) NOT NULL,
 工作时间 date NOT NULL,
 工资 float(8,2) NOT NULL,
 政治面貌 varchar(10) NOT NULL DEFAULT '群众',
 姓名 varchar(20) NOT NULL,
 出生日期 date NOT NULL,
 PRIMARY KEY (职工号)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

INSERT INTO worker  VALUES (101, 1001, '2015-5-4', 3500.00, '群众', '张三', '1990-7-1');
INSERT INTO worker VALUES (101, 1002, '2017-2-6', 3200.00, '团员', '李四', '1997-2-8');
INSERT INTO worker VALUES (102, 1003, '2011-1-4', 8500.00, '党员', '王亮', '1983-6-8');
INSERT INTO worker  VALUES (102, 1004, '2016-10-10', 5500.00, '群众', '赵六', '1994-9-5');
INSERT INTO worker  VALUES (102, 1005, '2014-4-1', 4800.00, '党员', '钱七', '1992-12-30');
INSERT INTO worker  VALUES (102, 1006, '2017-5-5', 4500.00, '党员', '孙八', '1996-9-2');

1. 모든 직원의 기본 정보를 표시합니다.   

select * from worker;

2. 모든 사원이 속한 부서의 부서번호를 조회하고 중복된 부서번호를 표시하지 않습니다.  

select distinct 部门号 from worker ;

3. 전체 직원 수를 구합니다.  

select count(*) 员工人数 from worker;

4. 최고 임금과 최저 임금을 기재하십시오.

select max(工资),min(工资) from worker;

  5. 직원의 평균 급여와 총 급여를 나열하십시오.

select avg(工资) 平均工资,SUM(工资) 总工资 FROM worker;

6. 직원 번호, 이름 및 작업 참여만 있는 작업 날짜 테이블이라는 새 테이블을 만듭니다. 

CREATE TABLE `工作日期` (
 `职工号` INT(11)     NOT NULL,
 `姓名` VARCHAR(20)     NOT NULL,
`工作时间` DATE     NOT NULL,
PRIMARY KEY (`职工号`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

7. 모든 직원의 나이를 표시합니다. 

SELECT 姓名,DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(出生日期)), '%Y')+0 AS age FROM worker;

8. Liu라는 이름을 가진 모든 직원의 직원 번호, 이름 및 생년월일을 기재하십시오.

SELECT 职工号,姓名,出生日期 FROM worker WHERE 姓名 LIKE '刘%';

9. 1960년 이후에 태어난 직원의 이름과 근무일을 기재하십시오.

SELECT 姓名,工作时间 FROM worker WHERE 出生日期>1960-01-01;

10. 급여가 4000-5000 사이인 모든 직원의 이름을 나열하십시오. 

SELECT 姓名 FROM worker WHERE 工资 BETWEEN 4000 AND 5000;

11. 직원 번호, 이름, 부서 번호가 101과 102인 당원을 모두 나열하십시오.  

SELECT 职工号,姓名,政治面貌 FROM worker WHERE 部门号=101 or 部门号=102;

12. 직원 테이블 작업자의 직원을 출생 순서에 따라 정렬합니다.

SELECT * FROM worker ORDER BY 出生日期;

13. 급여가 가장 높은 상위 3명의 사원 번호와 이름을 표시하십시오. 

SELECT 职工号,姓名 FROM worker ORDER BY 工资 DESC LIMIT 3;

14. 각 부서의 파티원 수를 찾으십시오. 

SELECT 部门号,COUNT(*) 党员人数 FROM worker WHERE 政治面貌='党员' GROUP BY 部门号;

15. 각 부서의 급여 및 평균 급여 통계

SELECT 工资,AVG(工资) 平均工资 FROM worker GROUP BY 部门号;

16. 총 인원이 3명 이상인 부서 번호와 전체 인원을 나열하십시오.

SELECT 部门号,COUNT(*) 总人数 FROM worker GROUP BY 部门号 HAVING 总人数>3;

2, 다중 테이블 쿼리

-- 创建student和score表
CREATE  TABLE student (
id  INT(10)  NOT NULL  UNIQUE  PRIMARY KEY ,
name  VARCHAR(20)  NOT NULL ,
sex  VARCHAR(4) ,
birth  YEAR,
department  VARCHAR(20) ,
address  VARCHAR(50)
);
-- 创建score表。SQL代码如下:
CREATE  TABLE score (
id  INT(10)  NOT NULL  UNIQUE  PRIMARY KEY  AUTO_INCREMENT ,
stu_id  INT(10)  NOT NULL ,
c_name  VARCHAR(20) ,
grade  INT(10)
);

2. 학생 테이블 및 점수 테이블에 레코드 추가

-- 向student表插入记录的INSERT语句如下:
INSERT INTO student VALUES( 901,'张老大', '男',1985,'计算机系', '北京市海淀区');
INSERT INTO student VALUES( 902,'张老二', '男',1986,'中文系', '北京市昌平区');
INSERT INTO student VALUES( 903,'张三', '女',1990,'中文系', '湖南省永州市');
INSERT INTO student VALUES( 904,'李四', '男',1990,'英语系', '辽宁省阜新市');
INSERT INTO student VALUES( 905,'王五', '女',1991,'英语系', '福建省厦门市');
INSERT INTO student VALUES( 906,'王六', '男',1988,'计算机系', '湖南省衡阳市');
-- 向score表插入记录的INSERT语句如下:
INSERT INTO score VALUES(NULL,901, '计算机',98);
INSERT INTO score VALUES(NULL,901, '英语', 80);
INSERT INTO score VALUES(NULL,902, '计算机',65);
INSERT INTO score VALUES(NULL,902, '中文',88);
INSERT INTO score VALUES(NULL,903, '中文',95);
INSERT INTO score VALUES(NULL,904, '计算机',70);
INSERT INTO score VALUES(NULL,904, '英语',92);
INSERT INTO score VALUES(NULL,905, '英语',94);
INSERT INTO score VALUES(NULL,906, '计算机',90);
INSERT INTO score VALUES(NULL,906, '英语',85);

3. 학생 테이블의 모든 레코드 쿼리

SELECT * FROM student;

4. 학생 테이블의 2~4번째 레코드 쿼리

SELECT * FROM student LIMIT 1,3;

5. 학생 테이블에서 모든 학생의 학번(id), 이름(name), 학과(학과) 정보를 조회한다.

SELECT id 学号,name 姓名,department 院系 FROM student;

6. 학생 테이블에서 컴퓨터과, 영어과 학생 정보 조회

SELECT * FROM student WHERE department='计算机系' or department='英语系';

7. 학생 테이블에서 18~22세 학생 정보 조회

SELECT  * FROM student where birth>2000 and  birth<2002;

8. 학생 테이블에서 부서별 인원 조회

SELECT department,count(*) 人数 from student group by department;

9. 점수 테이블에서 각 과목의 최고 점수 쿼리

SELECT c_name,max(grade) from score group by c_name;

10. Li Si의 테스트 대상(c_name) 및 테스트 결과(등급) 쿼리

select c.c_name,c.grade from student s inner join score c on s.id=c.stu_id where s.name='李四';

11. 연결을 통한 모든 학생 정보 및 시험 정보 조회

select * from student inner join score on student.id=score.stu_id;

12. 각 학생의 총점을 계산합니다.

select stu_id,sum(grade) 总成绩 from score group by stu_id;

13. 시험 과목별 평균 성적 계산

select c_name,avg(grade) 平均成绩 from score group by c_name;

14. 컴퓨터 점수가 95점 미만인 학생 정보 조회

select  s.* from student s inner join score c on s.id=c.stu_id WHERE grade<95 and c_name='计算机';

15. 컴퓨터와 영어 시험을 동시에 보는 학생 정보 조회

select s.* from student s inner join score c on s.id=c.stu_id where c_name='计算机' and c_name='英语';

16. 컴퓨터 시험 점수를 높은 것부터 낮은 것까지 정렬

select grade from score where c_name='计算机' order by grade desc;

17. 학생 테이블과 점수 테이블에서 학번을 쿼리한 후 쿼리 결과 병합

select s.name,c.stu_id from student s inner join score c on s.id=c.stu_id;

18. Zhang 또는 Wang이라는 학생의 이름, 부서, 시험 과목 및 결과를 쿼리합니다.

select name,department,c_name,grade from student s  inner join score c  on s.id=c.stu_id where  s.name like '张%' or name like '王%';

19. 호남학생 이름, 나이, 학과, 시험과목, 성적 조회

select name,department,c_name,grade from student s inner join score c on s.id=c.stu_id where address like '湖南%';

추천

출처blog.csdn.net/weixin_62107875/article/details/127484073