联表查询之交叉连接、内、外连接

目录

1、交叉连接(笛卡尔积)

2、内连接

2.1 显示内连接(inner join)

2.2 隐示内连接

 2.3 内连接的练习

 2.3.1 查询第一或者二学期中所有的学生

2.3.2 查询第一和第二期所有的学生

 2.3.3 查询每个班级下的学生总数,并且按照学生总数升序在(降序)排列

 2.3.4 查询班级总人数>2的班级,并且人数降序排列

 3、外连接

3.1 左外连接(left outer join,outer可以省略)

3.1.1 左外连接练习

3.1.2 所需表(学生表和班级表)

​编辑

3.1.3 查询结果与内连接对比 

​编辑

3.2 右外连接

​编辑 3.2.1 右外连接练习

​编辑 3.2.2 所需数据

​编辑

3.2.3 查询结果

3.2.4 如果删掉外键之后再插入一条数据(第八条)然后右连接的查询结果?

3.3 全外连接(union)

3.3.1 运行结果


1、交叉连接(笛卡尔积)


三条查询语句 :前两条是单表查询,然后就是交叉查询

  

 注:第一个是单表,后面是交叉表(显得有点冗余)

2、内连接


2.1 显示内连接(inner join)


 注:,如图所示这个INNER是可以不用写的,查询结果也是也一样的

2.2 隐示内连接


 2.3 内连接的练习


 2.3.1 查询第一或者二学期中所有的学生


 注:虽然输入中文也可以查询,但不推荐,因为这个名称有可能会发生变化  

2.3.2 查询第一和第二期所有的学生


注:这个是错误的查询写法,先and,在or,那么就会这样

 而显得数据冗余了 

========================================================================= 

注:加个括号一起统计,就不会先查and,在查or了 。(第一个是隐示,第二个是显示)

 2.3.3 查询每个班级下的学生总数,并且按照学生总数升序在(降序)排列


注:这是点击美化sql之后的格式

 2.3.4 查询班级总人数>2的班级,并且人数降序排列


注:先分组(group),在筛选(having) 

 3、外连接


3.1 左外连接(left outer join,outer可以省略)


3.1.1 左外连接练习


3.1.2 所需表(学生表和班级表)


 

3.1.3 查询结果与内连接对比 


1. 

 

2.

 

 

3.

 

注:查询结果1是左外连接,2是内连接 ,3.以左表为主的话,应该有四个学期,但是学生表只有第一和第二,所有返回kong

3.2 右外连接


 3.2.1 右外连接练习


 3.2.2 所需数据


注:需要多家一条数据并且class_id为空(第七条)

3.2.3 查询结果


 

注:为null,是因为没有找到对于的id,如果想查没有班级的学生,就在后面加个

and class-id = null即可

 

 

3.2.4 如果删掉外键之后再插入一条数据(第八条)然后右连接的查询结果?


 

 

 

注:查询结果以右边为主,所有可以看到class_id,但是坐标的内容为null,那么如果再次使用内连接,还是一样没有匹配就不显示

 

 

3.3 全外连接(union)


 

 

 注:mysql是无法实现全外连接,但是可以通过union进行 

3.3.1 运行结果


 

 

连接查询的SQL语句可以使用内连接外连接交叉连接来实现。下面是一个示例,假设我们有四个A、B、C和D。 1. 内连接: ``` SELECT * FROM A INNER JOIN B ON A.column_name = B.column_name INNER JOIN C ON B.column_name = C.column_name INNER JOIN D ON C.column_name = D.column_name; ``` 这个查询将返回在四个中都有匹配的行。 2. 左外连接: ``` SELECT * FROM A LEFT JOIN B ON A.column_name = B.column_name LEFT JOIN C ON B.column_name = C.column_name LEFT JOIN D ON C.column_name = D.column_name; ``` 这个查询将返回在A中的所有行,并且与B、C和D中匹配的行。 3. 右外连接: ``` SELECT * FROM A RIGHT JOIN B ON A.column_name = B.column_name RIGHT JOIN C ON B.column_name = C.column_name RIGHT JOIN D ON C.column_name = D.column_name; ``` 这个查询将返回在B、C和D中的所有行,并且与A中匹配的行。 4. 交叉连接: ``` SELECT * FROM A, B, C, D WHERE A.column_name = B.column_name AND B.column_name = C.column_name AND C.column_name = D.column_name; ``` 这个查询将返回四个中所有可能的组合。 请根据你的具体需求选择适合的连接方式来编写四连接查询的SQL语句。 #### 引用[.reference_title] - *1* [SQL语句详解(四)——SQL联表查询](https://blog.csdn.net/weixin_40228200/article/details/121948063)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [数据库SQL语句~四连接(left join)](https://blog.csdn.net/tong_0xue/article/details/90729272)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [SQL的四种连接查询](https://blog.csdn.net/weixin_43041350/article/details/123826406)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值