一、创建两个表
如图:
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 emp limit 0,10 查找1~10行记录,0是从第一行开始,10是查找的长度
四.经典例子
例子1:
从emp表与dept表中查出各部门名称、各部门平均工资、各部门总工资、各部门人数、各部门最高工资、各部门最低工资。
方法如下:
方法分析:
首先,两个表中有共同的deptno,先从emp表中查找出需要的记录,组成新的一张虚拟表。
运行:
运行结果如下:
在用这张虚拟表与dept表查询,最终运行结果为:
例子2:
查找emp表中总工资>8000,<10000的部门编号
运用语法:
WHERE 子句用来筛选 FROM 子句中指定的操作所产生的行。
GROUP BY 子句用来分组 WHERE 子句的输出。
HAVING 子句用来从分组的结果中筛选行。
方法如下:
运行如下 :