自连接、外连接和自连接查询
表1:teacher
+----+--------+
| id | name |
+----+--------+
| 1 | 刘德华 |
| 2 | 张学友 |
| 4 | 黎明 |
+----+--------+
表2:student
+----+------+--------+
| id | name | tea_id |
+----+------+--------+
| 1 | 张三 | 1 |
| 2 | 李四 | 1 |
| 3 | 王五 | 1 |
| 4 | 赵六 | 2 |
| 5 | 孙七 | 2 |
+----+------+--------+
1.内连接:在每个表中找出符合条件的共有记录。[x inner join y on...]
第一种写法:(相当于多表查询,用的是where!)
select t.*,s.* from teacher t,student s where t.id=s.tea_id;
第二种写法:(inner省略了)
select t.*,s.* from teacher t join student s on t.id=s.tea_id;
第三种写法:
select t.*,s.* from teacher t inner join student s on t.id=s.tea_id;
+----+--------+----+------+--------+
| id | name | id | name | tea_id |
+----+--------+----+------+--------+
| 1 | 刘德华 | 1 | 张三 | 1 |
| 1 | 刘德华 | 2 | 李四 | 1 |
| 1 | 刘德华 | 3 | 王五 | 1 |
| 2 | 张学友 | 4 | 赵六 | 2 |
| 2 | 张学友 | 5 | 孙七 | 2 |
+----+--------+----+------+--------+
2.外连接有三种方式:左连接,右连接和全连接。
2.1 左连接:根据左表的记录,在被连接的右表中找出符合条件的记录与之匹配
找不到与左表匹配的,用null表示。[x left [outer] join y on...]
第一种写法:
select t.*,s.* from teacher t left join student s on t.id=s.tea_id;
第二种写法:
select t.*,s.* from teacher t left outer join student s on t.id=s.tea_id;
+----+--------+------+------+--------+
| id | name | id | name | tea_id |
+----+--------+------+------+--------+
| 1 | 刘德华 | 1 | 张三 | 1 |
| 1 | 刘德华 | 2 | 李四 | 1 |
| 1 | 刘德华 | 3 | 王五 | 1 |
| 2 | 张学友 | 4 | 赵六 | 2 |
| 2 | 张学友 | 5 | 孙七 | 2 |
| 4 | 黎明 | NULL | NULL | NULL |
+----+--------+------+------+--------+
2.2 右连接:根据右表的记录,在被连接的左表中找出符合条件的记录与之匹配,
找不到匹配的,用null填充。[x right [outer] join y on...]
第一种写法:
select t.*,s.* from teacher t right join student s on t.id=s.tea_id;
第二种写法:
select t.*,s.* from teacher t right outer join student s on t.id=s.tea_id;
+------+--------+----+------+--------+
| id | name | id | name | tea_id |
+------+--------+----+------+--------+
| 1 | 刘德华 | 1 | 张三 | 1 |
| 1 | 刘德华 | 2 | 李四 | 1 |
| 1 | 刘德华 | 3 | 王五 | 1 |
| 2 | 张学友 | 4 | 赵六 | 2 |
| 2 | 张学友 | 5 | 孙七 | 2 |
+------+--------+----+------+--------+
2.3 全连接:返回符合条件的所有表的记录,没有与之匹配的,用null表示(结果是左连接和右连接的并集)
第一种写法:
select t.*,s.* from teacher t full join student s on t.id=s.tea_id;
第二种写法:
select t.*,s.* from teacher t full outer join student s on t.id=s.tea_id;
3 交叉连接(结果是笛卡尔积)
select t.*,s.* from teacher t cross join student s;
等效于:
select t.*,s.* from teacher t,student s;
+----+--------+----+------+--------+
| id | name | id | name | tea_id |
+----+--------+----+------+--------+
| 1 | 刘德华 | 1 | 张三 | 1 |
| 2 | 张学友 | 1 | 张三 | 1 |
| 4 | 黎明 | 1 | 张三 | 1 |
| 1 | 刘德华 | 2 | 李四 | 1 |
| 2 | 张学友 | 2 | 李四 | 1 |
| 4 | 黎明 | 2 | 李四 | 1 |
| 1 | 刘德华 | 3 | 王五 | 1 |
| 2 | 张学友 | 3 | 王五 | 1 |
| 4 | 黎明 | 3 | 王五 | 1 |
| 1 | 刘德华 | 4 | 赵六 | 2 |
| 2 | 张学友 | 4 | 赵六 | 2 |
| 4 | 黎明 | 4 | 赵六 | 2 |
| 1 | 刘德华 | 5 | 孙七 | 2 |
| 2 | 张学友 | 5 | 孙七 | 2 |
| 4 | 黎明 | 5 | 孙七 | 2 |
+----+--------+----+------+--------+
5自连接:连接的表都是同一个表,同样可以由内连接,外连接各种组合
方式,按实际应用去组合。
SELECT a.*,b.* FROM table_1 a,table_1 b WHERE a.[name]=b.[name] --连接的两表是同一个表,别称不一样
SELECT a.*,b.* FROM table_1 a LEFT JOIN table_1 b ON a.[name]=b.[name] --左连接写法
自连接、外连接和自连接查询相关推荐
- Hibernate进阶之如何使用Hql内连接,外连接以及自连接
一.sql语句中的 内连接.自连接和外连接: 1.使用等值连接/内连接查询,查询客户姓名,订单编号,订单价格 等值连接/内连接:只能查询出符合条件的记录: select c.name,o.ordern ...
- mysql内连接的自连接_mysql 内连接、外连接、自连接
一)内连接(等值连接):查询客户姓名,订单编号,订单价格 --------------------------------------------------- select c.name,o.isb ...
- 连接(交叉连接、内连接、外连接、自连接)
本文非原创 可分为:交叉连接.内连接.外连接.自连接 1.使用交叉连接: 它是非限制连接,就是将两个表格不加任何条件的组合在一起, 即第一个表格的所有记录分别和第二个表格的每一条记录相连接 组合成新的 ...
- 第七周 Java语法总结之数据库大全_DDL_DML_DQL_约束_备份与还原_表的关系_三大范式_多表查询(内连接_外连接_子查询)_musql事务_隔离级别
文章目录 数据库 DDL语句:数据库定义语句 1.库的增删查改 1.查询当前mysql下所有的数据库 2.创建数据库 3.查看创建数据库的默认的字符集(了解) 4.修改数据库的字符集(了解) 5.删除 ...
- Oracle→分组函数、GROUP BY、HAVING、多表查询、连接、外连接、自连接、子查询单行多行、ROWNUM、ANY、ALL、NOT IN(...IS NOT NULL)、条件求和、DUAL
分组函数 GROUP BY HAVING GROUP BY ROLLUP() 多表查询 等值连接 不等值连接 外连接 自连接 层次查询 子查询 子查询伪劣ROWNUM ROWID NOT IN(-IS ...
- oracle 连接查询(内、外连接、自连接、子查询)
内连接: 一般使用inner join来实现.其中inner关键字可以省略 同时必须在from子句之后定义一个on子句,用来指定连接条件 外连接 1 左外连接:关键字为left outer join或 ...
- MySQL 基础 -- 多表关系(一对一、1对多(多对一)、多对多)、多表查询(内连接、外连接、自连接、子查询(嵌套查询)、联合查询 union)、笛卡儿积
文章目录 1. 多表关系 1.1 一对多 1.2 多对多 1.3 一对一 2. 多表查询 2.1 数据准备 2.2 概述 2.3 笛卡尔积 2.4 多表查询分类 3. 内连接 3.1 示例1:查询每一 ...
- oracle--day2(单值函数(字符函数,日期函数,转换函数,数字函数),日期格式(yyyy,mm等含义),表示一个日期数据的4种方式,多表查询(连接查询(等值连接,不等值连接,外连接,自连接))
第三章:单值函数 函数分为: 1.单值函数 1.字符函数 2.日期函数 3.转换函数 4.数字函数 ...
- mysql数据库多表查询(内连接,外连接,自连接,子查询及案例分析)
mysql数据库多表查询 之前接触的项目或者自己涉及的部分对于多表查询的使用都比较的少,常常是自己更具案例进行学习,最近见到的比较的多,所以今天就好好的总结一下,为下一步学习做准备! 1.多表查询关系 ...
最新文章
- C# 驱动连接 MongoDB ReplSet
- 那些打着AI万金油旗号的产品欺骗大众,如何识别?
- php读取 rss pubdate,PHP产生RSS pubDate所需日期时间格式的方法
- python全栈学习--day3
- python学习day-8 迭代器 生成器 装饰器
- .NET轻松写博客园爬虫
- go语音protobuf_总结一下protobuf安装-Go语言中文社区
- Dns信息收集工具集合
- Word 相关的快捷键
- 打开TestFlight并链接到具体的应用下载界面
- C# .NET开发图形图像程序时提示“GDI+ 中发生一般性错误“
- batocera 完整包_Batocera Plus 可能是现如今最强最全最好用的模拟器集成系统!
- 微信小程序-腾讯地图报错:鉴权失败,请传入正确的key
- word 2007中在页眉中插入或这删除下划线
- Android开发什么该做、什么不该做,你真的知道吗?
- 优麒麟 22.04 LTS 版本正式发布 | UKUI 3.1开启全新体验
- HTTP Error 503错误
- DNS、Http和Https
- 一文说尽 MySQL 优化原理
- 【java后端学习路线3】SSM+Linux+Git学习指南,985本海硕自学转码
热门文章
- maven仓库中查找依赖的步骤
- 软件架构设计与需求分析方法论
- IMF: Interactive Multimodal Fusion Model for Link Prediction
- 潜入浅出--通信中的频带利用率,以MASK.MPSK作为例子
- numeric_limits
- 基于学术研究于NASA官网GPM卫星数据下载详细教程
- 三星 android 调试模式设置,三星盖世4 usb调试怎么打开?安卓4.2怎样打开USB调试...
- mysql 在指定的dsn中_指定的DSN包含驱动程序和应用程序之间的体系结构不匹配。 JAVA...
- 《C++》API文档(一)
- pip包离线下载安装(亲测可用)