MySQL学习使用[9天系列 学习笔记 Day07]

本文是MySQL 9天学习系列的第七天,主要介绍了子查询和连接查询的概念与用法。子查询包括了IN和NOT IN的使用,内连接涉及等值连接、非等值连接和自然连接。同时,文章通过实例讲解了如何避免笛卡尔积,以及如何利用内外连接解决实际问题。最后,文章总结了子查询和连接查询在提高查询效率方面的作用。

系列文章目录

MySQL学习使用[9天系列 学习笔记]
Day01了解和创建数据库
(附上链接Day01:
https://blog.youkuaiyun.com/besthtml/article/details/128055581?
Day02创建、查看和删除表
https://blog.youkuaiyun.com/besthtml/article/details/128066352?
Day03更新数据和简单查询
https://blog.youkuaiyun.com/besthtml/article/details/128069269?
Day04模糊查询、结果排序和限制输出行
https://blog.youkuaiyun.com/besthtml/article/details/128085013?
Day05统计函数和其他函数的使用
https://blog.youkuaiyun.com/besthtml/article/details/128086178?
Day06分组统计和限制分组输出
https://blog.youkuaiyun.com/besthtml/article/details/128092918
Day07嵌套查询和连接查询
https://blog.youkuaiyun.com/besthtml/article/details/128099111
Day08视图、索引、备份和恢复
https://blog.youkuaiyun.com/besthtml/article/details/128108602?
Day09事务
https://blog.youkuaiyun.com/besthtml/article/details/128115542?


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

通过Day01了解数据库的创建,Day02了解了创建、查看和删除表,Day03了解了更新数据和简单查询,Day04了解模糊查询、结果排序和限制输出行,Day05学习了统计函数和其他函数的使用Day06了解了分组统计和限制分组输出。Day07我们了解学习一下使用SQL编写带IN和NOT IN关键字的子查询语句。使用INNER JOIN ON或WHERE方式编写内连接查询语句。巩固排序、函数的使用、限制输出行、分组,提高学生综合查询的能力。

Day01传送门https://blog.youkuaiyun.com/besthtml/article/details/128055581
Day02传送门https://blog.youkuaiyun.com/besthtml/article/details/128066352?
Day03传送门https://blog.youkuaiyun.com/besthtml/article/details/128069269?
Day04传送门https://blog.youkuaiyun.com/besthtml/article/details/128085013?
Day05传送门https://blog.youkuaiyun.com/besthtml/article/details/128086178?
Day06分组统计和限制分组输出https://blog.youkuaiyun.com/besthtml/article/details/128092918
Day07嵌套查询和连接查询

嵌套查询和连接查询

提示:以下是本篇文章正文内容,下面案例可供参考

一、嵌套查询

1.定义

一个内层查询语句(SELECT-FROM-WHERE)块可以嵌套在另外一个外层查询块的WHERE子句中,其中外层查询也称为父查询或主查询;
内层查询也称之为子查询或者从查询。select语句嵌套select语句,被嵌套的select语句子查询。
子查询一般不适用ORDER BY子句,只对最终查询结果进行排序。
一般DBMS都支持多层嵌套,但是不建议嵌套层数太多,一般不超过3层。

子查询

例 查询没有被读者借阅过的图书信息。

SELECT * from book where bid NOT in
(SELECT bid from borrow);

这是where子查询,相关的还有from子查询(Tips:from中的子查询,可以将子查询的查询结果当作临时表),select子查询(了解即可,用的较少),他们的用法大都一致。
语句执行时,先执行子查询,再执行父查询。子查询的结果是父查询的条件。
嵌套查询使用in/not in的情况较多。嵌套查询相比连接查询可以提高效率。
父查询中的条件表达式(列)要和子查询的结果相应—表达的含义相同;子查询select子句中的列数和父查询中的列对应。

二、连接查询(sql92,sql99)

sql92和sql99都是连接查询的语法,只是年份不一样,一个92年语法,一个99年语法。
sql92语法 select 字段名1,字段名2 from 表1,表2 where 连接条件; 
sql99语法select 字段名1,字段名2 from 表1 (inne可省略) join 表2   on 连接的条件 [where 查询条件]

1.笛卡尔积

在学习了解链接查询时,我们需要了解一个概念,笛卡尔积。
笛卡尔积:俩张表进行链接查询,没有任何条件限制的时候,最终查询结果条数是俩张表条数的乘积。
我们在查询时候,应该避免笛卡尔积现象,只需连接时添加条件即可。

2.内连接

内连接分为等值连接,非等值连接,自连接。

1>等值连接

例 查询有违章记录的读者编号和姓名

 select p.ridd,r.rname  from reader r join penalty p  on r.rid=p.ridd;

r 和p 是起的表别名,这样比较简洁。

2>非等值连接

例 查询罚款日期在应还日期和实际归还日期的读者编号

select p.ridd from penalty p join borrow b 
on p.pdate >=b.lenddate and p.pdate<=b.willdate;
3>自然连接

例 这里有一张emp表
|empno(编号)| ename(员工名) | mgr (上级)|
| 7369 | smith | 7902 |
| 7499 | smith | 7698 |
| 7521 | smith | 7698 |
| 7566 | smith | 7839 |
| 7902 | smith | 7566 |

查询所有员工表对应的领导表

select a.ename as '员工表',b.name as'领导表'
from emp a join emp b  on  a.mgr=b.empno;

Tips:自然连接可以把一张表看成俩张表
我这里找的数据是动力节点的mysql所讲的(P56),大家可以去观看他们的,那里比较详细
传送门https://www.bilibili.com/video/BV1Vy4y1z7EX?p=1&vd_source=9547c3f03c81e42ba0e0b747cacd6fd7

3.外连接

外连接分为左外连接和右外连接。左连接代表将join关键字左边的表看成主表,主要是未来将左边的表的数据全部查询出来,稍微带着关联查询右边的表。右连接同理即可。
例 嵌套查询那道题也可以用外连接做。查询没有被读者借阅过的图书信息。

SELECT b.* FROM book b LEFT JOIN borrow c ON b.bid=c.bid WHERE c.bid IS NULL;

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,Day07我们大概学习使用SQL编写带IN和NOT IN关键字的子查询语句。使用INNER JOIN ON或WHERE方式编写内连接查询语句。巩固排序、函数的使用、限制输出行、分组,提高学生综合查询的能力。Day08我们将了解学习视图、索引、备份和恢复。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值