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

来源:互联网 发布:win10怎么连接有线网络 编辑:程序博客网 时间:2024/06/07 03:32

一、创建两个表

如图:

emp表dept表


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


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


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



例子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;


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;




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;




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


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


四.经典例子

例子1:

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

方法如下:

  方法分析:

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

运行:

   

运行结果如下:

                                                  

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

例子2:

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

运用语法:

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

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

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

方法如下:

运行如下 :


  

阅读全文
0 0