2018.1.25
一、主键的最好习惯:
1.不更新主键列中的值
2.不重用主键列的值
3.不在主键列中使用可能会更改的值。
二、不能部分使用DISTINCT
DISTINCT关键字应用于所有列而不仅仅是前置它的列。如果给出SELECT DISTINCT xx,yy,除非指定的两个列都不同,否则所有行都将被检索出来。
三、ORDER BY字句的位置
在给出ORDER BY字句时,应该保证它位于FROM字句后,如果使用LIMIT,它必须位于ORDER BY之后。
ORDER BY xx DESC表示按降序排列
四、在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后
1.WHERE XX BETWEEN 5 AND 10;
BETWEEN匹配范围中的所有值,包括指定的开始值和结束值。
2.WHERE XX IS NULL;
检查具有NULL值的列。
3.在WHERE子句中使用圆括号
在任何时候使用具有AND 和OR 操作符的WHERE子句,都应该使用圆括号明确分组操作符。不要过分依赖默认计算次序
例:WHERE (XX = 1000 OR XX = 1001) AND XX >=10;
4.使用IN操作符:
WHERE XX IN(1002,1003);
WHERE XX = 1002 OR XX = 1003作用一样
5.MySQL中的NOT
MySQL支持使用NOT对IN、BETWEEN和EXISTS子句取反。
例:WHERE XX NOT IN(1002,1003)
6.通配符
6.1 百分号%通配符
%表示任何字符出现任意次数
例:SELECT * FROM xx where ip like '%87'
根据MySQL的配置方式,搜索可以是区分大小写的。
注意尾空格:尾空格可能会干扰通配符匹配
例如,在保存词anvil 时,如果它 后面有一个或多个空格,则子句 WHERE prod_name LIKE '%anvil' 将不会匹配它们,因为在最
后有多余的字符。解决这个问题的一个简单的办法是在搜索模式最后附加一个 % 。
注意NULL :虽然似乎 % 通配符可以匹配任何东西,但有一个例外,即 NULL 。即使是 WHERE prod_name LIKE '%' 也不能匹配
用值 NULL 作为产品名的行。
6.2 下划线(_)通配符
下划线的用途与 % 一样,但下划线只匹配单个字符而不是多个字符。
6.3 通配符使用技巧
不要过度使用通配符。
在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。
仔细注意通配符的位置。
7.使用正则表达式搜索
注意LIKE 和 REGEXP的区别
MySQL中的正则表达式匹配(自版本3.23.4后)不区分大小写(即,大写和小写都匹配)。为区分大小写,可使用 BINARY 关键字,如 WHERE prod_name REGEXP BINARY 'JetPack .000' 。
OR匹配 用“|”
“[]”操作:
转译字符为“\\”
匹配字符类:
8.创建计算字段
8.1 拼接 使用concat()函数
RTrim() 函数去掉值右边的所有空格。通过使用 RTrim() ,各个列都进行了整理。
例:
Trim 函数 MySQL除了支持 RTrim() (正如刚才所见,它去掉串右边的空格),还支持 LTrim() (去掉串左边的空格)以及
Trim() (去掉串左右两边的空格)。
8.2 使用别名 AS
9.使用数据处理函数
其中的Soundex()函数是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。
如果要的是日期,请使用 Date() 如果你想要的仅是日期,则使用 Date() 是一个良好的习惯,即使你知道相应的列只包含日期也是如此。这样,如果由于某种原因表中以后有日期和
时间值,你的SQL代码也不用改变。当然,也存在一个 Time()函数,在你只想要时间时应该使用它。
例:
10. 汇总数据
上面的函数都会忽略NULL
11.分组数据
例:
过滤分组,用HAVING (WHERE的所有技术和选项都适用于HAVING)
例:
12 联结表
1.创建连接
例:
2.内部联结
例:
13. 高级联结
1. 使用表别名
例:
2. 自联结
例:
两者作用相同。
3. 自然联结
例:
4. 外部联结
例:
14. 组合查询
UNION 从查询结果集中自动去除了重复的行。
使用 UNION ALL ,MySQL不取消重复的行。
SELECT 语句的输出用 ORDER BY 子句排序。在用 UNION 组合查询时,只能使用一条 ORDER BY 子句,它必须出现在最后一条 SELECT 语句之后。对于结果集,不存在用一种方式排序一部分,而又用另一种方式排序另一部分的情况,因此不允许使用多条 ORDER BY 子句。
例:
这条 UNION 在最后一条 SELECT 语句后使用了 ORDER BY 子句。虽然 ORDER BY 子句似乎只是最后一条 SELECT 语句的组成部分,但实际上MySQL将用它来排序所有 SELECT 语句返回的所有结果。
15. 全文本搜索
16. 插入数据
17. 创建和操纵表
AUTO_INCREMENT 告诉MySQL,本列每当增加一行时自动增量。
例: