数据库原理与应用(6)查询语句、模糊查询、聚合函数、分组查询、结果排序、结果筛选
【查询基础和语句】
在查询分析器中,查询的显示结果也可以保存,并且扩展名为.SQL。
查询窗口的编辑器窗口是一个文本编辑器,可以在这里输入SQL语句,执行返回的结果集显示在结果窗口中。
空值不同于空字符串或数值零,通常表示未填写、未知(Unknow)、不可用或将在以后添加的数据。
select * from books LIMIT 10语句中的LIMIT 10表示连续的10条,也就是1-10条。
关于where语句的null,可以写成以下三种形式:
SQL语句中,“AGE IN (10,20)”的语义是AGE=10 OR AGE =20。
SQL语句通常被称为结构化查询语言。
SQL的查询语句中,重命名目标列的方式包括在重命名对象后用as表示出新的名称、在重命名对象后空格加新的名称、在重命名对象前用等号表示且等号前为新的名称。下面举一个例子。
SQL语言中,SELECT语句的执行结果是表。
SQL语言中,条件“年龄betWEEN 20 AND 30”表示年龄在20至30之间,包括20岁和30岁。
数据操纵语句(DML)的基本操作是插入、修改、查找。
数据操纵语句(DML)的对应指令有insert、update、delete。
SQL的比较运算符有<= / <> / !=,其中!=和<>语义相同,均表示不等于。
关系模型的数据操纵即是建立在关系上的数据操纵,一般有 删除、添加、查询和修改四种操作。
数据库对象包括表、索引、视图、图表、缺省值、规则、触发器、用户、函数,不包括select语句。
【例】
(1)中途误用分号,下面的代码中间不可以用分号,分号只出现在语句结尾,表示结束。正确的改法是将中间的分号改为英文状态下的逗号,在语句结尾处添加一个英文状态的分号。
错误语句:
正确语句:
(2)from后未接表名。正确改法是from后跟上表的名字,再在结尾加分号。
错误语句:
正确语句:
(3)where语句中使用了聚集函数。正确改法是将聚集函数写在having语句中,having语句跟在group by语句后。
错误语句:
正确语句:
顺序为select……from……where……group by……having……order by……asc/desc。

【模糊查询、条件查询】
如果想要查询结果中不显示重复的数据,可以使用DISTINCT关键字,distinct关键字的作用是仅筛选不重复的数据。
在stu表中查询所有姓名中有“嘉”的学生,在WHERE子句中应使用LIKE '% 嘉 % '通配符进行查询。
*关于SQL中的通配符:SQL语言的通配符必须和like连用。%表示零或多个数量不确定的字符,_仅表示一个字符,[charlist]表示字符串中的任意单一字符,[^charlist]或[!charlist]表示不在字符串中的任意单一字符。
【例1】已知关系student (sno,sname,age,gender,place), 查询姓名中含有”小”字的同学姓名,年龄的SQL语句,正确的是Select sname 姓名, age 年龄 From student Where sname like '%小%';

【聚合函数、分组查询、结果排序、结果筛选】
SELECT语句中的ORDER BY子句中,如果有多个排序标准,它们之间用逗号分隔,查询结果与排序标准的先后顺序无关。
ORDER BY子句仅对检索数据的显示有影响,并不改变表中行的内容顺序。
SQL语句中,聚合函数COUNT(列名) 的功能是对一列中的非空值计算个数。
聚合函数中不忽略空值(NULL)的是count(*)。
在SQL语言的SELECT语句中,用于对查询结果元组进行排序的是order by子句。
关于select count(*) 和 select count(column)的区别,count(*)对行的所有数目进行计算,包含NULL值的行;count(column)对特定的列的值具有的行数进行计算,不包含NULL值的行。
count (column) 对特定的列的值具有的行数进行计算,不包含NULL值。 count (1) 这个用法和 count (*) 的结果是一样的。
WHERE子句中可以使用的查询条件有许多,其中用于确定范围的操作符有between and和not between and。
在要排序的列表后使用order by语句,通过asc指明为升序,desc指明为降序,忽略则默认为升序,order by语句在where语句之后。
除count(*)函数外,其他聚合函数均忽略空值。
聚合函数出现在select之后,不可以出现在where子句中。
在没有使用group by子句分组的情况下,聚合函数作用于整张表中满足where条件的所有记录,在查询结果中一个聚合函数只返回单一的值。
SELECT语句中的条件可以用WHERE或HAVING引出,但HAVING必须在GROUP BY之后使用。
now()函数返回当前的日期和时间。
【例】购买时间字段是btime,商品编号字段是gno,统计2020年之前被购买次数超过2次的商品,显示商品编号和购买次数,对应的SQL语句是:
SELECT 语句的完整语法较复杂,FROM,表示来自于哪些表;WHERE,表示筛选的条件;ORDER BY ,表示根据哪些列排序;HAVING,表示分组后筛选的条件。
group by可以和聚集函数连用,但不可以用来过滤数据。
聚合函数介绍(所有聚合函数均可以添加distinct关键字以实现去除重复值的效果)
(1)count(*)返回行数。
(2)count(<列名>) 返回指定列中非NULL值个数。
(3)sum(<列名>) 返回指定列中非NULL值的和。
(4)avg(<列名>) 返回指定列中非NULL值的平均值。
(5)max(<列名>) 返回指定列中非NULL值的最大值。
(6)min(<列名>) 返回指定列中非NULL值的最小值。