/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /!32312 IF NOT EXISTS/demo /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
USE demo;
/*Table structure for table course */
DROP TABLE IF EXISTS course;
CREATE TABLE course (
c_id int(10) unsigned NOT NULL AUTO_INCREMENT,
c_name varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
t_id int(11) DEFAULT NULL,
PRIMARY KEY (c_id)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*Data for the table course */
insert into course(c_id,c_name,t_id) values (1,'语文',1),(2,'数学',3),(3,'英语',2);
/*Table structure for table score */
DROP TABLE IF EXISTS score;
CREATE TABLE score (
s_id int(10) NOT NULL,
c_id int(11) DEFAULT NULL,
score decimal(10,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*Data for the table score */
insert into score(s_id,c_id,score) values (1,2,'90.00'),(1,1,'87.00'),(1,3,'68.50'),(3,1,'79.00'),(3,2,'89.00'),(3,3,'99.00'),(2,3,'86.00'),(2,1,'79.00'),(2,2,'87.00');
/*Table structure for table t_student */
DROP TABLE IF EXISTS t_student;
CREATE TABLE t_student (
s_id int(10) unsigned NOT NULL AUTO_INCREMENT,
s_name varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
s_birthday timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
s_sex char(12) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (s_id)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*Data for the table t_student */
insert into t_student(s_id,s_name,s_birthday,s_sex) values (1,'张旺','2021-07-25 16:09:46','男'),(2,'李四','2021-07-25 16:09:42','女'),(3,'张无忌','2021-07-25 16:10:14','男');
/*Table structure for table t_teacher */
DROP TABLE IF EXISTS t_teacher;
CREATE TABLE t_teacher (
t_id int(10) unsigned NOT NULL AUTO_INCREMENT,
t_name varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
c_id int(11) DEFAULT NULL,
PRIMARY KEY (t_id)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
/*Data for the table t_teacher */
insert into t_teacher(t_id,t_name,c_id) values (1,'张三',1),(2,'李四',3),(3,'王五',2);
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
**查询相关练习**
-- 查询所有的学生信息
SELECT * FROM t_student;
-- 子查询: 查找 01 成绩及格的学生的 学号、姓名、生日、性别
SELECT * FROM t_student s JOIN score sc ON sc.s_id = s.s_id WHERE sc.score > 60 AND sc.c_id = (SELECT c_id FROM course WHERE c_name = '语文');
-- 子查询: 查看教语文的老师的 工号、姓名
SELECT * FROM t_teacher WHERE t_id = (SELECT t_id FROM course WHERE c_name = '语文');
-- 关联查询: 查找所有男生的 语文 的成绩,学号、姓名、01成绩
SELECT * FROM t_student s JOIN score sc ON sc.s_id = s.s_id JOIN course c ON c.c_id = sc.c_id HAVING s.s_sex = '男' AND c_name = '语文';
-- 关联查询: 查找 1990年出生的学生 数学 的成绩, 学号,姓名,生日,02成绩
SELECT * FROM t_student s JOIN score sc ON sc.s_id = s.s_id JOIN course c ON c.c_id = sc.c_id HAVING c.c_name = '数学' AND s.s_birthday BETWEEN '1990-01-01' AND '1990-12-30';
-- 查询每个老师教授课程的列表,显示列表 老师工号、老师名称、课程编号、课程名称。 对数据表做别名,teacher 别名为t , course 别名为 c
SELECT t.t_id, t_name, c.c_id, c_name FROM t_teacher t JOIN course c ON c.c_id = t.c_id;
-- 查询每个老师教授课程,显示: 老师工号、老师名称、课程编号、课程名称 ,并以 老师工号倒序/降序(desc)排序。
SELECT t.t_id, t_name, c.c_id, c_name FROM t_teacher t JOIN course c ON c.c_id = t.t_id ORDER BY t.t_id DESC;
-- 查询张三教授的课程 ,显示: 老师工号、姓名、课程编号、课程名称。 这需要使用 where 条件
SELECT * FROM t_teacher t JOIN course c ON c.c_id = t.c_id WHERE t_name = '张三';
-- 查询每个学生、每一课的成绩,显示列表 学生学号、学生姓名、生日、性别、课程名称、课程成绩。
SELECT s.s_id, s_name, s_birthday, s_sex, c.c_name, score FROM t_student s JOIN score sc ON s.s_id = sc.s_id JOIN course c ON c.c_id = sc.c_id;
-- 查询每个学生、每科的成绩,显示列表 学生学号、学生姓名、生日、性别、课程名称、课程成绩。 先以课程id正序(asc),再以课程成绩倒序(desc)。
SELECT s.s_id, s_name, s_birthday, s_sex, c_name, score FROM t_student s JOIN score sc ON sc.s_id = s.s_id JOIN course c ON c.c_id = sc.c_id ORDER BY c.c_id, score DESC;
-- 查询所有分数 80-90 的学生,成绩, 并以学生成绩倒序排序, 显示列表: 学生学号、学生姓名、生日、性别、课程名称、课程成绩
SELECT s.s_id, s_name, s_birthday, s_sex, c_name, score FROM t_student s JOIN score sc ON sc.s_id = s.s_id JOIN course c ON c.c_id = sc.c_id WHERE score BETWEEN 80 AND 90;
-- 查询有不及格成绩的学生的 学号、姓名、生日、性别
SELECT * FROM t_student s JOIN score sc ON sc.s_id = s.s_id WHERE score < 60;
-- 查询学习过张三老师教过的课程的学生的 学号、姓名、生日、性别
SELECT * FROM t_student s JOIN course c ON c.t_id = (SELECT t_id FROM t_teacher WHERE t_name = '张三');
-- 查询数学老师的信息,显示 老师工号、老师姓名、课程编号、课程名称,
SELECT t.t_id, t.t_name, c.c_id, c.c_name FROM t_teacher t JOIN course c ON c.t_id = t.t_id WHERE c.c_name = '数学';
本文就到此结束了, 通过大量的sql查询练习,一定会提升自己的能力,所以说,坚持下去,认真的做下去,未来你会感谢你现在的自己,加油,我们下篇见~
看到这的小伙伴赏给博主个赞吧,卑微博主在线求赞~😙