首頁  >  文章  >  電腦教學  >  練習ORACLE資料庫的題目

練習ORACLE資料庫的題目

PHPz
PHPz轉載
2024-01-23 21:48:05597瀏覽

練習ORACLE資料庫的題目

ORACLE資料庫的練習問題

使用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. 以年月日的方式顯示所有員工的服務年資.(大概)

oracle題目

(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;

Oracle 11G SQL練習作業題

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兩個表的所有資料連接,有重複的。

一道oracle預存程​​序的題目解

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中文網其他相關文章!

陳述:
本文轉載於:docexcel.net。如有侵權,請聯絡admin@php.cn刪除