系列文章目录

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


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


文章目录

  • 系列文章目录
  • 前言
  • 嵌套查询和连接查询
  • 一、嵌套查询
  • 1.定义
  • 子查询
  • 二、连接查询(sql92,sql99)
  • 1.笛卡尔积
  • 2.内连接
  • 1>等值连接
  • 2>非等值连接
  • 3>自然连接
  • 3.外连接
  • 总结



前言

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

Day01传送门
Day02传送门?
Day03传送门?
Day04传送门?
Day05传送门?
Day06分组统计和限制分组输出
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我们将了解学习视图、索引、备份和恢复。