注:数据库对字母的大小写没有强烈要求
目录
1、 SELECT语句中关键字执行顺序
2、限定查询范围关键字:WHERE
(1)模糊查询关键字:LIKE
(2)过滤重复关键字:DISTINCT
(3)查询前几行数据的关键字:TOP
3、ORDER BY排序查询
4、GROUP BY分组查询
(1)分组后限定查询关键字:HAVING
5、聚合函数
查询是数据库中最常用的操作。对于以及定义的表和视图,用户通过查询操作得到所需的信息。
要从表中查询数据,请使用SELECT语句,以下是SELECT语句最基本的形式:
SELECT(查询) *(全部) from(指定的表) table—_name
SELECT colum_name(列名) from table_name
from>where>group by>having>select>order by
通过关键字的执行顺序可以发现一下语法错误
where用于过滤查询结果中满足条件的结果,格式为:
SELECT column_name from table_name
where<条件表达式>
where子句:指出查找条件,可以使用以下运算符来限定查询结果:
(1)比较运算符:=,>,<,>=,<=,<>,!=,!>,!<
(2)字符匹配运算符:like,not like
(3)确定范围运算符:between and,not between and
(4)逻辑运算符:not,and,or
(5)集合运算符:union(并),intersect(交),except(差)
(6)集合成员运算符:in,not in
(7)聚合函数:avg(列名),min(列名),max(列名),sum(列名),count(列名/*/1)
注:逻辑运算符若要使用多个的话要考虑要求用括号来决定查询范围
代码示例:
--查询单价大于等于1000的物品
select product_name from product
where sale_price>=1000
--查询所以年龄在20到23的学生姓名,专业,及年龄
select sage,sname,sdept from student
where sage between 20 and 23
--查询不在20到23岁之间的
--where sage not between 20 and 23
--查询厨房用具大于等于3000的商品
select product_name from product
where product_type='厨房用具' and sale_price>=3000
--查询软件工程,电子电工的学生,查询不是的学生则在in的前面加not
select sname,ssex from student
where sdept='软件工程' or sdept='电工电子';
--where sdept in('软件工程','电子电工');
--查询姓为林的学生
select sname,sno,ssex from student
where sname like '林%';
--查询名字中第二个字为涛的学生
select sname,sno from student
where sname like '_涛%';
like关键字中的"_","%"表示可以匹配0个或多个字符
--查询产品类别的数量
select count(distinct product_type)from product
distinct 去重关键字写在列名的前面
--查询成绩表中前三行的数据
select top 3 * from course
--查询成绩表中一半的数据
select top 50 percent * from coursepercent百分数
order by用于把数据进行有序输出,格式如下:
SELECT column_name from table_name
order by column_name [desc |asc]
desc降序关键字,asc升序关键字
SELECT语句中,order by子句是要最后处理的一个子句
group by用于查询数据过程对数据先进行分组,然后再对每个小组进行计算,而不是全表,格式如下:
SELECT column_name,expression[聚合函数...] from table_name
group by column_name
代码展示:
--查询产品表中每个类型的数量
select product_type,count(*) as product_type_num from product
group by product_type
--查询产品表中每个类型的平均价格
select product_type,avg(sale_price)as sale_price_avg from product
group by product_type
group by后面的列名不能使用列别名因为group by的执行顺序大于select的执行顺序
如果希望在分组的基础上要筛选满足条件的组,可以在GROUP BY子句后跟一个HAVING的子句来限定分组,格式如下:
having[ 条件]
代码展示:
--查询产品表中类型数量大于4
select product_type,count(*) from product
group by product_type
having count(*)<4
代码执行顺序为:先找到product表,然后对表中产品类型数量进行分组,再找到分好的组中产品类型数量小于4的,最后在输出
from>group by>having>select
我们可以发现有两个限定查询的关键字(where,having),让我们来分析一下二者的区别
--where作用于基本表或者视图,从中选取满足的元组,having作用于分组,从中选取满足条件的组
--where不可以使用聚合函数,而having可以使用聚合函数
--having子句总是跟在group by子句后的,不可以单独使用,而where可以独立使用
聚合函数可对一组值进行计算并返回一个单值。计算时可以满足WHERE子句条件的记录,也可以对满足的分组进行计算。聚合函数有
--COUNT(*):计算元组的个数
--COUNT(列名):计算单列中的值的计算个数
--SUM(列名):求某一列值的总和
--AVG(列名):求某一列值的均值
--mMAX(列名):求某一列值的最大
--MIN(列名):求某一列值的最小
聚合函数和算数运算符的区别
聚合函数使用若表中有NULL值则会自动跳过,算数运算符有空值计算结果就为空。