首先跟大家讲一下小编所知的多表(3个表及以上)联合查询的办法, ①:连接查询,②:子查询。(当然如果小编漏掉其他方法的话,欢迎大家在评论中指出哈,小编会随后奉上) 当然第一步,先建立测试表:--第一个:商品明细表:商品ID,名称
--第二个:商品价格表:商品ID,价格
--第三个:在库数量表:名称,数量(只是举个例子方便大家理解。大家不要较真哈,建库的时候没人会脑残到这么建库的哈)
建立成功的表
--方法一(子查询):
--方法二(连接查询)
--结论:两种方法得出的结果完全一样,如图 两种方法的结果对比 --注意:当我们想要查询在库的所有商品的价格时,子查询就不是那么灵便啦.因此我们的join语法的优势就能体现出来了。
--方法:
得出的结果如图. 好啦。讲了这么多,现在我正式进入join(连接查询)的专题哈。
连接标准语法格式: SQL-92标准所定义的FROM子句的连接语法格式为: FROM 表1 join_type 表2 [ON (条件)] 其中。join_type 指出连接类型。 连接类型: 连接分为三种:内连接、外连接、交叉连接。
使用比较运算符(包括=、>、<><>、>=、<=、!>和!<>
外连接分为左连接(LEFT JOIN)或左外连接(LEFT OUTER JOIN)、右连接(RIGHT JOIN)或右外 连接(RIGHT OUTER JOIN)、全连接(FULL JOIN)或全外连接(FULL OUTER JOIN)。我们就简单的叫:左连接、右连接和全连接。 1、左连接 left join:概念:返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的列返回NULL值。
结果是: left join 总结:左连接显示左表全部行,和右表与左表相同行。 2、右连接right join:概念:恰与左连接相反,返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。
结果是: right join 总结:右连接恰与左连接相反,显示右表全部行,和左表与右表相同行。 3、全连接full join: 概念:返回左表和右表中的所有行。当某行在另一表中没有匹配行,则另一表中的列返回空值 交叉连接(CROSS JOIN):也称迪卡尔积 注释:(1)不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行
cross join 总结:相当与笛卡尔积,左表和右表组合。 (2)、有where子句,往往会先生成两个表行数乘积的数据表,然后才根据where条件从中选择。
(注:cross join后加条件只能用where,不能用on) 添加where条件后的cross join 小提示:子查询就是查询中又嵌套的查询,嵌套的级数随各数据库厂商的设定而有所不同,一般最大嵌套数不超过15级,实际应用中,一般不要超过2级,否则代码难以理解. 一般来说,所有嵌套子查询都可改写为非嵌套的查询,但是这样将导致代码量增大.子查询就如递归函数一样,有时侯使用起来能达到事半功倍之效,只是其执行效率同样较低,有时用自身连接可代替某些子查询,另外,某些相关子查询也可改写成非相关子查询 表连接都可以用子查询,但不是所有子查询都能用表连接替换,子查询比较灵活,方便,形式多样,适合用于作为查询的筛选条件,而表连接更适合与查看多表的数据 注意: 子查询不一定需要两个表有关联字段,而连接查询必须有字段关联(所谓的主外键关系) 最后:小编温馨提示:大家用完测试的表后记得 =、!> |
|
来自: 豫龙晏子 > 《平面设计与办公表格》