Oracle基础查询语句80条

偶然看到有网友总结了99条sql语句,自己又手敲了一遍,明天还要上班就暂时完成了前面80条,剩下的有空再分享给大家

–1、查询所有内容
select * from emp;
–2、查询编号,姓名,工作
select empno,ename,job from emp;
–3、分别取别名
select empno 编号,ename 姓名,job 工作 from emp;
–4、查询所有员工的工作
select job from emp;
–5、查询所有的工作(去除重复)
select distinct job from emp;
–6、去除掉员工编号和工作重复的组合
select distinct empno,job from emp;
–7、查询员工编号,姓名,工作,但是根据特定显示格式
select ‘编号是:’||empno||’的雇员,姓名是:’||ename||’工作是:’||job from emp;
–8、求出每个雇员的姓名及年薪
select ename,sal*12 income from emp;
–9、求出工资大于1500的所有雇员信息
select * from emp where sal > 1500;
–10、查询出每个月可以得到奖金的雇员信息
select * from emp where comm is not null;
–11、查询出没有奖金的雇员信息
select * from emp where comm is null;
–12、查询出基本工资大于1500同时可以领取奖金的雇员信息
select * from emp where sal > 1500 and comm is not null;
–13、查询出基本工资大于1500或者可以领取奖金的雇员信息
select * from emp where sal > 1500 or comm is not null;
–14、查询出基本工资不大于1500或者不可以领取奖金的雇员信息
select * from emp where not (sal > 1500 and comm is not null);
–15、查询基本工资大于1500但是小于3000的全部雇员信息
select * from emp where sal > 1500 and sal < 3000;
–16、查询基本工资大于等于1500,但是小于等于3000的全部雇员信息
select * from emp where sal > 1500 and sal < 3000
–17、查询出在1981年雇佣的全部员工信息
select * from emp where hiredate between ‘1-1月-81’ and ‘31-12月-81’;
–18、查询出姓名是smith的雇员信息
select * from emp where ename = ‘SMITH’;
–19、查询出雇员是7369,7499,7521的雇员信息
select * from emp where empno = 7369 or empno = 7499 or empno = 7521;
select * from emp where empno in (7369,7499,7521);
–20、查询出雇员不是7369,7499,7521的雇员信息
select * from emp where empno not in (7369,7499,7521);
–21、查询出雇员姓名是smith,allen,king的雇员信息
select * from emp where ename in(‘SMITH’,’ALLEN’,’KING’);
–22、查询出所有雇员姓名中第二个字母包含M的雇员信息
select * from emp where ename like ‘_M%’;
–23、查询出所有雇员小明名中包含字母M的雇员信息
select * from emp where ename like ‘%M%’;
–24、查询出在1981年雇佣的雇员信息
select * from emp where hiredate like ‘%81%’
–25、查询工资中包含5的雇员信息
select * from emp where sal like ‘%5%’
–26、查询雇员编号不是7369的雇员信息
select * from emp where empno != 7369;
–27、要求按照工资由低到高排序
select * from emp order by sal;
select * from emp order by sal asc;
–28、要求按照工资由高到低排序
select * from emp order by sal desc;
–29、要求查询出20部门的所有雇员信息,查询出的信息按照工资由高到低排序,如果
–工资相等,则按照雇佣日期有早到晚排序
select * from emp where deptno = 20 order by sal desc,hiredate asc;
–30、将小写字母变为大写字母
select upper(‘scl’) from dual;
–31、将大写字母变为小写字母
select lower(‘SCL’) from dual;
–32、要求查询出姓名是smith的雇员信息
select * from emp where ename = upper(‘smith’);
–33、使用initcap()函数将单词的第一个字母大写
select initcap(‘scl’) from dual;
–34、将顾源表中的雇员姓名变为开头字母大写
select initcap(ename) from emp;
–35、将字符串‘hello’和‘world’进行串联
select concat(‘hello’,’world’) from dual;
–36、对字符串进行操作的是常用字符处理函数
–从第一位截取到第三位
select substr(‘hello’,1,3) from dual;
–字符串替换,将l替换成x
select replace(‘hello’,’l’,’x’) from dual;
–37、显示所有雇员的姓名及姓名的后三个字符
select ename,substr(ename,length(ename)-2) from emp;
select ename,substr(ename,-3,3) from emp;
–38、使用数值函数执行四舍五入操作
select round(789.536) from dual;
–39、要求将789.536数值保留两位小数
select round(789.536,2) from dual;
–40、要求将789.536数值中的证书的十位进行四舍五入进位
select round(789.536,-2) from dual;
–41、采用trunc()函数不会保留任何小数,而且小数点也不会执行四舍五入的操作
select trunc(789.536) from dual;
–42、通过trunc()也可以制定小数点的保留位数
select trunc(789.536,2) from dual;
–43、使用负数表示位数
select trunc(789.536,-2) from dual;
–44、使用mod()函数可以进行取余的操作
select mod(10,3) from dual;
–45、显示10部门雇员进入公司的星期数(当前日期-雇佣日期=天数/7=星期数)
select empno,ename,round((sysdate-hiredate)/7) from emp where deptno = 10;
–46、日期函数
–求给定日期范围的月数
month_between();
–求制定日期加上指定的约束,求出之后的日期
add_months();
–指定日期的下一个日期
next_day();
–求出给定日期当月的最后一天日期
last_day();
–47、测试日期函数
select empno,ename,months_between(sysdate,hiredate) from emp;
select empno,ename,round(months_between(sysdate,hiredate)) from emp;
–48、求当前日期加上四个月
select sysdate,add_months(sysdate,4) from dual;
–49、求下个星期一的日期
select next_day(sysdate,’星期一’) from dual;
–50、求当前日期月份的最后一天
select last_day(sysdate) from dual;
–51、转换函数
–转换成字符串
to_char();
–转换成数字
to_number();
–转换成日期
to_date();
–52、查询所有雇员的雇员编号,姓名,雇佣日期
–年月日分开显示
select empno,ename,to_char(hiredate,’yyyy’) year,to_char(hiredate,’mm’) months,
to_char(hiredate,’dd’) day from emp;
–年月日按照特定格式显示
select empno,ename,to_char(hiredate,’yyyy-mm-dd’) from emp;
–年月日按照特定格式显示(去除数字之前的0)
select empno,ename,to_char(hiredate,’fmyyyy-mm-dd’) from emp;
–53、查询所有雇员的编号,姓名和工资
select empno,ename,sal from emp;
–按照三位分割
select empno,ename,to_char(sal,’99,999’) from emp;
–显示人民币符号
select empno,ename,to_char(sal,’L99,999’) from emp;
–显示美元符号
select empno,ename,to_char(sal,’$99,999’) from emp;
–54、字符串转换成数字进行数学运算
select to_number(‘123’)+to_number(‘123’) from dual;
–55、将一个字符串转换成日期类型
select to_date(‘2009-01-01’,’yyyy-mm-dd’) from dual;
–56、求出每个雇员的年薪(要求加上奖金)
–如果没有奖金的话则年薪为空,必然不符合要求!
select empno,ename,sal,comm,(sal+comm)*12 from emp;
select empno,ename,sal,comm,nvl(comm,0),(sal+nvl(comm,0))*12 income from emp;
–57、decode()函数类类似于if…else…else语句
select decode(3,1,’内容是1’,2,’内容是2’,3,’内容是3’) from dual;
–58、查询出雇员的编号,姓名,雇佣日期及工作,要求将雇员的工作替换成以下信息:
select empno 雇员编号,ename 雇员姓名,hiredate 雇佣日期,
decode(job,’CLERK’,’业务员’,’SALESMAN’,’销售人员’,’MANAGER’,’经理’,’ANALYS’,’分析员’,
‘PERSIDENT’,’总裁’) 职位 from emp;
–59、笛卡尔积(交叉连接)
select * from emp,dept;
–一下常用
select * from emp cross join dept;
–60、内连接
select * from emp e,dept d where e.deptno = d.deptno;
select * from emp e inner join dept d on e.deptno = d.deptno;
–以下常用
select * from emp e join dept d on e.deptno = d.deptno;
–61、自然连接
select * from emp natural join dept;
select * from emp e join dept d using(deptno);
–62、要求查询出雇员的编号,姓名,部门编号,名称地址
select e.empno,e.ename,d.deptno,d.dname,d.loc from emp e join dept d on e.deptno = d.deptno
–63、要求查询出雇员的姓名,工作,雇员的直接上级领导姓名
select e.ename,e.job,m.ename,d.dname from emp e,emp m,dept d where e.mgr = m.empno
and e.deptno = d.deptno;
–64、要求查询出雇员的姓名,工作雇员的直接上级领导姓名以及部门名称
select e.ename,e.job,m.ename,d.dname from emp e,emp m,dept d where e.mgr = m.empno
and e.deptno = d.deptno;
–65、要求查询出每个员工的姓名,工资,部门名称,工资在公司的等级,及其领导姓名及工资所在公司的等级
select e.ename,e.sal,d.dname,s.grade,m.ename,m.sal,ms.grade
from emp e,
dept d,salgrade s,emp m,salgrade ms where e.deptno = d.deptno
and e.sal between s.losal and s.hisal and e.mgr = m.empno and m.sal between ms.losal and ms.hisal;
–66、
select empno,ename,d.deptno,dname,loc from emp e,dept d where e.deptno = d.deptno;
select empno,ename,d.deptno,dname,loc from emp e inner join dept d on
e.deptno = d.deptno;
–67、左外连接
select empno,ename,d.deptno,dname,loc from emp e left join
dept d on e.deptno = d.deptno;
–68、右外连接
select empno,ename,d.deptno,dname,loc from emp e right join dept d
on e.deptno = d.deptno;
–69、求每个员工的经理人的编号及姓名
select e.empno,e.ename,m.empno,m.ename from emp e ,emp m where e.mgr = m.empno;
–70、左外连接求每个员工的经理人
select e.empno,e.ename,m.empno,m.ename from emp e ,emp m where e.mgr = m.empno(+);
select e.empno,e.ename,m.empno,m.ename from emp e left join emp m
on e.mgr = m.empno;
–71、
select * from emp e,dept d where e.deptno = d.deptno and d.deptno = 30;
select * from emp e inner join dept d on e.deptno = d.deptno where d.deptno = 30;
select * from emp e join dept d on e.deptno = d.deptno where d.deptno = 30;
select * from emp e natural join dept d where deptno = 30;
select * from emp e join dept d using(deptno) where deptno = 30;
–72、
select e.ename,d.deptno,d.dname,d.loc from emp e right join dept d on e.deptno
= d.deptno;
select e.ename,d.deptno,d.dname,d.loc from emp e right outer join dept d
on e.deptno = d.deptno;
select e.ename,d.dname,d.deptno,d.loc from emp e ,dept d where e.deptno(+) =
d.deptno;
–73、求总员工数
select count(ename) from emp;
–74、求最低工资
select min(sal) from emp;
–75、求最高工资
select max(sal) from emp;
–76、求工资总和
select sum(sal) from emp;
–77、求平均工资
select avg(sal) from emp group by deptno;
–78、求部门编号是20的工资总数
select sum(sal) from emp where deptno = 20;
–79、求部门编号是20的共子平均数
select avg(sal) from emp where deptno = 20;
–80、求出每个部门的雇员数量
select deptno,count(deptno) from emp group by deptno;
select deptno,count(empno) from emp group by deptno;

猜你喜欢

转载自blog.csdn.net/Mattscl/article/details/72814524