第一: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 ,分组,集合函数,筛选)