《MySQL必知必会》——组合查询

组合查询

MySQL允许执行多个查询,并将结果作为单个查询结果集返回,这些组合查询通常称为并获复合查询。

有两种基本情况,需要使用组合查询:

  • 在单个查询中从不同的表返回类似结构的数据
  • 对单个表执行多个查询,按单个查询返回数据

使用UNION关键字来组合多个查询,将它们的结果组成单个结果集。

规则:

  • UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔

  • 每个查询必须包含相同的列、表达式或聚集函数

  • 列数据类型必须兼容:类型不必完全相同,但必须时DBMS可以隐含转换的类型。

    SELECT id, price FROM products WHERE price <=5
    UNION 
    SELECT id, price FROM products WHERE id IN     (1001,1002)
    

UNION从查询结果集中自动去除了重复的行。如果想返回所有的行,可使用UNION ALL。

对组合查询结果排序使用ORDER BY子句。
对于结果集不存在用一种方式排序一部分,而又用另一种方式排序另一部分的情况,因此不允许使用多条ORDER BY子句。

全文本搜索

MyISAM支持全文本搜索,InnoDB不支持全文本搜索。

一般在创建表的时候启动全文本搜索。CREATE TABLE语句接受FULLTEXT子句,它给出被索引列的列表,在定义之后,MySQL自动维护该索引,在增加、更新或删除时,索引也随之更新。

在创建索引之后,使用两个函数Match()和Against()执行全文本搜索,Match()指定被搜索的列,Against()指定要使用的搜索表达式。

SELECT note_text FROM products WHERE Match(note_text) Against ('rabbit');

除非使用BINARY方式,否则全文本搜索不区分大小写。

全文本搜索会对结果进行排序,具有较高等级的行先返回。如果指定多个搜索项,则包含多数匹配词的那些行将比具有必包含较少词的行等级高,

全文本搜索提供列简单LIKE搜索不能提供的功能,而且由于数据时索引的,所以全文本搜索还相当快,

使用查询扩展

查询扩展用来设法放宽所返回的全文本搜索结果的返回。在使用查询扩展时,MySQL对数据和索引进行两遍扫描来完成搜索:

首先,进行一个基本的全文本搜索,找出与搜索条件匹配的所有行;

其次,MySQL检查这些匹配行并选择所有游泳的词

最后,MySQL再次进行全文本搜索,这次不仅使用原来的条件,而且还使用所有有用的词。

布尔搜索

MySQL支持全文本搜索的另一种形式称为布尔方式。
但是这种全文本搜索方式的操作非常缓慢,其性能将随着数据了的增加而降低。

在布尔方式中,不按等级值降序排序返回的行。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值