学习mysql小结

来源:互联网 发布:js设置超链接不可点击 编辑:程序博客网 时间:2024/05/01 05:49

-检索数据:

select语句(必加分号来结束SQL语句,空格都被忽略)

distinct返回不同的值(唯一的),直接放在列名的前面,应用于所有列,不仅是前置它的列;

limit子句(限制结果),例子:limit 3,4同limit 4 offset 3,指示Mysql返回为以3为开始检索的行号,4为共要检索的行数

 
排序检索数据
-order by子句(按多个列排序),取一个或多个列的名字,据此对输出进行排序。
order by和limit的组合,能找出一个列中最高或最低的值,其中order by位于from子句之后,limit必位于order by之后
-ASC(升序,为默认的)、dese(降序)
 
过滤数据
-where 检查单个值(order by位于where之后),单引号用来限定字符串;
-between 范围值检查
-IS null 空值检查,例:select prod_name from products where prod_price is null;
-数据过滤
AND、OR、IN(指定条件范围,范围中的每个条件都可以进行匹配)、NOT(否定它之后所跟的任何条件),其中语句OR、IN有相同的功能,但是IN可包含其他select语句。

-用通配符进行过滤
为在搜索子句中使用通配符,必须操作符使用LIKE;
“%”表示任何字符出现任意次数;
“_”只匹配单个字符而不是多个字符
技巧:1、不要过度使用通配符
      2、在确实需要使用时用,不要用于开始处
      3、仔细注意通配符的位置
-正则表达式
1、regexp;两个串之一,使用|(类似OR);[]、[0-9]
2、为了匹配特殊字符,比用\\-表查找-,\\.表查找.
3、\\也用来引用元字符
4、LIKE、 REGEXP的不同之处在于,LIKE匹配整个串而REGEXP匹配子串。利用定位符,通过用^开始每个表达式,用$结束每个表达式,可以使REGEXP的作用与LIKE一样。
-计算字段:并不是实际存在于数据库中,是运行时在SELECT语句内创建的。
-别名(alias)是一个字段或值的替换名,用AS关键字赋予。
-聚集函数(aggregate function)运行在行组上,计算和返回单个值的函数。
   函数          说明
   AVG()       返回某列的平均值
   COUNT()     返回某列的行数
   MAX()       返回某列的最大值
   SUM()       返回指定列的和
-数据分组(WHERE)、创建分组(GROUP BY)、过滤分组(HAVING,它支持所有的WHERE操作符)
1、HAVING和WHERE的差别:HAVING在数据分组后进行过滤,WHERE在数据分组前进行过滤。WHERE排除的行不包括在分组中。
2、ORDER BY和GROUP BY差别
ORDER BY                 GROUP BY
排序产生的输出               分组行。但输出可能不是分组的顺序
任意列都可以使用             只可能使用选择列或表达式列,而且必须使用每个选择列表达式
不一定需要                   如果与聚集函数一起使用列,则必须使用
逐渐增加子查询来建立查询
用子查询测试和调试查询很有技巧性,特别是在这些语句的复杂性不断增加的情况下更是如此。用子查询建立(和测试)查询的最可靠地方法是逐渐进行,这与MySQL处理它们呢的方法非常相同。首先,建立和测试最内层的查询。然后,用硬编码数据建立和测试外层查询,并且仅在确认它正常后才嵌入子查询。这时,再次测试它。对于要增加的每个查询,重复这些步骤。这样做仅给构造查询增加了一点点时间,但节约了以后的大量时间,并且极大地提高了查询一开始就正常工作的可能性。

联结
关系表:保证把信息分解成多个表,一类数据一个表。各表通过某些常用的值互相关联。
外键(foreign key):为某个表中的一列,包含另一个表的主键值,定义了两个表之间的关系。
关系数据库的可伸缩性比非关系数据库的好。
可伸缩性(scale):能够适应不断增加的工作量而不失败。
联结是一种机制,用来在一条SELECT语句中关联表,因此称之为联结。联结不是物理实体。它在实际的数据库表中不存在,联结由MyAQL根据需要建立,它在于查询的执行当中。
联结的创建,规定要联结的所有表以及它们如何联结即可。

 

需要用组合查询
-1、在单个查询中从不同的表返回类似结构的数据
-2、对单个表执行多个查询,按单个查询返回数据
任何具有多个WHERE子句的SELECT语句都可以作为一个组合查询给出
用UNION操作符来组合数条SQL查询
-笛卡尔积(cartesian product):由没有联结条件的表关系返回的结果为笛卡尔积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。
-在联结两个表时,你实际上做的是将第一个表中的每一行与第二个表中的每一行配对。WHERE子句作为过滤条件,它只包含那些匹配给定条件(这里是联结条件)的行。
创建高级联结
1、使用表别名的好处
-缩短SQL语句
-允许在单条SELECT语句中多次使用相同的表
注意:表的别名只在查询执行中使用,与列别名不一样,表别名不返回到客户机。

2、使用不同类型的联结
-自联结;作为外部语句用来替代从相同表中检索数据时使用的子查询语句。
-自然联结:排除多次出现,使每个列只返回一次。
-外部联结:分为左外部联结和右外部联结。

3、使用带聚集函数(用来汇总数据)的联结

4、汇总关于联结及其使用的某些要点
-注意所使用的联结类型(一般用内部联结,但外部联结也有效)。
-保证使用正确的联结条件
-应该总是提供联结条件,否则会得出笛卡尔积
-一个联结中可包含多个表,甚至对于每个联结可以采用不同的联结类型。
 
组合查询
-UNION的使用:给出每条SELECT语句,在各条语句之间放上关键字UNION.
-UNION从查询结果集中自动去除了重复的行,想返回所有匹配行,可使用UNION ALL而不是UNION
 
全文本搜索
1、启动全文本搜索支持
-一般在创建表时启动全文本搜索
-不要在导入数据时使用FULLTEXT
2、进行全文本搜索
-在索引之后,使用两个函数Match()和Against()执行全文本搜索,其中Match()指定被搜索的列,Against()指定要使用的搜索表达式。
-使用完整的Match()说明:传递给Match()的值必须与FULLTEXT()中的相同。如果指定多个列,则必须列出它们(而且次序正确)。
-排序多个搜索项(AS rank):如果指定多个搜索项,则包含多数匹配词的那些行将具有比包含较少词(或仅有一个匹配)的那些行高的等级值。
3、使用查询扩展
-在使用查询扩展时,MySQL对数据和索引进行两遍扫描来完成搜索:首先,进行一个基本的全文本搜索,找出与搜索条件匹配的所有行;其次,MySQL检查这些匹配行并选择所有有用的词;最后,MySQL再次进行全文本搜索,这次不仅使用原来的条件,而且还使用所有有用的词。
4、布尔文本搜索
-以布尔的方式,可以提供关于如下内容的细节:要匹配的词、要排斥的词、排列提示、表达式分组、另外一些内容
-布尔方式不同于其他全文本搜索语法的地方在于,即使没有定义FULLTEXT索引,也可以使用它。
5、全文本搜索的使用说明
-在索引全文本数据时,短词被忽略且从索引中排除。
-MySQL带有一个内建的非用词(stopword)列表,这些词的索引全文本数据时总是被忽略。
-MYSQL规定了一条50%规则,如果一个词出现在50%以上的行中,则将它作为一个非用词忽略。
-如果表中的行数少于3行,则全文本搜索不返回结果。
-忽略词中的单引号。
-不具有词分隔符的语言不能恰当地返回全文本搜索结果。
-仅在MYSQL数据库引擎中支持全文本搜索。