Oracle_day1(order by distinct like nulls last等基础部分)

1.nvl(a,b):表示,如果a为null,则显示b。 

2.oracle中判断字段是否为null不能用where a=null或where a!=null,这样永远都是false。而是应该用where a is null或where a is not null。

    空值:是指无效的,未指定的,未知的或不可预知的值。空值不是空格或0。

3.DISTINCT 用于去除重复数据

              (1)如果只是去除一列的重复数据,效果很明显

                

              (2)如果去除两列,发现某一列还是存在重复数据,那是因为,2列合并在一起,才算没有重复,要两列一起看

               

4.列的别名:紧跟列名,列名和别名之间的关键字AS可以省略,如果别名使用双引号,那么可以在别名中包含空格或特殊的字符,此时别名就区分大小写了。

5.MySql中字段的值是不区分大小写的,而Oracle是区分大小写的。 

SELECT * FROM EMP WHERE ENAME='ward';
SELECT * FROM EMP WHERE ENAME='WARD';

如果字段内容是ward小写的,那么oracl的sql条件写成大写就没有查询结果了。



6.BETWEEN...AND...

--包括边界,小值在前,大值在后
SELECT * FROM EMP WHERE SAL BETWEEN 1000 AND 2000;

7.IN:注意(如果集合中含有null值,不能使用NOT IN,但可以使用IN)

--等于括号中的一个
SELECT * FROM EMP WHERE DEPTNO IN(10,20,NULL);
--不等于括号中的一个
SELECT * FROM EMP WHERE DEPTNO NOT IN(10,20,NULL);

8.LIKE模糊查询: %表示零个或多个字符   _表示单个字符

--查询名字以S开头的员工信息
SELECT * FROM EMP WHERE ENAME LIKE 'S%';
--查询名字长度为4的员工信息
SELECT * FROM EMP WHERE ENAME LIKE '____';
--查询名字中含有下划线的员工,需要使用转义字符
SELECT * FROM EMP WHERE ENAME LIKE '%\_%' ESCAPE '\';

9.Oracle解析sql是从右至左的,所以在where condition1 or condition2  语句中将为真的那个条件写在condition2上时,效率会高。因为如果condition2写的是false,那么Oralce就会再去解析condition1。

10.Order by

单列排序

--按照年收入(月薪*12+奖金)来排序
SELECT ENAME,SAL,COMM,SAL*12+NVL(COMM,0) FROM EMP ORDER BY SAL*12+NVL(COMM,0)
SELECT ENAME,SAL,COMM,SAL*12+NVL(COMM,0) AS 年收入 FROM EMP ORDER BY 年收入
SELECT ENAME,SAL,COMM,SAL*12+NVL(COMM,0) FROM EMP ORDER BY 4  --4表示第几位,从1开始

多列排序

--ORDER BY 多列
SELECT * FROM EMP ORDER BY DEPTNO ,SAL ;--发现,作用于所有的列,如果第一列相同则按照第二列来排序,以此类推


SELECT * FROM EMP ORDER BY DEPTNO DESC ,SAL;--发现,DEPTNO是倒序,如果DAPTNO一样则按SAL升序排列

--按照奖金升序排列(结果是没有问题的)
SELECT * FROM EMP ORDER BY COMM ASC;
--按照奖金倒序排列(发现NULL值会出现在前面,如果直接这样显示在jsp页面上体验很不好,所以要用NULLS LAST关键字,将NULL值在有值的后面显示)
SELECT * FROM EMP ORDER BY COMM DESC 

用nulls last关键字解决。

SELECT * FROM EMP ORDER BY COMM DESC NULLS LAST;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值