表的内连接
内连接是利用where子句对两种表形成的笛卡尔积进行筛选。
select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件;
inner可以省略
and可以换成where
例:显示SMITH的名字和部门名称
emp表:
dept表:
select ename,dname from emp,dept where emp.deptno=dept.deptno and ename ='SMITH';
select ename,dname from emp inner join dept on emp.deptno=dept.deptno and ename ='SMITH';
select ename,dname from emp inner join dept on emp.deptno=dept.deptno where ename ='SMITH';
select ename,dname from emp join dept on emp.deptno=dept.deptno where ename ='SMITH';
外连接
左连接
左连接是把左边的表数据全部显示,而右边表数据会进行筛选。
当左边表和右边表没有匹配时,也会显示左边表的数据
select 字段名 from 表名1 left join 表名2 on 连接条件
首先建两张表person和hobby,对应的是个人喜欢的东西
mysql> create table person(
-> id int,
-> name varchar(11),
-> sex varchar(3));
mysql> create table hobby(
-> id int,
-> favour varchar(10));
给person插入数据
mysql> insert into person values(1,'pick','男'),(2,'sopha','女'),(3,'alice','女');
给hobby插入数据
mysql> insert into hobby values(1,'vollable'),(2,'run'),(24,'swing');
查询所有人的爱好,如果这个人没有爱好,也要将他个人信息显示出来:
//利用左连接
mysql> select * from person left join hobby on person.id=hobby.id;
右连接
将右边表信息全部显示出来,左边表数据会进行筛选
select 字段 from 表名1 right join 表名2 on 连接条件;
查询有爱好的人信息:
mysql> select * from person right join hobby on person.id=hobby.id;