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的商品信息

sql server的按指定分隔符 分割字符串_SQL语句


再查询出供应商1001和1002生产的商品信息

sql server的按指定分隔符 分割字符串_MySQL_02

4)使用组合查询

sql server的按指定分隔符 分割字符串_SQL语句_03

5)union关键字的去重功能

使用union关键字后,查询结果会将重复出现的结果去掉,这是union的默认行为。若要改变,则需要使用union all连接两个select语句。

6)对组合查询结果排序

sql server的按指定分隔符 分割字符串_搜索_04


分析:union语句中,只能使用一次order by语句。本条语句中,order by似乎是第二条select语句的组成部分,但是它却对整个组合查询的结果都进行排序操作。

全文本搜索

1.MySQL的两个引擎:InnoDB和MyISAM。其中仅MyISAM支持全文本搜索。
2.启动全文本搜素:一般在创建一个表时启用全文本搜索。

sql server的按指定分隔符 分割字符串_SQL语句_05


FULLTEXT对指定列进行索引,这里只对单列进行索引,也可以指定多个列进行索引。

3.使用全文本搜索

sql server的按指定分隔符 分割字符串_全文本搜索_06


1.使用match()函数对数据表中的列进行搜索,然后使用Against()函数指定索引文本。如:指定rabbit作为索引文本。

2.match()函数中的列必须与创建表中fulltext()中的列保持一致。若指定多个列时,必须列出他们且顺序保持一致。

3.全文本搜索不区分大小写,使用binary()函数可以区分大小写。

sql server的按指定分隔符 分割字符串_搜索_07

4.使用查询扩展

sql server的按指定分隔符 分割字符串_MySQL_08


sql server的按指定分隔符 分割字符串_MySQL_09


结果返回了七行。第一行包含词anvils。但第二行由于包含第一行中的词(customer和recommend)因此也被返回。

查询扩展就是增加了返回的行数。找出来与你输入的关键词有关的行数。

5.使用布尔文本搜索

sql server的按指定分隔符 分割字符串_全文本搜索_10


1.可以匹配到单词heavy的行,但不匹配以rope开头的行(包含ropes)。

2.布尔查询的性能很低,所花费的时间很长。

sql server的按指定分隔符 分割字符串_组合查询_11

6.注意事项

1.索引全文本时,3个及3个以下的短词会被忽略。
2.MySQL自带一个非用词列表,这些词在索引全文本时,会被忽略。如果有需要可以覆盖这个列表。
3.许多词出现的频率很高,搜索它们没有用处(返回太多的结果)。
因此,MySQL规定了一条50%规则,如果一个词出现在50%以上
的行中,则将它作为一个非用词忽略。50%规则不用于IN BOOLEAN
MODE。
4.忽略词中的单引号。例如,don’t索引为dont。
5.不具有词分隔符(包括日语和汉语)的语言不能恰当地返回全文
本搜索结果。