多表查询_内连接和多表查询_外连接
作者:互联网
表
-- 新建部门表
create table dept(
id int primary key auto_increment,
name varchar(20)
);
insert into dept (name) values("开发部"),("市场部"),("财务部");
-- 新建员工表
create table emp(
id int primary key auto_increment,
name varchar(10),
gender char(1),-- 性别
salary double,-- 工资
join_date date,-- 入职日期
dept_id int,
foreign key (dept_id) references dept (id) -- 外键,关联部门表(部门表的主键)
);
insert into emp(name,gender,salary,join_date,dept_id) values
("孙悟空","男",7200,"2013-02-24",1),
("猪八戒","男",3600,"2010-12-02",2),
("唐僧","男",9000,"2008-08-08",2),
("白骨精","女",5000,"2015-10-07",2),
("蜘蛛精","女",4500,"2011-03-14",1);
内连接查询:
隐式内连接:使用where条件消除无用数据
例子:
-- 查询所有员工信息和对应的部门信息
select * from emp,dept where dept.id = emp.dept_id;
-- 查询员工表的名称,性别,部门表的名称
select emp.name 姓名,emp.gender 性别,dept.name 部门名称 from emp,dept where emp.dept_id = dept.id;
显式内连接:
语法:select 字段列表 from 表名1 [inner] join 表名2 on 条件
例如:
select * from emp inner join dept on emp.dept_id = dept.id;
内连接查询:
1.从哪些表中查询数据
2.条件是什么
3.查询哪些字段
外连接查询:
1.左外连接
语法:select 字段列表 from 表1 left [outer] join 表2 on 条件;
查询的式左表所有数据以及交集部分
-- 查询所有员工信息,如果员工有部门,则查询部门名称,没有部门则不显示部门名称
select t1.*,t2.name from emp t1,dept t2 where t1.dept_id = t2.id;
-- 左外连接
select t1.*,t2.name from emp t1 left join dept t2 on t1.dept_id = t2.id;
2.右外连接:
语法:select 字段列表 from 表1 right [outer] join 表2 on 条件;
查询的式右表所有数据以及交集部分
select t1.*,t2.name from emp t1 right join dept t2 on t1.dept_id = t2.id;
标签:多表,name,--,t2,连接,dept,emp,查询,id 来源: https://www.cnblogs.com/ailhy/p/16521583.html