一.Join语法概述
join 用于多表中字段之间的联系,语法如下:
... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON condition
table1:左表;table2:右表。
JOIN 按照功能大致分为如下三类:
INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录。
LEFT JOIN(左连接):取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录。
RIGHT JOIN(右连接):与 LEFT JOIN 相反,取得右表(table2)完全记录,即是左表(table1)并无匹配对应记录。
注意:mysql不支持Full join,不过可以通过UNION 关键字来合并 LEFT JOIN 与 RIGHT JOIN来模拟FULL join.
案例分析:
1、案例环境mysql> select * from emp;
mysql> select * from dept;
4 rows in set (0.00 sec)inner join:(内连接,或等值连接):取得两个表中存在连接匹配关系的记录。mysql> select e.empno,e.ename,e.sal,e.deptno,d.dname -> from emp e -> inner join dept d -> where e.deptno=d.deptno;
mysql> select e.empno,e.ename,e.sal,e.deptno,d.dname -> from emp e -> inner join dept d -> on e.deptno=d.deptno;
隐式内连接:mysql> select e.empno,e.ename,e.sal,e.deptno,d.dname -> from emp e,dept d -> where e.deptno=d.deptno;
left join:取得左表(table1)完全记录,即是右表(table2)并无对应匹配记录。
mysql> update emp set deptno=null where empno=7788;Query OK, 1 row affected (0.07 sec)Rows matched: 1 Changed: 1 Warnings: 0mysql> commit;Query OK, 0 rows affected (0.00 sec)mysql> select * from emp where empno=7788;
采用等值连接:mysql> select e.empno,e.ename,e.sal,e.deptno,d.dname -> from emp e -> inner join dept d on e.deptno=d.deptno;
-----对于等值连接,只能看到条件匹配的记录!mysql> select e.empno,e.ename,e.sal,e.deptno,d.dname -> from emp e -> left join dept d on e.deptno=d.deptno;