多表查询_内连接和多表查询_外连接
表
-- 新建部门表
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;
分类:
java基础+进阶
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix