Mysql数据库的高级SQL语句
SQL高级语句
SELECT
显示表格中一个或数个栏位的所有资料
1 语法:SELECT "栏位" FROM "表名";
查询表中的name一列
1 select "name" from team;
DISTINCT
不显示重复的资料
1 语法:SELECT DISTINCT "栏位" FROM "表名"; 2 SELECT DISTINCT Store_Name FROM Store_Info;
WHERE
有条件查询
1 语法:SELECT "栏位" FROM "表名" WHERE "条件";
AND OR
代表且、或、和的意思
1 语法:SELECT "栏位" FROM "表名" WHERE "条件1" {[AND|OR] "条件2"}+ ;
IN
显示已知的值的资料
1 语法:SELECT "栏位" FROM "表名" WHERE "栏位" IN ('值1', '值2', ...);
BETWEEN
显示两个值范围内的资料
1 语法:SELECT "栏位" FROM "表名" WHERE "栏位" BETWEEN '值1' AND '值2';
通配符
通常通配符都是跟 LIKE 一起使用的
通配符 | 含义 |
% | 百分号表示零个、一个或多个字符(相当于linux中的“*”号) |
_ | 下划线表示单个字符(相当于linux中的“?”号) |
‘A_Z’ | 所有以 ‘A’ 起头,另一个任何值的字符,且以 ‘Z’ 为结尾的字符串。例如,‘ABZ’ 和 ‘A2Z’ 都符合这一个模式,而 ‘AKKZ’ 并不符合 (因为在 A 和 Z 之间有两个字符,而不是一个字符)。 |
‘ABC%’ | 所有以 ‘ABC’ 起头的字符串。例如,‘ABCD’ 和 ‘ABCABC’ 都符合这个模式。 |
‘%XYZ’ | 所有以 ‘XYZ’ 结尾的字符串。例如,‘WXYZ’ 和 ‘ZZXYZ’ 都符合这个模式。 |
‘%AN%’ | 所有含有 'AN’这个模式的字符串。例如,‘LOS ANGELES’ 和 ‘SAN FRANCISCO’ 都符合这个模式。 |
‘_AN%’ | 所有第二个字母为 ‘A’ 和第三个字母为 ‘N’ 的字符串。例如,‘SAN FRANCISCO’ 符合这个模式,而 ‘LOS ANGELES’ 则不符合这个模式。 |
LIKE
匹配一个模式来找出我们要的资料
1 语法:SELECT "栏位" FROM "表名" WHERE "栏位" LIKE {模式};
ORDER BY
按关键字排序
1 语法:SELECT "栏位" FROM "表名" [WHERE "条件"] ORDER BY "栏位" [ASC, DESC];
#ASC 是按照升序进行排序的,是默认的排序方式。
#DESC 是按降序方式进行排序。
SQL函数
数学函数
1 abs(x) 返回x的绝对值 2 rand() 返回0到1的随机数 3 mod(x,y) 返回x除以y以后的余数 4 power(x, y) 返回x的y次方 5 round(x) 返回离x最近的整数 6 round(x, y) 保留x的y位小数四舍五入后的值 7 sqrt(x) 返回x的平方根 8 truncate(x, y) 返回数字x截断为y位小数的值 9 ceil(x) 返回大于或等于x的最小整数 10 floor(x) 返回小于或等于x的最大整数 11 greatest(x1, x2...) 返回集合中最大的值 12 least(x1, x2...) 返回集合中最小的值
1 select abs(-10),rand(),mod(10,3),power(2,10),round(3.1415);
聚合函数
1 avg() 返回指定列的平均值 2 count () 返回指定列中非NULL值的个数 3 4 注:count (字段):会自动忽略字段值为null的行 5 count(*):包括所有行,不会忽略null 6 min() 返回指定列的最小值 7 max () 返回指定列的最大值 8 Sum(x) 返回指定列的所有值之和
计算平均年龄
1 select avg(age) from team;
字符串函数
1 trim() 返回去除指定格式的值 2 concat (x, y) 将提供的参数x和y拼接成一个字符串 3 substr (x,y) 获取从字符串x中的第y个位置开始的字符串,跟substring()函数作用相同 4 substr(x,y,z) 获取从字符串x中的第y个位置开始长度为z的字符串 5 length(x) 返回字符串x的长度 6 replace(x, y, z) 将字符串z替代字符串x中的字符串y 7 upper(x) 将字符串x的所有字母变成大写字母 8 lower(x) 将字符串x的所有字母变成小写字母 9 left(x,y) 返回字符串x的前y个字符 10 right (x, y) 返回字符串x的后y个字符 11 repeat (x, y) 将字符串x重复y次 12 space (x) 返回x个空格 13 strcmp (x, y) 比较x和y,返回的值可以为-1,0,1 14 reverse(x) 将字符串x反转
GROUP BY
对GROUP BY后面的栏位的查询结果进行汇总分组,通常是结合聚合函数一起使用的 GROUP BY 有一个原则,就是 SELECT后面的所有列中,没有使用聚合函数的列,必须出现在GROUP BY后面。
1 语法:SELECT "栏位1", SUM("栏位2") FROM "表名" GROUP BY "栏位1";
HAVING
用来过滤由GROUP BY语句返回的记录集,通常与GROUP BY语句联合使用HAVING语句的存在弥补了WHERE关键字不能与聚合函数联合使用的不足。如果被SELECT的只有函数栏,那就不需要GROUP BY子句。
1 语法:SELECT "栏位1", SUM("栏位2") FROM "表格名" GROUP BY "栏位1" HAVING (函数条件);
别名
栏位別名 表格別名
1 语法:SELECT "表格別名"."栏位1" [AS] "栏位別名" FROM "表格名" [AS] "表格別名";
列的别名
select 字段 [as] 字段别名 from表名;
表的别名
select 字段 from 表名 [as] 别名;
连接查询
-inner join(等值相连)
只返回两个表中联结字段相等的行
1 SELECT * FROM team A INNER JOIN team2 B on A.name = B.name;
-left join(左联接)
返回包括左表中的所有记录和右表中联结字段相等的记录
1 SELECT * FROM team A LEFT JOIN team2 B on A.name = B.name;
-right join(右联接)
返回包括右表中的所有记录和左表中联结字段相等的记录
1 SELECT * FROM team A RIGHT JOIN team2 B on A.name = B.name;
子查询
连接表格,在WHERE 子句或HAVING 子句中插入另一个SQL语句
1 语法:SELECT "栏位1" FROM "表格1" WHERE "栏位2" [比较运算符] #外查询 2 (SELECT "栏位1" FROM "表格1" WHERE "条件"); #内查询