如果需要取的表中的字段信息为必须不为空字段,则用inner join;如果可为空,或者可有可没有,则用left join;right join 用法和left join 类似,不常用;union 合并去重;union all 合并不去重

语法:

*select * from 表A    innner join 表B  on 条件*
     取的是A表和B表的交集,*所取数据均有值,为空则舍去*
select * from 表A    left join 表B  on 条件
      以A表为准,取A表的全部数据,联接B表的数据
select * from 表A    right join 表B  on 条件
      以B表为准,取B表的全部数据,联接A表的数据

举个栗子

表A

CREATE TABLE stu(
id int,
name varchar(10));
INSERT INTO stu VALUES (1,'a'),(2,'b'),(3,'c') ;
id name
1 a
2 b
3 c

表B

CREATE TABLE score(
name varchar(10),
score int);
INSERT INTO score VALUES ('b',90),('c',85),('d',100);
name score
b 90
c 85
d 100
  • inner join结果
SELECT * FROM stu A
inner JOIN score b ON a.name=b.name
id name name score
2 b b 90
3 c c 85
  • left join 结果
SELECT * FROM stu A
LEFT JOIN score b ON a.name=b.name
id name name score
1 a null null
2 b b 90
3 c c 85

left join 常用于过滤,取A表有但B表没有的,常在后面加上
WHERE b.name IS null 使用,输出结果如下

id name name score
1 a null null
  • right join结果
id name name score
2 b b 90
3 c c 85
null null d 100
  • full join结果
id name name score
1 a null null
2 b b 90
3 c c 85
null null d 100

【SQL】轻松判断什么时候用inner join 什么时候用left/right join相关推荐

  1. SQL SERVER 判断是否存在并删除某个数据库、表、视图、触发器、储存过程、函数

    – SQL SERVER 判断是否存在某个触发器.储存过程 – 判断储存过程,如果存在则删除 IF (EXISTS(SELECT * FROM sysobjects WHERE name='proce ...

  2. SQL语句判断指定的数据库、表、字段、存储过程是否存在

    SQL语句判断指定的数据库.表.字段.存储过程是否存在 直接上代码,对大家有用就好! 代码 --判断[TestDB]是否存在 if exists(select 1 from master..sysda ...

  3. SQL 中 left join 的底层原理(各种JOIN的复杂度探究)

    01. 前言 写过或者学过 SQL 的人应该都知道 left join,知道 left join 的实现的效果,就是保留左表的全部信息,然后把右表往左表上拼接,如果拼不上就是 null.除了 left ...

  4. sql三个表join_「数据蒋堂」第 31 期:JOIN 简化 – 维度对齐

    [数据蒋堂]第 31 期:JOIN 简化 – 维度对齐 我们先把上一期中双子表对齐例子的 SQL 写出来: SELECT Orders.id, Orders.customer, A.x, B.y FR ...

  5. SQL Server判断对象是否存在 (if exists (select * from sysobjects )

    1 判断数据库是否存在 Sql代码 if exists (select * from sys.databases where name = '数据库名') drop database [数据库名]   ...

  6. mysql join order by_MySQL 14 慢查询优化join、order by、group by

    1.慢查询的优化思路 1.1优化更需要优化的SQL 优化SQL是有成本的 高并发低消耗的比低并发高消耗影响更大 优化示例 并发形式 优化前 假设优化后 高并发低消耗 每小时10000次,每次20个IO ...

  7. java join()源码_Java Thread的join() 之刨根问底

    0.Join() 线程的合并的含义就是 将几个并行线程的线程合并为一个单线程执行,应用场景是 当一个线程必须等待另一个线程执行完毕才能执行时,Thread类提供了join方法来完成这个功能,注意,它不 ...

  8. 1.19.5.4.流上的Join、常规Join、时间区间Join、时态表Join、基于处理时间的时态Join、时态表函数Join、用法

    1.19.5.4.流上的Join 1.19.5.4.1.常规Join 1.19.5.4.2.时间区间Join 1.19.5.4.3.时态表Join 1.19.5.4.4.基于处理时间的时态Join 1 ...

  9. mysql的exists与inner join 和 not exists与 left join 性能差别惊人

    由于客户数据量越来越大,在实践中让我发现mysql的exists与inner join 和 not exists与 left join 性能差别惊人. 我们一般在做数据插入时,想插入不重复的数据,或者 ...

  10. 35 | 别再说不能使用Join了(这次是优化Join查询-下篇)

    云里雾里,不知所以- 一.前言 现有两张表:t1(1000行数据,a=1001-id)的值,t2(100w行数据) 语句如下: create table t1(id int primary key, ...

最新文章

  1. Windows与Linux之间互传文件的方法
  2. 报名 | 从滴滴出行数据透视中国城市空间发展讲座
  3. codeforces div3 D Circular Dance (链式向前星)
  4. 《大话》之 策略模式 Vs 状态模式
  5. 一个Delphi写的DES算法, 翻译成C#
  6. Android的HTTP方式网络通信---HttpURLConnection
  7. [uva11174]村民排队 递推+组合数+线性求逆元
  8. java在线订单系统源码_春哥酒店在线预订微信小程序源码系统正式发布!
  9. ubuntu 截图快捷键设置
  10. STM32F030F4驱动TIM1637数码管芯片
  11. m118w重置墨粉_富士施乐 Fuji Xerox DocuPrint M118w/M118z墨盒换粉加粉详解
  12. mac10.9下eclipse的storm开发环境搭建
  13. shader篇-阴影
  14. 【bug】修复YYC松鼠短视频系统V2.7版本bug 注册输入验证码提示邀请码,输入邀请码提示错误
  15. Hark的数据结构与算法练习之桶排序
  16. 【李佳辉_周报_2022.10.23】
  17. 精准营销、批量提取QQ群成员号码
  18. 【实战分享2】:如何基于OpenXR@ unity + 华为VR Glass 6dof Quest 开发跨平台VR游戏/应用
  19. 正则表达式,各种空字符和空格字符
  20. python实现自适应分辨率截取桌面图片并识别图片文字

热门文章

  1. 互联网资质之增值电信业务经营许可证办理条件
  2. 天马10.1寸液晶屏TM101JDHG40-TM101JDHG40产品规格资料
  3. sublime3中如何使用sublimegit插件
  4. android 示例源码
  5. 计算机专业英语 读书笔记
  6. 烟台市副高职称英语计算机考试试题,山东省烟台市2015年度全国职称外语等级考试科目、级别及题型...
  7. 文档flie的读写,open()的用法
  8. 五险合一系统服务器,天水五险合一社保系统上线 实现“一卡通”服务
  9. win7文件夹工作组指定计算机共享,win7共享文件夹如何设置成指定IP访问-win7设置共享文件夹,win7共享文件后无权限访问...
  10. 一篇文章告诉你什么是GFS(分布式文件系统)