上岸后分享:SELECT查询解题思路(尤其是不同多表查询对比) 力荐力荐力荐
阅读前请看一下:我是一个热衷于记录的人,每次写博客会反复研读,尽量不断提升博客质量。文章设置为仅粉丝可见,是因为写博客确实花了不少精力。希望互相进步谢谢!!
文章目录
- 阅读前请看一下:我是一个热衷于记录的人,每次写博客会反复研读,尽量不断提升博客质量。文章设置为仅粉丝可见,是因为写博客确实花了不少精力。希望互相进步谢谢!!
- 前言
- 一、SELECT语句都有哪些?
- 二、解题方法
- 三、例题
- 第五版P112例3.67
- 四、总结(有干货)
前言
提示:本文着重讲解多表查询的思路,及不同多表查询的对比:
背景:刚上岸某985计科,之前准备研究生复试中关于数据库的一些学习心得,本篇重点记录关于SQL中查询(SELECT)语句的心得。我使用的是王、萨二人的数据库系统概论教材,例子的来源来自于教材、如何分析也是按照教材的框架去总结提炼得到。(代码未上机进行验证,这篇文章目的只是去给思路(尤其是多表查询),以及不同查询语句的对比,有错望指正,勿喷勿喷勿喷!)
提示:以下是本篇文章正文内容,直接SELECT开门见山
一、SELECT语句都有哪些?
1、其实教材讲得很清楚,无非就是单表查询 (选择列+选择行)+ 多表查询(连接查询、嵌套查询、集合查询、基于派生表查询)。
2、重点应该是单表查询中的选择满足条件的元组(WHERE)、排序(ORDER BY)、分组查询 [过滤](GROUP BY [HAVING])、多表查询(最常用就是连接查询,其次是嵌套查询)。
二、解题方法
提示:本文着重讲解多表查询的思路,及不同多表查询的对比:
1、拿到一道查询语句的题,解体步骤:
①先判断是单表还是多表查询(两个相同的表也叫多表,此时注意要取别名),若是单表,无非就是选列还是选行。难点在于选行,考题自然要考WHERE关键字,若升级难度,无非就是在此基础上加上聚集函数和排序(ORDER BY)关键字,再升级,那就是分组查询[过滤](GROUP BY [HAVING])。单表查询按照此思路解,一定就不会混乱了。若是多表查询,则跳到第二步;
②若多表(这里给图更直观,常考的下划线标注,解题时按图中顺序进行思考即可):
三、例题
第五版P112例3.67
1、学生-课程模式S-T如下(第五版P79)
2、第五版教材P112例3.67
3、这里代码就是按照上面“方法”步骤进行的(这里未上机运行,若有问题,麻烦指出)。
这里判断出来是需要两个SC表进行查询,故:
(1)连接查询(这里需要注意取别名)
SELECT Sno
FROM SC SC1, SC SC2
WHERE S1.Sno = S2.Sno //连接条件,与IN子查询区分,IN无连接条件AND S1.Cno = '1'AND S2.Cno = '2';
(2)嵌套子查询(这里写了最常用的IN子查询与EXISTS子查询)
①IN子查询(一定注意IN是不需要连接条件的,因此两个SC表无需别名)
SELECT Sno
FROM SC
WHERE Cno = '1' AND Sno IN (SELECT SnoFROM SCWHERE Cno = '2');
②EXISTS子查询(与IN区分,最大不同就是需要连接条件,故两个SC表一定要取别名)
SELECT Sno
FROM SC S1
WHERE S1.Cno = '1' AND EXISTS(SELECT * /*与IN不同,这里通常都是*,因为返回结果是true or false,所以给出实际列名无意义*/FROM SC S2WHERE S2.Cno = '2' ANDS1.Sno = S2.Sno);/*一定注意这里需要连接条件,故两个SC表需要别名*/
(3)集合查询
错误写法:(思考为何会错?)
SELECT Sno
FROM SC
WHERE Cno = '1' AND Cno = '2';
正确写法:
SELECT Sno
FROM SC
WHERE Cno = '1'
INTERSECT //交
SELECT Sno
FROM SC
WHERE Cno = '2';
(4)派生表查询
SELECT Sno
FROM SC S1, (SELECT Sno, Cno FROM SC) AS S2 //派生表表名S2
WHERE S1.Sno = S2.Sno //连接条件,与IN子查询区分,IN无连接条件AND S1.Cno = '1'AND S2.Cno = '2';
四、总结(有干货)
1、多表查询解题思路一定掌握;
2、对于查询中提炼了几个需要注意的地方(重要性由高到低排序):
(1) 单表查询:
①聚集函数不能出现在WHERE中,只能出现在SELECT或HAVING中;
②WHERE作用于整个表选择满足条件的元组,而HAVING作用于整个组,需要和GROUP BY搭配使用从而实现“分组过滤”;
(2) 多表查询:
①IN无需写连接条件,故若多个相同表进行查询的时候也无需别名。其余所有均需要写连接条件,故若多个相同表就需要取别名(这一点非常重要,上面例题中可以验证这一点);
②遇到全称量词要转化为双重否定,即两个NOT EXISTS处理;
③子查询中不能有ORDER BY,它只能对最终结果排序;
④连接查询和嵌套子查询可以混用;
⑤有些嵌套子查询可以和连接替换,有些不能,但是尽量用连接,查询效率更高(这就是为何书上先讲连接查询,再讲嵌套子查询的原因了);
⑥嵌套子查询中,IN、比较符、ANY/ALL均能转化成EXISTS;
⑦聚集函数要比ANY/ALL效率要高。
码字不易,谢谢点赞!!!
码字不易,谢谢点赞!!!
码字不易,谢谢点赞!!!
上岸后分享:SELECT查询解题思路(尤其是不同多表查询对比) 力荐力荐力荐相关推荐
- access查询mysql_2017计算机二级Access数据库生成表查询教程
2017计算机二级Access数据库生成表查询教程 引导语;你知道运用Access数据库如何查询生成表吗,以下是百分网小编分享给大家的2017计算机二级Access数据库生成表查询教程,欢迎阅读! 生 ...
- (探讨)MyBatis中的N+1问题,多表关联查询效率高点还是多次单表查询效率高
MySQL多表关联查询效率高点还是多次单表查询效率高,为什么? https://blog.csdn.net/weixin_33869377/article/details/86265527 MyBat ...
- mysql 连接查询两个条件_MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习...
一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建一个数据库,那数据库里面是不是存了好多张表啊,不可能把所有的数据都放到一张表里面,肯定要分表来存数据,这样节 ...
- 怎么提高mysql多表查询效率_MySQL创建index提高多表查询效率
本文的目的在于探讨use index for join语句的基本原理.我们知道,在MySQL使用JION语句关联多表查询时,为表创建Index能够大幅度提高查询效率.下面以一个简单的例子来了解其中的原 ...
- mysql连接查询分为几种方式_SQL多表查询的几种连接方式
一.基础 1.1 SQL查询的基本原理 第一.单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的):然后根据SELECT的选择列选择相应的列进行返回最终结果. 第二.两 ...
- MySQL数据库的查询:常用查询语句、MySQL函数、多表查询、视图表
文章目录 一.构造数据 二.常用的查询语句 1.SELECT:字段表达式 2.FROM 子句 3.WHERE 子句:按指定条件过滤 4.GROUP BY:分组查询 5.HAVING 6.ORDER B ...
- mysql数据库查询关键字级别_MySQL数据库之单表查询中关键字的执行顺序
MySQL数据库之单表查询中关键字的执行顺序 1 语法顺序 select distinct from where group by having order by limit 2 执行顺序 from ...
- vue实现查询多条记录_sql:多表查询
1进阶9:联合查询 关键词union联合.合并:将多条查询语句的结果合并成一个结果 语法:查询语句1 union 查询语句2 union ... 应用场景:当我们要查询的结果来自于多个表,且多个表之间 ...
- mysql实验三单表和多表查询_数据库实验三(单表查询)
实验三: select sno,sname from student;//(1)查询全体学生的学号和姓名 select * from student;//(2)查询全体学生的详细记录 select s ...
最新文章
- 3.1 A Historical Perspective 历史观点
- Sequelize 4.43.0 发布,基于 Nodejs 的异步 ORM 框架
- 初探linux内核编程,参数传递以及模块间函数调用
- 不得自行对涉密计算机进行格式化,保密资格认证-涉密人员考试试题
- split命令用法(shell)
- C# Winform实现捕获窗体最小化、最大化、关闭按钮事件的方法,可通过重写WndProc来实现
- 注释里的诅咒:哪种语言遭受最多的咒骂?
- Linux监控工具介绍系列——smem
- JAVA中创建的redis对象_详解Java在redis中进行对象的缓存
- Cisco职业认证再认证体系及程序问答
- UIImageView contentModel
- 常见机器学习算法原理
- js常用插件(八)之移动端滑动插件swiper,BScroll
- 高德地图API(使用浏览器ip实现精确定位)
- 5G无线技术基础自学系列 | 大规模天线阵列
- poi批量导入导出Excel(一、需要建数据库表)
- 教你把多个视频合并成一个视频的方法
- 手把手教你申请计算机软件著作权(2)—— 生成代码文件身份证明
- 一个菜鸡的HTML标签备忘录【点进来可能瞎眼】
- 文件夹只读属性不能更改如何去除