假设只有一张表:students(stu_id,stu_name,stu_sex,stu_birthday,stu_score,stu_class)
select语句的一般格式:
select <字段名或表达式列表>
from [方案名].<数据表名或视图名>
[where <条件表达式>]
[group by<分组的字段名或表达式>]
[having <筛选条件>]
[order by <排序的字段名或表达式> [asc|desc]]
select语句的使用语法:
①select是查询语句必需的关键字。
②from子句是select语句所必需的子句,用于标识从中检索数据的一个或多个数据表表名或试图。
③where子句用于设定检索条件,以返回需要的记录。
④group by子句用于将查询结果按指定的一个字段或多个字段的值进行分组统计,分组字段或表达式的值相等的被分为同一组。
⑤having子句与group by子句配合使用,用于对由group by子句分组的结果进一步限定搜索条件。
⑥order by子句用于将查询结果按指定的字段进行排序。
创建与使用基本查询
- 查询表的全部信息
select * from students;
- 查询表的指定列信息
select stu_id,stu_name,stu_sex
from students;
查询表中指定列时,在select后面书写列名,如果多列,之间用逗号隔开。
- 查询表并更改显示的列标题
select stu_id as 学号,stu_name as 姓名,stu_sex as 性别
from students;
在更改显示的列标题时,用as引出要显示的列标题,或者不用as,而在原来列标题的后面输入空格,之后输入要显示的列标题。
创建与使用条件查询
SQL语言中包括的运算符与表达式主要有:算术运算符、比较运算符、逻辑运算符、集合运算符和连接运算符等。
(1)算术运算符
算术运算符主要用来进行加、减、乘、除等算术运算。SQL中常用的算术运算符有:+、-、*、()等。
(2)比较运算符
SQL中常用的比较运算符有:=(等于)、!=(不等于)、<(小于)、>(大于)、<=(小于等于)、>=(大于等于)、in(在列表中)、between(介于之间)、like(匹配)等。
(3)逻辑运算符
SQL语言中常用的逻辑运算符有:and(与)、or(或)、not(非)。逻辑运算符的优先顺序为:not>and>or。
(4)集合运算符
集合运算符又称为谓词运算符。常用的集合运算符有:union、intersect、minus。
(5)连接运算符
用来连接多个字段,或者将多个字符串连接起来。
操作符的优先级别:算术>连接>比较>逻辑。
- 查询表中指定行
例:查询“STUDENTS”表中学号为“100001”的学生的全部信息。
select * from students
where stu_id='100001';
- 查询不重复的行
例:查询“STUDENTS”表中“STU_CLASS”的所有信息,并使用distinct去除重复的记录。
select distinct stu_class
from students;
- 查询表中前若干行
例:查询“STUDENTS”表中前5个学生信息。
select * from students
where rownum<6;
- 指定条件查询
例:查询“STUDENTS”表中出生日期在“1997-09-01”以前的男生信息;查询“STUDENTS”表中姓“陈”的女生信息;查询“001”和“002”班入学成绩大于500的学生信息;查询成绩在450~500之间的学生信息;查询所有入学成绩>500或者姓“张”的学生信息。
//查询“STUDENTS”表中出生日期在“1997-09-01”以前的男生信息
select * from students
where STU_BIRTHDAY<to_date('19970901','yyyymmdd')
and STU_SEX='男';
//查询“STUDENTS”表中姓“李”的女生信息
select * from students
where stu_name like'李%' and stu_sex='女';
//查询“001”和“002”班入学成绩大于500的学生信息
select * from students
where STU_CLASS in('001','002') and stu_score>500;
//查询成绩在450~500之间的学生信息
select * from students
where stu_score between 450 and 500;
//查询所有入学成绩>500或者姓“张”的学生信息
select * from students
where stu_score>500 or stu_name like'张%';
通配符 | 含义 | 示例 | 说明 |
---|---|---|---|
% | 替代0个或多个字符 | stu_name like’李%’ | 查找姓李的,且姓名是任意长度 |
_ | 仅替代一个字符 | stu_name like’李_’ | 查找姓李的,且姓名是2个字 |
如果要查询包含某些特殊字符的字符串,如“%”,“_”等,需要在其前面使用转义字符,转移字符一般使用“\”。
如果要查询“王%”的姓名,则SQL语句为:
select * from students where stu_name like'王\%%' escape '\';
第一个%标识真正的字符,第二个标识通配符。
创建与使用分组查询
- 分组查询数据
例:查询“STUDENTS”表并分班显示人数。
select stu_class,count(stu_id)
from students
group by stu_class;
数据先分组,分组之后统计个数。count()函数中的参数可以写任何非空的字段或者*,都能正确统计出人数。*代表统计一行一行的记录。
- 分组查询并筛选满足要求的记录
例:查询“STUDENTS”表并分班显示学生人数大于7人的班级。
select stu_class,count(stu_id)
from students
group by stu_class
having count(stu_id)>7;
在分组查询的结果中进行筛选时,使用having关键字书写筛选条件。
- 分组查询时进行排序
例:查询“STUDENTS”表中各个班级的平均成绩并升序显示。
select stu_class ,round(avg(stu_score),2)
from students
group by stu_class
order by avg(stu_score);
order by可以对结果进行排序,默认是升序排列,也可以加ASC代表升序;如果降序排列,使用DESC。