MySQL之inner join、left join、right join、limit

时间:2024-03-16 15:28:45

一、创建两个表

如图:

emp表 dept表
MySQL之inner join、left join、right join、limit MySQL之inner join、left join、right join、limit

二、inner join 、left join、right join实例


1.inner join(等值连接只返回两个表中联结字段相等的行


例子1:e,d分别为emp,dept的别名(如果表名过长,方便使用)

MySQL之inner join、left join、right join、limit


例子2:

SELECT * FROM emp e INNER JOIN dept d ON e.deptno = d.deptno; 

等价于

 SELECT e.*,d.* FROM emp e,dept d WHERE e.deptno = d.deptno;

MySQL之inner join、left join、right join、limit

2.left join(左连接)  返回包括左表中的所有记录和右表中联结字段相等的记录


例子:SELECT e.ename,e.sal,e.empno,d.deptno,d.dname FROM emp e LEFT JOIN dept d ON e.deptno = d.deptno;


MySQL之inner join、left join、right join、limit


3.right join(右连接)返回包括右表中的所有记录和左表中联结字段相等的记录


例子:SELECT e.ename,e.sal,e.empno,d.deptno,d.dname FROM emp e RIGHT JOIN dept d ON e.deptno = d.deptno;


MySQL之inner join、left join、right join、limit


4.LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: LIMIT # OFFSET #。


例子:select sal from emp limit 0,10 查找1~10行记录,0是从第一行开始,10是查找的长度


四.经典例子

例子1:

         从emp表dept表中查出各部门名称、各部门平均工资、各部门总工资、各部门人数、各部门最高工资、各部门最低工资。

方法如下:

MySQL之inner join、left join、right join、limit  方法分析:

              首先,两个表中有共同的deptno,先从emp表中查找出需要的记录,组成新的一张虚拟表。

运行:

    MySQL之inner join、left join、right join、limit

运行结果如下:

                                                  MySQL之inner join、left join、right join、limit

在用这张虚拟表与dept表查询,最终运行结果为:

MySQL之inner join、left join、right join、limit

例子2:

查找emp表中总工资>8000,<10000的部门编号

运用语法:

WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。 

GROUP BY 子句用来分组 WHERE 子句的输出。 

HAVING 子句用来从分组的结果中筛选行。 

方法如下:

MySQL之inner join、left join、right join、limit

运行如下 :


  MySQL之inner join、left join、right join、limit