Oracle SQL语句总结

算法比较运算符

  • < 小于
    • 求年龄小于27岁的同学
select * from S 
    where AGE < 27;
  • <= 小于等级
    • 求年龄小于等于27岁的同学
select * from S 
    where AGE <= 27;
  • > 大于
    • 求年龄大于27岁的同学
select * from S 
    where AGE > 27;
  • >= 大于等于
    • 求年龄大于等于27岁的同学
select * from S 
    where AGE >= 27;
  • = 等于
    • 求年龄等于27岁的同学
select * from S 
    where AGE = 27;
  • <> 不等于
    • 求年龄不等于27岁的同学
select * from S 
    where AGE <> 27;

逻辑运算符

  • and 表示并(就是需要同时达到要求)
    • 求年龄小于30的男生
select * from S 
    where AGE < 30 
    and 
    SEX = '男';
  • or 表示或(就是只要有一个满足要求)
    • 求年龄小于30的男生或者年龄大于30的女生
select * from S 
    where (AGE < 30 
        and 
        SEX = '男') 
    or 
    (AGE > 30 
        and 
        SEX = '女');
  • not 表示非(需要与and、or连用,形成 and not/ or not)
    • 求男生年龄小于40岁,但是年龄不在21-30之间的,或者学号等于805的同学的信息。
select * from S 
    where SNO = '801' 
    or
    (AGE not between 21 and 30 
        and not 
    AGE >= 40);

其他操作符

  • between and 在a, b 之间
    • 求年龄在30~50之间的同学
select * from S 
    where AGE between 30 and 50;
  • not between and
    • 求年龄不在30~50之间的同学
select * from S 
    where AGE not between 30 and 50;
  • in 可以批量设置查询值
    • 求年龄分别为25、27、52岁的同学
select * from S 
    where AGE in(25, 27, 52);
  • not in 可以批量设置查询值
    • 求年龄分别不为25、27、52岁的同学
select * from S 
    where AGE not in(25, 27, 52);
  • is 可以用来判断null
    • 求没有选专业的学生
select * from S
    where DEPT is null;
  • is not 可以用来判断 不是null(注意这里是is not 而不是ppt中的not is)
    • 求已经选专业的学生
select * from S
    where DEPT is not null;
  • like 模糊查询,最常用和最好的就是%X、X%、%X%这样的
    • 寻找名字以’刘’开头和名字以’章’结尾以及名字中间有’杰’的同学
select * from S
    where SNAME like '刘%'
    or
    SNAME like '%章'
    or
    SNAME like '%杰%';
  • not like 模糊查询,最常用和最好的就是%X、X%、%X%这样的(还有其他方法具体看这里
    • 寻找名字不是以’刘’开头和不是以’章’结尾以及中间没有有’杰’的同学
select * from S
    where SNAME not like '刘%'
    and
    SNAME not like '%章'
    and
    SNAME not like '%杰%';

谓词

  • exists (SQL 语言) 判断有没有返回值
    • 求有选课的学生
select SNO from S
    where exists(select * from SC
        where S.SNO = SC.SNO);
  • not exists
    • 求没有选课的学生
select SNO from S
    where not exists(select * from SC
        where S.SNO = SC.SNO);
  • all 所有数据满足条件时才成立
    • 求学生所有课程的成绩都大于30分的同学
select SNO from S
    where 30 < all(select GRADE from SC 
        where S.SNO = SC.SNO) 
    and exists(select * from SC
        where S.SNO = SC.SNO);
  • some(any)
    • 求学生只要有一门课程的成绩大于等于30分的同学
select SNO from S
    where 30 <= some(select GRADE from SC 
        where S.SNO = SC.SNO) 
    and exists(select * from SC
        where S.SNO = SC.SNO);

基础分组函数

  • count(*) 计算元祖(行数)的个数
    • 求一共有几个同学
select count(*) from S;
  • count(列名) 对一列的值进行求个数(不计null)
    • 求几个选了专业的同学
select count(DEPT) from S;
  • sum(列名) 对一列的值进行求和
    • 求所有学生的年龄和
select sum(AGE) from S;
  • avg(列名) 对一列的值求平均值
    • 求所有学生的平均年龄
select avg(AGE) from S;
  • max(列名) 对一列的值求最大值
    • 求所有学生中的最大年龄
select max(AGE) from S;
  • min(列名) 对一列的值求最小值
    • 求所有学生中的最小年龄
select min(AGE) from S;

分组运算符

  • group by 列名 根据什么进行分组
    • 分别求出男生和女生的平均年龄
select SEX, avg(AGE) from S
    where SEX is not null
    group by SEX;
  • having 基础分组函数组成的表达式 决定分组后,显示什么
    • 求出学生中平均成绩大于60的
select SNO, avg(GRADE) from SC
    group by SNO
    having avg(GRADE) > 60;
  • order by 列名 排序方法(desc/asc)
    • 将学生按平均成绩排序(降序)
select SNO, avg(GRADE) from SC
    group by SNO
    order by avg(GRADE) desc;

整合利用

  • as 的使用
select SEX as 性别, avg(AGE) as 平均数 from S
    where SEX is not null
    group by SEX;
  • 针对 ORA-00979: 不是 GROUP BY 表达式 错误的解决
    • 学生成绩排榜(平均成绩从大到小顺序,要求给出学号、姓名和总成绩),就需要新建一个临时表 其中t是这个表的名字(中间有个空格)
select S.SNO, S.SNAME, T.SU from S, (select sno, avg(GRADE) as AV, sum(GRADE) as SU from SC
    group by sno) T
        where S.SNO= T.SNO
        order by T.AV desc;

附录

本文测试数据
SQL语句习题

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值