DQL:数据查询语言

来源:互联网 发布:matlab 四维矩阵 画图 编辑:程序博客网 时间:2024/05/22 03:27
查询语法格式:
select 查询的字段名
from 数据源
where 查询的条件
group by 分组字段名
having 分组后的数据过滤条件
order by  排序字段 
asc 升序排序  
desc 降序排序
1:查询学生所有信息
如:--*表示所有的字段 如:select * from studnet
2:查询学生的学号和名字
如:--select sid,sname from studnet
注意:select 后只能出现表中存在的字段,
3:查询学生表的所有学生的学号,名字,地址,每一列的标题显示“学号”,名字,“”地址“”
如:1:select sid as 学号,sname as 姓名,saddress as 地址
from studnet
如:2:select sid as“【姓名】”
from studnet
--拼接字符(||)
4:查询学生表中的学号和姓名,并要求两个字段的数据显示为"[1_小明]"
select '[' || sid  || '_' || sname || ']'
from studnet
--’张三‘ 单引号中oracle中具有特殊含义,
如果拼接单引号字符则需要进行转义,转义字
如:select '''' || sname ||''''
from studnet
--带条件查询
5:查询学生表中学号为3的学生所有信息
如:select * --1
from studnet --2
where sid=3--3
执行顺序--》2--》3--》1
6:查询学生表中学生的年龄不在18-20之间的学生信息
select * --
from studnet --
where sage not between 18 and 20
7:查询学生表中出生日期为空的学生基本信息
select*
from studnet
where sbirthday is null

---模糊查询 (%  _)
1:查询学生表中姓张的学生的基本信息
select*
from studnet
where sname like ’张%‘ ---%表示匹配任意个数的任意字符
2:查询学生表的姓名带有“王”的字的学生基本信息
select*
from studnet
where sname like ’%王%‘
3:查询学生表中姓张的且名字只有两个字的基本信息
select*
from studnet
where sname like'张_'
_下划线表示匹配任意一个字符
排序:order by
查询学生的基本信息,并安装年龄升序排序
select*
from studnet 
order by sage  ----默认升序排序, asc
select*
from studnet 
order by sage desc  ----降序排序
查询学生表中学生的基本信息,先按年龄升序排序,如果年龄相同,按学号降序排序
select*  --1
from studnet  ---2
order by sage asc,sid desc ---3
---多字段排序,排序字段之间逗号隔开
执行顺序:--》2--》1--》3

聚合函数:
count()统计总记录数
sum()求和
avg() 求平均值
max()最大值
min()最小值
1:统计学生表中所有学生的人数
注意:
select count(*) *表示匹配任意的任意字段名
from studnet
select count(sid) 根据sid字段值来统计数据,
如果字段的值为空则不计入统计
from studnet
根据常量列来统计学生表中的数据
select count(1)
from studnet
select count(1),sum(sage),avg(sage),max(sage),min(sage)
统计学生表中男生和女生的入数
select count(1) from t_student where ssex='男'
select count(1) from t_student where ssex='女
分组:分组和聚合函数一般是一起使用,分组单独使用时,相当于去掉重复的数据
不建议单独使用
select * from studnet 
select ssex,count(1)
from studnet 
group by ssex
select distinct ssex from student
distinct --》去掉重复数据
统计学生表中年龄在18-20之间的学生男生和女生的人数
select * 
from studnet
where by between 18 and 20
group by ssex 
where 执行在group by之前,主要为了确定分组的数据源

统计学生表中的男生和女生的人数,并人数超过5的
select ssex,count(1)
from studnet
group by ssex
having count(1)>5
--having 执行在group之后,主要是为了分组统计后的数据进行过滤
统计学生表中年龄在18-20之间的学生男生和女生的人数,显示人数超过5的
select ssex,count(1)
from studnet
where sage between 18 and 20
group by ssex
having count(1)>5


常用的函数
1:to_date()将字符串类型的数据转化成指定格式日期类型数据
2:to_char()将日期类型数据转化成字符串数据
select to_char(sysdate,‘yyyy-mm-dd’)from dual;
--HH24:mi:ss,HH24表示24进制的时间,HH表示12进制的时间
select to_char(sysdate,‘yyyy-mm-dd HH24:mi:ss’)from dual;

to_char(sysdate,‘yyyy年mm月dd日“)
from dual;
注意:yyyy年mm月dd日 中文字符不是日期格式的字符
则需要使用双引号括起来
3:decode(字段名,值1,返回值1,值2,返回值2,。。。值n,返回值n默认值)
4:nvl(字段名,默认值)
当字段名的值为空时,则反回默认值,否则反回值的本身
1:select t.* decode(ssex ,null,'男',ssex)
from student t
2:select t.* nvl(ssex'男')
from student t
统计学生表中的年龄在【16-19】和【20-23】之间的学生人数
5:case when 条件 then值1 else 值2 end
select 
case when between 16 and 19 then 1 else 0 end,
case when between 20 and 23 then 1 else 0 end
from student
求和:
select 
sum(case when between 16 and 19 then 1 else 0 end) "【16-19】"
sum(case when between 20 and 23 then 1 else 0 end) "【20-23】"
from student
统计:
select 
count(case when between 16 and 19 then 1  end) "【16-19】"
count(case when between 20 and 23 then 1  end) "【20-23】"
from student
原创粉丝点击