oracle查询之单表查询

查询一共有6个子句
书写顺序 执行顺序 作用
在这里插入图片描述

一、单表查询
投影查询

select sname (as) 姓名,sage 年龄 from student --为了减小数据库的负担,尽量缩减语句
select distinct sage,ssex from student --加上distinct就是去重,修饰的后方的组合

*的作用是啥? *里面包含所有的属性,比如select *就是显示所有的属性

select sname             --显示name
from student            --from做for循环
where sage>19           --取出一个给where一个比大小,进行筛选

where(筛选)语句的特点:
1:比大小 < > <= >= !=<> =(数据库的=不是赋值) 数值可以比大小,字符串也可以比大小

2:支持逻辑运算 and or not 加括号可以改变优先级 判断逻辑时注意理解中文的意思

3:逻辑关系的优先级
where snativeplace=上海or snativeplace=北京and ssex= 注意与或非三者的优先级()>not>and>or
select * from student
where not ssex= #not用来修饰右侧的表达式,相当于取反

4:支持连续的数据闭空间,用between

where sage between 19 and 22

5:支持不连续的数据空间,用in

where sage in(19,20,33

6:支持对空的匹配
空存在的几种形式:
这种字符串不是空,因为字符串内部分配了一个字节的内存
空的实际含义是没有分配内存,因此用null来表示空

where ssex=`  `                      -- `  `并不是空
where ssex=null                  --不能用=来表示空,需要用is来表示空
where ssex is not null

7:支持迷糊匹配,用like %代表任意多个任意字母 _表示一个任意字母
精确匹配 where sname =李四
模糊匹配 where sname like 王%
只要是比大小一定是精确匹配

group by(分组)语句:
分组 分组完成则再无个体,以后再执行时不再单个筛选,不能显示分组以外的其他属性,例如group by ssex,那么显示的时候只有男生一组,女生一组

select  ssex
from student
where sage>19
group by ssex                    --根据性别分组的,后续查询就只能查询性别

group by 分组特征
1:投影的属性必须来自分组特征(在group by 之后执行的语句受限)
2:分组的意义在于统计,先分组才能统计(有些时候没有分组,但是进行了统计,这时候是默认分组)
假如出现两个同名的,再按照学号进行一次分组,每个人的姓名和学号就可以一一对应

select ssex,max(sage),min(sage),avg(sage),sum(sage),count(*)
from student
group by ssex

在mark表中找出所有学生的学号,最高分,均分,以及选修课程数目

select sid,max(cmark),avg(cmark),count(*)      --使用count(*)时要注意各个属性的对应关系
from mark
group by sid

count 是计数,只考虑你是否是空,只要不是空都+1

在学生表中,找出男生,将男生按照班级分组,统计他们来自多少个地区。

select sclass,count(distinct snativeplace)                  --这里就不能用count(*)因为可能有没有填的人
from student
where ssex='男'
group by sclass

请显示学生的学号以及每个学生80分以上的课程数

select sid,count(*)
from mark
where cmark>80
group by sid

3:默认分组(可以不写group by ,但是也有分组,默认将整张表分为一个组)在不好分组时使用

select max(sage)             --因为是分组所以就不能查询别的东西
from student

4:支持多属性分组

select
from student
group by sage,ssex

having(筛选)语句:
having过滤的是分组(包含统计)
练习:请找出各个班级的男生人数,请用两种不同的方法实现
方法一:先把男生筛选出来,再把筛选出来的男生进行分组,再统计。

select sclass,count (ssex)
from student
where ssex='男'
group by sclass

方法二:先将所有的人按照班级,性别分组,再筛选出性别为男生的分组,再进行统计

select sclass,ssex,count(ssex)
from student
group by sclass,ssex
having ssex='男'            --筛选分组特征,可以进行统计筛选

order by(排序)语句:

  1. asc desc,修饰前面的属性
select *
from student
order by sage desc

根据均分降序显示每个学生的学号和均分
select sid,avg(cmark) 均分

from mark
group by sid
order by 均分 desc

2.可以进行多属性排序

select *
from student
order by sage desc,sid desc      --先进行年龄排序,年龄一样的再进行学号排序

同一个学生的选课记录集中显示,但是自己的选课记录要根据成绩降序排序

select *
from mark
order by sid,cmark desc;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值