一、SQL高级语句
1. select
显示表格中的一个或者多个字段中所有的信息
#格式:
select 字段名 from 表名;
select * from students;
select name,score from students;
2. distinct
查询不重复记录
#格式:
select distinct 字段 from 表名﹔
select distinct age from students;
select distinct gender from students;
3. where
where 有条件的查询
#格式:
select '字段' from 表名 where 条件
select name,age from students where age<15;
4. and,or
and: 且 , or: 或
#格式:
select 字段名 from 表名 where 条件1 (and|or) 条件2 (and|or)条件3;
select name,age from students where age>15 and age<20;
5. in
显示已知值的资料
#格式:
select 字段名 from 表名 where 字段 in ('值1','值2'....);
select * from students where id in (1,2,3,4);
select * from students where age in (10,17);
6. between
显示两个值范围内的资料
#格式:
select 字段名 from 表名 where 字段 between '值1' and '值2';
包括 and两边的值
select * from students where id between 1 and 5;
select * from students where id between 1 and 4;
select * from students where score between 10 and 50;
select * from students where name between 'haijiu' and 'wangwu';
select * from students where age between 10 and 15;
7. like 通配符
通配符通常是和 like 一起使用
#格式:
select 字段名 from 表名 where 字段 like 通配符格式
通配符 | 含义 |
---|
% | 表示零个,一个或者多个字符 | _ | 下划线表示单个字符 | A_Z | 所有以A开头 Z 结尾的字符串 ‘ABZ’ ‘ACZ’ 'ACCCCZ’不在范围内 下划线只表示一个字符 AZ 包含a空格z | ABC% | 所有以ABC开头的字符串 ABCD ABCABC | %CBA | 所有以CBA结尾的字符串 WCBA CBACBA | %AN% | 所有包含AN的字符串 los angeles | _AN% | 所有 第二个字母为 A 第三个字母 为N 的字符串 |
select * from students where name like 'h%';
select * from students where name like '_a%';
select * from students where name like '%liu%';
8. order by
order by 按关键字排序
#语法:
select 字段名 from 表名 where 条件 order by 字段 [asc,desc];
asc :正向排序
desc :反向排序
select id,name from students order by id;
select id,name from students order by id desc;
select id,name,age from students where age=17 order by id;
9. 函数
9.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(-6);
select rand(1);
select * from xues order by rand();
select mod(10,3);
select power(2,10);
select round(6.5);
select round(6.4);
select round(3.1415926,2);
select truncate(3.1415,3);
select truncate(3.1455,3);
select ceil(3.1415);
select floor(3.1415);
select greatest(12,13,14,15);
select least(12,13,14,15);
9.2 聚合函数
函数 | 含义 |
---|
avg() | 返回指定列的平均值 | count() | 返回指定列中非 NULL 值的个数 | min() | 返回指定列的最小值 | max() | 返回指定列的最大值 | sum(x) | 返回指定列的所有值之和 |
select avg(age) from xues;
select avg(score) from xues;
select sum(age) from xues;
select max(age) from xues;
select min(age) from xues;
select count(classid) from xues;
count(明确字段):不会忽略空记录
select count(*) from xues;
count(*)包含空字段,会忽略空记录
查看空格字段是否会被匹配
insert into xues values(16,'',20,82,'ppp',1);
10. group by
-
对group by 后面的字段的查询结果进行汇总分组,通常是结合聚合函数一起使用的 -
group by 有一个原则,就是select 后面的所有列中,没有使用聚合函数的列必须出现在 group by 的后面。
#格式:
select 字段1,sum(字段2) from 表名 group by 字段1;
select classid,sum(age) from xues group by classid;
select classid,avg(age) from xues group by classid;
select classid,count(age) from xues group by classid;
11. having
-
having:用来过滤由group by语句返回的记录集,通常与group by语句联合使用 -
having语句的存在弥补了where关键字不能与聚合函数联合使用的不足。如果被SELECT的只有函数栏,那就不需要GROUP BY子句。 -
要根据新表中的字段,来指定条件
#格式:
SELECT 字段1,SUM("字段")FROM 表格名 GROUP BY 字段1 having(函数条件);
select classid,avg(score) from xues group by classid;
select classid,avg(score) from xues group by classid having avg(score)>80;
12. 别名
栏位別名 表格別名
#格式:
SELECT "表格別名"."栏位1" [AS] "栏位別名" FROM "表格名" [AS] "表格別名";
select f.classid,avg(score) '平均成绩' from xues as f group by f.classid;
13. 子查询
连接表格,在WHERE 子句或HAVING 子句中插入另一个SQL语句
#格式:
SELECT "栏位1" FROM "表格" WHERE "栏位2" [比较运算符]
#子查询
(SELECT "栏位1" FROM "表格" WHERE "条件");
select sum(score) from xues where id in (select id from students where id=1);
14. EXISTS
-
用来测试内查询有没有产生任何结果类似布尔值是否为真 -
如果有的话,系统就会执行外查询中的SQL语句。若是没有的话,那整个 SQL 语句就不会产生任何结果。
#格式:
SELECT "栏位1" FROM "表格1" WHERE EXISTS (SELECT * FROM "表格2" WHERE "条件");
先看students表中是否有id为1的学生,如果有则执行将xues表中的score求和
select sum(score) from xues where exists (select * from students where id=1);
#示例2:先看students表中是否有id为16的学生,如果有则执行将xues表中的score求和
select sum(score) from xues where exists (select * from students where id=16);
|