A-FM

-- 创建student表 和 score表

CREATE TABLE Student (
	Id INT ( 10 ) NOT NULL PRIMARY KEY UNIQUE auto_increment COMMENT \'主键, 长度为10 , 不为空, 自增, 唯一 \',
	studentName VARCHAR ( 20 ) NOT NULL COMMENT \'姓名\',
	studentSex VARCHAR ( 4 ) COMMENT \'性别\',
	studentBirth YEAR COMMENT \'出生年月日\',
	department VARCHAR ( 20 ) NOT NULL COMMENT \'院系名称\',
	studentAddress VARCHAR ( 50 ) COMMENT \'家庭住址\' 
);
CREATE TABLE Score (
	Id INT ( 10 ) PRIMARY KEY NOT NULL UNIQUE auto_increment COMMENT \'主键 自增 唯一 不为空 \',
	studentId INT ( 10 ) NOT NULL COMMENT \'学生Id\',
	courseName VARCHAR ( 20 ) COMMENT \'课程名\',
	grade INT ( 10 ) COMMENT \'分数\' 
);
ALTER TABLE score ADD FOREIGN KEY ( studentId ) REFERENCES student ( Id );

-- 向student表插入记录.
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 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);

-- 查询student表的所有记录.
SELECT * FROM student;

-- 查询student表的第二条到第四条记录.
-- LIMIT M OFFSET N; M表示 一页返回多少数据 , N 表示从第几条开始返回.
SELECT * FROM student LIMIT 3 OFFSET 1;

-- 从student表查询所有学生的学号(Id),姓名(name)和院系(department)的信息.
-- 注意 MySQL6 之前需要注意 ,  FROM之后  只能用字段别名, 但是6.0后 都可以用, 中文别名不能 当做变量使用.
SELECT a.Id AS \'学号\',a.studentName AS \'姓名\',a.department AS \'院系\' FROM student as a WHERE a.department=\'中文系\';

-- 从student表中查询计算机系和英语系学生的信息.
SELECT * FROM student AS a WHERE a.department=\'计算机系\' OR a.department=\'英语系\';
SELECT * FROM student AS a WHERE a.department IN (\'计算机系\',\'英语系\');

-- 从student表中查询年龄在18~22岁学生的信息.
-- 当前时间格式化. DATE_FORMAT(NOW(), \'%Y-%m-%d %h:%i:%s\');    %Y 2019 --- %y 19 --- %M July --- %W Monday 
SELECT * FROM student WHERE YEAR(NOW())-student.studentBirth BETWEEN 28 AND 30;

-- 从student表中查询 每个院系都有多少人.
SELECT student.department \'院系\',COUNT(*) \'总人数\' FROM student GROUP BY student.department;

-- 从score表中查询每个科目的最高分.
SELECT score.courseName \'科目\', MAX(score.grade) \'最高分\' FROM score GROUP BY score.courseName;

-- 查询李四的考试科目和成绩.  (注意 删改 需要临时表, 不然会报错)
SELECT score.courseName \'科目\',score.grade \'成绩\' FROM score WHERE score.studentId=(SELECT student.Id FROM student WHERE student.studentName=\'李四\');

-- 用链接的方式查询所有学生的信息和考试信息.
SELECT stu.Id \'学号\',stu.studentName \'姓名\',stu.studentSex \'性别\',DATE_FORMAT(NOW(),\'%Y\')-stu.studentBirth \'年龄\',stu.studentAddress \'家庭住址\',stu.department \'所属学院\', score.courseName \'科目\',score.grade \'成绩\' FROM student as stu INNER JOIN score ON stu.Id=score.studentId;

-- 计算每个学生的总成绩
SELECT stu.studentName \'姓名\',SUM(score.grade) \'总成绩\' FROM student as stu INNER JOIN score ON stu.Id=score.studentId GROUP BY stu.studentName;

-- 每个科目的平均成绩
SELECT score.courseName \'科目\',ROUND(AVG(score.grade),2) \'平均成绩\' FROM score GROUP BY score.courseName;

-- 查询计算机低于95的学生的信息 (注意: 删改  需要创建临时表)
SELECT * FROM student WHERE student.Id IN (SELECT score.studentId FROM score WHERE score.grade<=95 AND score.courseName=\'计算机\');

-- 查询同时参加计算机和英语考试学生的信息.   总计无敌宇宙大笨逼 写法.
SELECT c.Id,c.department,c.studentAddress,c.studentName,c.studentSex,a.grade,a.courseName,c.studentBirth FROM score AS a INNER JOIN score AS b ON a.studentId=b.studentId INNER JOIN student AS c ON c.id=a.studentId WHERE a.courseName="计算机" AND b.courseName="英语";

-- 将计算机成绩从高到低拍一拍.
SELECT * FROM student INNER JOIN score ON student.Id=score.studentId WHERE score.courseName="计算机" ORDER BY grade DESC;

-- 查询姓张或姓王同学的姓名,院系,考试科目和成绩.
SELECT student.studentName \'姓名\',student.department \'院系\',score.courseName \'考试科目\',score.grade \'成绩\' FROM student INNER JOIN score ON student.Id=score.studentId WHERE student.studentName LIKE \'张%\' OR student.studentName LIKE \'王%\';

-- 查询都是湖南的学生的姓名,年龄,院系和考试科目以及成绩.
SELECT student.studentName \'姓名\',DATE_FORMAT(NOW(),\'%Y\')-student.studentBirth \'年龄\',student.department \'院系\',score.courseName \'考试科目\',score.grade \'成绩\' FROM student INNER JOIN score ON student.Id=score.studentId WHERE student.studentAddress LIKE \'%湖南%\';

分类:

技术点:

相关文章:

猜你喜欢
  • 2021-11-20
  • 2021-08-01
  • 2022-02-27
  • 2022-01-07
  • 2021-11-01
相关资源
相似解决方案