1)排序 :ORDER BY
默认是升序,降序的话需增加DESC
字符串比较,默认是不分大小写的,若想区分大小写,需用ORDER BY
BINARY,加了BINARY后速度也比较慢
例子:计算岁数,并将岁数用字段age表示,以name排序。
SELECT name, birth, CURDATE(),
TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age
FROM pet ORDER BY name;
2)NULL值的使用
用IS NULL 或者IS NOT NULL来判断
NULL means “a missing unknown value”,所以可以在一个属性为NOT
NULL的列中插入0或者空字符串
3)模式匹配
"_"代表一个字符,“%”代表不定数量的字符。用到模式匹配的是,用LIKE或者NOT LIKE来作为比较标识
4)正则匹配
a. REGEXP 或者 NOT REGEXP
b. "." 任何一个单字符
c. [...] 括号内的任何一个单字符,如[abc],代表a或b或c [a-z]代表a~z范围内的任何一个值
d. “*”表示*之前的字符的任意个数,如“a*”,任意个a
".*"任意数量的任意字符
e. 正则表达式,以“^”开头或者“$”结尾。如^b,表示以b开头;b$表示以b结尾
f. {n}表示重复5次,如"b{5}"代表“bbbbb”
5)统计行数
a.COUNT(*)
b.GROUP BY:用来分类 如查询每个主人拥有几个宠物:SELECT owner,COUNT(*) AS petsnum
FROM pet GROUP BY owner;
c.ONLY_FULL_GROUP_BY 模式,如果设置(SET sql_mode =
'ONLY_FULL_GROUP_BY';),
就不能执行“SELECT owner,COUNT(*) AS petsnum FROM
pet”,mysql会认为没有能与name匹配的集群,也就是必须
配合GROUP BY使用。
如果设置(SET sql_mode = ''),执行语句“SELECT
owner,COUNT(*) AS petsnum FROM pet”就会将整张表作为一个集群,
只输出一条记录,name的值则是服务器随机从表中获取的name那一列的值。
理解:SELECT 预约中包含列名称和统计信息的时候,会逐行统计。如果不用GROUP
BY则有可能错乱,难以为每行数据匹配到
一个可用来统计的集群。
6)INNER JOIN
输出结果是两张表共有的部分
7)批量执行SQL语句
mysql> source filename;
mysql> \. filename
备注:filename需要是全路径,并且不需要用引号。例子:source D:\tmp.txt