MYSQL 组合查询&全文本搜索

组合查询&全文本搜索

组合查询

创建组合查询

组合查询很简单易懂,主要使用 UNION 关键词

理论上组合查询与多个WHERE条件完成的问题相同,但在复杂的查询语句中使用,会让我们轻松很多;

例: 我们想要知道年龄小于20岁的和名字叫做zhangsan,lisi的所有行的信息。
我们先分开来写
SELECT * FROM ms WHERE age < 20;
SELECT * FROM ms WHERE name IN ('zhangsan','lisi');

这是我们可以使用组合查询来合并两条语句
SELECT * FROM ms WHERE age < 20
UNION
SELECT * FROM ms WHERE name IN ('zhangsan','lisi');

当然我们也可以使用多个WHERE条件完成
SELECT * 
FROM ms 
WHERE age < 20
OR name IN ('zhangsan','lisi');

注:我们使用组合查询是它会自动合并重复列,如果我们不想取消重复列我们可以使用关键词UNION ALL 来代替 UNION。

SELECT * FROM ms WHERE age < 20
UNION ALL
SELECT * FROM ms WHERE name IN ('zhangsan','lisi');

注: 当我们要对组合查询结果排序时我们只能使用一条ORDER BY 子句且必须放在最后一个查询语句的后边。

SELECT * FROM ms WHERE age < 20
UNION ALL
SELECT * FROM ms WHERE name IN ('zhangsan','lisi') 
ORDER BY age;

全文本搜索

1.启用全文本搜索支持

启用全文本搜索支持需要在创建表的时候对所要启用的列进行使用FULLTEXT子句

CREATE TABLE productnotes
(
    note_id int NOT NULL AUTO_INCREMENT,
    prod_id char(10) NOT NULL,
    note_text text NULL,
    PRIMARY KEY(note_id),
    FULLTEXT(note_text)
)ENGINE=MyISAM;

2.进行全文本搜索

进行全文本搜素需要用到两个函数Match()和Against()执行全文本搜索,其中Mathch()指定被搜索的列,Against()指定要使用的搜索表达式。

SELECT note_text
FROM productnotes
WHERE Match(note_text) Against('double');

3.查询扩展

SELECT note_text
FROM productnotes
WHERE Match(note_text) Against('double' WITH QUERY EXPANSION);

扩展查询可以返回包含'double'字符串的串,并扩展与包含'double'串含有相同单词的串。

4.布尔文本搜索

SELECT note_text
FROM productnotes
WHERE Match(note_text) Against('double' IN BOOLEAN MODE);
布尔文本搜索可以使用布尔操作符
例:
SELECT note_text
FROM productnotes
WHERE Match(note_text) Against('double -int*' IN BOOLEAN MODE);
这段代码的意思是返回包含'double'但不包含以'int'开头的词,的串

全文本布尔操作符

布尔操作符 说明
+ 包含,词必须存在
- 排除,次必须不出现
> 包含,而且增加等级值
< 包含,而且减少等级值
() 把词组成子表达式
~ 取消一个词的排序值
* 词尾的通配符
“” 定义一个短句
发布了28 篇原创文章 · 获赞 1 · 访问量 583

猜你喜欢

转载自blog.csdn.net/qq_41911729/article/details/104451738
今日推荐