子句总结
组合查询
组合查询是指利用UNION
,将多条SELECT
查询语句组合在一起,并将结果作为单个结果集返回。
它可以简化复杂的WHERE
子句、多表查询工作,有以下要求或特性:
- 每个查询必须包含相同的列、表达式或聚集函数(各个列的列出次序可以不同)
- 返回结果为每个查询的
WHERE
子句过滤后的或集,并且和单条SELECT
语句一样,去除了重复的行 ORDER BY
排序子句只能放在最后一条查询语句之后,它将对整个结果集排序
select vend_id, prod_id, prod_price
from products
where prod_price <= 10
union [all] //all表示包含重复的行
select vend_id, prod_id, prod_price
from products
where vend_id in (100, 200)
order by vend_id, prod_price;
全文本搜索
全文本搜索具有性能上更快、查询结果能明确控制、查询结果智能化等优点,它返回以文本匹配的良好程度排序的数据。
MyISAM
引擎支持全文本搜索。
在建表时使用FULLTEXT(列名)
索引单个列或多个列,之后MySQL
将自动维护该索引。在增删改时,索引随之自动更新。
也可以在建表后指定索引,这种情况下所有已有数据必须立即索引。
select column1
from table_name
where match(column2) against('test');
传递给MATCH()
的值必须与FULLTEXT
定义中的相同。
如果指定了多个列,必须以相同的次序传递它们。
查询扩展
查询扩展对数据和索引进行两遍扫描来完成搜索。
返回结果不仅包含指定的词,还包含可能 “有用” 的词。
select column1
from table_name
where match(column2) against('test' with query expansion);
布尔文本搜索
即使没有FULLTEXT
索引也可以使用布尔方式,但这样非常缓慢。
布尔方式允许查询语句中提供如下细节:
- 要匹配的词
- 要排斥的词
- 排列提示(词的等级值)
- 表达式分组
- 其他
布尔操作符
操作符 | 说明 |
---|---|
+ | 包含,词必须存在 |
- | 排除,词必须不出现 |
> | 包含,而且增加等级值 |
< | 包含,而且减少等级值 |
() | 把词组成子表达式 |
~ | 取消一个词的排序值 |
* | 词尾的通配符 |
"" | 定义一个短语 |
//匹配test和down,增加前者的等级,降低后者的等级
select column1
from table_name
where match(column2) against('>test <down' in boolean mode);