复杂查询:where、五个集合函数、order by、group by、having、decode、sign、nvl

第一:dql:数据查询语言

1.语法

select 列名 【聚合函数】

from table_name 【 (中括号字面的可以不出现)

where (检索条件,也是过滤(对行))

order by(排序)

group by(分组)(后面这两必须同时出现)

having(也是过滤,但是是对分组的结果过滤) 】

2.where后的条件表达式的运算符:

> < >= <= and or not

in(在...里。in里面是个集合,例如判断某个学生的姓名是否在这里出现过,如果出现了就输出),

not in, is null, is not null(是否空),

like(模糊查询,%表示任意多个任意字符,_表示任意一个字符),

between and(只能比较数字和日期)

3.查询中常用的集合函数(方法的调用,返回一个值(就一个))

(1).max(列名)求最大值

(2).min(列名)求最小值

(3).avg(列名)求平均

(4).sum(列名)求和

(5).count(* or 列名)按照行求总数(这个是按照行算的,以上四个是按照列算的)

4.order by排序:asc(默认)小到大,desc大到小

select ssex from student order by age desc(都可以省略where)

5.group by:

统计男同学的人数,女同学的人数,还有性别为null的人数

(1).select ssex,count(*) from student group by ssex.---注释: (都可以省略where)聚合函数与分组函数在一起时,先分组在统计。

(2). select ssex from student where ssex is not null group by ssex (不合理,因为会先执行where在执行分组)(3). select ssex,count(*) from student group by ssex having count(*>=2)(对分组的结果进行统计)

6.group by中要注意的问题:

select后的列(1.必须出现在group by 。2.select 后的列必须出现在聚合函数中)

自我理解:

(1),如果想查sno,然后在group by 中出现sno,这就能确保查出来的是一个对象。

(2).五个集合函数的返回值都是一个对象(一个值),这样也确保了查询结果只有一个。

 7.nvl()

 nvl1():判断这一列的值是否为空,如果为空就显示我定义的值...(相等于if)

select student sno,sname,nvl(ssex,'密') from student

nvl2():如果为空就显示密,否则显示开....(相等于if else)

select student sno,sname,nvl(ssex,'开','密') from student 8.decode():....(相当于多重if)

8.select decode(2, 1,'a' ,2,'b' ,3,'c','d') from student

例题:select scid,sno,decode(cid, 1,'java' ,2,'oracle' ,3,'javaee') from score

9.sign函数:比较结果,如果是真返回1,假返回-1,相等返回0 例题:select sign(122-100) from dual

注意:查询中的执行步骤:先分组,在聚合,最后筛选。。。(where ,分组,集合函数,筛选)

猜你喜欢

转载自1601844782.iteye.com/blog/2267575