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,返回的值可以为-101
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 "条件");                         #内查询                

 

posted @ 2021-09-02 17:10  梨xyc  阅读(62)  评论(0编辑  收藏  举报