数据库高手来帮忙写几句简单的sql语句

2022-04-05 综合 55阅读
一共给你两分答案,第一份是本人写的.
第二份是上课的老师写的,你可以对比一下:
--1.选择部门30中的雇员.
select*fromempwheredeptno=30;

--2.列出所有办事员的姓名,编号和部门.
selectename,empno,deptnofromempwherejob='CLERK';

--3.找出佣金高于薪金的雇员.
select*fromempwherecomm>sal;

--4.找出佣金高于薪金的60%的雇员.
select*fromempwherecomm>sal*0.6;

--5.找出部门10中所有经理和部门20中所有办事员的详细资料.
select*fromempwhere(deptno=10andjob='MANAGER')or(deptno=20andjob='CLERK');

select*fromempwheredeptno=10andjob='MANAGER'
union
select*fromempwheredeptno=20andjob='CLERK';

--6.找出部门10中所有经理.部门20中所有办事员以及既不是
---经理又不是办事员但其薪金大于或等于2000的所有雇员的详细资料.
select*fromempwheredeptno=10andjob='MANAGER'
union
select*fromempwheredeptno=20andjob='CLERK'
union
select*fromempwheresal>=2000;

--7.找出收取佣金的雇员的不同工作.
selectdistinctjobfromempwherecommisnotnull;

--8.找出不收取佣金或收取的佣金低于100的雇员.
select*fromempwherecommisnullorcomm<100;

--9.找出各月最后一天受雇的所有雇员.
select*fromempwherehiredate=last_day(hiredate);

--10.找出早于12年前受雇的雇员.
select*fromempwheremonths_between(sysdate,hiredate)>144;

--11.显示只有首字母大写的所有雇员的姓名.
selectinitcap(ename)fromemp;
select*fromempwhereename=initcap(ename);

--12.显示正好为5个字符的雇员姓名.
selectenamefromempwherelength(ename)=5;

--13.显示不带有"R"的雇员姓名.
selectenamefromempwhereenamenotlike('%R%');

--14.显示所有雇员的姓名的前三个字符.
selectsubstr(ename,1,3)fromemp;

--15.显示所有雇员的姓名,用a替换所有"A"
selectreplace(ename,'A','a')fromemp;

--16.显示所有雇员的姓名以及满10年服务年限的日期.
selectename,add_months(hiredate,120)fromemp;

--17.显示雇员的详细资料,按姓名排序.
select*fromemporderbyename;

--18.显示雇员姓名,根据其服务年限,将最老的雇员排在最前面.
selectename,hiredatefromemporderbyhiredate;

--19.显示所有雇员的姓名.工作的薪金,按工作内的工作的降序顺序排序,而工作按薪金排序.
selectename,job,salfromemporderbyjobdesc,sal;

--20.显示所有雇员的姓名的加入公司的年份和月份,按雇员受雇日所在月排序,
--并将最早年份的项目排在最前面.
selectename,to_char(hiredate,'yyyy-mon')fromemporderbyto_char(hiredate,'mon'),to_char(hiredate,'yyyy');

--21.显示在一个月为30天的情况所有雇员的日薪金,忽略余数.
selectename,trunc(sal/30)fromemp;

--22.找出在(任何年份的)2月受聘的所有雇员。
select*fromempwhereto_char(hiredate,'mm')='02';

--23.对于每个雇员,显示其加入公司的天数.
selectename,floor(sysdate-hiredate)as天数fromemp;

--24.显示姓名字段的任何位置包含"A"的所有雇员的姓名.
select*fromempwhereenamelike'%A%';

--25.以年.月和日显示所有雇员的服务年限.
selectename,to_char(hiredate,'yyyy.mm.dd')fromemp;
___________________________________________________
使用scott/tiger用户下的emp表完成下列练习,表的结构说明如下

emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno部门编号)

------1.选择部门30中的所有员工.

select*fromempwheredeptno=30;

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7499ALLENSALESMAN769820-2月-81160030030
7521WARDSALESMAN769822-2月-81125050030
7654MARTINSALESMAN769828-9月-811250140030
7698BLAKEMANAGER783901-5月-81285030
7844TURNERSALESMAN769808-9月-811500030
7900JAMESCLERK769803-12月-8195030

------2.列出所有办事员(CLERK)的姓名,编号和部门编号.

selectempno,ename,deptnofromempwherejob='CLERK';

EMPNOENAMEDEPTNO
------------------------------
7369SMITH20
7876ADAMS20
7900JAMES30
7934MILLER10

------3.找出佣金高于薪金的员工.

select*fromempwherenvl(comm,0)>sal;

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7654MARTINSALESMAN769828-9月-811250140030

------4.找出佣金高于薪金的60%的员工.

select*fromempwherenvl(comm,0)>(sal*0.6);

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7654MARTINSALESMAN769828-9月-811250140030

------5.找出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料.

select*fromempwhere(deptno=10andjob='MANAGER')or(deptno=20andjob='CLERK');

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7369SMITHCLERK790217-12月-8080020
7782CLARKMANAGER783909-6月-81245010
7876ADAMSCLERK778823-5月-87110020

------6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK),既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详细资料.

select*fromemp
where(deptno=10andjob='MANAGER')
or(deptno=20andjob='CLERK')
or(jobnotin('MANAGER','CLERK')andsal>=2000);

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7369SMITHCLERK790217-12月-8080020
7782CLARKMANAGER783909-6月-81245010
7788SCOTTANALYST756619-4月-87300020
7839KINGPRESIDENT17-11月-81500010
7876ADAMSCLERK778823-5月-87110020
7902FORDANALYST756603-12月-81300020

------7.找出收取佣金的员工的不同工作.

selectdistinctjobfromempwherenvl(comm,0)>0;

JOB
---------
SALESMAN

------8.找出不收取佣金或收取的佣金低于100的员工.

select*fromempwherenvl(comm,0)<100;

select*fromempwherecommisnullorcomm<100;

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7369SMITHCLERK790217-12月-8080020
7566JONESMANAGER783902-4月-81297520
7698BLAKEMANAGER783901-5月-81285030
7782CLARKMANAGER783909-6月-81245010
7788SCOTTANALYST756619-4月-87300020
7839KINGPRESIDENT17-11月-81500010
7844TURNERSALESMAN769808-9月-811500030
7876ADAMSCLERK778823-5月-87110020
7900JAMESCLERK769803-12月-8195030
7902FORDANALYST756603-12月-81300020
7934MILLERCLERK778223-1月-82130010

这个不对:select*fromempwherecomm<100;

------9.找出各月倒数第3天受雇的所有员工.

select*fromempwherehiredate=last_day(hiredate)-2;

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7654MARTINSALESMAN769828-9月-811250140030

------10.找出早于12年前受雇的员工.

select*fromempwherehiredate
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7369SMITHCLERK790217-12月-8080020
7499ALLENSALESMAN769820-2月-81160030030
7521WARDSALESMAN769822-2月-81125050030
7566JONESMANAGER783902-4月-81297520
7654MARTINSALESMAN769828-9月-811250140030
7698BLAKEMANAGER783901-5月-81285030
7782CLARKMANAGER783909-6月-81245010
7839KINGPRESIDENT17-11月-81500010
7844TURNERSALESMAN769808-9月-811500030
7900JAMESCLERK769803-12月-8195030
7902FORDANALYST756603-12月-81300020
7934MILLERCLERK778223-1月-82130010

------11.以首字母大写的方式显示所有员工的姓名.
selectinitcap(ename)as姓名fromemp;
姓名
----------
Smith
Allen
Ward
Jones
Martin
Blake
Clark
Scott
King
Turner
Adams
James
Ford
Miller

------12.显示正好为5个字符的员工的姓名.

selectenamefromempwherelength(ename)=5;

selectenamefromempwhereenamelike'_____';
ENAME
----------
SMITH
ALLEN
JONES
BLAKE
CLARK
SCOTT
ADAMS
JAMES

------13.显示不带有"R"的员工的姓名.

selectenamefromempwhereenamenotlike'%R%';
ENAME
----------
SMITH
ALLEN
JONES
BLAKE
SCOTT
KING
ADAMS
JAMES

------14.显示所有员工姓名的前三个字符.

selectsubstr(ename,1,3)asenamefromemp;
ENAME
------
SMI
ALL
WAR
JON
MAR
BLA
CLA
SCO
KIN
TUR
ADA
JAM
FOR
MIL

------15.显示所有员工的姓名,用a替换所有"A"

selectreplace(ename,'A','a')as替换后fromemp;
selecttranslate(ename,'A','a')as替换后fromemp;

替换后
---------
SMITH
aLLEN
WaRD
JONES
MaRTIN
BLaKE
CLaRK
SCOTT
KING
TURNER
aDaMS
JaMES
FORD
MILLER

------16.显示满10年服务年限的员工的姓名和受雇日期.

selectename,hiredatefromempwheremonths_between(sysdate,hiredate)>120;

selectename,hiredatefromempwheresysdate>add_months(hiredate,120);

ENAMEHIREDATE
--------------------
SMITH17-12月-80
ALLEN20-2月-81
WARD22-2月-81
JONES02-4月-81
MARTIN28-9月-81
BLAKE01-5月-81
CLARK09-6月-81
SCOTT19-4月-87
KING17-11月-81
TURNER08-9月-81
ADAMS23-5月-87
JAMES03-12月-81
FORD03-12月-81
MILLER23-1月-82

不对:selectename,hiredatefromempwheremonths_between(hiredate,sysdate)>120;

------17.显示员工的详细资料,按姓名排序.

select*fromemporderbyename;
EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7876ADAMSCLERK778823-5月-87110020
7499ALLENSALESMAN769820-2月-81160030030
7698BLAKEMANAGER783901-5月-81285030
7782CLARKMANAGER783909-6月-81245010
7902FORDANALYST756603-12月-81300020
7900JAMESCLERK769803-12月-8195030
7566JONESMANAGER783902-4月-81297520
7839KINGPRESIDENT17-11月-81500010
7654MARTINSALESMAN769828-9月-811250140030
7934MILLERCLERK778223-1月-82130010
7788SCOTTANALYST756619-4月-87300020
7369SMITHCLERK790217-12月-8080020
7844TURNERSALESMAN769808-9月-811500030
7521WARDSALESMAN769822-2月-81125050030

------18.显示员工的姓名和受雇日期,根据其服务年限,将最老的员工排在最前面.

selectename,hiredatefromemporderbyhiredate;
ENAMEHIREDATE
--------------------
SMITH17-12月-80
ALLEN20-2月-81
WARD22-2月-81
JONES02-4月-81
BLAKE01-5月-81
CLARK09-6月-81
TURNER08-9月-81
MARTIN28-9月-81
KING17-11月-81
JAMES03-12月-81
FORD03-12月-81
MILLER23-1月-82
SCOTT19-4月-87
ADAMS23-5月-87

------19.显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金排序.

selectename,job,salfromemporderbyjobdesc,sal;
ENAMEJOBSAL
-----------------------------
WARDSALESMAN1250
MARTINSALESMAN1250
TURNERSALESMAN1500
ALLENSALESMAN1600
KINGPRESIDENT5000
CLARKMANAGER2450
BLAKEMANAGER2850
JONESMANAGER2975
SMITHCLERK800
JAMESCLERK950
ADAMSCLERK1100
MILLERCLERK1300
SCOTTANALYST3000
FORDANALYST3000

------20.显示所有员工的姓名、加入公司的年份和月份,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前面.

selectename,to_char(Hiredate,'yyyy"年"mm"月"')as年月,hiredatefromemp
orderbyto_char(Hiredate,'mm'),to_char(Hiredate,'yyyy');

ENAME年月HIREDATE
------------------------------
MILLER1982年01月23-1月-82
ALLEN1981年02月20-2月-81
WARD1981年02月22-2月-81
JONES1981年04月02-4月-81
SCOTT1987年04月19-4月-87
BLAKE1981年05月01-5月-81
ADAMS1987年05月23-5月-87
CLARK1981年06月09-6月-81
MARTIN1981年09月28-9月-81
TURNER1981年09月08-9月-81
KING1981年11月17-11月-81
SMITH1980年12月17-12月-80
JAMES1981年12月03-12月-81
FORD1981年12月03-12月-81

selectename,to_char(Hiredate,'yyyy/mm')as年月,hiredatefromemp
orderbyto_char(Hiredate,'mm'),to_char(Hiredate,'yyyy');

------21.显示在一个月为30天的情况所有员工的日薪金,忽略余数.

selectename,trunc(sal/30)daysalfromemp;
ENAMEDAYSAL
--------------------
SMITH26
ALLEN53
WARD41
JONES99
MARTIN41
BLAKE95
CLARK81
SCOTT100
KING166
TURNER50
ADAMS36
JAMES31
FORD100
MILLER43

------22.找出在(任何年份的)2月受聘的所有员工。

select*fromempwhereto_char(hiredate,'mm')='02';

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7499ALLENSALESMAN769820-2月-81160030030
7521WARDSALESMAN769822-2月-81125050030

------23.对于每个员工,显示其加入公司的天数.

selectename,floor(sysdate-hiredate)totdaysfromemp;

ENAMETOTDAYS
--------------------
SMITH8721
ALLEN8656
WARD8654
JONES8615
MARTIN8436
BLAKE8586
CLARK8547
SCOTT6407
KING8386
TURNER8456
ADAMS6373
JAMES8370
FORD8370
MILLER8319

------24.显示姓名字段的任何位置包含"A"的所有员工的姓名.

select*fromempwhereenamelike'%A%';

EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO
-------------------------------------------------------------------------------
7499ALLENSALESMAN769820-2月-81160030030
7521WARDSALESMAN769822-2月-81125050030
7654MARTINSALESMAN769828-9月-811250140030
7698BLAKEMANAGER783901-5月-81285030
7782CLARKMANAGER783909-6月-81245010
7876ADAMSCLERK778823-5月-87110020
7900JAMESCLERK769803-12月-8195030

------25.以年月日的方式显示所有员工的服务年限.(大概)

selectempno,ename,('在职'||trunc((months_between(sysdate,hiredate))/12)||'年'
||trunc(mod((months_between(sysdate,hiredate)),12))||'个月'
||round(sysdate-(add_months(hiredate,months_between(sysdate,hiredate))))||'天')totfromemp;

selectto_char(to_date('0001-01-01','yyyy-mm-dd')+(sysdate-hiredate)-366-31,'yy:mm:dd')astotfromemp;
声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com