DQL查询语句
DQL是一种用于查询数据库中数据的语言。它是SQL(Structured Query Language)的一部分,用于从数据库中检索所需的数据。
FROM子句
别名
SELECT kname,sal*12 sal FROM K
别名本身不区分大小写,而且不能含有空格。如果希望别名区分大小写或者含有空格,在别名使用时用双引号括起来就行。
写别名时,AS 可写可不写,默认。在别名与本来字段名中,中间不能写逗号。
最好写上别名。
WHERE子句
WHERE 子句用于提取那些满足指定条件的记录。(过滤条件)
SELECT id,kname FROM K WHERE id=9;
下面的运算符可以在 WHERE 子句中使用
= |
等于 |
<> |
不等于 |
!= |
不等于 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
BETWEEN |
在某个范围内 |
LIKE |
搜索某种模式 |
IN |
指定针对某个列的多个可能值 |
SELECT name,id,age,FROM K where id>2 SELECT name,id,age,FROM K where id<>2
between ...and...
between... and ...判断是否在某一个区间内,
SELECT name,id,age FROM K WHERE id BETWEEN 1 AND 4
LIKE(模糊查询)
通配符可用于替代字符串中的任何其他字符。
通配符 |
描述 |
% |
替代 0 个或多个字符 |
_ |
替代一个字符 |
select kname,id FROM K where name LIKE '_o%' //查询第二个字符为o的名称。
IN 和NOT IN
in / not in 判断值是否在列表中或者不在列表中。
SELECT name,id FROM K WHERE id IN(1,2)//等于1或者2 SELECT name,id FROM K WHERE id NOT IN(1,5)//不能等于1,和5
关键字AND ,OR
SELECT kname,id FROM K WHERE id>1 AND kname='bob'
AND 优先级高于 OR,通常使用括号来提高or的优先级,
SELECT kname,id ,depino FROM K WHERE sal>1500 AND id>5 OR depino=20
SELECT kname,id ,depino FROM K WHERE sal>1500 AND (id>5 OR depino=20)
上面理解为,sal>1500 并且 id>5 这个作为一个条件,或者 depino=20.
可以改为,sal>1500 AND (id>5 or depino=20),这样就可以表示为 sal>1500,并且id>5,或者sal>1500,depino=20
IS NULL 和IS NOT NULL
判断是否为空。
SELECT id,kname FROM K WHERE pid IS NULL
ANY 和 ALL
ANY和ALL 常用于子查询。
SELECT id,kname,sal FROM K WHERE sal>ANY(1000,1500,2000)
distinct关键字
distinct 对结果中的指定字段值重复记录。(去重)
对于多字段去重,只要组合不同即可。但是distinct,需要放在所有属性名前面。
SELECT DISTINCT id FROM K SELECT DISTINCT id,age FROM K
排序---order by 子句
order by 子句,可以根据其后指定的字段对结果集按照该字段的值进行升序或者降序排列。
ASC:升序,不写默认是升序。
DESC:降序
order by 子句必须放在sql语句后面。
select sal,kname from K order by sal DESC
order by 多字段排序
首先先按照第一个字段的排序方式对结果集进行排序,当第一个字段有重复值时才会按照第二个字段排序方式进行排序,一次类推,每个字段都可以单独指定排序方式。
select id,depino,sal from k order by depino,sal DESC
排序字段中含有null 值,null被认作为最大值。
select id,kname,pid from k order by pid DESC
聚合函数
聚合函数(多行函数,分组函数),用来对结果集某些字段的 值进行统计。
MAX,MIN
max,min求给定字段的最大值和最小值。
select max(sal) FROM k select min(sal) FROM k
AVG,SUM
avg求平均值,sum求总和
select avg(sal),sum(sal) from k
count()函数
count 函数不是对给定的字段值进行统计,而是对给定字段不为null的记录数进行统计。
实际上所有聚合函数都忽略null值统计。
通常查看表的记录数可以使用count(*)
select count(pid) from k select count(nvl(pid,0)) from k select count(*) from k
分组
group by 子句
group by 可以将结果集按照其后指定的字段相同的记录看做一组,然后配合聚合函数进行更细分的统计工作。
select avg(sal),depino from k group by depino
group by 也可以根据多个字段进行分组,分组原则为这几个字段值都相同的记录看做一组。
select kname,sal ,depino from k group by sal,depino
在查询select子句中,出现了聚合函数,那么凡是不在聚合函数中的其他的字段必须出现在group by子句中。反过来并不是必须的。
where 中不能使用聚合函数作为过滤条件,原因是过滤时机不对。
where在数据库检索表中数据时,对数据逐条过滤以决定是否查询出该数据时使用的,所以where 用来确定结果集的数据。
使用聚合函数的结果作为过滤条件,那么一定是数据从表中查询完毕(where在查询过程中发挥作用)得到的结果集,并且分组完毕才能进行聚合函数统计结果,得到后才可以对分组进行过滤,由此可见这个过滤时机在where之后进行的。
聚合函数的过滤条件要在having子句中,使用HAVING必须跟在group by子句之后。HAVING是用来过滤分组的。
select avg(sal),depino from k group by depino Having avg(sal)>1000
查询语句的顺序