注意:主句where行对应的列名要在子句的select里面;使用的是in命令。
这里面的count(*)可以视为count(cust_id),返回行数不包括本身行。
这个为完全限定列名,类似于类与方法。
(1).关系表
(2).外键
(3).建立联结
和平常语句不同的是,where过滤是两个表中的数据,只有两个表的数据满足了where的条件,才会建立联结,也才会被显示。
(4).笛卡尔积:
(5).内部联结
(6).多人运动(多表联结)
(7).联结的优势
可以替代二重子查询:
(3).自然联结
联结的一种方式,把所有需要的列都select朱来,排除重复
(4).外部联结
outer join前的参数left指,左边的表中的不含联结条件的行也会被联结并显示,其值为null;right则为右边。
注意:默认的联结方式为内部联结,所以外部联结是高级的联结。
(5).带聚集函数的联结
此处的group by 将每个id都作为一次操作交给了count(…num…),所以会返回对每个id联结的order数据的order_num的行数
注意:
1.
2.union会自动去除重复行,可用union all来显示全部行
3.order by 有且只能有一个在最后一个select后面,可以理解成union相当于是多次的where or
(1).启用全文本搜索支持(fulltext)
如图,在建表时用fulltext创造索引才能全文搜索
(2).进行全文搜索
其中match对应列一定要是fulltext过的,且要按顺序。
该方法和like关键词最大的不同在于会自动进行排序:
观察可知,词未出现的行等级为0,而词出现的行,目标词越靠前等级越高,也越在前显示。
(3).查询扩展(with query expansion)
神奇的查询,先返回有所查询的词的行,再根据这行的内容查询和其有相同词汇的行
(4).布尔文本搜索(没有fulltext也能用)
in boolean mode
可以选择排除的词,其中的"-“合”*"为布尔操作符:
例子:
注意:布尔查询中不按等级值来返回行,即无普通的全文本搜索的排序效果。
(5).需要注意的几个地方
2.一个词如果出现50%以上,即返回太多结果,则会被忽略。(不用于in Boolean mode)