MySQL必知必会

1.SQL(像多数语言一样)在处理OR操作符前,优先处理AND操
作符。

建议:在WHERE子句中使用圆括号

任何时候使用具有AND和OR操作
符的WHERE子句,都应该使用圆括号明确地分组操作符。不要
过分依赖默认计算次序,即使它确实是你想要的东西也是如
此。使用圆括号没有什么坏处,它能消除歧义。

2.

正则表达式字符后面的?表示0个或一个匹配,+表示1个或多个匹配,*表示0个或多个匹配。

3.

[[:<:]] 词的开始)

[[:>:]](词的结尾)

e.g.

[[:<:]]anv会匹配有anv开头的单词的字符串,vil[[:>:]]会匹配vil结尾的单词的字符串。

4.

Contat()函数(拼接字符串)

TRim()函数(去掉字符串两边的空格)

RTrim()函数(去掉右边的空格)

LTrim()函数(去掉左边的空格)

Left()函数

返回左边子串

e.g.

SELECT LEFT('foobarbar', 5); 返回 'fooba'

Locate()函数

LOCATE(substr,str):返回substr在字符串str 的第一个出现的位置

LOCATE(substr,str,pos):返回子符串 substr 在字符串str,从pos处开始的第一次出现的位置。

如果substr 不在str 中,则返回值为0

Soundex()函数(

保留字符串的首字母,但删除元音字母(a、e、h、i、o、u)和w、y,所有不在A-Z范围之内的国际字母符号被视为元音字母。 一个标准的soundex字符串的长度为4个字符,然而soundex()函数会返回一个人以长度的字符串

将数字赋予剩下的字母如下:
1. b, f, p, v
2. c, g, j, k, q, s, x, z
3. d, t
4. l
5. m, n
6. r

e.g. select soundex('Quadratically');     的结果是 'Q36324'
        select soundex('user');                   的结果是 'U260'
        select soundex('中华人名共和国');     的结果是 '中000'

5.

  DISTINCT可以与COUNT配合使用

  DISTINCT不能用于COUNT(*),因此不允许使用COUNT( DISTINCT),
否则会产生错误

e.g.

在统计不重复的记录的时候能用到,比如SELECT COUNT( DISTINCT id ) FROM tablename;就是计算talbebname表中id不同的记录有多少条。

SELECT COUNT( DISTINCT * ) FROM tablename;会产生错误。

6.

HAVING和WHERE的差别

WHERE:行级过滤

HAVING:组级过滤

 

这里有另一种理解方法,WHERE在数据
分组前进行过滤, HAVING在数据分组后进行过滤。这是一个重
要的区别, WHERE排除的行不包括在分组中。这可能会改变计
算值,从而影响HAVING子句中基于这些值过滤掉的分组。

 

作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组。
WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行。因此,WHERE 子句不能包含聚集函数; 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。 相反,HAVING 子句总是包含聚集函数。(严格说来,你可以写不使用聚集的 HAVING 子句, 但这样做只是白费劲。同样的条件可以更有效地用于 WHERE 阶段。)
在前面的例子里,我们可以在 WHERE 里应用城市名称限制,因为它不需要聚集。 这样比在 HAVING 里增加限制更加高效,因为我们避免了为那些未通过 WHERE 检查的行进行分组和聚集计算。

7.

子查询

虽然子查询一般与IN操作符结合使用,但也可以用于测试等于( =)、
不等于( <>)等。

8.

内部联接:INNER JOIN

外部联接:OUTER JOIN

 

posted @ 2016-06-01 22:44  Wcy100  阅读(394)  评论(0编辑  收藏  举报