【SQL】轻松判断什么时候用inner join 什么时候用left/right join
如果需要取的表中的字段信息为必须不为空字段,则用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相关推荐
- SQL SERVER 判断是否存在并删除某个数据库、表、视图、触发器、储存过程、函数
– SQL SERVER 判断是否存在某个触发器.储存过程 – 判断储存过程,如果存在则删除 IF (EXISTS(SELECT * FROM sysobjects WHERE name='proce ...
- SQL语句判断指定的数据库、表、字段、存储过程是否存在
SQL语句判断指定的数据库.表.字段.存储过程是否存在 直接上代码,对大家有用就好! 代码 --判断[TestDB]是否存在 if exists(select 1 from master..sysda ...
- SQL 中 left join 的底层原理(各种JOIN的复杂度探究)
01. 前言 写过或者学过 SQL 的人应该都知道 left join,知道 left join 的实现的效果,就是保留左表的全部信息,然后把右表往左表上拼接,如果拼不上就是 null.除了 left ...
- sql三个表join_「数据蒋堂」第 31 期:JOIN 简化 – 维度对齐
[数据蒋堂]第 31 期:JOIN 简化 – 维度对齐 我们先把上一期中双子表对齐例子的 SQL 写出来: SELECT Orders.id, Orders.customer, A.x, B.y FR ...
- SQL Server判断对象是否存在 (if exists (select * from sysobjects )
1 判断数据库是否存在 Sql代码 if exists (select * from sys.databases where name = '数据库名') drop database [数据库名] ...
- mysql join order by_MySQL 14 慢查询优化join、order by、group by
1.慢查询的优化思路 1.1优化更需要优化的SQL 优化SQL是有成本的 高并发低消耗的比低并发高消耗影响更大 优化示例 并发形式 优化前 假设优化后 高并发低消耗 每小时10000次,每次20个IO ...
- java join()源码_Java Thread的join() 之刨根问底
0.Join() 线程的合并的含义就是 将几个并行线程的线程合并为一个单线程执行,应用场景是 当一个线程必须等待另一个线程执行完毕才能执行时,Thread类提供了join方法来完成这个功能,注意,它不 ...
- 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 ...
- mysql的exists与inner join 和 not exists与 left join 性能差别惊人
由于客户数据量越来越大,在实践中让我发现mysql的exists与inner join 和 not exists与 left join 性能差别惊人. 我们一般在做数据插入时,想插入不重复的数据,或者 ...
- 35 | 别再说不能使用Join了(这次是优化Join查询-下篇)
云里雾里,不知所以- 一.前言 现有两张表:t1(1000行数据,a=1001-id)的值,t2(100w行数据) 语句如下: create table t1(id int primary key, ...
最新文章
- Windows与Linux之间互传文件的方法
- 报名 | 从滴滴出行数据透视中国城市空间发展讲座
- codeforces div3 D Circular Dance (链式向前星)
- 《大话》之 策略模式 Vs 状态模式
- 一个Delphi写的DES算法, 翻译成C#
- Android的HTTP方式网络通信---HttpURLConnection
- [uva11174]村民排队 递推+组合数+线性求逆元
- java在线订单系统源码_春哥酒店在线预订微信小程序源码系统正式发布!
- ubuntu 截图快捷键设置
- STM32F030F4驱动TIM1637数码管芯片
- m118w重置墨粉_富士施乐 Fuji Xerox DocuPrint M118w/M118z墨盒换粉加粉详解
- mac10.9下eclipse的storm开发环境搭建
- shader篇-阴影
- 【bug】修复YYC松鼠短视频系统V2.7版本bug 注册输入验证码提示邀请码,输入邀请码提示错误
- Hark的数据结构与算法练习之桶排序
- 【李佳辉_周报_2022.10.23】
- 精准营销、批量提取QQ群成员号码
- 【实战分享2】:如何基于OpenXR@ unity + 华为VR Glass 6dof Quest 开发跨平台VR游戏/应用
- 正则表达式,各种空字符和空格字符
- python实现自适应分辨率截取桌面图片并识别图片文字
热门文章
- 互联网资质之增值电信业务经营许可证办理条件
- 天马10.1寸液晶屏TM101JDHG40-TM101JDHG40产品规格资料
- sublime3中如何使用sublimegit插件
- android 示例源码
- 计算机专业英语 读书笔记
- 烟台市副高职称英语计算机考试试题,山东省烟台市2015年度全国职称外语等级考试科目、级别及题型...
- 文档flie的读写,open()的用法
- 五险合一系统服务器,天水五险合一社保系统上线 实现“一卡通”服务
- win7文件夹工作组指定计算机共享,win7共享文件夹如何设置成指定IP访问-win7设置共享文件夹,win7共享文件后无权限访问...
- 一篇文章告诉你什么是GFS(分布式文件系统)