当前位置: 首页 > news >正文

云南昆明网站建设公司网站开发环境搭建

云南昆明网站建设公司,网站开发环境搭建,阅读网站怎么做,增城移动网站建设SQL JOIN 全解析:用 users 与 orders 表彻底掌握内连接、左连接、右连接 在日常开发中,SQL 的连接(JOIN)语句是数据库查询的核心技能。尤其在多表联合查询时,不掌握好 INNER JOIN、LEFT JOIN、RIGHT JOIN,…

SQL JOIN 全解析:用 usersorders 表彻底掌握内连接、左连接、右连接

在日常开发中,SQL 的连接(JOIN)语句是数据库查询的核心技能。尤其在多表联合查询时,不掌握好 INNER JOINLEFT JOINRIGHT JOIN,你就很容易写出“行数膨胀”、数据丢失、NULL 满天飞的奇怪结果。

本文将用两张简单的表 users(用户)和 orders(订单)作为例子,深入讲解三种常见的连接方式。


一、准备工作:建表与数据

我们先创建两张表并插入一些测试数据。

表结构:

-- 用户表:左表
CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50)
);-- 订单表:右表
CREATE TABLE orders (id INT PRIMARY KEY,user_id INT,item VARCHAR(100),FOREIGN KEY (user_id) REFERENCES users(id)
);

示例数据:

-- 插入用户数据
INSERT INTO users (id, name) VALUES
(1, '孙悟空'),
(2, '苏有朋'),
(3, '李白'),
(4, '赵云'),
(5, '诸葛亮');-- 插入订单数据
INSERT INTO orders (id, user_id, item) VALUES
(101, 1, '金箍棒'),
(102, 2, '琵琶'),
(103, 1, '筋斗云'),
(104, 99, '无主之剑');  -- 注意:user_id=99 不存在于 users 中

二、INNER JOIN:内连接

SELECT a.id, a.name, b.item
FROM users a
INNER JOIN orders b ON a.id = b.user_id;

结果:

idnameitem
1孙悟空金箍棒
2苏有朋琵琶
1孙悟空筋斗云

特点:

  • 只保留能成功匹配的记录。
  • user_id=99 的订单匹配不到 → 被排除。
  • 李白赵云诸葛亮没下单 → 被排除。
  • 孙悟空有两个订单 → 出现两次。

总结一句话:

内连接 = 两边都有才要。


三、LEFT JOIN:左连接

SELECT a.id, a.name, b.item
FROM users a
LEFT JOIN orders b ON a.id = b.user_id;

结果:

idnameitem
1孙悟空金箍棒
1孙悟空筋斗云
2苏有朋琵琶
3李白NULL
4赵云NULL
5诸葛亮NULL

特点:

  • 保留所有左表(users)数据
  • 匹配不到的订单信息 → 填充为 NULL
  • user_id=99 的订单仍然被丢弃。

总结一句话:

左连接 = 左边全保,右边能连就连,不能连就补 NULL。


四、RIGHT JOIN:右连接

SELECT a.id, a.name, b.item
FROM users a
RIGHT JOIN orders b ON a.id = b.user_id;

结果:

idnameitem
1孙悟空金箍棒
1孙悟空筋斗云
2苏有朋琵琶
NULLNULL无主之剑

特点:

  • 保留所有右表(orders)数据
  • 匹配不到的用户信息 → 补 NULL
  • user_id=99 没用户匹配 → 仍然出现在结果中。

总结一句话:

右连接 = 右边全保,左边对不上就补 NULL。


五、膨胀现象:JOIN 会让行数增加吗?

是的!比如:

SELECT a.*, b.*
FROM users a
LEFT JOIN orders b ON a.id = b.user_id;

你可能以为每个用户只出现一行,结果 孙悟空 出现了两次。

原因:

  • JOIN 会对满足条件的所有组合都生成结果。
  • 孙悟空有两个订单 → 出现两行。
  • 赵云没下单 → 也会保留一行(item=NULL)。

小贴士:

连接时不是“找一个就停”,而是“所有匹配的都拿出来”。


六、常见场景推荐

场景推荐 JOIN
只看有订单的用户INNER JOIN
列出所有用户 + 他们的订单情况LEFT JOIN
列出所有订单 + 是否找到下单用户RIGHT JOIN
查出哪些用户没有下单LEFT JOIN + WHERE b.id IS NULL

示例:

SELECT a.id, a.name
FROM users a
LEFT JOIN orders b ON a.id = b.user_id
WHERE b.id IS NULL;

结语

  • JOIN 本质上是“表之间的行配对”,不只是挑字段而已。
  • 行数会膨胀,尤其是一对多、多对多连接时尤为明显。
  • 熟练掌握 JOIN,才能写出既高效又准确的 SQL 查询。

一图了解JOIN

在这里插入图片描述

参考链接

  • SQL Joins Visualizer
    一目了然地展示各种 JOIN 类型行为。

  • LeetCode SQL Tutorial(JOIN 练习)
    通过实战题目巩固 JOIN 和子查询等知识点。

  • W3Schools:SQL JOIN
    基础入门首选,配有图解和在线练习。

  • MySQL JOIN 语法官方文档
    官方介绍各种 JOIN 的语法规则和性能提示。

  • PostgreSQL JOIN Types
    PostgreSQL 对 JOIN 的详细描述,适用于所有标准 SQL 数据库。

  • Join Data In SQL

在这里插入图片描述

http://www.dtcms.com/a/432009.html

相关文章:

  • 营销网站策划方案爱南宁下载安装
  • 钦州网站推广郑州网课老师
  • h5网站建设h精准营销的好处
  • AI从技术到生产力的跨越
  • 庐江县住房和城乡建设局网站苏州吴中区住房和城乡建设局网站
  • 一家专门做母婴的网站杭州百度网站建设
  • 企业营销网站开发建设专家百度云服务器做网站稳定吗
  • 广东一站式网站建设费用建设网站要不要投资钱
  • 20251001——在ANSYS MAXWELL中如何对二维平面图形进行镜像
  • 【LattePanda Mu 开发套件】AI 图像识别网页服务器
  • 昆山网站排名优化wordpress建站安全吗
  • 网站和app设计区别小程序开发定制外包15
  • 网站开发工作好找吗网站开发培训深圳
  • leetcode2.两数相加
  • 上海跨境电商网站制作wordpress 文章设置
  • 网站推广服务 商务服务一页网站首页图如何做
  • 网站建设相关文章商业网站的创建程序
  • 【手撕机器学习 04】手撕线性回归:从“蒙眼下山”彻底理解梯度下降
  • 七个php源码下载的网站网站建设通报
  • 网络技术与网站建设模板网站建设代理商
  • 湘潭网站建设优化技术2 网站内部链接优化
  • php网站开发答案关键词免费网站
  • 树状数组的原理和简单实现:一种使用倍增优化并支持在线 O(log N) 修改、查询的数据结构
  • 网站相关知识百度如何收录网站
  • 视频素材网站大全免费海盐市网站建设
  • 一个公司名可以备案多少个网站空间设计主要做什么
  • STC32G 的PWM调光LED
  • wordpress 建网站 vpn校网站建设方案
  • MySQL索引全面解析:类型作用与最佳实践
  • 护理+人工智能研究热点数据分析项目实战(六)