mysql笔试题大餐---2、exists加一些查询
mysql笔试题大餐---2、exists加一些查询
一、总结
一句话总结:
实践:我之前的mysql真的学的太浅了,这种情况下,依据实践(做题)才是唯一能把它学好的方式
1、MySQL中EXISTS如何使用?
1、exists是和in相提并论的东西
2、返回值bool值:EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False
比如在Northwind数据库中有一个查询为
SELECT c.CustomerId,CompanyName FROM Customers c WHERE EXISTS(SELECT OrderID FROM Orders o WHERE o.CustomerID=c.CustomerID) 这里面的EXISTS是如何运作呢?子查询返回的是OrderId字段,可是外面的查询要找的是CustomerID和CompanyName字段,这两个字段肯定不在OrderID里面啊,这是如何匹配的呢? EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False
EXISTS 指定一个子查询,检测 行 的存在。 语法: EXISTS subquery
参数: subquery 是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INTO 关键字)。
结果类型: Boolean 如果子查询包含行,则返回 TRUE ,否则返回 FLASE 。
2、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名?
注意exists:select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');
EXISTS()查询是将主查询的结果集放到子查询中做验证,根据验证结果是true或false来决定主查询数据结果是否得以保存。
3、mysql中的增删改查?
用脑子:站在设计者的思想上怎么才能完成任务:INSERT INTO student(id,name,grade) VALUES(1,'zhangshan',98);
删:DELETE FROM student WHERE id=7;
改:UPDATE student SET name=‘caocao’,grade=50 WHERE id=1;
4、查询所有同学的学号、姓名、选课数、总成绩?
多表查询推荐用链接查询方式:比如inner join
##多表查询推荐用链接查询方式:比如inner join
select s.s_id,s.s_name,count(ss.ss_s_id) course_num,sum(ss.ss_score) from student s inner join student_score ss on s.s_id=ss.ss_s_id group by ss.ss_s_id;
5、查询姓“鲁”的老师的个数?
like中的百分号的用法 + count用法
select count(t.t_id) num from teacher t where t_name like '鲁%'
6、查询没学过“鲁迅”老师课的同学的学号、姓名?
没学过:总的减去学过了的
去掉重复:distinct函数
总的减去学过了的如何实现:通过嵌套查询+ not in
##找出鲁迅老师课的id,学生not in 里面就好
##没学过:总的减去学过了的
##去掉重复:distinct函数
##总的减去学过了的如何实现:通过嵌套查询+ not in
select c.c_id from course c inner join teacher t on t.t_id=c.c_t_id where t_name='鲁迅'
select distinct(c.c_id) from course c inner join teacher t on t.t_id=c.c_t_id where t_name='鲁迅'
select distinct(s_id) from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id inner join teacher t on t.t_id=c.c_t_id where c.c_id in (select distinct(c.c_id) from course c inner join teacher t on t.t_id=c.c_t_id where t_name='鲁迅') select s.s_id,s.s_name from student s where s.s_id not in (select distinct(s_id) from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id inner join teacher t on t.t_id=c.c_t_id where c.c_id in (select distinct(c.c_id) from course c inner join teacher t on t.t_id=c.c_t_id where t_name='鲁迅'))
7、查询学过“鲁迅作品集”并且也学过“狂人日记”课程的同学的学号、姓名?
思路:把学过“鲁迅作品集”的人的id找出来,把学过“狂人日记”的人的id找出来,做对比找出同时学过的人的id
特别注意:from的表示一个嵌套查询的表:from (select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='鲁迅作品集') a
##思路:把学过“鲁迅作品集”的人的id找出来,把学过“狂人日记”的人的id找出来,做对比找出同时学过的人的id
##特别注意:from的表示一个嵌套查询的表:from (select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='鲁迅作品集') a
select * from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id inner join teacher t on t.t_id=c.c_t_id
#把学过“鲁迅作品集”的人的id找出来
select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='鲁迅作品集'
#把学过“狂人日记”的人的id找出来
select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='狂人日记'
#做对比
select a.s_id from (select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='鲁迅作品集') a,(select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='狂人日记') b where a.s_id=b.s_id
#找学生信息
select * from student where s_id in (select a.s_id from (select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='鲁迅作品集') a,(select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='狂人日记') b where a.s_id=b.s_id)
二、内容在总结中
1、具体操作及截图
数据库数据的大致样子:
select * from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id inner join teacher t on t.t_id=c.c_t_id

#3、查询所有同学的学号、姓名、选课数、总成绩;
#3、查询所有同学的学号、姓名、选课数、总成绩;
##多表查询推荐用链接查询方式:比如inner join
select s.s_id,s.s_name,count(ss.ss_s_id) course_num,sum(ss.ss_score) from student s inner join student_score ss on s.s_id=ss.ss_s_id group by ss.ss_s_id;

#4、查询姓“鲁”的老师的个数;
select count(t.t_id) num from teacher t where t_name like '鲁%'

#5、查询没学过“鲁迅”老师课的同学的学号、姓名;
##找出鲁迅老师课的id,学生not in 里面就好
##没学过:总的减去学过了的
##去掉重复:distinct函数
##总的减去学过了的如何实现:通过嵌套查询+ not in
select c.c_id from course c inner join teacher t on t.t_id=c.c_t_id where t_name='鲁迅'
select distinct(c.c_id) from course c inner join teacher t on t.t_id=c.c_t_id where t_name='鲁迅'
select distinct(s_id) from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id inner join teacher t on t.t_id=c.c_t_id where c.c_id in (select distinct(c.c_id) from course c inner join teacher t on t.t_id=c.c_t_id where t_name='鲁迅') select s.s_id,s.s_name from student s where s.s_id not in (select distinct(s_id) from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id inner join teacher t on t.t_id=c.c_t_id where c.c_id in (select distinct(c.c_id) from course c inner join teacher t on t.t_id=c.c_t_id where t_name='鲁迅'))

#6、查询学过“鲁迅作品集”并且也学过“狂人日记”课程的同学的学号、姓名;
##思路:把学过“鲁迅作品集”的人的id找出来,把学过“狂人日记”的人的id找出来,做对比找出同时学过的人的id
##特别注意:from的表示一个嵌套查询的表:from (select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='鲁迅作品集') a
select * from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id inner join teacher t on t.t_id=c.c_t_id
#把学过“鲁迅作品集”的人的id找出来
select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='鲁迅作品集'
#把学过“狂人日记”的人的id找出来
select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='狂人日记'
#做对比
select a.s_id from (select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='鲁迅作品集') a,(select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='狂人日记') b where a.s_id=b.s_id
#找学生信息
select * from student where s_id in (select a.s_id from (select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='鲁迅作品集') a,(select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='狂人日记') b where a.s_id=b.s_id)

2、代码
#3、查询所有同学的学号、姓名、选课数、总成绩;
##多表查询推荐用链接查询方式:比如inner join
select s.s_id,s.s_name,count(ss.ss_s_id) course_num,sum(ss.ss_score) from student s inner join student_score ss on s.s_id=ss.ss_s_id group by ss.ss_s_id; #4、查询姓“鲁”的老师的个数;
select count(t.t_id) num from teacher t where t_name like '鲁%' #5、查询没学过“鲁迅”老师课的同学的学号、姓名;
##找出鲁迅老师课的id,学生not in 里面就好
##没学过:总的减去学过了的
##去掉重复:distinct函数
##总的减去学过了的如何实现:通过嵌套查询+ not in
select c.c_id from course c inner join teacher t on t.t_id=c.c_t_id where t_name='鲁迅'
select distinct(c.c_id) from course c inner join teacher t on t.t_id=c.c_t_id where t_name='鲁迅'
select distinct(s_id) from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id inner join teacher t on t.t_id=c.c_t_id where c.c_id in (select distinct(c.c_id) from course c inner join teacher t on t.t_id=c.c_t_id where t_name='鲁迅') select s.s_id,s.s_name from student s where s.s_id not in (select distinct(s_id) from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id inner join teacher t on t.t_id=c.c_t_id where c.c_id in (select distinct(c.c_id) from course c inner join teacher t on t.t_id=c.c_t_id where t_name='鲁迅')) #6、查询学过“鲁迅作品集”并且也学过“狂人日记”课程的同学的学号、姓名;
##思路:把学过“鲁迅作品集”的人的id找出来,把学过“狂人日记”的人的id找出来,做对比找出同时学过的人的id
##特别注意:from的表示一个嵌套查询的表:from (select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='鲁迅作品集') a
select * from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id inner join teacher t on t.t_id=c.c_t_id
#把学过“鲁迅作品集”的人的id找出来
select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='鲁迅作品集'
#把学过“狂人日记”的人的id找出来
select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='狂人日记'
#做对比
select a.s_id from (select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='鲁迅作品集') a,(select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='狂人日记') b where a.s_id=b.s_id
#找学生信息
select * from student where s_id in (select a.s_id from (select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='鲁迅作品集') a,(select s.s_id from student s inner join student_score ss on s.s_id=ss.ss_s_id inner join course c on c.c_id=ss.ss_c_id where c.c_name='狂人日记') b where a.s_id=b.s_id)
mysql笔试题大餐---2、exists加一些查询的更多相关文章
- mysql笔试题大餐---1、组合查询方式及having
mysql笔试题大餐---1.组合查询方式及having 一.总结 一句话总结: 实践:我之前的mysql真的学的太浅了,这种情况下,依据实践(做题)才是唯一能把它学好的方式 学的暂时够了,以实践而学 ...
- MySQL笔试题搜罗
一.有表如下 +------+---------+--------+ | name | subject | score | +------+---------+--------+ | 张三 | 数学 ...
- Mysql笔试题(二)
(1)表名:购物信息购物人 商品名称 数量A 甲 2B 乙 4C 丙 ...
- Mysql笔试题
1.查询Student表中的所有记录的Sname.Ssex和Class列. SELECT Sname,Ssex,Class FROM Students; 2.查询教师所有的单位即不重复的Depart列 ...
- 从阿里巴巴笔试题看Java加载顺序
一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...
- 由阿里巴巴笔试题看java加载顺序
一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...
- 收藏所用C#技术类面试、笔试题汇总
技术类面试.笔试题汇总 注:标明*的问题属于选择性掌握的内容,能掌握更好,没掌握也没关系. 下面的参考解答只是帮助大家理解,不用背,面试题.笔试题千变万化,不要梦想着把题覆盖了,下面的题是供大家查漏补 ...
- JAVA 150道笔试题知识点整理
JAVA 笔试题 整理了几天才整理的题目,都是在笔试或者面试碰到的,好好理解消化下,对你会有帮助,祝你找工作顺利,收到满意的 offer . 1.Java 基础知识 1.1 Java SE 语法 &a ...
- PHP爱考的那些笔试题
PHP爱考的那些笔试题 来自<PHP程序员面试笔试宝典>,涵盖了近三年了各大型企业常考的PHP面试题,针对面试题提取出来各种面试知识也涵盖在了本书. 一.单例模式是在应用程序中最多只能拥有 ...
随机推荐
- Service系统服务(二):补充应用技巧、软连接与硬连接、man手册、zip备份、vim效率操作、自定义yum软件仓库、发布及测试yum仓库、编译安装软件包
一.补充应用技巧 目标: 本例要求掌握在运维中比较常用的一些扩展命令技巧的使用,完成下列小技巧操作: 1> 采用数值形式将目录/root的权限调整为 rwx------ 2> 将记录的 ...
- 《ArcGIS Runtime SDK for .NET开发笔记》 --Hello Word
这里我们将创建第一个用于显示地图的APP. 1.新建一个WPF程序 首先我们打开Visual Studio,选择新建项目. 选择已安装——模板——Windows桌面——WPF应用程序 2.添加Run ...
- javascript全量匹配屏蔽词
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python selenium 自动化流程的一些总结与思考
首先要考虑的项目为什么要做自动化测试?(主要从自动化测试的优点着手) 其次是什么项目才适合做自动化测试? 自动化测试覆盖率要达到什么样的程度?因为都知道不可能达到100%的,不然脚本太臃肿,反而会失去 ...
- Spring系列.@EnableRedisHttpSession原理简析
在集群系统中,经常会需要将Session进行共享.不然会出现这样一个问题:用户在系统A上登陆以后,假如后续的一些操作被负载均衡到系统B上面,系统B发现本机上没有这个用户的Session,会强制让用户重 ...
- js预编译的四部曲
众所周知javascript是解释性语言,主要特点为解释一行执行一行. 而在js运行时会进行三件事:1语法分析 2.预编译 3.解释执行 语法分析会在代码执行前对代码进行通篇检查,以排除一些低级错 ...
- 转 jmeter 等待时间 pacing think time
第一部分:Request之间的等待时间的设置 先明确一些概念:1)定时器是在每个sampler(采样器)之前执行的,而不是之后:是的,你没有看错,不管这个定时器的位置放在sampler之后,还是之下, ...
- Python测试代理ip是否有效
方式一: 通过icanhazip.com返回的ip地址进行检测 import requests '''代理IP地址(高匿)''' proxy = { 'http': 'http://117.85.10 ...
- 深海Django少年
orm查询,如果遇到我之前的环境报错 就可去manage.py中拷贝前四行代码到tests文件中,然后增加两行代码: import django django.setup() 或者任意新建一个py文件 ...
- multipart/form-data,application/json和application/x-www-form-urlencoded区别
application/json和application/x-www-form-urlencoded都是表单数据发送时的编码类型. EncType: enctype 属性规定在发送到服务器之前应该如何 ...