多表查询-概述,内连接,外连接
多表查询-概述
笛卡尔积:
有两个集合A,B。取这两个集合的所有组成情况
要完成多表查询,需要消除无用的数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | CREATE TABLE dept( id INT PRIMARY KEY auto_increment, name VARCHAR(20) ); INSERT INTO dept (NAME) VALUE ( '开发部' ),( '市场部' ),( '财务部' ); 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); insert into emp(name,gender,salary,join_date,dept_id) VALUES ( '猪八戒' , '男' ,3600, '2010-12-02' ,2); insert into emp(name,gender,salary,join_date,dept_id) VALUES ( '唐僧' , '男' ,9000, '2008-08-08' ,2); insert into emp(name,gender,salary,join_date,dept_id) VALUES ( '白骨精' , '女' ,5000, '2015-10-07' ,3); insert into emp(name,gender,salary,join_date,dept_id) VALUES ( '蜘蛛精' , '女' ,4500, '2011-03-14' ,1); |
多表查询-内连接
隐式内连接:使用where条件消除无用数据
1 2 | -- 查询员工表的名臣,性别 ,部门表的名称 SELECT emp.name,emp.gender,dept.name from emp,dept where emp.dept_id = dept.id |
显式内连接:
语法:select 字段列表 from 表名1 [inner] join 表名2 on 条件
1 | SELECT * from emp inner join dept on emp.dept_id = dept.id |
多表查询-外连接
左外连接:
语法:select 字段列表 from 表1 left [outer] join 表2 on 条件
查询的事左表所有数据以及其交集部分
1 | SELECT t1.*,t2.name from emp t1 left join dept t2 on t1.dept_id = t2.id |
右外连接:
语法:select 字段列表 from 表1 right [outer] join 表2 on 条件
查询的事右边表所有数据以及其交集部分
1 | SELECT t1.*,t2.name from emp t1 right join dept t2 on t1.dept_id = t2.id |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix