SQL语句进阶学习三
- 组合查询
- 1)组合查询:执行多个查询并将结果作为单个查询结果集返回。
- 2)union的使用
- 3)使用两次单个查询
- 4)使用组合查询
- 5)union关键字的去重功能
- 6)对组合查询结果排序
- 全文本搜索
- 1.MySQL的两个引擎:InnoDB和MyISAM。其中仅MyISAM支持全文本搜索。
- 2.启动全文本搜素:一般在创建一个表时启用全文本搜索。
- 3.使用全文本搜索
- 4.使用查询扩展
- 5.使用布尔文本搜索
- 6.注意事项
组合查询
1)组合查询:执行多个查询并将结果作为单个查询结果集返回。
2)union的使用
要求:查询出价格小于等于5的商品而且还想要包括供应商1001和1002生产的商品(不考虑价格)
3)使用两次单个查询
先查询出价格小于等于5的商品信息
再查询出供应商1001和1002生产的商品信息
4)使用组合查询
5)union关键字的去重功能
使用union关键字后,查询结果会将重复出现的结果去掉,这是union的默认行为。若要改变,则需要使用union all连接两个select语句。
6)对组合查询结果排序
分析:union语句中,只能使用一次order by语句。本条语句中,order by似乎是第二条select语句的组成部分,但是它却对整个组合查询的结果都进行排序操作。
全文本搜索
1.MySQL的两个引擎:InnoDB和MyISAM。其中仅MyISAM支持全文本搜索。
2.启动全文本搜素:一般在创建一个表时启用全文本搜索。
FULLTEXT对指定列进行索引,这里只对单列进行索引,也可以指定多个列进行索引。
3.使用全文本搜索
1.使用match()函数对数据表中的列进行搜索,然后使用Against()函数指定索引文本。如:指定rabbit作为索引文本。
2.match()函数中的列必须与创建表中fulltext()中的列保持一致。若指定多个列时,必须列出他们且顺序保持一致。
3.全文本搜索不区分大小写,使用binary()函数可以区分大小写。
4.使用查询扩展
结果返回了七行。第一行包含词anvils。但第二行由于包含第一行中的词(customer和recommend)因此也被返回。
查询扩展就是增加了返回的行数。找出来与你输入的关键词有关的行数。
5.使用布尔文本搜索
1.可以匹配到单词heavy的行,但不匹配以rope开头的行(包含ropes)。
2.布尔查询的性能很低,所花费的时间很长。
6.注意事项
1.索引全文本时,3个及3个以下的短词会被忽略。
2.MySQL自带一个非用词列表,这些词在索引全文本时,会被忽略。如果有需要可以覆盖这个列表。
3.许多词出现的频率很高,搜索它们没有用处(返回太多的结果)。
因此,MySQL规定了一条50%规则,如果一个词出现在50%以上
的行中,则将它作为一个非用词忽略。50%规则不用于IN BOOLEAN
MODE。
4.忽略词中的单引号。例如,don’t索引为dont。
5.不具有词分隔符(包括日语和汉语)的语言不能恰当地返回全文
本搜索结果。