ホームページ  >  記事  >  コンピューターのチュートリアル  >  ORACLE データベースの質問を練習する

ORACLE データベースの質問を練習する

PHPz
PHPz転載
2024-01-23 21:48:05597ブラウズ

ORACLE データベースの質問を練習する

ORACLE データベースの演習

scott/tiger ユーザーの下で emp テーブルを使用して、次の演習を完了します。テーブルの構造は次のように説明されます

emp 従業員テーブルのフィールドの内容は次のとおりです:

従業員番号

ename 従業員名

###仕事###

mgr 上位番号

hiredate 入社日

給与

通信手数料

部署番号

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.すべての従業員の名前の最初の 3 文字を表示します。

15. すべての従業員の名前を表示し、すべての「A」を

に置き換えます。

16. 勤続10年以上の従業員の氏名と入社年月日を表示します。

17. 従業員の詳細を名前順に表示します。

18. 従業員の名前と入社日を、勤続年数に基づいて古い従業員から順に表示します。

19. すべての従業員の名前、役職、給与を役職ごとに降順に、または役職が同じ場合は給与順に表示します。

20. 全従業員の氏名、入社年、入社月を入社日の月順に表示し、月が同じ場合は年が早い順に並べます。

21. 1 か月を 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) e.deptno=d.deptno および e.job = 'CLERK' である em e,dept d から e.ename,d.dname を選択します;

(4)select empno,ename from em where job in (select job from em where ename = 'SCOTT') ;

(5)ジョブごとのグループからジョブ、最小(給与)を選択します;

(6) dept d,em e

から d.dname ,min(e.sal) を選択します

ここで、d.deptno=e.deptno および e.job ='MANAGER' は d.dname によってグループ化されます;

Oracle 11G SQL の練習用の宿題の質問

7.給与が記載されている表から従業員名、給与を選択します。 8.給与>平均(給与)が職位順に並べられている表から従業員名、給与を選択します。

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 の数値よりも最大の数値 (最大値を含む) はどれであるかをクエリします。

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 列名 FROM テーブル名 1 UNION SELECT 列名 FROM テーブル名 2; テーブル名 1 テーブルとテーブル名 2 テーブルを重複列なしでマージします。

SELECT 列名 FROM テーブル名 1 UNION ALL SELECT 列名 FROM テーブル名 2; 2 つのテーブル テーブル名 1 とテーブル名 2 のすべてのデータを接続すると、重複があります。

Oracle ストアド プロシージャの問題解決方法

テーブル SC を作成(

SNO INT,

CNO varchar(10),

グレードINT

);

INSERT INTO SC VALUES(95001, 'Math', 75);

INSERT INTO SC VALUES(95001, '中文', 92);

INSERT INTO SC VALUES(95002, '英語', 64);

INSERT INTO SC VALUES(95002, '英語', 77);

INSERT INTO SC VALUES(95003, 'Math', 85);

CREATE TABLE SC_TOTAL(

SNO INT 主キー,

「数学」番号(5,2),

「中国語」の数字(5,2),

「英語」の数字(5,2),

「平均点」数値(5,2)

);

###宣言する###

v_row_count INT;

###始める###

FOR sc_rec IN (SELECT * FROM SC)

###ループ###

-- データに

があるかどうかを判断します。

SELECT COUNT(*) INTO v_row_count

SC_TOTALから

WHERE SNO = sc_rec.SNO;

IF v_row_count = 0 THEN

-- データが存在しません。最初に挿入してください。

SC_TOTAL(SNO) 値に挿入 (sc_rec.SNO);

END IF;

-- コースに基づいて、特定の列を更新します。

IF sc_rec.CNO = '数学' THEN

UPDATE SC_TOTAL SET "MATH" = 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;

-- 平均スコアを計算します。

SC_TOTALを更新

SET "平均点" = (NVL ("数学", 0) NVL ("中国語", 0) NVL ("英語", 0))

/ (NVL2 ("数学", 1,0) NVL2 ("中国語", 1, 0) NVL2 ("英語", 1, 0))

WHERE SNO = sc_rec.SNO;

終了ループ;

###終わり;###

/

-- データ検証.

SQL>SELECT * FROM SC_TOTAL;

SNO 数学 中国語 英語 平均点

---------- ---------- ---------- ---------- ------- ---

95001 75 92 83.5

95002 77 77

95003 85 85

以上がORACLE データベースの質問を練習するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はdocexcel.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。