8人参与 • 2025-04-24 • Mysql
内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。
select 字段 from 表1 inner join 表2 on 表1.id = 表2.id [and 其他筛选条件];
where
子句隐式内连接select 字段 from 表1, 表2 where 表1.id = 表2.id [and 其他筛选条件];
查询员工及其部门名称
两者写法不同但是效果一致
方法一:
---隐式内连接写法 select *from emp,dept where emp.deptno=dept.deptno;
方法二:
---标准内连接写法 select *from dept inner join emp on emp.deptno=dept.deptno;
外连接分为左外连接和右外连接
核心概念
null
填充select 字段 from 表1 left join 表2 on 链接条件 [and 其他筛选条件];
案例:查询所有雇员及工资
-- 创建表 create table employees (emp_id int, emp_name varchar(30)); insert into employees values (1, 'alice'), (2, 'bob'), (3, 'charlie'), (4, 'david'); create table salaries (emp_id int, salary int); insert into salaries values (1, 5000), (2, 6000), (5, 7000); -- 左外连接查询 select *from employees s1 left join salaries s2 on s1.emp_id=s2.emp_id;
结果:
核心概念
null
填充select 字段 from 左表 right join 右表 on 链接条件 [and 其他筛选条件];
案例:查询所有工资,即使无对应雇员
select *from employees s1 right join salaries s2 on s1.emp_id=s2.emp_id;
结果:
-- 左外连接(保留左表) select * from a left join b on a.id = b.id; -- 等价于右外连接(保留右表) select * from b right join a on a.id = b.id;
建议:优先使用左外连接,逻辑更直观。
null
值。ifnull()函数
外连接结果中的null
表示无匹配记录,需在业务逻辑中处理(如显示“无成绩”)。
select s1.emp_id,emp_name,ifnull(salary,'无成绩')salary from employees s1 left join salaries s2 on s1.emp_id=s2.emp_id;
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论