一、组合查询(union)指执行多个查询并将结果作为单个查询结果集返回。
使用union的规则:1.两条或两条以上的select语句;2.每个select语句必须包含相同的列,表达式或聚集函数;3.这些列可以以不同的次序出现;4.列的数据必须兼容。
SELECT vend_id,prod_id,prod_price from products where prod_price<=5
UNION
SELECT vend_id,prod_id,prod_price from products where prod_id in (1001,1002);
UNION 会自动去除掉重复的行。如果使用UNION ALL则不会去除掉重复的行;若需要排序,只需要在最后一条语句加上order by即可。
二、全文本搜索:MySQL最常用的两个引擎,MyISAM和InnoDB,其中MyISAM支持全文本搜索,InnoDB不支持全文本搜索。全文本搜索相对于like和_通配符以及正则匹配有三大优势:性能,明确控制,智能化结果。
全文本语句表达式如下,使用Match()指定被搜索的列,使用Against()指定要使用的搜索表达式。搜索时不区分大小写。
SELECT note_text FROM productnotes WHERE Match(note_text) Against('rabbit');
全文本搜索一个重要的部分就是对结果进行排序,具有较高等级的先返回。
SELECT note_text,Match(note_text) Against('rabbit') as rank_1 FROM productnotes;
三、布尔全文本搜索可以提供关于细节:要匹配的词;要排斥的词;排列提示(指定某些词比其他词更重要);表达式分组等。
操作符如图:
以下语句匹配包含heavy但不包任意以rope开始的词的行:
SELECT note_text FROM productnotes where Match(note_text) Against ('heavy -rope' IN BOOLEAN MODE);
全文本搜的说明:
短词(3个或3个一下字符的词)被搜索忽略;
如果一个词出现在50%的行中,则将他作为一个非用词忽略;
对于少于3行的表将不会返回结果;
忽略单词中的单引号(don't变为dont);
仅在MyISAM数据库引擎中支持全文本搜索。
----------------end--------------------