1.子查询

注意:主句where行对应的列名要在子句的select里面;使用的是in命令。
多层套娃(用于对不同列的过滤,即and命令做不到的情况):


这里面的count(*)可以视为count(cust_id),返回行数不包括本身行。

这个为完全限定列名,类似于类与方法。
2.联结表
(1).关系表

(2).外键

(3).建立联结

和平常语句不同的是,where过滤是两个表中的数据,只有两个表的数据满足了where的条件,才会建立联结,也才会被显示。
(4).笛卡尔积:

(5).内部联结

(6).多人运动(多表联结)

(7).联结的优势

3.高级联结
(1).表别名

注意:表别名不返回客户机,列别名返回
(2).自联结

给表换个名字,就是两个不同的表了,可以联结
可以替代二重子查询:

(3).自然联结

联结的一种方式,把所有需要的列都select朱来,排除重复
(4).外部联结

outer join前的参数left指,左边的表中的不含联结条件的行也会被联结并显示,其值为null;right则为右边。
注意:默认的联结方式为内部联结,所以外部联结是高级的联结。
(5).带聚集函数的联结

此处的group by 将每个id都作为一次操作交给了count(…num…),所以会返回对每个id联结的order数据的order_num的行数
4.组合查询(union)

和下图是一个意思:

但是优势在于可以对多个表进行组合查询
注意:
1.
2.union会自动去除重复行,可用union all来显示全部行
3.order by 有且只能有一个在最后一个select后面,可以理解成union相当于是多次的where or
5.全文本搜索
(1).启用全文本搜索支持(fulltext)

如图,在建表时用fulltext创造索引才能全文搜索
(2).进行全文搜索

其中match对应列一定要是fulltext过的,且要按顺序。
该方法和like关键词最大的不同在于会自动进行排序:

观察可知,词未出现的行等级为0,而词出现的行,目标词越靠前等级越高,也越在前显示。
(3).查询扩展(with query expansion)

神奇的查询,先返回有所查询的词的行,再根据这行的内容查询和其有相同词汇的行
(4).布尔文本搜索(没有fulltext也能用)
in boolean mode

可以选择排除的词,其中的"-“合”*"为布尔操作符:

例子:

注意:布尔查询中不按等级值来返回行,即无普通的全文本搜索的排序效果。
(5).需要注意的几个地方
1.单引号被忽略

2.一个词如果出现50%以上,即返回太多结果,则会被忽略。(不用于in Boolean mode)
SQL进阶指南
本文深入探讨SQL的子查询、联结表、组合查询等高级功能,解析子查询的使用技巧,联结表的不同类型及其应用,以及如何利用组合查询整合多表数据。
888

被折叠的 条评论
为什么被折叠?



