--查询部门号是10的员工
Select * from emp where deptno=10;
--日期格式敏感,查询入职日期为17-11月-81的员工,可以查询出结果
Select * from emp where hiredate=’17-11月-81’
--如果查询1981-11-17,会报错,报文字与格式字符串不匹配
/*
--默认日期格式:DD-MON-RR,这个格式是Oracle9i之后的格式,9i之前是DD-MON-YY。有什么区别呢?
--因为9i数据库的版本跨越了2000年,2000年有一个特别著名的问题,就是千年虫问题。什么是千年虫问题呢?
--1998和2098年,用YY表示的话,1998是98,2098还是98区分不开,这就千年虫问题。RR虽然还是两位,但
--是他的内部算法将他们区分开了。
*/
--通过查询系统日期可以知道当前日期格式:
Select sysdate from dual;
--专业的做法是查询参数设置:
Select * from v$nls_parameters;
--修改日期格式,如果是session就是修改当前会话的格式,只在当前会话中有效,如果是global就是修改全局变量,
--global只有系统管理员才可以修改。如果数据库字段定义为日期格式,要查询这个字段,就需要使用规定的日期格
--式来查询。
Alter session set NLS_DATE_FORMAT=’yyyy-mm-dd’;
--赋值时要使用 :=来赋值。用于plSQL中,plSQL是一种程序语言,例如:Java中的 int a=0;与Oracle中的
--a number := 0;是等价的。
--比较运算符:=(不是==),>,>=,<,<=,<>(不等于,也可以是!=)
--其他比较运算符:BETWEEN… AND … (在两个值之间),IN(set)(等于值列表中的一个),LIKE (模糊查询),IS NULL(空值)
--between … and … ,查询薪水在1000-2000之间的员工,(小的值在前,大值在后)
Select * from emp where sal between 1000and 2000;
--in 在这个集合中,查询部门号是10和 20 的员工
Select * from emp where deptno in (10,20);
--not in 不在集合中
Select * from emp where deptno not in(10,20);
--null值的注意:如果在集合中,含有null,不能使用not in,但是可以使用in。
--like模糊查询:符号有: %和 _ ,例如查询名字以s开头的员工
Select * from emp where ename like ‘s%’;
--关于下划线:选择名字中有_的员工,如果按下面的语句查询,会得到所有的记录,为什么呢?
--在模糊查询当中,% _有特殊的含义,所以要转义字符,需要用escape声明一个转义字符。
Select * from emp where ename like ‘%_%’;
--使用了转义字符的语句
Select * from emp where ename like ‘%\_%’escape ‘\’;
--不使用delete语句删除一条数据。可以使用rollback,来回滚刚才的操作。
--我们没有开启事务,如何进行回滚操作呢?Oracle是默认自动开启事务的。只要事务没有提交,都可以回滚。
--逻辑运算符:ANDNOT OR
--使用ORDERBY字句排序。ADC升序(默认),DESC降序。注意ORDERBY在Select语句的结尾。
--查询员工信息,按照月薪排序
Select * from emp order by sal;
--注意:orderby后面可以跟 列,表达式,别名,序号
--按照年薪排序
Select ename,sal,sal*12 from emp order bysal*12 desc;
--别名
Select ename,sal,sal*12 年薪 from emporder by 年薪 desc;
--序号,select后面的列号,第三列是sal*12年薪,列号必须存在,
Select ename,sal,sal*12 年薪 from emporder by 3 desc;
--order by + 多个列,先按照部门号排序,部门号相同,再按照薪水排序。Order by作用于后面的所有的列。
Select * from emp order by deptno,sal;
--desc 只作用于离他最近的列。按照部门升序排序,部门号相同,再按照sal降序排序
Select * from emp order by deptno,sal desc;
--如果想让两个列同时降序排序,需要将两个列中都加上desc限制符。
Select * from emp order by deptno desc,saldesc;
--排序问题:查询员工,按照奖金倒序排序。奖金中有null值,null值都排到了前面,我们希望的是将Null值排到
--后面,这样才符合人们的习惯。
Select* from emp order by comm desc;
--如何解决呢?排序的时候,如果有null,如何将null排到最后?在排序后面加上 nulls last即可。
Select* from emp order by comm desc nulls last;