Mysql之多表查询(连接查询)
2020-02-15 10:43
246 查看
连接查询
含义:又称多表查询。当我们要查询的字段来自多个表,就会用到连接查询
笛卡尔乘积现象: 表1 有m行,表2 有n行 结果:m*n行
如何发生:没有有效的连接条件
如何避免:添加有效的连接条件
分类:
年代分类: sql192标准:仅仅支持内连接 sql199标准,支持内连接+外连接(左外,右外)+交叉连接 功能分类: 内连接: 等值连接 非等值连接 自链接 外连接: 左外连接 右外连接 全外连接 交叉连接:
-----------------------sql92标准------------------
#一、内连接 语法: select 查询列表 from 表1 别名,表2 别名 where 连接条件 and 筛选条件 group by 分组列表 having 分组后筛选 order by 排序列表
-----------------------SQL99语法------------------
一、内连接
语法: SELECT 查询列表 FROM 表名1 别名 【INNER】 JOIN 表名2 别名 ON 连接条件 WHERE 筛选条件 GROUP BY 分组列表 HAVING 分组后筛选 ORDER BY 排序列表; 特点: 一,添加排序,分组,筛选 二,inner可以省略 三,筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读 四,inner join连接 和 sql192语法中的等值连接效果是一样的,都是查询多表的交集 分类: 内连接(⭐):inner 外连接 左外(⭐):left(outer) 右外(⭐):right(outer) 全外 : full(outer) 交叉连接: cross SQL92和SQL99的区别: SQL99,使用JOIN关键字代替了之前的逗号,并且将连接条件和筛选条件进行了分离,提高阅读性!!!
举个栗子(SQL99):
这里有两张表,一张女生表beauty,一张男生表boys,现在我们想将所有女生和 她们的男朋友显示出来
select g.`name`,b.boyName from beauty g INNER JOIN boys b on g.boyfriend_id=b.id
结果:
二、外连接
/* 应用场景:查询一个表有 另一个表没有的记录 特点: 1.外连接的查询结果为主表中的所有记录 如果从表中有和它匹配的,则显示匹配的值 如果从表中没有和它匹配的,则显示null 外连接查询结果=内连接结果+主表中有而从表中没有的记录 2.左外连接,left左边的是主表 右外连接,right join右边的是主表 3.左外和右外交换两个表的顺序,可以实现同样的效果
举个例子:
这里有两张表,一张女生表beauty,一张男生表boys,现在我们想将所有女生和 她们的男朋友显示出来,没有男朋友的,男朋友就显示空应该怎么做呢?
这里我们使用左外连接
select g.`name`,b.boyName from beauty g LEFT JOIN boys b on g.boyfriend_id=b.id
得到的结果
这里我们筛选掉没有男朋友的妹子,添加筛选条件
select g.`name`,b.boyName from beauty g LEFT JOIN boys b on g.boyfriend_id=b.idWHERE b.id is not null
上述一个张无忌拥有三个妹子是正常现象!!!
右外连接
这里右外连接与左外连接相同,只是要区分主表和从表就OK
我们发现:
左外连接的主表从表互换,就是右外连接的结果,这里就不再赘述。
全外连接
-- 全外连接= 内连接结果+表1中有但表2中没有+表2中有表1中没有的
交叉连接(就是一个笛卡尔乘积)
这里有48条记录,刚好是一个笛卡尔乘积12*4
select g.*,b.* from beauty g CROSS JOIN boys b;
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Mysql 之 分组查询
- MySQL 基础知识 增删改查基本操作
- MySQL如何存储图片?---一个向数据库存取image文件的jsp程序
- 《mysql--学习笔记-1.0》
- mysql数据库分区
- Mysql管理总结
- mysql安装
- 【转】图解MySql命令行创建存储过程
- 【转】Mysql的配置文件详解
- 使用dbcp连接mysql
- Ubuntu16.04 install mysql5.X
- mysql的limit功能的实现
- Mysql中查询某一天,某个月,某一年数据
- 4000 如何通过命令行创建和设置一个MySQL用户
- mysql创建和删除表
- 21分钟 MySQL 入门教程
- 如何修改MySQL的默认安装路径
- mysql-奇技淫巧之附属表过滤查询数量
- MySQL使用一张表的字段更新另一张表的字段
- mysql主从同步