使用scott/tiger使用者下的emp表完成下列練習,表格的結構說明如下
emp員工表 欄位內容如下:
empno 員工號碼
ename 員工姓名
job 工作
mgr 上級編號
hiredate 受僱日期
sal 薪金
comm 佣金
deptno 部門編號
1.選擇部門30中的所有員工.
2.列出所有辦事員(CLERK)的姓名,編號和部門編號.
3.找出佣金高於薪水的員工.
4.找出佣金高於薪水的60%的員工.
5.找出部門10中所有經理(MANAGER)和部門20中所有辦事員(CLERK)的詳細資料.
6.找出部門10中所有經理(MANAGER),部門20中所有辦事員(CLERK),既不是經理又不是辦事員但其薪金大於或等於2000的所有員工的詳細資料.
7.找出收取佣金的員工的不同工作.
8.找出不收取佣金或收取的佣金低於100的員工.
9.找出各月倒數第3天受僱的所有員工.
10.找出早於12年前受僱的員工.
11.以首字母大寫的方式顯示所有員工的姓名.
12.顯示剛好為5個字元的員工的姓名.
13.顯示不帶有"R"的員工的姓名.
14.顯示所有員工姓名的前三個字元.
15.顯示所有員工的姓名,用a取代所有"A"
16.顯示滿10年服務年資的員工的姓名和受僱日期.
17.顯示員工的詳細資料,依姓名排序.
18.顯示員工的姓名和受僱日期,根據其服務年限,將最老的員工排在最前面.
19.顯示所有員工的姓名、工作和薪金,按工作的降序排序,若工作相同則按薪金排序.
20.顯示所有員工的姓名、加入公司的年份和月份,按受僱日期所在月排序,若月份相同則將最早年份的員工排在最前面.
21.顯示在一個月為30天的情況所有員工的日薪金,忽略餘數.
22.找出在(任何年份的)2月受聘的所有員工。
23.對於每位員工,顯示其加入公司的天數.
24.顯示姓名欄位的任何位置包含"A"的所有員工的姓名.
25. 以年月日的方式顯示所有員工的服務年資.(大概)
(1) select deptno from dept where depptno in (select deptno from em);
(2)select empno,ename,sal from em where sal>(select sal from em where ename = 'SMITH');
(3)SELECT e.ename,d.dname from em e,dept d where e.deptno=d.deptno and e.job = 'CLERK';
(4)select empno,ename from em where job in (select job from em where ename = 'SCOTT') ;
(5)select job,min(sal) from em group by job;
(6)select d.dname ,min(e.sal) from dept d,em e
where d.deptno=e.deptno and e.job ='MANAGER' group by d.dname;
7.select 員工名,薪資 from 表 where 工資8.select 員工名,工資 from 表 where 工資>avg(工資) order by 職位;
9.例:t1中列n的數為[2,3];t2中列n的數為[1,2,3,4]
select * from t2 where n >any(select n from t1);結果:3,4.
註:查詢表t2中列n的數中有哪些數是比表t1中列n的最大的數[包含max的]。
select * from t2 where n = any(select n from t1);結果:2,3.
select * from t2 where n 10.select * from t2 where n >all(select n from t1);結果:4.
select * from t2 where n 12.SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2;合併table_name1、table_name2兩個表,沒有重複的欄位。
SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2;將table_name1、table_name2兩個表的所有資料連接,有重複的。
CREATE TABLE SC(
SNO INT,
CNO varchar(10),
GRADE INT
);
INSERT INTO SC VALUES(95001, '數學', 75);
INSERT INTO SC VALUES(95001, '語文', 92);
INSERT INTO SC VALUES(95002, '英文', 64);
INSERT INTO SC VALUES(95002, '英文', 77);
INSERT INTO SC VALUES(95003, '數學', 85);
CREATE TABLE SC_TOTAL(
SNO INT PRIMARY KEY,
"數學" number(5,2),
"語文" number(5,2),
"英語" number(5,2),
"平均分數" number(5,2)
);
DECLARE
#v_row_count INT;
BEGIN
FOR sc_rec IN (SELECT * FROM SC)
LOOP
-- 判斷資料有沒有
SELECT COUNT(*) INTO v_row_count
#FROM SC_TOTAL
WHERE SNO = sc_rec.SNO;
IF v_row_count = 0 THEN
-- 資料不存在. 先插入.
INSERT INTO SC_TOTAL(SNO) VALUES (sc_rec.SNO);
END IF;
-- 根據課程, 更新 具體的列.
IF sc_rec.CNO = '數學' THEN
UPDATE SC_TOTAL SET "數學" = sc_rec.GRADE WHERE SNO = sc_rec.SNO;
ELSIF sc_rec.CNO = '語文' THEN
UPDATE SC_TOTAL SET "語文" = sc_rec.GRADE WHERE SNO = sc_rec.SNO;
ELSIF sc_rec.CNO = '英文' THEN
UPDATE SC_TOTAL SET "英文" = sc_rec.GRADE WHERE SNO = sc_rec.SNO;
END IF;
-- 計算平均分數.
UPDATE SC_TOTAL
SET "平均分數" = (NVL("數學",0) NVL("語文",0) NVL("英語",0))
/ (NVL2("數學", 1,0) NVL2("語文", 1, 0) NVL2("英語",1, 0))
WHERE SNO = sc_rec.SNO;
END LOOP;
END;
/
-- 資料核對.
SQL>SELECT * FROM SC_TOTAL;
SNO 數學 文 英文 平均分數
---------- ---------- ---------- ---------- ------- ---
95001 75 92 83.5
95002 77 77
95003 85 85
以上是練習ORACLE資料庫的題目的詳細內容。更多資訊請關注PHP中文網其他相關文章!