登录:mysql -u user -p password -h server -P port
key word 保留字
show也可以用来显示列:SHOW COLUMNS FROM t;=DESCRIBE t;
HELP SHOW;
SELECT name
FROM pro;
(结果没有顺序)
SELECT DISTINCT vend_id
FROM pro;
只返回不重复的值,DISTINCT应用于所有列,所有列相同才算重复
SELECT a,b
FROM p
ORDER BY b DESC, c;
A和a值默认相同,即排序不区分大小写
(同时使用ORDER BY和WHERE,则ORDER BY必须在WHERE之后)
WHERE的操作符
= != <> BETWEEN
BETWEEN 5 AND 10
SELECT a,b
FROM p
WHERE a = 'fff';
会匹配到Fff,因为MySQL执行匹配时默认不区分大小写
WHERE a IS NULL;
NULL无论匹配过滤或不匹配过滤都不返回
WHERE (a = 1 OR b < 2) AND c > 3;
WHERE a IN (1002,1003);
a在集合中
通配符:用来匹配值的特殊字符
搜索模式:由字面值,通配符组成的搜索条件
谓词?
%任意字符出现任意次数
WHERE a LIKE 'jet%'
可匹配'JetPack 11'(若配置区分大小写则不匹配)
%a%
%可匹配0个字符,不能匹配NULL
下划线_匹配单个字符
WHERE a REGEXP '1000'
可匹配 1211000(包含,不是相等)
为区分大小写可用REGEXP BINARY
's1|s2 s3'匹配's1'和's2 s3'
'[123]ab',[]表示匹配其中一个字符
^为集合的否定
[^123]表示除123以外
-表示范围
[0-9]
.表示单个字符
\\表示转义,\\\匹配\(MySQL自己解释一个\,正则表达式解释另一个\)
\\(匹配(,括号不能直接用
字符类:例如[:alnum:] = [a-zA-Z0-9]
* 0或多个匹配
+ 1或多个匹配 ={1,}
? 0或1个匹配 ={0,1}
{n} n个匹配
{n,}
{n,m}
^匹配串的开始,$匹配串的结束
若REGEXP加上^开头$结尾,则与LIKE作用相同
SELECT 'hello' REGEXP '[0-9]'将返回0,这可以用来做正则表达式测试
SELECT Concat(RTrim(a), '(', b, ')')
FROM v
ORDER BY a;
Concat拼接串,RTrim删除串右侧的空格
这样查出来的数据没有名字,只是一个值
SELECT Concat(RTrim(a), '(', b, ')') AS c起别名
SELECT a,b*c AS d
FROM o;支持+-*/
SELECT可以用于测试,比如
SELECT 3*2;返回6
SELECT Trim('abc')
SELECT Now()返回时间
Upper()
Lower()
Soundex()比较串的发音..
一系列日期函数
AddTime()增加一个时间
CurTime()返回当前时间
Day()返回时间的天数部分
yyyy-mm-dd
WHERE Date(order_date) = '2005-08-01'
日期可以用BETWEEN
数值处理函数
Abs() Cos() Mod() Pi() Rand() Sqrt()
聚集函数:运行在行组上,计算和返回单个值的函数
对数据汇总,而不是返回数据本身。
AVG()平均值 COUNT()行数 MAX() MIN() SUM()
SELECT AVG(a) AS avg_a
FROM p;
除了COUNT(*) 都忽略NULL
COUNT(*)返回行数
MAX返回的是排序后的最后一个值,因此也可以用于串
SELECT SUM(a*b)对a*b求和
SELECT AVG(DISTINCT p) as a只考虑不同值
DISTINCT只能用于COUNT()不能用于COUNT(*)
只能用于列名,不能用于计算或表达式
select count(*) from 表名 会加重负担,改用select count(某列名) from 表名