1.oracle简单的查询
1.使用password命令修改密码
password
2.退出sqlplus工具
exit
3.查询当前用户
show user
4.查询hr用户下的所有对象,使用tab表,tab表每个用户下都有,作用是查询该用户都有哪些表
select * from tab;
5.设置显示的列宽(字符型)
column 列名 format a16;
6.设置显示的列宽(数字型)只能用9一个9代表一位
column 列名 format 9999;
7.查看表结构
desc emp;
------------------------------------------select子句-----------------------------------------
8.查询所有内容(*代表通配,表示查询出该表中所有的字段,一般不推荐使用)
SELECT * FROM EMP;
或者
SELECT empno,ename,job,mgr,hiredate,sal,comm,deptno FROM EMP;
9.查询emp表的员工编号,姓名,工资,部门编号
SELECT empno,ename,sal,deptno FROM EMP;
10.查询emp表的不重复的工作
SELECT DISTINCT job FROM emp;
11.查询员工的编号,姓名,月薪,年薪(月薪12)
SELECT empno,ename,sal,sal12 “年薪” FROM EMP;
12.查询员工的编号,姓名,月薪,年薪,年收入(年薪+奖金)
别名不能使用单引号,因为oracle认为单引号为字符类型或日期类型
select empno 员工编号,ename 名字,sal 月薪,sal12 年薪,sal12+comm 年收入 from emp;
13.解决NULL的问题,使用NVL()函数,NVL(a,b):如果a为null则用b替代,如果a不是null就直接返回a
select nvl(null,10) from dual; – dual为哑表
14.使用dual哑表,使用字符串连接符号||,输出"hello world",在oracle中from是必须写的
select ‘hello’ || ‘world’ from dual;
15.使用sysdate显示当前时间
select sysdate from dual;
--------------------------------------------------where子句:筛选-------------------------------------------------
1.查询EMP表中20号部门的员工
select * from emp where deptno=20;
2.查询员工为SMITH的员工,字符串使用’’,内容大小写敏感
SELECT * FROM emp WHERE ename=‘SMITH’;
3.查询在2003年6月17号入职的员工
select * from emp where hiredate = ‘17-12月-80’;
4.查询工资大于1000美金的员工
SELECT * FROM emp WHERE sal > 1000;
5.查询工资不等于3000美金的员工【!=或者<>】
SELECT * FROM emp WHERE sal <> 3000;
6.查询薪水在1300到1600的员工,包含1300到1600
SELECT * FROM EMP WHERE SAL>=1300 AND SAL<=1600;
或
SELECT * FROM EMP WHERE SAL BETWEEN 1300 AND 1600;
7.查询薪水不在1300到1600的员工,不包含1300到1600
SELECT * FROM EMP WHERE SAL NOT BETWEEN 4800 AND 9000;
8.查询入职时间在"1981-2月-20"到"1982-1月-23"之间的员工
select * from emp where hiredate between ‘20-2月-81’ and ‘23-1月-82’;
注意:
1)对于数值型,小数值在前,大数值在后
2)对于日期型,年长值在前,年小值在后
9.查询20号或30号部门的员工
SELECT * FROM EMP WHERE deptno=20 OR deptno=30;
或
SELECT * FROM EMP WHERE deptno IN (20,30);
10.查询不在20或者30号部门的员工
SELECT * FROM EMP WHERE deptno NOT IN (20,30);
11.查询姓名以大写字母S开头的员工
SELECT * FROM EMP WHERE ename LIKE ‘S%’;
12.查询以A开头s结尾的员工
13.查询第二个字母是e的员工
14.模糊查询包含特殊字符(查询的数据中包含_%这样的特殊字符我们使用escape关键字解决)
添加一个带特殊符号的用户,比如tom_qq;注意empno不能重复
insert into emp (empno,ename) values(8888,‘tom_qq’);
查询:
SELECT * FROM EMP WHERE ename LIKE ‘%/_%’ escape ‘/’;
15.添加一个名字为’的用户
insert into emp (empno,ename) values (2222,’’’’);
16.添加一个名字为’‘的用户
insert into emp(empno,ename) values(2222,’’’’’’);
17.查询奖金为null的用户
SELECT * FROM EMP WHERE comm IS NULL;
注意:null不能参数=运算
null能参数number/date/varchar2类型运算
18.查询奖金非null的用户
SELECT * FROM EMP WHERE comm IS NOT NULL;
19.查询无奖金并且工资大于1500的员工
SELECT * FROM EMP WHERE comm IS NULL AND SAL > 1500;
20.查询职位是"MANAGER"或职位不是"ANALYST"的员工(方式一,使用!=或<>)
select *
from emp
where (job=‘MANAGER’) or (job<>‘ANALYST’);
21.查询职位是"MANAGER"或职位不是"ANALYST"的员工(方式二,使用not)
select *
from emp
where (job=‘MANAGER’) or (not(job=‘ANALYST’));
-------------------------------------------------------orderby子句-------------------------------------------------
1.查询员工信息(编号,名字,月薪,年薪),按照月薪排序,默认升序,若月薪相同,按照oracle内置的校验规则排序
select empno,ename,sal,sal12
from emp
order by sal asc;
2.查询员工信息(编号,姓名,月薪,年薪),按月薪降序排序
select empno,ename,sal,sal12
from emp
order by sal desc;
3.按照入职日期排序
select empno,ename,sal,hiredate,sal12 “年薪”
from emp
order by hiredate desc;
order by后面可以跟列名、别名、表达式、列号(从1开始,在select子句中的列号)
列名:
select empno,ename,sal,hiredate,sal12 “年薪”
from emp
order by hiredate desc;
别名:
select empno,ename,sal,hiredate,sal12 “年薪”
from emp
order by “年薪” desc;
表达式:
select empno,ename,sal,hiredate,sal12 “年薪”
from emp
order by sal12 desc;
列号,从1开始:
select empno,ename,sal,hiredate,sal12 “年薪”
from emp
order by 5 desc;
4.查询员工信息,按佣金升序或降序排列,null值看成最大值
select * from emp order by comm desc;
5.查询员工信息,对有佣金的员工,按佣金降序排列,当order by 和 where 同时出现时,order by 在最后
select *
from emp
where comm is not null
order by comm desc;
6.查询员工信息,按工资降序排列,相同工资的员工再按入职时间降序排列
select *
from emp
order by sal desc,hiredate desc;
select *
from emp
order by sal desc,hiredate asc;
注意:只有当sal相同的情况下,hiredate排序才有作用
7.查询20号部门,且工资大于1500,按入职时间降序排列
select *
from emp
where (deptno=20) and (sal>1500)
order by hiredate desc;