SQL语句介绍(3)

来源:互联网 发布:策略设计模式 java 编辑:程序博客网 时间:2024/06/06 04:29

20.子查询:可以在SELECT中嵌套SELECT语句,对于嵌套语句,应该每测试一次子查询语句的正确性后在嵌套进去。


21.外键是某个表中的一列,它包含另一个表的主键。


22.表的划分一定要简洁,清晰,信息不要重复冗长。


23.SELECT可以从多个表中同时筛选数据并返回,并用WHERE语句提供表之间的联结条件


24.内部联结也称为等值联结,用两个表之间值是否相等来进行测试。用法:table1 INNER JOIN table2 ON 条件。


25.联结表对性能有影响,联结的表越多性能越差。


26.别名的使用:简化操作,便于显示,便于重复使用,容易理解。


27.如果两条SELECT语句都是在同一个表中进行查询,则可以使用自联结,就是把两条语句合并成一条SELECT语句,并且对同一个表分别赋别名去使用。


28.外部联结:在联结表中一般一个表中的行会和另一个表中的行相关联,但若一个表中的某些行并没有和另一个联结表中的相应行联结,但是你又要通过联结条件来显示该表中的所有行,这时候你就应该使用外部联结: 表1 LEFT OUTER JOIN 表2 ON 条件    或者     表1 RITHG OUTER JOIN 表2 ON 条件,  前者显示表1的所有行,后者显示表2的所有行。


29.使用UNION语句可以联结多条SELECT语句,并作为单个查询结果返回,但应该注意,每个SELECT语句的返回的列应该是相同的。

UNION默认自动去除重复的行,如果不想自动去除重复的行,可以使用UNION ALL。

虽说UNION组合查询语句在很多情况下和多条子句的WHERE 语句可以实现相同的功能,但是WHERE不能返回重复的行,但是UNION ALL 却可以。

UNION组合查询只能通过一条ORDER BY 语句进行排序,且放在最后一条SELECT语句后面。


30.MySQL中的InnoDB类型表不支持全文搜索,而MyISAN类型表支持全文搜索,并且若想让表的引擎改为MyISAM应在创建表的语句的最后加上 ENGINE=MyISAM。注意:刚才我上网查询以后发现现在即使是InnoDB类型的表也支持全文搜索了。

全文本搜索是在搜索之前指定了各个词的索引,所以在查询的时候速度更快。

FULLTEXT(列名)对某列使用全文搜索,这是在创建表的时候使用的语句,也可以在创建表之后指定FULLTEXT

不要在导入数据到一个表的时候启用全文搜索,应该在导入数据后修改表定义全文搜索,这样效率更高。

Match(列名) Against(搜索文本) 注意:该搜索文本中可以包含多个词,但是只要某个行中只要有其中一个值就会被返回全文搜索的格式

全文搜索会对结果进行排序,具有较高等级的行先返回,符合以下条件的行具有较高条件:搜索的文本在该行的前面,包含多数匹配词的行,需要匹配的值离得近

扩展查询:在查询文本后加上 WITH QUERY EXPANSION

布尔文本搜索:没有定义FULLTEXT索引也可以使用(但是这样的话操作会非常缓慢),使用布尔搜索可以实现更多更加精细的对搜索结果的控制,以下图片是布尔查询的一些操作符。用法:在搜索文本后面加上 IN BOOLEAN MODE.  个人认为 (),“”,* 这3个符号应该掌握。 


索引文本中3个或者3个以下字符的词被忽略

MySQL带有一个内建的非用词列表,这些词在索引全文本数据时总是被忽略

如果一个词出现在50%以上的行中,则被忽略,但在IN BOOLEAN MODE 中不被忽略

如果表中的行数少于3行,则全文搜索不返回结果

忽略词中的单引号。

0 0