ホームページ > 記事 > コンピューターのチュートリアル > 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');
(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]
注: テーブル 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,
グレード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 サイトの他の関連記事を参照してください。