美文网首页
SQL学习指南 -- 多表查询

SQL学习指南 -- 多表查询

作者: 飞猪的浪漫 | 来源:发表于2023-11-18 22:33 被阅读0次

customer数据表包含599行,address数据表包含603行,而结果集中的361,197行是从哪里来的呢?仔细观察,会发现很多客户居住的街道地址是一样的。这是因为查询并没有指定两个数据表应该如何连接,数据库服务器就生成了笛卡儿积(Cartesian product),也就是两个数据表的所有排列组合(599个客户 603个地址= 361,197种排列组合)。这种连接被称为交叉连接(cross join),很少会用到(至少不会特意用到)。 这是笛卡尔交叉

笛卡尔交叉比较多,属于所有内容都需要显示。

如果一个数据表中的address_id列的值在另一个数据表中不存在,则包含该值的行连接失败,相应行不会出现在结果集中。这就是内连接,也是最常用的连接。 on 选择:需要连接的关键字。

如果要将一个数据表中的所有行全部纳入结果集,不管其在另一个数据表中是否存在匹配,则需要指定外连接(outer join)

如果没有指定连接类型,那么服务器会默认使用内连接。正如本书随后要介绍的,连接类型不止一种,最好养成明确指定所需的连接类型的习惯,尤其是为将来可能使用/维护查询的其他人考虑。 比如加上inner join 连接。

内连接需要加上inner join,和on的具体条件。

连接3个数据表的方法与连接2个数据表差不多,只有一处细微的差别。在2个数据表的连接查询中,from子句包含2个数据表和1种连接类型,on子句指定2个数据表如何连接。对于3个数据表的连接,from子句包含3个数据表和2种连接类型,再加上2个on子句。

2个连接方式,和2个on的关键词。

连接顺序重要吗?

如果你对这3个版本的customer/address/city查询都产生同样的结果感到疑惑,记住,SQL是一种非过程化语言,也就是说只需要描述检索的内容和涉及的数据库对象,由数据库服务器负责确定如何以最佳方式执行查询。服务器使用从数据库对象收集的统计信息,在3个数据表中选择一个作为起点(所选择的数据表被称为驱动表),然后确定其他数据表的连接顺序。因此,各数据表在from子句中出现的顺序并不重要。

相关文章

  • SQL多表查询高级应用

    SQL多表查询 多表连接示范 两张表t_user t_judge 给两张表设置外键约束查询内容 SQL多表查询 多...

  • SQLAlchemy(四)

    知识要点: 1.多表查询 2.原生SQL的查询 多表查询 在MySQL中我们讲了多表查询,在SQLAlchemy中...

  • 不可置信!SQL 优化终于干掉了“distinct”

    sql 优化之多表联合查询干掉 “distinct” 去重关键字 所以需要把多表的子查询的 sql 结构进行优化。...

  • sql

    sql语句 查询 简单查询 例: 多表连接查询 例: 2.更新

  • sql多表查询

    普通多表查询 嵌套多表查询 链接多表查询 左链接(会将左表的内容全部输出,没有需要补NULL) 右链接(会将右表的...

  • SQL多表查询

    之前做过一个关于数据库的使用总结,里面写过一些关于数据库的常用方法的集合,但是我们在实例工作中,很可能涉及到一需要...

  • sql多表查询

    在面试中经常有这样的问题,从两个表A和B中获取有特定关系的数据.碰到这样的问题我们一般需要用到union和join...

  • sql多表查询

    sql会创建多表以及多表的关系 需求: 上篇文章中的商品表和分类表之间存在着所属关系,在数据库如何表示这种关系 分...

  • SQL基础(二)

    前言 基础SQL入门详情看SQL(一)多表联接的原理详细看SQL(一) 查询 在SQL中, 最难的莫过于查询.因为...

  • MySQL的多表关联查询

    一、多表关联查询 多表关联查询是使用一条SQL语句,将关联的多张表的数据查询出来。 1.1 交叉查询 交叉查询就是...

网友评论

      本文标题:SQL学习指南 -- 多表查询

      本文链接:https://www.haomeiwen.com/subject/ecjpwdtx.html