在Student表和score表上进行查询。Student表和score表的定义如下表所示:

score表数据如下:

1.查询操作:

1)查询李五一的考试科目和考试成绩

2)查询所有学生的信息和考试信息

3)计算每个学生的总成绩(需显示学生姓名)

4) 计算计算机成绩低于95分的学生的信息

5)查询同时参加计算机和英语考试的学生的信息

6)从student表和score表中查询学生的学号,然后合并查询结果

7)查询姓张或姓王同学的姓名、院系、考试科目和成绩

8) 查询都是湖南的同学的姓名、年龄、院系、考试科目和成绩。

1)查询李五一的考试科目和考试成绩
SELECT a.Name,b.Cname,b.Grade
FROM Student AS a
JOIN score AS b
ON a.Num=b.Num
WHERE a.Name='李五一';2)查询所有学生的信息和考试信息
SELECT * FROM Student AS a
JOIN score AS b
ON a.Num=b.Num;3)计算每个学生的总成绩(需显示学生姓名)
SELECT a.Name, SUM(Grade)
FROM Student AS a
JOIN score AS b
ON a.Num=b.Num
GROUP BY a.Num;4) 计算计算机成绩低于95分的学生的信息
SELECT a.Num,a.Name,a.Dept,a.Address,a.Birthday ,b.Grade,b.Cname
FROM Student AS a
JOIN score AS b
ON a.Num=b.Num
WHERE b.Grade<95 AND b.Cname='计算机';5)查询同时参加计算机和英语考试的学生的信息
SELECT a.Num,a.Name,a.Dept,a.Address,a.Birthday
FROM Student AS a
JOIN score AS b
ON a.Num=b.Num
JOIN score AS c
ON b.Num=c.Num
WHERE (b.Cname='计算机' AND c.Cname='英语') ;6)从student表和score表中查询学生的学号,然后合并查询结果
SELECT Num FROM Student UNION SELECT Num FROM score;7)查询姓张或姓王同学的姓名、院系、考试科目和成绩
SELECT a.Name,a.Dept,b.Cname,b.Grade
FROM student AS a
JOIN score AS b
ON a.Num=b.Num
WHERE a.name LIKE '张%' OR  a.Name LIKE '王%';8) 查询都是湖南的同学的姓名、年龄、院系、考试科目和成绩
SELECT a.Address,a.Name,(DATE_FORMAT(NOW(),'%Y')-a.Birthday) AS age,a.Dept,b.Cname,b.Grade
FROM Student AS a
JOIN score AS b
ON a.Num=b.Num
WHERE a.Address LIKE '湖南省%';

2.利用子查询实现第一题中的4) 5) 7) 8)

4)计算计算机成绩低于95分的学生的信息
SELECT Num,Name,Dept,Address,Birthday FROM Student
WHERE Num IN
(SELECT Num FROM score WHERE Cname='计算机' AND Grade<95);5)查询同时参加计算机和英语考试的学生的信息
SELECT Num,Name,Dept,Address,Birthday FROM Student
WHERE Num IN
(SELECT Num FROM score WHERE Cname='英语')
AND Num IN
(SELECT Num FROM score WHERE Cname='计算机');7)查询姓张或姓王同学的姓名、院系、考试科目和成绩
SELECT a.Name,a.Dept,b.Cname,b.Grade
FROM (SELECT Num,Name,Dept FROM Student
WHERE Name LIKE '张%' OR  Name LIKE '王%') AS a
JOIN score AS b
ON a.Num=b.Num;8) 查询都是湖南的同学的姓名、年龄、院系、考试科目和成绩
SELECT a.Address,a.Name,(DATE_FORMAT(NOW(),'%Y')-a.Birthday) AS age,a.Dept,b.Cname,b.Grade
FROM (SELECT Num,Name,Dept,Birthday,Address FROM Student
WHERE Address LIKE '湖南省%') AS a
JOIN score AS b
ON a.Num=b.Num;

3.学生选课关系数据库C ,S,SC表分别如下:

1)检索不选修任何课程的学生的学号

2)查询选课两门课的学生的姓名

3)查询学习课程号为'C2',成绩为第一名的学生的姓名

4)查询选修C2课程成绩大于该课平均成绩的学生的姓名学号成绩

1)检索不选修任何课程的学生的学号
SELECT * FROM S WHERE SNO NOT IN(
SELECT DISTINCT SNO FROM SC);2)查询选课两门课的学生的姓名
SELECT SN
FROM S
WHERE SNO IN
(SELECT SNO
FROM SC
GROUP BY SNO
HAVING COUNT(*)=2);3)查询学习课程号为'C2',成绩为第一名的学生的姓名
SELECT SN
FROM S
WHERE SNO=
(SELECT SNO
FROM SC
WHERE CNO='C2'
ORDER BY SCORE DESC LIMIT 1);4)查询选修C2课程成绩大于该课平均成绩的学生的姓名学号成绩
SELECT SN,S.SNO,SCORE
FROM S,SC
WHERE  CNO='C2' AND SCORE>(
SELECT AVG(SCORE)
FROM SC
WHERE CNO='C2'
HAVING S.SNO=SC.SNO);

多表连接源码:

-- 创建省份表
CREATE TABLE provinces(
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
proName VARCHAR(10) NOT NULL UNIQUE
);
INSERT provinces(proName) VALUES('北京'),
('上海'),
('深圳');-- 管理员admin id username email proId
CREATE TABLE admin(
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL UNIQUE,
email VARCHAR(50) NOT NULL DEFAULT '382771946@qq.com',
proId TINYINT UNSIGNED NOT NULL
);
INSERT admin(username,proId) VALUES('king',1);
INSERT admin(username,proId) VALUES('queen',2);-- 商品分类cate id cateName cateDesc
CREATE TABLE cate(
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
cateName VARCHAR(50) NOT NULL UNIQUE,
cateDesc VARCHAR(100) NOT NULL DEFAULT ''
);
INSERT cate(cateName) VALUES('母婴');
INSERT cate(cateName) VALUES('服装');
INSERT cate(cateName) VALUES('电子');-- 商品表products id productName, price,cateId
CREATE TABLE products(
id INT UNSIGNED AUTO_INCREMENT KEY,
productName VARCHAR(50) NOT NULL UNIQUE,
price FLOAT(8,2) NOT NULL DEFAULT 0,
cateId TINYINT UNSIGNED NOT NULL,
adminId TINYINT UNSIGNED NOT NULL
);
INSERT products(productName,price,cateId,adminId)
VALUES('iphone9',9888,3,1),
('adidas',388,2,2),
('nike',888,2,2),
('奶瓶',288,1,1);-- 练习1:查询products id productName price --- cate cateName
SELECT p.id, p.productName, p.price, c.cateName
FROM products AS p
JOIN cate AS c
ON p.cateId = c.id;-- 练习2:查询管理员 id username email -- provinces proName
SELECT a.id,a.username,a.email,pro.proName
FROM admin AS a
JOIN provinces AS pro
ON a.proId=pro.id;-- 练习3:查询 products id productName price
-- cate cateName
-- admin username email
SELECT p.id,p.productName,p.price,c.cateName,a.username,a.email
FROM products AS p
JOIN cate AS c
ON p.cateId=c.id
JOIN admin AS a
ON  p.adminId=a.id;-- 练习4:查询 价格低于1000元商品的products id productName price
-- cate cateName
-- admin username email 按价格的降序排列,并且只显示前两条
SELECT p.id,p.productName,p.price,c.cateName,a.username,a.email
FROM products AS p
JOIN cate AS c
ON p.cateId=c.id
JOIN admin AS a
ON  p.adminId=a.id
WHERE p.price < 1000
ORDER BY p.price DESC
LIMIT 2 ;-- 练习5:查询products id productName price
-- cate cateName
-- admin username email
-- provinces proName
SELECT p.id,p.productName,p.price,c.cateName,a.username,a.email,pro.proName
FROM products AS p
JOIN cate AS c
ON p.cateId=c.id
JOIN admin AS a
ON  p.adminId=a.id
JOIN provinces AS pro
ON a.proId=pro.id;

连接查询源码:

dep表
+----+-----------------+-----------------------------+
| id | depName         | depDesc                     |
+----+-----------------+-----------------------------+
|  1 | 大数部          | 大学数学基础课              |
|  2 | 信计部          | 信息与计算科学学科          |
|  3 | 应用数学部      | 数学建模与科学计算          |
|  4 | 光科            | 物理光信息                  |
+----+-----------------+-----------------------------+
emp表
+----+----------+-----+--------+--------+-------+
| id | username | age | sex    | addr   |  depId|
+----+----------+-----+--------+--------+-------+
|  1 | king     |  24 | 保密   | 北京   |     1 |
|  2 | queen    |  25 | 保密   | 北京   |     2 |
|  3 | imooc    |  26 | 保密   | 北京   |     1 |
|  4 | lily     |  27 | 保密   | 北京   |     1 |
|  5 | rose     |  28 | 保密   | 北京   |     3 |
|  6 | john     |  29 | 保密   | 北京   |     3 |
+----+----------+-----+--------+--------+-------+CREATE TABLE emp(
id INT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20) NOT NULL UNIQUE COMMENT '编号',
age TINYINT UNSIGNED NOT NULL DEFAULT 18  COMMENT '年龄',
sex ENUM('男','女','保密') NOT NULL DEFAULT '保密' COMMENT '性别',
addr VARCHAR(20) NOT NULL DEFAULT '北京',
depId TINYINT UNSIGNED NOT NULL COMMENT '部门对应的编号'
)ENGINE=INNODB CHARSET=UTF8;INSERT emp(username,age,depId) VALUES('king',24,1),
('queen',25,2),
('imooc',26,1),
('lily',27,1),
('rose',28,3),
('john',29,3);CREATE TABLE dep(
id TINYINT UNSIGNED AUTO_INCREMENT KEY,
depName VARCHAR(50) NOT NULL UNIQUE,
depDesc VARCHAR(100) NOT NULL DEFAULT ''
)ENGINE=INNODB CHARSET=UTF8;
INSERT dep(depName,depDesc) VALUES('大数部','大学数学基础课'),
('信计部','信息与计算科学学科'),
('应用数学部','数学建模与科学计算'),
('光科','物理光信息');-- 做笛卡尔积
SELECT emp.id,emp.username,emp.age,dep.id,dep.depName,dep.depDesc FROM emp,dep;--内连接
SELECT e.id,e.username,e.age,d.depName
FROM emp AS e
INNER JOIN dep AS d
ON e.depId=d.id;-- 测试左外连接
INSERT emp(username,age,depId)VALUES('测试用户',39,7);SELECT e.id,e.username,e.age,d.depName,d.depDesc
FROM emp AS e
LEFT OUTER JOIN dep AS d
ON e.depId=d.id;-- 测试右外连接
SELECT e.id,e.username,e.age,d.depName,d.depDesc
FROM emp AS e
RIGHT JOIN dep AS d
ON e.depId=d.id;

子查询源码:

CREATE TABLE S(SNO CHAR(6) PRIMARY KEY,SN VARCHAR(20) NOT NULL,AGE TINYINT UNSIGNED NOT NULL,DEPT VARCHAR(20)
);
INSERT S VALUES('S1','李立勇',20,'CS'),('S2','刘蓝',23,'IS'),('S3','周小花',18,'MA'),('S4','张立伟',19,'IS'),('S5','王世明',19,'IS'),('S6','陈思思',19,'MS');CREATE TABLE C(CNO VARCHAR(6) PRIMARY KEY,CN VARCHAR(10) NOT NULL,CPNO VARCHAR(6)
);
INSERT C VALUES('C1','数据库','C2'),('C2','离散数学',NULL),('C3','操作系统','C4'),('C4','数据结构','C2');CREATE TABLE SC(SNO CHAR(6),CNO VARCHAR(6),SCORE INT   NOT NULL,CONSTRAINT S_C_P PRIMARY KEY(SNO,CNO),CONSTRAINT S_F FOREIGN KEY(SNO) REFERENCES S(SNO),CONSTRAINT C_F FOREIGN KEY(CNO) REFERENCES C(CNO));
INSERT SC VALUES('S1','C1',85),('S1','C2',90),('S1','C3',89),('S1','C4',88),('S2','C2',78),('S2','C3',85),('S3','C2',68),('S3','C3',78),('S3','C4',75),('S4','C1',69),('S4','C2',82),('S4','C4',73),('S5','C1',92),('S5','C4',86);
-- 查询与“张立伟”在同一个系学习的学生
SELECT SNO,SN,DEPT
FROM S WHERE DEPT=
(SELECT DEPT FROM S WHERE SN='张立伟');SELECT S1.SNO,S1.SN,S1.DEPT
FROM S AS S1
JOIN S AS S2
ON S1.DEPT=S2.DEPT
WHERE S2.SN='张立伟';-- 查询选修了课程名为“数据库”的学生学号和姓名
SELECT SNO,SN
FROM S
WHERE SNO IN
(SELECT SNO FROM SC WHERE CNO IN(SELECT CNO FROM CWHERE CN='数据库')
);SELECT S.SNO,S.SN FROM S
JOIN SC
ON SC.SNO=S.SNO
JOIN C
ON C.CNO=SC.CNO
WHERE C.CN='数据库';-- 找出每个学生超过他选修课程平均成绩的课程号
SELECT SNO,CNO FROM SC AS X
WHERE SCORE>=(SELECT AVG(SCORE)FROM SC AS Y GROUP BY Y.SNO HAVING Y.SNO=X.SNO);-- 查询选修了C1课程的学生的学号姓名
SELECT SNO,SN
FROM S WHERE EXISTS
(SELECT * FROM SC WHERE SC.SNO=S.SNO AND CNO='C1');SELECT S.SNO,S.SN
FROM S
JOIN SC
ON S.SNO=SC.SNO
WHERE SC.CNO='C1';-- 查询没有选修1号课程的学生姓名
SELECT SNO,SN
FROM S WHERE NOT EXISTS
(SELECT * FROM SC WHERE SC.SNO=S.SNO AND CNO='C1');-- 其它
-- 创建一个user1表,id username
CREATE TABLE user1(id int UNSIGNED AUTO_INCREMENT KEY,username VARCHAR(20)
)SELECT id,username FROM emp;-- 将stu表中id=3的用户名写入到user1表中
INSERT user1(username) SELECT username FROM stu where id=3;-- 创建象user1一样的表user2
CREATE TABLE user2 LIKE user1;
INSERT user2(username) SELECT username FROM stu;-- 将stu表中的tiancai用户名添加到user2表中
INSERT user2 SET username=(SELECT username FROM stu WHERE id=5);-- 去掉字段的重复值
SELECT DISTINCT(username) FROM user2;-- 将user1和user2数据合并到一起
--去重
SELECT username FROM user1
UNION
SELECT username FROM user2;
--不去重
SELECT username FROM user1
UNION ALL
SELECT username FROM user2;

数据库上机实验七(多表连接查询、子查询)相关推荐

  1. OceanBase SQL 执行计划解读(二)──── 表连接和子查询

    前文<OceanBase SQL 执行计划解读(一)>介绍了单表查询中基本的执行计划解读,本文主要介绍简单的表连接和子查询相关的执行计划. 本文假设你对常用的表连接算法已有了解,包括:嵌套 ...

  2. ylb:SQL 表的高级查询-多表连接和子查询

    ylbtech-SQL Server: SQL Server-表的高级查询-多表连接和子查询 SQL Server 表的高级查询-多表连接和子查询. 1,ylb:表的高级查询-多表连接和子查询 返回顶 ...

  3. 数据库学习笔记6--MySQL多表查询之外键、表连接、子查询、索引

    本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...

  4. MS sql server 基础知识回顾(二)-表连接和子查询

    五.表连接 当数据表中存在许多重复的冗余信息时,就要考虑将这些信息建在另一张新表中,在新表中为原表设置好外键,在进行数据查询的时候,就要使用到连接了,表连接就好像两根线,线的两端分别连接两张表的不同字 ...

  5. mysql多表连接 索引_MySQL多表查询之外键、表连接、子查询、索引

    一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, ...

  6. 4,表查询语法,表连接,子查询

    数据库基础四: 今日内容: 一:单表查询语法 from 找表 where 第一次筛选 group by 分组 having 二次筛选 distinct 去重(数据一模一样时去重复的,在from之前使用 ...

  7. mysql用if判断关联的表_mysql表连接,子查询以及if判断

    创建表: CREATE TABLE emp ( ename varchar(10) DEFAULT NULL, hiredate date DEFAULT NULL, sal decimal(10,2 ...

  8. 第七周 Java语法总结之数据库大全_DDL_DML_DQL_约束_备份与还原_表的关系_三大范式_多表查询(内连接_外连接_子查询)_musql事务_隔离级别

    文章目录 数据库 DDL语句:数据库定义语句 1.库的增删查改 1.查询当前mysql下所有的数据库 2.创建数据库 3.查看创建数据库的默认的字符集(了解) 4.修改数据库的字符集(了解) 5.删除 ...

  9. mysql上机实验报告_数据库上机实验7实验报告.doc

    <数据库上机实验7实验报告.doc>由会员分享,提供在线免费全文阅读可下载,此文档格式为doc,更多相关<数据库上机实验7实验报告.doc>文档请在天天文库搜索. 1. 上机 ...

最新文章

  1. 【云计算】云计算从业者导学
  2. 【Python】 配置解析ConfigParser 命令行参数解析optparser
  3. 博客远非“第五力量”
  4. ZZULIOJ 1106: 回文数(函数专题)
  5. 【SpringBoot】Spring+Druid初级配置
  6. 【数据结构算法】二:上三角、下三角中求数组地址--【下标的计算】
  7. TextureUnpacker 分割 Texturepacker 产生的图片 支持windows 和 mac
  8. 【Unity3D】初学加密技巧(反破解)
  9. dell 1520 win7 x64 触摸板驱动 synaptics touchpad 16.2.10.3
  10. 2021年计算机保研总结(北师大+山大+大连理工+东北大学+信工所+哈工大+北航)
  11. R语言使用mean函数计算dataframe指定数据列的均值
  12. 接口测试+自动化接口测试详解入门到精通
  13. RS码FEC机制的实现方法(基于Luigi Rizzo的代码)
  14. npm EPERM: operation not permitted, rename解决
  15. 微信小程序之页面样式以及背景图片显示问题
  16. python是否被高估了?
  17. 当我们谈战略,我们究竟在谈什么?
  18. YOYO 软件下载及8个使用技巧
  19. 安装pytorch3d最简单方法
  20. 武汉理工大学计算机学院复试细则,武汉理工大学2021年各学院(部)考研复试录取工作实施细则...

热门文章

  1. SpringCloud之Eureka原理和eureka优雅停服和安全认证
  2. Outlook2010 POP3方式连接Hotmail等邮箱的错误处理
  3. 如何成为软件高手系列之一
  4. springboot整合redis实现发送短信验证码
  5. 电脑重装系统 Win11 后如何打开任务栏管理器
  6. 数据库web项目对数据库的操作
  7. 白话智能锁—功耗VS电池
  8. Java实现客户端向服务器端定时上传数据
  9. 键盘某些按键失效的解决方案
  10. X理论和Y理论(转载)