首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

sql连接查询(inner join、full join、left join、 right join

sql连接查询(inner join、full join、left join、 right join) 一、内连接(inner join) 首先我这有两张表 1、顾客信息表customer ?...内连接过程: 将符合条件记录组合起来,放在一张新表里面 二、左连接(left join) 需求:查询哪个顾客(customer_name)在哪一天(create_time)消费了多少钱(money)...从结果可以很清楚明白左连接含义: 将左边表所有记录拿出来,不管右边表有没有对应记录 三、右连接(right join) 需求:查询哪个顾客(customer_name)在哪一天(create_time...、 从结果可以很清楚明白右连接含义: 将右边表所有记录拿出来,不管右边表有没有对应记录 四、全连接(full join) 这里要注意是mysql本身并不支持全连接查询,但是我们可以使用UNION...从sql语句中可以清楚看到: 使用UNION关键字将左连接右连接,联合起来

4.1K40

史上最精炼sql多表连接查询: left join right joininner join

通俗讲: left以 left join 左侧表为主表 right 以 right join 右侧表为主表 inner join 查找数据是左右两张表共有的 举个栗子: left join 左侧表为主表...right join 右侧表为主表 懒人通道: 注意:左列为原列表内容,右侧为结构分析及关联结果!...inner join 查找数据是左右两张表共有的 懒人通道: 注意:左列为原列表内容,右侧为结构分析及关联结果!...温馨提醒: inner join使用时可直接写join 更多干货正在赶来,敬请期待…… 左手代码,右手吉他,这就是天下:如果有一天我遇见相似的灵魂 那它肯定是步履艰难 不被理解 喜黑怕光。...不一样文艺青年,不一样程序猿。

1.9K20
您找到你想要的搜索结果了吗?
是的
没有找到

SQL 查询尽量避免使用 IN NOT IN

在编写 SQL 语句时候大部分开发人员都会用到 IN NOT IN 来辅助查询多个内容,例如查询 包含在 b 表中 a 表数据,通常会这么来编写语句: select * from a where...效率低下 这里以 NOT IN 为例子,有这样一个要求,存在两个表 a b 这两个表数据都在 10 万条以上,需要查出来身份证号只存在于 a 表但不存在于 b 表数据。...这是因为 NOT IN 并不会命中索引,那么解决这个问题好办法就是使用 NOT EXISTS ,改进后 SQL 语句如下: select * from a where not exits (select...IDCar from b where a.IDCar=b.IDCar) 查询结果有误 这里以 IN 为例,同样存在两个表 a b,查询出 b 表中存在 a 表数据。...这种情况我们一般使用 EXISTS 或者 NOT EXISTS 以及 表连接 JOIN 来解决。

1K20

sql连接查询嵌套查询_sql查询连接查询

大家好,又见面了,我是你们朋友全栈君。...【例一】:查询科目所属年级(科目名称、年级名称) sql 语句: 结果: 图片 =================================== 【例二】:查询 JAVA第一学年 课程成绩排名前十学生...并且分数要大于80 学生信息(学号、姓名、课程名称、分数) sql 语句: 结果: =================================== 【例三】:查询数据库结构-1 所有考试结果...(学号、科目编号、成绩),降序排列 方式一: 连接查询 方式二: 子查询 结果: =================================== 自连接:查询父子信息,把一张表看成两张一样表...现在有一张包含子父关系,名为 category 数据表: 我们把这一张表拆分成两张表: 执行 sql 语句: 结果: 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn

4.4K10

为什么MySQL不推荐使用查询join

来源:cnblogs.com/liboware/p/12740901.html 1.对于mysql,不推荐使用查询join是因为本身join效率就是硬伤,一旦数据量很大效率就很难保证,强烈推荐分别根据索引单表取数据...在应用层做关联查询,意味着对于某条记录应用只需要查询一次,而在数据库中做关联查询,则可能需 要重复地访问一部分数据。从这点看,这样重构还可能会减少网络内存消艳。...三、不推荐使用join原因 1.DB承担业务压力大,能减少负担就减少。...3.修改表schema,单表查询修改比较容易,joinsql语句要修改,不容易发现,成本比较大,当系统比较大时,不好维护。...四、不使用join解决方案 在业务层,单表查询出数据后,作为条件给下一个单表查询。也就是子查询。会担心子查询出来结果集太多。mysql对in数量没有限制,但是mysql限制整条sql语句大小。

3.8K30

SQL 查询条件放到 JOIN 子句与 WHERE 子句差别

我们再写 SQL 时候,最常碰到一个问题就是,把查询条件放到 JOIN 子句放到 WHERE 子句有什么不同呢?...比如: 查询条件放到 JOIN 语句: SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts JOIN wp_skus sku ON sku.post_id...:简单说如果使用是 INNER JOIN,这两种查询结果相同。...但是语义上:JOIN - 描述两个表之间关系,WHERE - 从结果集中删除行。这两种方法直接存在显著语义上差别,尽管两种方法对结果性能都无影响,但是选择正确语法将有助于代码更易于被阅读。...OUTER JOIN:如果使用是 OUTER JOIN,可能会不同,比如上面的 SQL 改成 LEFT JOIN,并且连接条件失败,则查询条件放到 JOIN 子句仍将获得一行,但是如果放到 WHERE

2.3K20

sql之left join、right join、inner join区别

left join(左联接) 返回包括左表中所有记录右表中联结字段相等记录  right join(右联接) 返回包括右表中所有记录左表中联结字段相等记录 inner join(等值连接)...5 行) 结果说明: left join是以A表记录为基础,A可以看成左表,B可以看成右表,left join是以左表为准....B表记录不足地方均为NULL. -------------------------------------------- 2.right join sql语句如下:  select * from A...5 行) 结果说明: 仔细观察一下,就会发现,left join结果刚好相反,这次是以右表(B)为基础,A表不足地方用NULL填充. -----------------------------...使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始两个表中全部记录,即使在第二个(右边)表中并没有相符值记录。

1.6K30

使用 go-randgen 测试 join 查询

查询join key 为不同数据类型 在分区表上进行 join 相同 join 查询,不同 join 实现算法 特殊查询条件 我们从这些场景入手,在过去几个月,使用 go-randgen...zz 文件,指定表生成规则,如数据类型,表类型,行数等 定义 yy 文件,指定随机 SQL 生成规则 使用生成表结构 SQL 运行 A/B test 下文通过示例,分别对每个步骤进行详述: 1....该例中 yy 文件,通过 hint 指定生成 inl_merge_join inl_hash_join 算法查询语句。生成 sql 语句中除指定字段外,查询条件中字段将随机组合而成。...本例中,会对 TiDB 查询结果与 MySQL 查询结果进行对比 。查询结果不一致 SQL,将会被记录在当前目录 dump 子目录中。 ....但是通过 go-randgen 生成 SQL 具有十分固定结构,如果不能提前知道测试点,就不能构造出查询语句,进行有效测试覆盖。那有没有方法随机生成 join 查询语句,进行测试呢?

84900

图解SQLJoin

对于SQLJoin,在学习起来可能是比较乱。我们知道,SQLJoin语法有很多inner,有outer,有left,有时候,对于Select出来结果集是什么样子有点不是很清楚。...Inner join Inner join产生结果集中,是AB交集。...Full outer join Full outer join 产生AB并集。但是需要注意是,对于没有匹配记录,则会以null做为值。...还需要注册是我们还有一个是“交差集” cross join, 这种Join没有办法用文式图表示,因为其就是把表A表B数据进行一个N*M组合,即笛卡尔积。...但是我们得小心,如果不是使用嵌套select语句,一般系统都会产生笛卡尔乘积然再做过滤。这是对于性能来说是非常危险,尤其是表很大时候。 ?

56220

关于SQL中UnionJoin用法

连表查询也是一些很简单使用。至于那些高级用法,都还给老师了。...最近接腾讯IDIPSDK,需要查询一些游戏数据,发现自己SQL水平不够用,温习了一些以前忘记语法,顺便记录一下,方便以后偶尔来查查。...BY Persons.LastName 结果: image.png 不同 SQL JOIN 除了我们在上面的例子中使用 INNER JOIN(内连接),JOIN默认使用内连接,可以省略INNER...FULL JOIN: 只要其中一个表中存在匹配,就返回行 ---- LEFT JOIN //使用left join查询,只要左表有匹配条件,就会生成一行,右表列值为空。...E on E.e = D.d 我们可以先把AB连接起来,然后将结果与C连接,当然,如果C只B相关而不和A相关的话,我们也可以先把BC连接起来,结果再与A连接,只要保持关系是正确,你可以以任意方式来定义嵌套

90430

sql之left join、right join、inner join区别

left join(左联接) 返回包括左表中所有记录右表中联结字段相等记录 right join(右联接) 返回包括右表中所有记录左表中联结字段相等记录 inner join(等值连接)...B表记录不足地方均为NULL. -------------------------------------------- 2.right join sql语句如下: select * from A...5 行) 结果说明: 仔细观察一下,就会发现,left join结果刚好相反,这次是以右表(B)为基础,A表不足地方用NULL填充. -----------------------------...--------------- 3.inner join sql语句如下: select * from A innerjoin B on A.aID = B.bID 结果如下: aID     aNum...使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始两个表中全部记录,即使在第二个(右边)表中并没有相符值记录。

1.5K80

sql之left join、right join、inner join区别

left join(左联接) 返回包括左表中所有记录右表中联结字段相等记录 right join(右联接) 返回包括右表中所有记录左表中联结字段相等记录 inner join(等值连接...B表记录不足地方均为NULL. -------------------------------------------- 2.right join sql语句如下: select * from A...5 行) 结果说明: 仔细观察一下,就会发现,left join结果刚好相反,这次是以右表(B)为基础,A表不足地方用NULL填充. -----------------------------...--------------- 3.inner join sql语句如下: select * from A innerjoin B on A.aID = B.bID 结果如下: aID     aNum...使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始两个表中全部记录,即使在第二个(右边)表中并没有相符值记录。

1.7K30

图解SQLJoin

对于SQLJoin,在学习起来可能是比较乱。我们知道,SQLJoin语法有很多inner,有outer,有left,有时候,对于Select出来结果集是什么样子有点不是很清楚。...Inner join Inner join产生结果集中,是AB交集。...Full outer join Full outer join 产生AB并集。但是需要注意是,对于没有匹配记录,则会以null做为值。...“交差集” cross join, 这种Join没有办法用文式图表示,因为其就是把表A表B数据进行一个N*M组合,即笛卡尔积。...但是我们得小心,如果不是使用嵌套select语句,一般系统都会产生笛卡尔乘积然再做过滤。这是对于性能来说是非常危险,尤其是表很大时候。

32920

使用STRAIGHT_JOIN 优化inner join查询排序索引问题

项目里有条sql语句使用inner join 语句 但是在增加了order by 左表.字段 desc 后效率非常慢 查询explain 如下: 左表字段last_follow_time是有索引,...排序时但是并没有走索引,出现了Using temporary; Using filesort 这是因为排序时没有使用左表字段索引,我们可以强制使用左表作为主表,就可以使用索引了 STRAIGHT_JOIN...join就是以左表为驱动表,right join反之。...而STRAIGHT_JOIN就是在内连接中使用,而强制使用左表来当驱动表,所以这个特性可以用于一些调优,强制改变mysql优化器选择执行计划。...(也就是说STRAIGHT_JOIN实际上是INNER JOIN强制指定左表作为驱动表,而不是让mysql优化器去判断选择)

1.9K20

sql之left join、right join、inner join区别

left join(左联接) 返回包括左表中所有记录右表中联结字段相等记录 right join(右联接) 返回包括右表中所有记录左表中联结字段相等记录 inner join(等值连接) 只返回两个表中联结字段相等行...left join是以A表记录为基础,A可以看成左表,B可以看成右表,left join是以左表为准....B表记录不足地方均为NULL. -------------------------------------------- 2.right join 仔细观察一下,就会发现,left join结果刚好相反...JOIN操作用于在任何 FROM 子句中,组合来源表记录。...使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始两个表中全部记录,即使在第二个(右边)表中并没有相符值记录。

1.2K20

SQL里是否可以使用JOIN

很多公司都禁止程序员在 SQL使用 JOIN,至于原因则出奇一致:用 JOIN 慢。...举个例子:查询最新十篇帖子对应用户信息,用 JOIN 是这样: SELECT posts.id, posts.content, users.name, ......JOIN 在我看来,JOIN 问题不是性能,而是当你执行 posts JOIN users 时候,实际上相当于做出了一个承诺:posts users 两个结婚表将永远住在同一个 DB 实例上,...不过实际上,随着项目的发展,很可能会出现 posts users 两个表不得不离婚情况,结果它们会被划分到不同 DB 实例,一旦出现此类情况,那么当初使用 JOIN 地方将不得不大量改写。...至于 SQL 里是否可以使用 JOIN,如果相关表以后有独立部署可能性,那么就要考虑避免使用 JOIN,否则用 JOIN 也无妨。

50420
领券