【0】README
0.1)本文部分文字描述转自“MySQL 必知必会”,旨在review“MySQL数据检索+查询+全文本搜索” 的基础知识;
【1】使用子查询
1)查询定义:任何sql 语句都是查询。但此术语一般指 select语句;SQL 还允许创建子查询,即嵌套在其他查询中的查询;
2)利用子查询进行过滤(where子句,in子句)


2.1)可以把一条select语句返回的结果用于另一条select语句的where子句;
3)作为计算字段使用子查询
3.1)使用子查询的另一种方式是创建计算字段:如需要显式供应商的订单总数和供应商的id和name;

Attention)显然, select id,name,(select count(*) from product p where p.vendor=v.id group by vendor) as my_count from vendor v;与其他的SQL不同,因为 where p.vendor=v.id group by vendor) as my_count from vendor v 子句 使用了完全限定名比较 内部表和外部表的id是否相等;

【2】联结表
1)主键+外键:
1.1)主键:能够唯一标识每一行数据;
1.2)外键:外键为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系;
2)创建联结:

3)笛卡尔积:由没有联结条件的表关系返回的结果为笛卡尔积。检索出的行的数目是第一个表中的行数乘以第二个表中的行数;
Attention)不要忘记where子句:应该保证所有联结都有where 子句,否则MySQL 将返回比想要的数据多得多的数据;
4)内部联结(=等值联结)
4.1)定义:目前为止使用的联结称为等值联结,它基于两个表之间的相等测试。这种联结也称为内部联结;
select v.id,v.name from product p, vendor v where p.vendor = v.id;
select v.id,v.name from product p inner join vendor v on p.vendor = v.id;

5)联结多个表

5.1)我们需要找出购买wang供应商的生产商品的客户id;
select customer_id from t_order o,product p,vendor v where o.prod_id=p.id and p.vendor = v.id and v.name='wang';



【3】创建高级联结
 for spec info,please visit  MySQL的自然联结+外部联结(左外连接,右外连接)+内部联结

【4】组合查询
1)MySQL允许执行多个查询(多条select),并将结果作为单个查询结果集返回。这些组合查询通常称为并(union)或复合查询;
2)有两种case,需要使用组合查询;
case1)在单个查询中从不同的表返回类似结构的数据;
case2)对单个表执行多个查询,按单个查询返回数据;
3)创建组合查询:可用union 操作符来组合数条SQL 查询;利用union, 可给出多条select 语句,将它们的结果组成成单个结果集;
4)使用union

5)使用union规则(rules)
r1)union必须由两条或两条以上的select 语句组成,语句之间用关键字 union分割;
r2)union 中的每个查询必须包含系统的列,表达式或聚集函数(不过各个列不需要以相同的次序给出);
r3)列数量类型必须兼容:类型不必完全相同,但必须是 DBMS可以隐含地转换的类型;
6)包含或取消重复的行
6.1)problem+solution:
problem)第一条select语句返回4行,第二条select语句返回3行,而在用union组合两条select语句后,只返回了6行而不是7行;原因是 union从查询结果集中自动去除了重复的行(在使用union时,重复的行被自动取消);
solution)如果想要返回所有匹配行,可以使用 union all 而不是 union;
7)对组合查询结果排序:在使用union 组合查询时,只能使用一条 order by 语句,它必须出现在最后一条select 语句之后。
Attention)使用union时,也可以使用不同的表进行组合;

【5】全文本搜索
1)只有 myisam 引擎支持全文本搜索;
2)为了进行全文本搜索,必须索引被搜索的列,而且要随着数据的改变不断地重新索引;
2.1)启用全文本搜索支持:一般在创建表时启用全文本搜索;create table 语句接收fulltext 子句,它给出被索引列的一个逗号分隔的列表;
看个荔枝)通过create演示fulltext子句的使用:

对以上代码的分析(Analysis):

A1)MySQL根据子句fulltext(note_text)的指示对它进行索引。这里的fulltext索引单个列,如果需要也可以索引多个列;
A2)在定义之后,MySQL自动维护该索引。在增加、更新或删除行时,索引随之自动更新;

Attention) 不要在导入数据时使用fulltext: 更新索引要花时间,虽然不是很多,但毕竟要花时间。如果正在导入数据到一个新表,此时不应该启用fulltext索引。应该首先导入所有数据,然后再修改表,定义 fulltext,这样有助于更快地导入数据;

2.2)进行全文本搜索:使用match()函数和against()函数质心全文本搜索,match()函数指定被搜索的列,而against()指定要使用的搜索表达式;
Attention)以下荔枝转自:http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/functions.html#fulltext-search
2.3)全文搜索带查询扩展

全文搜索支持查询扩展功能 (特别是其多变的“盲查询扩展功能” )。若搜索短语的长度过短, 那么用户则需要依靠全文搜索引擎通常缺乏的内隐知识进行查询。这时,查询扩展功能通常很有用。例如, 某位搜索 “database” 一词的用户,可能认为“MySQL”、“Oracle”、“DB2” and “RDBMS”均为符合 “databases”的项,因此都应被返回。这既为内隐知识。

在下列搜索短语后添加WITH QUERY EXPANSION,激活盲查询扩展功能(即通常所说的自动相关性反馈)。它将执行两次搜索,其中第二次搜索的搜索短语是同第一次搜索时找到的少数顶层文件连接的原始搜索短语。这样,假如这些文件中的一个 含有单词 “databases” 以及单词 “MySQL”, 则第二次搜索会寻找含有单词“MySQL” 的文件,即使这些文件不包含单词 “database”。下面的例子显示了这个不同之处:

2.4)布尔全文索引:利用IN BOOLEAN MODE修改程序, MySQL 也可以执行布尔全文搜索,提供关于如下内容的细节(Details)
D1)要匹配的词;
D2)要排斥的词;
D3)排列提示(某些词比其他词更重要,更重要的词等级更高);
D4)表达式分组;
关于全文本搜索的使用说明(specification)
s1)在索引全文本数据时,短词被忽略且从索引中排除。短词定义为那些具有3个或3个以下字符的词(如果需要,这个数字3可以修改);
s2)MySQL 带有一个内建的非用词列表,这些词在索引全文本数据时总是被忽略。如果需要,可以覆盖这个列表;
s3)许多词出现的频率很高,搜索它们没有用处,因此,MySQL规定了一条50%规则,如果一个词出现在 50% 以上的行中, 则将它作为一个非用词忽略,50%规则不用于 in boolean mode 中;
s4)如果表中的行数少于3行,则全文本搜索不返回结果(因为每个次或者不出现,或者至少出现在50%的行中);
s5)忽略词中的单引号,如,don't == dont;
s6)不具有词分隔符的语言(包括日文和中文)不能恰当地返回全文本搜索结果;
s7)仅在 MyISAM数据库引擎中支持全文本搜索;

MySQL数据检索+查询+全文本搜索相关推荐

  1. 数据库9:联结表 高级联结 组合查询 全文本搜索

    第十五章联结表 Sql最强大的功能之一就是能在数据检索查询的执行中联结(join)表.联结是利用sql的select能执行的最重要的操作,能很好的理解联结及其语法是学习sql的一个极为重要的组成部分. ...

  2. mysql 学习记录 全文本搜索

    第十八章 全文本搜索 mysql最常用的引擎是MYISAM和InnoDb,前者支持全文本搜索,后者不支持. 全文本搜索搜索速度更快,搜索条件更精确,搜索结果更智能化.使用like子句也可以完成,但全文 ...

  3. 《MySQL必知必会》学习笔记——组合查询、全文本搜索

    文章目录 第17章 组合查询 1. 创建组合查询 2. UNION规则 3. 包含或取消重复的行 4. 对组合查询结果排序 第18章 全文本搜索 1. 理解全文本搜索 2. 使用全文本搜索 2.1 启 ...

  4. MySql学习之组合查询(UNION)和全文本搜索(Match()和Against())

    组合查询 一.何为组合查询? 组合查询的目的就是利用UNION操作符将多条SELECT语句的查询结果组合成一个结果集,供我们使用. 有两种基本情况下需要使用组合查询: 1.在单个查询中从不同的表返回类 ...

  5. MySQL(十)操纵表及全文本搜索

    一.创建表 MySQL不仅用于表数据操作,还可以用来执行数据库和表的所有操作,包括表本身的创建和处理. 创建表一般有如下两种方式: ①使用具有交互式创建和管理表的工具: ②直接使用MySQL语句操纵表 ...

  6. 快速回顾 MySQL:全文本搜索

    前提要述:参考书籍<MySQL必知必会> 文章目录 14.1 全文本搜索 14.1.1 启动全文本搜索 14.1.2 使用全文本搜索 14.1.3 使用查询扩展 14.1.4 使用布尔查询 ...

  7. mysql全文本搜索

    前言 1️⃣ :mysql环境准备 2️⃣ :简单的表查询 3️⃣ :通配符+正则表达式 4️⃣ :mysql函数与分组 5️⃣ :子查询_联结查询_组合查询 第一部分:我们准备环境:安装数据库+创建 ...

  8. MySQL学习笔记:全文本搜索

    本文为本人学习书籍<MySQL必知必会>笔记系列,欢迎持续关注,有问题随时留言评论,一起探讨学习~ 18 全文本搜索 并非所有搜索引擎都支持全文搜索.最常用的两个搜索引擎MyISAM(支持 ...

  9. 如何使用MySQL的全文本搜索功能

    全本文搜索 1.全文本搜索 1.1理解全文本搜索 2.使用全文搜索 2.1启用全文本搜索支持 2.2进行全文本搜索 2.3使用查询扩展 2.4布尔文本搜索 2.5全文搜索的使用说明 1.全文本搜索 1 ...

最新文章

  1. 写了一个好玩的小软件, 监视鼠标以及键盘的动作, 全局钩子. HowTired
  2. java注解定义时间格式_SpringBoot基础教程2-1-8 数据验证-自定义日期格式验证
  3. HDU2066:一个人的旅行
  4. Java 文件 IO 操作
  5. 用项目案例彻底理解Spring IOC容器
  6. MaskFusion:惊艳的结合实例感知、语义分割、动态追踪的SLAM系统
  7. mysql运维命令_运维常用 MySQL 命令
  8. python100个内置函数详解_Python 63个内置函数详解
  9. 淘宝店铺装修全屏海报代码怎么用的设置方法
  10. Linux中ping脚本
  11. 如何绘制抽奖转盘html,利用canvas实现抽奖转盘
  12. Harbor启动访问502错误
  13. 离职通知邮件主题写什么好_辞职邮件怎么写,需要包含哪些内容
  14. CTF ics-04
  15. 送给天天对着电脑或者已经脖子痛的朋友,超实用颈椎保养法
  16. vue2理论学习(全套教程,包含vuex、路由等)
  17. 免安装Android Studio使用adb连接手机设备或模拟机进行真机调试
  18. ubuntu 9.10下的网络电视sopcast的安装及消除播放杂音
  19. vue.js提示框插件(vuejs-dialog)使用指南
  20. mysql商品表_(三)购物商城数据库设计-商品表DDL(Mysql)

热门文章

  1. Codeforces Global Round 14 F. Phoenix and Earthquake 思维 + 并查集
  2. Codeforces Round #732 (Div. 1Div. 2)
  3. 2020牛客国庆集训派对day2 AKU NEGARAKU
  4. CF914G Sum the Fibonacci(FWT模板+子集卷积)
  5. CodeForces:1103(div1)1104(div2)
  6. YBTOJ:圈套问题(分治法、鸽笼原理)
  7. 不止代码:恐狼后卫(ybtoj-区间dp)
  8. P1758-[NOI2009]管道取珠【dp】
  9. P5305-[GXOI/GZOI2019]旧词【树链剖分,线段树】
  10. 2725. [Violet 6]故乡的梦(删边最短路同[TJOI2012]桥)