内容简介 |
1,Scott实例用户(Oracle官方提供)。2,Scott用户单词备注。3,对scott用户的查询操作。
技术与环境 |
操作系统: |
windows |
语言类别: |
SQL之PL/SQL |
thankyou: | sunshine, 谢谢你的默默付出 | 数据库: |
Oracle |
学习软件: |
Oracle 10g |
||
课程总策划: |
yuanbo |
English name: |
sunshine |
个人主页: |
http://www.cnblogs.com/ylbtech/ |
||
科研团队: |
ylbtech |
教研团队: |
ylbtech |
1,scott实例使用(Oracle官方提供) |
2,Scott用户内容单词备注 |
emp员工表 字段内容如下:
empno 员工号
ename 员工姓名
job 工作
mgr 上级编号
hiredate 受雇日期
sal 薪金
comm 佣金
deptno 部门编号
ename 员工姓名
job 工作
mgr 上级编号
hiredate 受雇日期
sal 薪金
comm 佣金
deptno 部门编号
dept 部门表 字段内容如下:
deptno 部门号
ename 部门名称
loc 地方
bonus 奖金表 字段内容如下:
ename 员工姓名
job 工作名称
sal 薪金
comm 佣金
job 工作名称
sal 薪金
comm 佣金
3,Demo scott用户操作 |
--======================================
--YLB:ORACLE
--15:23 2011-12-30
--1,ORACLE查询操作
--======================================
clear screen;
connect
system/system
drop
user
scott
cascade
;
create
user
scott identified
by
tiger;
grant
connect
,resource
to
scott;
connect
scott/tiger
show
user
;
--创建用员工表
create
table
emp
(
empid number(4),
--编号
ename
varchar
(20),
--姓名
job
varchar
(20),
--工作
mgr number(4),
--上级编号
hiredate
date
,
--受雇日期
sal number(7,2),
--薪金
comm number(7,2),
--佣金
deptno number(2)
--部门编号
);
insert
into
emp
values
(7369,
'SMITH'
,
'CLERK'
,7902,to_date(
'12/17/1980'
,
'mm/dd/yyyy'
),800,
null
,20);
insert
into
emp
values
(7499,
'ALLEN'
,
'SALESMAN'
,7698,to_date(
'02/20/1981'
,
'mm/dd/yyyy'
),1600,300,30);
insert
into
emp
values
(7521,
'WARD'
,
'SALESMAN'
,7698,to_date(
'02/22/1981'
,
'mm/dd/yyyy'
),1250,500,30);
insert
into
emp
values
(7566,
'JONES'
,
'MANAGER'
,7839,to_date(
'04/02/1981'
,
'mm/dd/yyyy'
),2975,
null
,20);
insert
into
emp
values
(7654,
'MARTIN'
,
'SALESMAN'
,7698,to_date(
'09/28/1981'
,
'mm/dd/yyyy'
),1250,1400,30);
insert
into
emp
values
(7698,
'BLAKE'
,
'MANAGER'
,7839,to_date(
'05/01/1981'
,
'mm/dd/yyyy'
),2850,
null
,30);
insert
into
emp
values
(7782,
'CLARK'
,
'MANAGER'
,7839,to_date(
'06/09/1981'
,
'mm/dd/yyyy'
),2450,
null
,10);
insert
into
emp
values
(7788,
'SCOTT'
,
'ANALYST'
,7566,to_date(
'04/19/1987'
,
'mm/dd/yyyy'
),3000,
null
,20);
insert
into
emp
values
(7839,
'KING'
,
'PRESIDENT'
,
null
,to_date(
'11/17/1981'
,
'mm/dd/yyyy'
),5000,
null
,10);
insert
into
emp
values
(7844,
'TURNER'
,
'SALESMAN'
,7698,to_date(
'09/08/1981'
,
'mm/dd/yyyy'
),1500,0,30);
insert
into
emp
values
(7876,
'ADAMS'
,
'CLERK'
,7788,to_date(
'05/23/1987'
,
'mm/dd/yyyy'
),1100,
null
,20);
insert
into
emp
values
(7900,
'JAMES'
,
'CLERK'
,7698,to_date(
'12/03/1981'
,
'mm/dd/yyyy'
),950,
null
,30);
insert
into
emp
values
(7902,
'FORD'
,
'ANALYST'
,7566,to_date(
'12/03/1981'
,
'mm/dd/yyyy'
),3000,
null
,20);
insert
into
emp
values
(7934,
'MILLER'
,
'CLERK'
,7782,to_date(
'01/23/1982'
,
'mm/dd/yyyy'
),1300,
null
,10);
commit
;
---下面是查询操作
--1.选择部门30中的所有员工.
select
*
from
emp
where
deptno=30;
--2.列出所有办事员(CLERK)的姓名,编号和部门编号.
select
ename,empid,deptno
from
emp
where
job=
'CLERK'
--3.找出佣金高于薪金的员工.
select
ename,empid
from
emp
where
comm>sal;
--4.找出佣金高于薪金的60%的员工.
select
empid,ename
from
emp
where
comm>sal*0.6;
--5.找出部门10中所有经理(MANAGER)
--和部门20中所有办事员(CLERK)的详细资料.
select
*
from
emp
where
deptno=10
and
job=
'MANAGER'
or
deptno=20
and
job=
'CLERK'
--6.找出部门10中所有经理(MANAGER),部门20中所有办事员(CLERK)
--,既不是经理又不是办事员但其薪金大于或等于2000的所有员工的详
细资料.
--分析
select
*
from
emp
where
deptno=10
and
job=
'MANAGER'
or
deptno=20
and
job=
'CLERK'
;
select
*
from
emp
where
job
not
in
(
'MANAGER'
,
'CLERK'
)
and
sal>=2000;
--结论
select
*
from
emp
where
deptno=10
and
job=
'MANAGER'
or
deptno=20
and
job=
'CLERK'
or
job
not
in
(
'MANAGER'
,
'CLERK'
)
and
sal>=2000;
--7.找出收取佣金的员工的不同工作.
SELECT
DISTINCT
JOB
FROM
EMP
WHERE
COMM
IS
NOT
NULL
;
--p:8.找出不收取佣金或收取的佣金低于100的员工.
SELECT
*
FROM
EMP
WHERE
COMM<100
OR
COMM
IS
NULL
;
--9.找出各月倒数第3天受雇的所有员工.
SELECT
*
FROM
EMP
WHERE
HIREDATE =LAST_DAY(HIREDATE)-2;
--10.找出早于12年前受雇的员工.
--select hiredate from emp where hiredate < sysdate-;
select
ename
from
emp
where
hiredate < add_months(sysdate,-
12*12);
SELECT
EMPID,ENAME
FROM
EMP
WHERE
HIREDATE <ADD_MONTHS(SYSDATE,-12*12);
SELECT
EMPID,ENAME
FROM
EMP
WHERE
ADD_MONTHS(SYSDATE,12*12)> SYSDATE;
--z:11.以首字母大写的方式显示所有员工的姓名.
select
initcap(ename)
from
emp;
--12.显示正好为5个字符的员工的姓名.
select
ename
from
emp
where
ename
like
'_____'
;
--通配符
--%
--_
--[1-9]
--[^1-9]
SELECT
ENAME
FROM
EMP
WHERE
ENAME
LIKE
'_____'
;
--
SELECT
ENAME
FROM
EMP
WHERE
LENGTH(ENAME)=5;
--13.显示不带有"R"的员工的姓名.
select
ename
from
emp
where
ename
not
like
'%R%'
;
SELECT
ENAME
FROM
EMP
WHERE
ENAME
NOT
LIKE
'%R%'
--14.显示所有员工姓名的前三个字符.
SELECT
SUBSTR(ENAME,1,3)
FROM
EMP;
--15.显示所有员工的姓名,用a替换所有"A"
SELECT
REPLACE
(ENAME,
'A'
,
'a'
)
FROM
EMP;
--16.显示满10年服务年限的员工的姓名和受雇日期.
SELECT
ENAME,HIREDATE
FROM
EMP
WHERE
HIREDATE<ADD_MONTHS(SYSDATE,-10*12);
--17.显示员工的详细资料,按姓名排序.
--ASC|DESC
SELECT
*
FROM
EMP
ORDER
BY
ENAME;
--18.显示员工的姓名和受雇日期,根据其服务年限
--,将最老的员工排在最前面.
SELECT
ENAME,HIREDATE
FROM
EMP
ORDER
BY
HIREDATE
ASC
;
--19.显示所有员工的姓名、工作和薪金,按工作的降序排序
--,若工作相同则按薪金排序.
SELECT
*
FROM
EMP
ORDER
BY
JOB
DESC
,SAL
DESC
;
--20.显示所有员工的姓名、加入公司的年份和月份
--,按受雇日期所在月排序,若月份相同则将最早年份的员工排在最前
面.
SELECT
*
FROM
EMP
ORDER
BY
TO_CHAR(HIREDATE,
'MM'
)
ASC
,TO_CHAR(HIREDATE,
'YYYY'
)
ASC
;
SELECT
*
FROM
EMP;
--21.显示在一个月为30天的情况所有员工的日薪金,忽略余数.
SELECT
FLOOR(SAL/30)
FROM
EMP;
--22.找出在(任何年份的)2月受聘的所有员工。
SELECT
*
FROM
EMP
WHERE
TO_CHAR(HIREDATE,
'MM'
)=2;
--P:23.对于每个员工,显示其加入公司的天数.
SELECT
TO_CHAR(SYSDATE,
'DDD'
)
FROM
DUAL;
--24.显示姓名字段的任何位置包含"A"的所有员工的姓名.
SELECT
ENAME
FROM
EMP
WHERE
ENAME
LIKE
'%A%'
;
--25.以年月日的方式显示所有员工的服务年限. (大概)
--年
SELECT
FLOOR(FLOOR(MONTHS_BETWEEN(SYSDATE,HIREDATE))/12)
FROM
EMP;
--月
2011-2-15
-
2011-12-30
SELECT
MOD(FLOOR(MONTHS_BETWEEN(SYSDATE,HIREDATE)),12)
FROM
EMP;
--日
SELECT
TO_CHAR(HIREDATE,
'DD'
)
FROM
EMP;
SELECT
TO_CHAR(SYSDATE,
'DD'
)
FROM
DUAL;
--
SELECT
(TO_CHAR(SYSDATE,
'DD'
)-TO_CHAR(HIREDATE,
'DD'
))
FROM
EMP;
--字符串链接
SELECT
FLOOR(FLOOR(MONTHS_BETWEEN(SYSDATE,HIREDATE))/12)||
'年
'
FROM
EMP;
|
本文转自ylbtech博客园博客,原文链接:http://www.cnblogs.com/ylbtech/archive/2012/08/09/2630563.html,如需转载请自行联系原作者