您的位置:首页 > 其它

DQL:数据查询语言

2017-07-05 20:17 267 查看
查询语法格式:

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'张_'

_下划线表示匹配任意一个字符

排序:
d491
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: