#创建数据库 CREATE DATABASE test;#切换数据库 USE test; #在test数据库中创建一个student的表格 CREATE TABLE student ( `Id` INT ( 10 ) PTIMARY KEY NOT NULL AUTO_INCTRMENT COMMENTT `学号`, `Name` VARCHAR ( 20 ) NOT NULL COMMENT `姓名`, `Sex` VARCHAR ( 4 ) COMMENT ‘性别‘, `Birth` YEAR COMMENT ‘出生年月‘, `Department` VARCHAR ( 20 ) NOT NULL COMMENT ‘院系‘, `Address` VARCHAR ( 21 ) COMMENT ‘家庭住址‘ ); CREATE TABLE Scroe ( `Id` INT ( 10 ) PRIMARY KEY NOT NULL auto_increment COMMENT ‘编号‘, `stu_id` INT ( 10 ) NOT NULL COMMENT ‘学号‘, `c_name` VARCHAR ( 20 ) COMMENT ‘课程名‘, `grade` INT ( 10 ) COMMENT ‘分数‘ ); #向student表中添加数据 INSERT INTO student VALUES ( 901, ‘张老大‘, ‘男‘, 1985, ‘计算机系‘, ‘北京市海淀区‘ ); INSERT INTO student VALUES ( 902, ‘张老二‘, ‘男‘, 1986, ‘中文系‘, ‘北京市昌平区‘ ), ( 903, ‘张三‘, ‘女‘, 1990, ‘中文系‘, ‘湖南省永州市‘ ), ( 904, ‘李四‘, ‘男‘, 1990, ‘英语系‘, ‘辽宁省阜新市‘ ), ( 905, ‘王五‘, ‘女‘, 1991, ‘英语系‘, ‘福建省厦门市‘ ), ( 906, ‘王六‘, ‘男‘, 1988, ‘计算机系‘, ‘湖南省衡阳市‘ );#向score表里面添加数据 INSERT INTO scroe VALUES ( NULL, 901, ‘计算机‘, 98 ), ( NULL, 901, ‘英语‘, 80 ), ( NULL, 902, ‘计算机‘, 65 ), ( NULL, 902, ‘中文‘, 88 ), ( NULL, 903, ‘中文‘, 95 ), ( NULL, 904, ‘计算机‘, 70 ), ( NULL, 904, ‘英语‘, 92 ), ( NULL, 905, ‘英语‘, 94 ), ( NULL, 906, ‘计算机‘, 90 ), ( NULL, 906, ‘英语‘, 85 ); #2、查询student表中的第2到第4条数据 SELECT * FROM student WHERE id BETWEEN 902 AND 904; #3、从Student表查询所有学生的学号,姓名和院系 SELECT id, `name`, Department FROM student; #4、从Student表中查询计算机系和英语系的学生 SELECT * FROM student WHERE Department IN ( ‘计算机系‘, ‘英语系‘ ); #5、从Student表中查询年龄在18~32岁的学生信息 SELECT * FROM student WHERE ( YEAR ( NOW( ) ) - Birth ) BETWEEN 18 AND 32; #6、从student表中查询每个院系有多少人 SELECT Department AS ‘院系‘, COUNT( Id ) AS ‘人数‘ FROM student GROUP BY Department; #7、从Score表中查询每个科目的最高分 SELECT c_name AS ‘科目‘, MAX( grade ) AS ‘最高分‘ FROM scroe GROUP BY c_name; #8、查询李四的考试科目 SELECT `Name` AS ‘姓名‘, c_name AS ‘考试科目‘ FROM scroe JOIN student ON scroe.stu_id = student.Id WHERE student.`Name` = ‘李四‘; #9、用连接的方式查询所有学生的姓名、院系、科目和考试成绩 SELECT `Name` AS ‘姓名‘, Department AS ‘院系‘, c_name AS ‘科目‘, grade AS ‘考试成绩‘ FROM scroe JOIN student ON scroe.stu_id = student.Id;#10、计算每个学生的总成绩 SELECT `Name` AS ‘姓名‘, SUM( grade ) AS ‘总成绩‘ FROM scroe JOIN student ON scroe.stu_id = student.Id GROUP BY `Name`; #11、计算每个考试科目的平均成绩 SELECT c_name AS ‘科目‘, AVG( grade ) AS ‘平均成绩‘ FROM scroe JOIN student ON scroe.stu_id = student.Id GROUP BY c_name; #12、查询计算机成绩低于95分的学生信息 SELECT * FROM student WHERE id IN ( SELECT stu_id FROM scroe WHERE grade < 95 AND c_name = ‘计算机‘ ); #13、查询同时参加计算机和英语考试的学生信息 SELECT * FROM student WHERE id IN ( SELECT stu_id FROM scroe WHERE stu_id IN ( SELECT x FROM ( SELECT stu_id AS ‘x‘ FROM scroe WHERE c_name = ‘英语‘ ) AS a JOIN ( SELECT stu_id AS ‘y‘ FROM scroe WHERE c_name = ‘计算机‘ ) AS b ON a.x = b.y ) #使用自连接的方式,查找交集 ); #14、将计算机考试成绩按照从高到低进行排序 SELECT `Name` AS ‘姓名‘, grade AS ‘成绩‘ FROM scroe JOIN student ON scroe.stu_id = student.Id WHERE c_name = ‘计算机‘ ORDER BY grade DESC; #15、从student表和score表中查询出学生的学号,然后合并查询结果 SELECT DISTINCT student.Id AS ‘学号‘, `Name` AS ‘姓名‘ FROM student LEFT JOIN scroe ON scroe.stu_id = student.Id; #16、查询姓张或者姓王的同学的姓名、院系和考试科目以及成绩(提示,模糊查询关键字like 例如查询以A开头的姓名 selec * from 表名 where name like ‘A%’) SELECT `Name` AS ‘姓名‘, Department AS ‘院系‘, c_name AS ‘考试科目‘, grade AS ‘成绩‘ FROM student JOIN scroe ON scroe.stu_id = student.Id WHERE student.`name` LIKE ‘张%‘ OR student.`name` LIKE ‘王%‘;#17、查询都是湖南的学生的姓名、年龄、院系和考试科目以及成绩 SELECT `NAME` AS ‘姓名‘, ( YEAR ( NOW( ) ) - Birth ) AS ‘年龄‘, Department AS ‘院系‘, c_name AS ‘考试科目‘, grade AS ‘成绩‘ FROM scroe JOIN student ON scroe.stu_id = student.Id WHERE Address LIKE ‘%湖南%‘; #14题的另一种做法:查询同时参加计算机和英语考试的学生信息 SELECT * FROM student WHERE id IN ( SELECT stu_id FROM scroe WHERE stu_id IN ( SELECT stu_id FROM scroe WHERE c_name = ‘英语‘ ) AND c_name = ‘计算机‘ );#使用and求交集
原文:https://www.cnblogs.com/jingkai555/p/11374765.html