基本表查询
--查询emp表中的所有数据
select * from emp;
--查询所有员工的姓名,月薪资,年薪
select ename,sal,sal*12 from emp;--查询语句中使用算术表达式
--查询所有员工的姓名,工作,入职时间
select ename,job,hiredate from emp;
--使用别名
--查询所有员工姓名、月薪、年薪(不包括津贴)
select ename "姓 名",sal 月薪,sal*12 年薪 from emp;
select ename as "姓名",sal as 月薪,sal*12 as 年薪 from emp;
--连接符||
select ename||'的月薪是'||sal||'和年薪是'||sal*12 工资情况 from emp;
--去除重复
select distinct job from emp;
select distinct sal,job from emp;
--排序
select ename,job,sal,hiredate from emp order by sal; --默认从小到大,就是asc(升序)
select ename,job,sal,hiredate from emp order by sal asc;
select ename,job,sal,hiredate from emp order by sal desc;
select ename,job,sal,hiredate from emp order by sal,hiredate;
select ename,job,sal,sal*12 年薪 from emp order by 年薪,ename;
where子句筛选(单条件筛选)
--查看工资等于1250的员工信息
select * from emp where sal=1250;
--查看工作等于CLERK的员工信息
select * from emp where job='CLERK';
--查看工资大于1250的员工姓名和工作
select ename,job from emp where sal>1250;
--查看工资大于等于2000的员工信息
select * from emp where sal>=2000 order by sal;
--查看工资小于等于2000的员工信息;
select * from emp where sal<=2000 order by sal;
--查看工资不等于1500的员工信息
select * from emp where sal<>1500 order by sal;
--查看入职日期在81年后的员工信息
select * from emp where hiredate>'31-12月-1981';--正确写法
select * from emp where hiredate>'1981/12/31';--错误
select * from emp where hiredate>'1981-12-31';--错误
where子句多条件筛选和使用关键字
--查询工资在2000-3000之间的员工信息
select * from emp where sal>=2000 and sal<=3000;
select * from emp where sal between 2000 and 3000; --使用between and关键字
--查询工作为SALESMAN,ANALYST,MANAGER的员工信息
select * from emp where job='SALESMAN'or job='ANALYST'or job='MANAGER';
select * from emp where job in('SALESMAN','ANALYST','MANAGER'); --使用in关键字
--查询姓名中包含s的,以s开头的,以s结尾的,第二个字符为A的员工信息(模糊查询)。
select * from emp where ename like '%S%';--使用like关键字
select * from emp where ename like 'S%';
select * from emp where ename like '%S';
select * from emp where ename like '_A%';
select * from emp where ename like'%S%'or ename like 'S%'or ename like '%S' or ename like '_A%';
--查询名字中有下划线的
select * from emp where ename like'%F_%'escape 'F'; --使用escape关键字
select * from emp for update;
--查询有津贴的员工信息
select * from emp where comm is not null; --使用is not null进行查询
select * from emp where comm is null;
--查询工作为SALESMAN,MANAGER并且工资大于2000的员工信息
select * from emp where job='SALESMAN'or job='MANAGER'and sal>2000;--and的优先级大于or
select * from emp where (job='SALESMAN'or job='MANAGER')and sal>1500;--利用括号提升优先级
单行函数学习:
--注意:函数是不会改变原始数据的。
--字符函数
--initcap(字符),将首字母大写
select initcap(ename),ename from emp;
--lwoer(字符),将字符转换为小写
select lower(ename),ename from emp;
--ltrim('字符','要裁剪的字符'),从左边开始减掉指定的字符串。
select ltrim('abcqrewq','abcqre') from dual;
--数字函数
--abs(数值),返回绝对值
select abs(-24)from dual;
--ceil(数值),返回最接近的最大的整数。
select ceil(3.1111)from dual;
--mod(数值,数值),返回余数
select mod(5,7) from dual;
--日期函数
-- months_between('日期','日期'),返回两个日期间的月份数
select months_between('03-7月-2016',sysdate) from dual;
--add_months('日期',月份数),返回加上指定月份数后的新日期
select add_months('04-9月-2123',5) from dual;
转换函数学习
--to_number()
select to_number('2341'),to_number('123.456'),'123'+5 from dual;
--to_char()
--数字转换为字符
select to_char(123) from dual;
select to_char(1234,'L000,000,000.00')from dual;
select to_char(1234,'L999,999,999.00')from dual;
--日期转换为字符
select to_char(hiredate),hiredate from emp;
select to_char(hiredate,'yyyy-mm-dd'),hiredate from emp;
select to_char(hiredate,'yyyy/mm/dd'),hiredate from emp;
select to_char(hiredate,'yyyy"年"mm"月"dd"日"'),hiredate from emp;
--to_date()
--字符转换为日期
select to_date('09-12月-2017') from dual;
select to_date('2017-10-10','yyyy-mm-dd') from dual;
select to_date('2017/10/10','yyyy/mm/dd') from dual;
--查询入职日期在81年后的员工信息
select * from emp where hiredate>'31-12月-1981';--使用默认格式
select * from emp where hiredate>to_date('1981-12-31','yyyy-mm-dd');--将字符串转换成日期进行比较
select * from emp where to_char(hiredate,'yyyy-mm-dd')>'1981-12-31';--将日期转换成字符串再进行比较
多行函数
--max
select max(sal) from emp;
--min
select min(sal) from emp;
--sum
select sum(sal) from emp;
--avg
select avg(sal) from emp;
--count
select count(*) from emp;
select count(comm) from emp;
其他函数
--nvl
select ename,job,sal 基本工资,comm 津贴,sal+nvl(comm,0)月薪,nvl(comm,0)from emp;
--nvl2
select ename,job,sal 基本工资,comm 津贴, nvl2(comm,comm+sal,sal)月薪 from emp;
--decode
select ename,job,decode(job,'PRESIDENT','总裁','MANAGER','经理','ANALYST','分析师','SALESMAN','销售人员','普通员工') 岗位描述,sal from emp;