sql实战-1

sql实战-1

一.按照要求写SQL

在这里插入图片描述

1.1.前期准备

首先我们根据表结构创建表,并向其添加一些数据。如下所示

/*
 Navicat Premium Data Transfer

 Source Server         : 本地数据库
 Source Server Type    : MySQL
 Source Server Version : 80033
 Source Host           : localhost:3306
 Source Schema         : sql_test

 Target Server Type    : MySQL
 Target Server Version : 80033
 File Encoding         : 65001

 Date: 24/07/2023 21:39:04
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for class
-- ----------------------------
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class`  (
  `cid` int(0) NOT NULL COMMENT '班号',
  `caption` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '班级名称',
  PRIMARY KEY (`cid`) USING BTREE,
  INDEX `cid`(`cid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '班级表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of class
-- ----------------------------
INSERT INTO `class` VALUES (1, '三年二班');
INSERT INTO `class` VALUES (2, '一年三班');
INSERT INTO `class` VALUES (3, '三年一班');

-- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course`  (
  `cid` int(0) NOT NULL COMMENT '课程编号',
  `cname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '课程名称',
  `teacher_id` int(0) NULL DEFAULT NULL COMMENT '师号',
  PRIMARY KEY (`cid`) USING BTREE,
  INDEX `course_ibfk_1`(`teacher_id`) USING BTREE,
  CONSTRAINT `course_ibfk_1` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`tid`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '课程表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES (1, '生物', 1);
INSERT INTO `course` VALUES (2, '体育', 2);
INSERT INTO `course` VALUES (3, '物理', 2);

-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score`  (
  `sid` int(0) NOT NULL COMMENT '成绩主键',
  `student_id` int(0) NULL DEFAULT NULL COMMENT '学号',
  `course_id` int(0) NULL DEFAULT NULL COMMENT '课程编号',
  `number` decimal(4, 1) NULL DEFAULT NULL COMMENT '分数',
  PRIMARY KEY (`sid`) USING BTREE,
  INDEX `student_id`(`student_id`) USING BTREE,
  INDEX `course_id`(`course_id`) USING BTREE,
  CONSTRAINT `score_ibfk_1` FOREIGN KEY (`student_id`) REFERENCES `student` (`sid`) ON DELETE RESTRICT ON UPDATE RESTRICT,
  CONSTRAINT `score_ibfk_2` FOREIGN KEY (`course_id`) REFERENCES `course` (`cid`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '成绩表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES (1, 3, 1, 58.0);
INSERT INTO `score` VALUES (2, 2, 3, 32.0);
INSERT INTO `score` VALUES (3, 3, 2, 89.0);
INSERT INTO `score` VALUES (4, 2, 2, 100.0);

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `sid` int(0) NOT NULL COMMENT '学号',
  `sname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '学生姓名',
  `gender` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '学生性别',
  `class_id` int(0) NULL DEFAULT NULL COMMENT '班号',
  PRIMARY KEY (`sid`) USING BTREE,
  INDEX `student_ibfk_1`(`class_id`) USING BTREE,
  CONSTRAINT `student_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `class` (`cid`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '学生表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '张三', '女', 1);
INSERT INTO `student` VALUES (2, '李四', '女', 1);
INSERT INTO `student` VALUES (3, '王五', '男', 2);

-- ----------------------------
-- Table structure for teacher
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher`  (
  `tid` int(0) NOT NULL COMMENT '师号',
  `tname` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '老师姓名',
  PRIMARY KEY (`tid`) USING BTREE,
  INDEX `tid`(`tid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '老师表' ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES (1, '叶平');
INSERT INTO `teacher` VALUES (2, '马化腾');
INSERT INTO `teacher` VALUES (3, '俞敏洪');

SET FOREIGN_KEY_CHECKS = 1;

注意:因为有些表会有外键约束,可能会导致对数据更改有些麻烦,我们可以通过下面指令来设置全局范围不检查外键。

SET GLOBAL FOREIGN_KEY_CHECKS = 0;

1.2.题目

1.2.1.查询平均成绩大于60分的同学的学号、姓名和平均成绩
select
	st.sid sid,
	st.sname sname,
	avg(sc.`number`) avgNumber
from
	student st
left join score sc 
on
	st.sid = sc.student_id
group by
	st.sid
having
	avg(sc.`number`) > 60;
1.2.2.查询所有同学的学号、姓名、选课数、总成绩
select
	st.sid sid,
	st.sname sname,
	count(sc.course_id) courseCount,
	ifnull(sum(sc.`number`), 0) numberSum
from
	student st
left join score sc
on
	st.sid = sc.student_id
group by
	st.sid;
1.2.3.查询姓“李”的老师的个数
select count(1) nameCount
from teacher t 
where t.tname like '李%';
1.2.4.查询没学过“叶平”老师课的同学的学号、姓名
select
	st.sid sid,
	st.sname sname
from
	student st
where
	st.sid not in (
	select
		st.sid sid
	from
		student st
	left join score sc
on
		st.sid = sc.student_id
	where
		sc.course_id in (
		select
			co.cid cid
		from
			course co
		left join teacher te
on
			co.teacher_id = te.tid
		where
			te.tname = '叶平'
)
	group by
		st.sid);
1.2.5.查询学过“001”并且也学过编号“002”课程的同学的学号、姓名
select
	a.sid sid,
	b.sname sname
from
	(
	select
		st.sid sid,
		st.sname sname
	from
		student st
	left join score sc
on
		st.sid = sc.student_id
	where
		sc.course_id = 001) a
join (
	select
		st.sid sid ,
		st.sname sname
	from
		student st
	left join score sc
on
		st.sid = sc.student_id
	where
		sc.course_id = 002) b
on
	a.sid = b.sid;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值