方式1:连表操作
inner join 内连接
select *from emp inner join dep on emp.dep_id=dep.id;
只连接两张表中公有的数据部分
left join 左连接
select *from emp left join join dep on emp.dep_id=dep.id;
以左表为基准 展示左表中所有的数据 如果没有对应项则用NULL填充
right join 右连接
select *from emp right join dep on emp.dep_id=dep.id;
以右表为基准 展示右表所有的数据 如果没有对应项则用NULL填充
union 全连接
select *from emp left join dep on emp.dep_id=dep.id;
union
select *from emp right join dep on emp.dep_id=dep.id'''
学会了连表操作之后也就可以连接N多张表
思路:将拼接之后的表起别名当成一张表再去与其他表拼接 再起别名当一张表 再去与其他表拼接 其次往复即可
'''
方式2:子查询
将一条SQL语句用括号括起来当成另外一条SQL语句的查询操作
题目:求姓名是jason的员工部门名称
子查询类似于我们日常生活中解决问题的方式>>>:分步操作
步骤1:先根据jason获取部门编号
select dep_id from emp where name='jason';
步骤2:再根据部门编号获取部门名称
select name from dep where id=200;
总结
select name from dep where id=(select dep_id from emp where name='jason');'''
很多时候多表查询需要结合实际情况判断用哪种 更多时候甚至是相互配合使用
'''
小知识点补充说明
1.concat与concat_ws
concat用于分组之前的字段拼接操作
select concat(name,'$',sex)from emp;
concat_ws拼接多个字段并且中间的连接符一致
select concat_ws('|',name,sex,age,dep_id)from emp;2.exists
sql1 exists sql2
sql2有结果的情况下才会执行sql1 否则不执行sql1 返回空数据
3.表相关SQL补充
alter table 表名 rename 新表名;# 修改表名
alter table 表名 add 字段名 字段类型(数字) 约束条件;# 添加字段
alter table 表名 add 字段名 字段类型(数字) 约束条件 after 已有字段;# 指定添加字段的位置
alter table 表名 add 字段名 字段类型(数字) 约束条件 first;# 从头部添加字段# 修改字段名
alter table 表名 change 旧字段名 新字段名 字段类型(数字) 约束条件;# 修改字段类型
alter table 表名 modify 字段名 新字段类型(数字) 约束条件;
alter table 表名 drop 字段名;# 删除字段
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)