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. Student テーブルのすべてのレコードをクエリします

SELECT * FROM student;

4. Student テーブルの 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. 学生テーブルとスコアテーブルから学生 ID 番号をクエリし、クエリ結果をマージします。

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