MySQL数据检索+查询+全文本搜索

【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数据库引擎中支持全文本搜索;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/331191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

selenium自动化测试_49自动化测试中最常见的Selenium异常

selenium自动化测试开发人员将始终在编写代码时牢记不同的场景,但是在某些情况下,实现可能无法按预期工作。 相同的原则也适用于测试代码,该代码主要用于测试现有产品的功能,发现bug并确保产品100%不受bug影响。 正确…

MySQL的CRUD操作+使用视图

【0】README0.1)本文部分文字描述转自“MySQL 必知必会”,旨在review“MySQL数据检索查询全文本搜索” 的基础知识;【1】插入数据1)insert是用来插入(或添加)行到数据库表的。插入可以用以下几种方式使用&a…

mega x_[MEGA DEAL] 2020年完整的Java Master Class Bundle(96%)

mega x通过超过62个小时的培训来掌握最流行的编程语言,从而树立信誉良好的开发人员职业 嘿,怪胎, 这一周,我们JCG促销专区 ,我们有另一个极端的报价 。我们正在提供一个巨大的96%off的完整2020 Python编程…

tomcat(11)org.apache.catalina.core.StandardWrapper源码剖析

【0】README0.0)本文部分文字描述转自 “how tomcat works”,旨在学习 “tomcat(11)StandardWrapper源码剖析” 的基础知识;0.1)StandardWrapper 是 Catalina中对Wrapper接口的标准实现;要知道,tomcat 中有…

lambda表达式语法_使用类似Lambda的语法作为Java中的表达式进行切换

lambda表达式语法从Java 14开始, switch表达式具有其他Lambda式 ( case ... -> labels )语法,它不仅可以用作语句,还可以用作计算为单个值的表达式。 对于新的类似Lambda的语法,如果标签匹配&#xff0…

装饰器模式(讲解+应用)

转载自 设计模式(5)装饰器模式(讲解应用)目录 装饰器模式为什么使用装饰器模式应用实例 装饰器模式 看到装饰器是在看《Thinking in Java》一书的时候,看到文件读写那边的时候,有提到装饰器模式&#xff0c…

quarkus_使用Quarkus调试容器中的系统测试(视频)

quarkus如果您能够借助容器在本地进行端到端测试应用程序,则可以提高开发效率。 在下面的视频中,我将展示如何使用Quarkus在Docker容器中调试本地系统测试。 这是我关于有效测试的视频课程的Quarkus扩展。 要全面了解,还可以查看以下资源&a…

MySQL事务管理+安全管理+MySQL数据类型

【0】README0.1)本文部分文字描述转自“MySQL 必知必会”,旨在review“MySQL事务管理安全管理MySQL数据类型” 的基础知识;【1】管理事务处理【1.1】事务处理1)并非所有引擎都支持事务管理,MyISAM 不支持,而…

超音速 启动_从根本上讲超音速亚原子Enterprise Java

超音速 启动我创建了一个视频,其中我用Quarkus解释了“超音速亚原子Java”,这是现代Java应用程序的运行时。 无论您是刚开始涉足Enterprise Java领域,还是已经是一位经验丰富的Java EE / J2EE开发人员,本课程都将指导您如何在2020…

利用java求积分(定积分和无穷限积分)

【0】README0.1)本文部分文字描述转自或译自 https://en.wikipedia.org/wiki/Simpson%27s_rule和 https://en.wikipedia.org/wiki/Numerical_integration#Methods_for_one-dimensional_integrals;旨在利用java求积分;(定积分和无穷…

Java的三种代理模式

转载自 Java的三种代理模式1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.这里使用到编程中的一个思想:不要随意去修改别人已经写好的…

后台审核管理 ergo_Kogito,ergo规则:从知识到服务,轻松自如

后台审核管理 ergo欢迎阅读有关Kogito倡议的博客系列的另一集,以及我们将Drools带入云的努力。 这些文章的目的是收集用户对我们提供给Kogito的功能的早期反馈。 在本文中,我们介绍了两种实现完整智能服务的新方法 : 独立的规则服务 集成智…

java转换文本文件到xlsx(自制缓冲区,无需先验文件行数)

【0】README0.1)本文代码利用了 Apache POI 框架 建立 java 到 xlsx 代码的联系;0.2)本文自制缓冲区从文本文件中读取数据读取,无需先验文件行数;0.3)本文通过缓冲区大小创建数组,数组容量自动增…

spring react_使用Spring WebFlux构建React性REST API –第3部分

spring react在上一篇文章的续篇中,我们将看到一个应用程序以公开React性REST API。 在此应用程序中,我们使用了 带有WebFlux的Spring Boot 具有响应式支持的Cassandra的Spring数据 卡桑德拉数据库 下面是应用程序的高级体系结构。 让我们看一下bui…

tomcat(12)org.apache.catalina.core.StandardContext源码剖析

【0】README0)本文部分文字描述转自 “how tomcat works”,旨在学习 “tomcat(12)StandardContext源码剖析” 的基础知识;1)Context实例表示一个具体的web 应用程序,其中包含一个或多个Wrapper实例,每个Wra…

jms面试题_最新的20多个JMS面试问答(2020)

jms面试题快速浏览JMS(Java消息服务)常见问题面试问题和答案。 2020年以来的最新问题已添加到列表中。 1.简介 在本教程中,我们将了解2020年经常问到的JMS面试问题。作为面试的一部分,如果您有6年以上的经验,就有机会…

tomcat(13)Host和Engine容器

【0】README0.1)本文部分文字描述转自 “how tomcat works”,旨在学习 “tomcat(13)Host和Engine容器” 的基础知识;0.2)Host容器:若你想在同一个tomcat部署 上运行多个Context 容器的话,就需要使用 Host 容…

spring react_使用Spring WebFlux构建React性REST API –第2部分

spring react在上一篇文章的续篇中,我们将看到React式流规范及其实现之一,称为Project Reactor 。 React流规范定义了以下接口。 让我们看看这些接口的细节。 发布者→发布者是潜在数量不受限制的序列元素的提供者,可按其订阅者的要求发布它…

tomcat(14)服务器组件和服务组件

【0】README0.1)本文部分文字描述转自 “how tomcat works”,旨在学习 “tomcat(14)服务器组件和服务组件” 的基础知识;0.2)for complete source code ,please visit https://github.com/pacosonTang/HowTomcatWorks/tree/maste…

组合模式的安全模式与透明模式

转载自 树形结构的处理——组合模式(四) 1 透明组合模式与安全组合模式 通过引入组合模式,Sunny公司设计的杀毒软件具有良好的可扩展性,在增加新的文件类型时,无须修改现有类库代码,只需增加一个新的文件类…