赞
踩
首先先准备表
# 员工表和部门表#建表create table department(id int,name varchar(20) );create table employee1(id int primary key auto_increment,name varchar(20),sex enum('male','female') not null default 'male',age int,dep_id int);#插入数据insert into department values(200,'技术'),(201,'人力资源'),(202,'销售'),(203,'运营');insert into employee1(name,sex,age,dep_id) values('egon','male',18,200),('alex','female',48,201),('wupeiqi','male',38,201),('yuanhao','female',28,202),('liwenzhou','male',18,200),('jingliyang','female',18,204);
查看表:


多表连接查询
交叉连接:不适用任何匹配条件。生成笛卡尔积
select * from employee1 ,department;
内连接:找两张表共有的部分,相当于利用条件从笛卡尔积结果中筛选出正确的结果(只连接匹配的行)。
#找两张表共有的部分,相当于利用条件从笛卡尔积结果中筛选出了正确的结果#department没有204这个部门,因而employee表中关于204这条员工信息没有匹配出来select * from employee1,department where employee1.dep_id=department.id;#上面用where表示的可以用下面的内连接表示,建议使用下面的那种方法select * from employee1 inner join department on employee1.dep_id=department.id;#也可以这样表示哈select employee1.id,employee1.name,employee1.age,employee1.sex,department.name from employee1,department where employee1.dep_id=department.id;
注意:内连接的join可以忽略不写,但是还是加上看起来清楚点

左连接:优先显示左表全部记录。
#左链接:在按照on的条件取到两张表共同部分的基础上,保留左表的记录select * from employee1 left join department on department.id=employee1.dep_id;select * from department left join employee1 on department.id=employee1.dep_id;


右链接:优先显示右表全部记录。
#右链接:在按照on的条件取到两张表共同部分的基础上,保留右表的记录select * from employee1 right join department on department.id=employee1.dep_id;select * from department right join employee1 on department.id=employee1.dep_id;


全外连接:显示左右两个表的全部记录。
注意:mysql不支持全外连接 full join
强调:mysql可以使用union间接实现全外连接
select * from employee1 left join department on department.id=employee1.dep_id unionselect * from employee1 right join department on department.id=employee1.dep_id;

符合条件连接查询
示例1:以内连接的方式查询employee和department表,并且employee表中的age字段值必须大于25,即找出公司所有部门中年龄大于25岁的员工
select * from employee1 inner join department on employee1.dep_id
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。