连接查询

本文解析了SQL中的WHERE、GROUP BY、HAVING语句的执行顺序,以及不同类型的JOIN操作的区别。详细介绍了INNER JOIN、LEFT JOIN和RIGHT JOIN如何处理数据表中的匹配与缺失情况,并解释了ON与WHERE条件在JOIN中的作用差异。

WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句。   

HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句。

 

INNER JOIN 两边表同时有对应的数据,即任何一边缺失数据就不显示。
LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据。
RIGHT JOIN 会读取右边数据表的全部数据,即便左边表无对应数据。

注意on与where有什么区别,两个表连接时用on,在使用left  jion时,on和where条件的区别如下:

1、  on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。 
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left  join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

 

 

CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));


CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`emp_no`));

自然连接

SELECT *
FROM dept_emp d NATURAL JOIN employees e;

 SELECT *
 
FROM
    dept_emp AS d
  ,
    employees AS e
WHERE
    e.emp_no = d.emp_no;

等价于


 SELECT *
 
FROM
    dept_emp AS d
  INNER JOIN 
    employees AS e
on
    e.emp_no = d.emp_no;

SELECT * FROM dept_emp,employees

SELECT * FROM dept_emp INNER JOIN employees 

SELECT * FROM dept_emp INNER JOIN employees 

以上三个等价

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值