一,SQL高级语句
1,SELECT
他的作用就是查看显示表格里一个或多个内容。
用法:SELECT “栏位” FROM “表名”;
这是我随便创的一张表格;
使用语句后,我用的是单引号也能实现查询;
1.2 DISTINCT
作用:不显示重复的资料
SELECT DISTINCT 【列名】 ‘数据’ FROM 表名;
1.3 WHERE
作用:实现条件查询
语法:SELECT “栏位” FROM “表名” WHERE “条件”;
这里我们还可以增加条件,比方说我要除了20岁以外的
我们用OR让它同时筛选两个条件
用and可以实现下面大于等于20
进一步筛选名字等于bbb的20岁的人
1.4 IN
作用,显示已知值的资料
语法:SELECT “栏位” FROM “表名” WHERE “栏位” IN (‘值1’, ‘值2’, …);
1.5 BETWEEN
作用:显示两个值范围内的资料
语法:SELECT “栏位” FROM “表名” WHERE “栏位” BETWEEN ‘值1’ AND ‘值2’;
显示年龄在20岁到30岁之间的人;
1.6 通配符
通常通配符都是跟 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’ 则不符合这个模式。
1.7 LIKE
作用:匹配一个模式筛选条件
语法:SELECT “栏位” FROM “表名” WHERE “栏位” LIKE {模式};
比方说,我要查年龄是8结尾的人
或者我要找1开头的两位数年龄的人(好像年龄没有三位数哈哈哈)
1.8 ORDER BY
作用:排序,按关键字排序
#ASC 是按照升序进行排序的,是默认的排序方式。
#DESC 是按降序方式进行排序。
二、SQL函数
2.1 数学函数:
数学函数 返回的结果
abs(x) 返回 x 的绝对值
rand() 返回 0 到 1 的随机数
mod(x,y) 返回 x 除以 y 以后的余数
power(x,y) 返回 x 的 y 次方
round(x) 返回离 x 最近的整数
round(x,y) 保留 x 的 y 位小数四舍五入后的值
sqrt(x) 返回 x 的平方根
truncate(x,y) 返回数字 x 截断为 y 位小数的值
ceil(x) 返回大于或等于 x 的最小整数
floor(x) 返回小于或等于 x 的最大整数
greatest(x1,x2…) 返回集合中最大的值
least(x1,x2…) 返回集合中最小的值
select abs(-10),rand(),mod(10,3),power(2,10),round(3.1415);
2.2 聚合函数:
数学函数 返回的结果
avg() 返回指定列的平均值
count() 返回指定列中非 NULL 值的个数
min() 返回指定列的最小值
max() 返回指定列的最大值
sum(x) 返回指定列的所有值之和
计算平均年龄:
查看已经输入年龄的人的个数
2.3 字符串函数:
数学函数 返回的结果
trim() 返回去除指定格式的值
concat(x,y) 将提供的参数 x 和 y 拼接成一个字符串
substr(x,y) 获取从字符串 x 中的第 y 个位置开始的字符串,跟substring()函数作用相同
substr(x,y,z) 获取从字符串 x 中的第 y 个位置开始长度为 z 的字符串
length(x) 返回字符串 x 的长度
replace(x,y,z) 将字符串 z 替代字符串 x 中的字符串 y
upper(x) 将字符串 x 的所有字母变成大写字母
lower(x) 将字符串 x 的所有字母变成小写字母
left(x,y) 返回字符串 x 的前 y 个字符
right(x,y) 返回字符串 x 的后 y 个字符
repeat(x,y) 将字符串 x 重复 y 次
space(x) 返回 x 个空格
strcmp(x,y) 比较 x 和 y,返回的值可以为-1,0,1
reverse(x) 将字符串 x 反转
例子1:
select trim(’ abc ');
实例2,concat:
select concat(name,age) from list where id=1;
select name || age from list where id=1;
#如sql_mode开启 了PIPES_AS_CONCAT, “||” 视为字符串的连接操作符而非或运算符
和字符串的拼接函数Concat相类似,这和Oracle数据库使用方法是一样的
要是看的不太舒服可以加个分隔符
2.4 group by
他主要就是对后面的栏位查询结果进行汇总分组,通常是结合聚合函数一起使用的
他还有一个原则,就是select 后面所有列中,没有使用聚合函数的列,必须出现在grouo by后面
select name,sum(age) from list group by name;
select name,sum(age) from list group by name order by age desc;
执行语句后:
用order by降序
2.5Having
用来过滤由group by语句返回的记录集,通常和group by语句联合使用
having语句的存在补足了where语句关键字不能与聚合函数联合使用的不足
语法:SELECT “栏位1”, SUM(“栏位2”) FROM “表格名” GROUP BY “栏位1” HAVING (函数条件);
2.6别名
栏位别名 表格别名
语法:SELECT “表格別名”.“栏位1” [AS] “栏位別名” FROM “表格名” [AS] “表格別名”;
2.7连接查询
准备两张表
1)inner join(等值相连)
只返回两个表中联结字段相等的行
SELECT * FROM list A INNER JOIN list2 B on A.name = B.name;
name=name
2)
left join(左连接)
3)right join(右联接)
返回包括右表中的所有记录和左表中联结字段相等的记录
和上面一样,不过是换了个方向
2.8 子查询
连接表格,在WHERE 子句或HAVING 子句中插入另一个SQL语句
语法:SELECT “栏位1” FROM “表格1” WHERE “栏位2” [比较运算符] #外查询
(SELECT “栏位1” FROM “表格1” WHERE “条件”); #内查询
SELECT SUM(age) FROM list WHERE name IN (SELECT name FROM list2);