Mysql join语句解析

1. 右连接(right join, right outer join)

解释:以右表(Sys_Employee)为准,而左表(Sys_Department)中的记录只有当其DepartmentId在右表中存在时才会查询出来;

2. 左连接(left join, left outer join)

解释:以左表(Sys_Department)为准,而右表(Sys_Employee)中的记录只有当其DepartmentId在左表中存在时才会查询出来;

3. 全连接(full join, full outer join)

解释:两个表中DepartmentId的并集(U)记录;

4. 内连接(join, inner join)

解释:两个表中DepartmentId的交集(n)记录;

5. 交叉连接(cross join,完全连接)

解释:没有WHERE子句的交叉连接,它返回被连接的两个表所有数据行的笛卡尔积,返回结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

6. 自连接(self join)

解释:使用自连接可以将自身表的一个镜像当作另一个表来对待;

使用自连接的情况:当表中的某一个字段与这个表中另外字段的相关时,我们可能用到自连接(自连接的本意就是将一张表看成多张表来做连接)。

例如:

数据库中有如下一个部门结构表

下面我们需要将每一个部门自己的名称和上级部门的名称都找出来。

如果有两张表,一个部门表,一个上级部门表,那很好写SQL语句;

但现在部门和上级部门都在一张表中,这种情况用自连接就比较好。

SQL语句及查询结果如下:

这里我们注意到研发部没有出现在部门列表中,是因为在这里研发部是最上级部门,它没有上级部门。如果这时候我们希望研发部也出现在左侧,即使它没有上级部门。

我们可以结合左连接

SQL语句及查询结果如下:

时间: 2024-08-27 03:31:00

Mysql join语句解析的相关文章

Mysql Join语法解析与性能分析详解

一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1:左表:table2:右表. JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录. LEFT JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录. RIGHT JOIN(右连接):与 LEF

Mysql Join语法解析与性能分析

一.Join语法概述 join 用于多表中字段之间的联系,语法如下: ... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1:左表:table2:右表. JOIN 按照功能大致分为如下三类: INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录. LEFT JOIN(左连接):取得左表(table1)完全记录,即使右表(table2)并无对应匹配记录. RIGHT JOIN(右连接):与 LEF

MySQL插入语句解析

1.INSERT INTO 最常用简单的插入语句,可以有以下两种用法 1>  INSERT INTO tb_user(id, name, age) VALUES (100022, 'Tom', 25); // 只给指定的列赋值 2>  INSERT INTO tb_user VALUES (100022, 'Tom', 25); // 必须 给所有列赋值 注: INTO关键字可以省略 2. INSERT INTO  ... SELECT 可以将查询结果插入表中 insert into t2sa

图解MYSQL JOIN ON,SQL JOIN 详解,数据库sql join语句

对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Coding Horror上有一篇文章(实在不清楚为什么Coding Horror也被墙)通过 文氏图 Venn diagrams 解释了SQL的Join.我觉得清楚易懂,转过来. 假设我们有两张表. Table A 是左边的表. Table B 是右边的表. 其各有四条记录,其中有两条记录是相同的,如下所示

Mysql常用语句总结

对MySql经常使用语句的详细总结 下面总结的知识点全是经常用的,全都是干货,好好收藏吧./* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */ mysqld --skip-grant-tables -- 修改root密码 密码加密函数password() update mysql.user set password=password('root'); SHOW

MySQL 查询语句优化思路

query 语句的优化思路和原则主要提现在以下几个方面:1. 优化更需要优化的Query:2. 定位优化对象的性能瓶颈:3. 明确的优化目标:4. 从 Explain 入手:5. 多使用profile6. 永远用小结果集驱动大的结果集:7. 尽可能在索引中完成排序:8. 只取出自己需要的Columns:9. 仅仅使用最有效的过滤条件:10. 尽可能避免复杂的Join和子查询 关于explain 用法:explain select * from tables1 where 1 ... 先看一下在

MySQL 查询语句使用进阶

MySQL 查询语句使用进阶 =============================================================================== 概述: =============================================================================== 练习: 练习1  首先导入hellodb.sql的脚本文件,查询其数据库和表如下: [[email protected] ~]# mysql 

MySQL的语句执行顺序

MySQL的语句一共分为11步,如下图所标注的那样,最先执行的总是FROM操作,最后执行的是LIMIT操作.其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对用户来说是透明的,但是只有最后一个虚拟的表才会被作为结果返回.如果没有在语句中指定某一个子句,那么将会跳过相应的步骤. 下面我们来具体分析一下查询处理的每一个阶段 FORM: 对FROM的左边的表和右边的表计算笛卡尔积.产生虚表VT1 ON: 对虚表VT1进行ON筛选,只有那些符合<join-condit

mysql sql语句分析

SELECT     a.id    ,b.order_id,b.attr  FROM    tourist_order a     LEFT JOIN order_attr b     ON a.id = b.order_id        AND b.attr='order_status'    WHERE     b.order_id IS NULL    AND a.create_type!=19    AND a.added_time>='2014-01-01'    AND a.si