it编程 > 数据库 > MsSqlserver

SQL join中on和where的区别解析

31人参与 2025-08-11 MsSqlserver

0.结论

1.数据准备

drop table if exists `class`;
create table `class`
(
    `c_id`   int          default null comment '班级id',
    `c_name` varchar(50) default null comment '班级名'
);
drop table if exists `student`;
create table `student`
(
    `s_id`   int          default null comment '学生id',
    `s_name` varchar(50) default null comment '学生名',
    `c_id`   int          default null comment '班级id'
);
insert into `class` (`c_id`, `c_name`)
values (1, '一班'),
       (2, '二班'),
       (3, '三班');
insert into `student` (`s_id`, `s_name`, `c_id`)
values (1, '张三', 1),
       (2, '李四', 2),
       (3, '王五', 4);

2.测试

-- 单表
select * from class c;
select * from student s;
-- 笛卡尔积
select * from class c inner join student s 										order by c.c_id, s.s_id;
-- 内连
select * from class c inner join student s on c.c_id = s.c_id order by c.c_id, s.s_id;
-- 左外连(先on,再join,再where)
select * from class c left  join student s on c.c_id = s.c_id 									order by c.c_id, s.s_id;
select * from class c left  join student s on c.c_id = s.c_id and   c.c_id <> 2	order by c.c_id, s.s_id;
select * from class c left  join student s on c.c_id = s.c_id where c.c_id <> 2	order by c.c_id, s.s_id;
select * from class c left  join student s on c.c_id = s.c_id and   s.c_id <> 2	order by c.c_id, s.s_id;
select * from class c left  join student s on c.c_id = s.c_id where s.c_id <> 2	order by c.c_id, s.s_id;

2.1.普通

2.1.1.class单表

2.1.2.student单表

2.1.3.笛卡尔积

2.1.4. 内连接

2.2.5.普通外连

2.2.重点来啦-外连接

2.2.1.一

2.2.2.二

2.2.3.三

2.2.4.四

3.参考资料

sql语句中left join的on和where有什么区别

(0)

您想发表意见!!点此发布评论

推荐阅读

Oracle查看SQL执行计划的常见方法总结

08-09

SQL中两列合并为一列的技巧总结(推荐!)

08-09

SQLServer中生成雪花ID(Snowflake ID)的实现方法

08-08

SQL Server 查询数据库及数据文件大小的方法

08-16

SQL Update更新数据的操作方法

08-16

SQL 四大语言分类中DDL、DML、DCL、DQL的使用

08-04

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论