数据查询是数据库的核心操作,一般格式为
select [all|distinct]<目标列表表达式>[,<目标列表表达式>]
FROM<表名或者视图名>[,<表名或视图名>]|(<SELECT>)[AS]<别名>
[WHERE<条件表达式>]
[GROUP BY<列名1>] [HAVING<条件表达式>]
[ORDER BY<列名2> [ASC|DESC]];
        整个SELECT语句的含义是,根据where 子句的表达式从from 子句中指定表查找满足的数据,在用select子句中的目标表达式选出元组中的属性值形成结果表。
如果有Group by子句,则将结果按<列名1>的值进行分组,该属性列值相等的元组为一个组,通常会在每个组中作用聚合函数,如果Group by 子句带having 短语,则值要满足指定条件的组及以输出。
        如果有order by 子句,则结果还会按照列名2的值按照升序或者降序进行排序。
        select 语句既可以完成简单的单表查询,也可以完成连接查询和嵌套查询
以学生表为例(单表)

查询全体学生学号和姓名
        select number,name from student;
查询全体学生的姓名、学号、所在系
select name,number,dept from student;
查询全校学生的详细记录
        select * from student;
查询全体学生的姓名其及出生年月
        select name,2020-age from student
查询结果中第二列不是个列名而是计算表达式,是用当前年份2020减去学生年龄。<目标列表表达式>不仅科可以是算术表达式,还可以是字符串
选择表中的若该元组
(1)消除取值重复的行
两个本来并不完全相同的元组在投影到指定的某些列上后,可以会变成相同的行。可以用DISTINCT消除
select distinct number from sc;

where子句常用的查询条件

查询条件

谓词

比较

=,>,<,>=,<=,!=,<>,!>;NOT+上述比较运算符

确定范围

between and,not between and

确定集合

in,not in

字符匹配

like,not like

空值

is null,is not null

多重条件(逻辑运算)

and,or,not

查询年龄不在21~24岁之间的学生姓名、系别、年龄
select name sex from student where not between 21 and 24;
%代表任意长度的字符串,例如a%b表示以a开头b结尾任意长度的字符串
_代表任意单个字符 例如a_b表示以a开头b结尾长度为3的字符串

Order by 子句
        用户可以用order by子句对查询结果按照一个或者多个属性列的升序(asc)或降序(DESC)默认为升序
        查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列
select * from student order by dept,age,desc;

Group by 句子
        Group by子句将查询结果按某一列或多列的值分组,值相等的为一组。
        对查询结果分组的目的是为了细化聚集函数的作用对象,如果未对查询结果分组,聚集函数将作用于整个查询结果,分组后聚集函数将作用于每个组
select number ,count(number) from sc group by number;