目次
3. truncate コマンドと delete コマンドを比較しますか?
4. orrace における rowid と rownum の定義
7.オラクルでテーブルスペースとデータファイルの関係を説明する
13. ストアド プロシージャとは何ですか? また、その利点は何ですか?
15. ビューとは何ですか? また、ビューの使用シナリオは何ですか?
17. データベースの楽観的ロックと悲観的ロックとは何ですか?
21. Oracle 疑似列を使用して、テーブル内の重複レコードを削除します。
22. すべての従業員の名前と直属の上司の名前をリストします。
23. 雇用日が直属の上司より前のすべての従業員をリストします。
24. 最低給与が 1500 を超えるさまざまな仕事を挙げてください。
25. すべての従業員の年俸を、年俸の低いものから高いものの順に並べ替えてリストします。
26. 「SCOTT」と同じ仕事をしているすべての従業員をリストします。
30. 従業員名、給与、および給与レベルのクエリ (給与>=3000 はレベル 3、給与>2000 はレベル 2、給与<=2000 はレベル 1)
31.语法:case … when … then … when … then … else … end
オラクルの面接の質問の並べ替え.
1. MySQL と Oracle の違い:
- MySQL は無料のオープン ソース プロジェクトです。MySQL は中小企業にとって第一の選択肢であり、Oracle はオラクルが立ち上げた成熟したデータベース製品です。
- SQL構文の違い、MySQL はより柔軟で、Oracle はより厳密です (具体的には、単一引用符、ページネーション処理、および主キーの自動拡張)
- トランザクションのサポート。デフォルトでは、MySQL はトランザクションをサポートしていません。ストレージ エンジン innodb のみがトランザクションをサポートしています。Oracle はトランザクションを完全にサポートしています。
- 同時性。MySql はデフォルトでテーブル レベルのロック、Oracle の行レベルのロックを使用するため、Oracle の並列発行ははるかに高くなります。
2. Oracleの関数と手続きの違いは何ですか ?
1). 関数 function はストアド プロシージャの一種です.
2). 関数にはパラメータを指定できませんが、戻り値が必要です. ストアド プロシージャにはパラメータを指定できず、値を返す必要はありません. 3). 戻り
値複数のパラメータを返す必要がある場合は、ストアド プロシージャを使用することをお勧めします
4) SQL データ操作ステートメントでは、関数のみを呼び出すことができ、ストアド プロシージャを呼び出すことはできません。
3. truncate コマンドと delete コマンドを比較しますか?
1). truncate と delete の両方でデータ エンティティを削除できます. truncate の操作はロールバック ログに記録されないため、操作速度は速くなりますが、同時にデータを復元することはできません. 2). delete 操作は
3
) . Truncate はビューなどを削除できません 4
). Truncate はデータ定義言語 (DDL) ですが、delete はデータ操作言語 (DML) です。
4. orraceにおける rowid と rownum の定義
1). rowid と rownum はどちらも疑似列です
2). rowid は物理アドレスであり、Oracle で特定のデータの物理的な格納場所を特定するために使用されます
3). rownum は sql の出力結果の並べ替えです
5.トランザクションの特徴 (ACID) は?
トランザクションは、論理単位として実行される一連の操作であり、作業の論理単位には、ACID (原子性、一貫性、分離、持続性) プロパティと呼ばれる 4 つのプロパティが必要です。
1) 原子性 (Atomic): トランザクション内のすべての操作を実行するか、まったく実行しない必要があります. 操作の失敗は、トランザクション全体の失敗につながります.
2) 一貫性: トランザクションが終了した後、システムの状態は同じです
3) 分離 (Isolated): 同時に実行されるトランザクションは、互いの中間状態を見ることができません
4) 耐久性 (Durable): トランザクションが完了した後、壊滅的な障害が発生しても、ログと同期バックアップを通じて障害後にデータを再構築できます。
6.いくつかのテーブル接続方法を挙げてください
等価結合 (内部結合)、非等価結合、自己結合、外部結合 (左、右、完全)
等価結合とも呼ばれる内部結合は、完全に一致する行をフィルタリングします
左結合は、主に左のテーブルに基づいています. 完全に一致する行をフィルタリングするだけでなく、左のテーブルで一致しない行もフィルタリングします. 一致するデータが見つからない場合は、null で埋めます.
右側の結合は、右側のテーブルに基づいています。正確に一致する行をフィルタリングするだけでなく、テーブル内で一致しない行も選択します。一致するデータが見つからない場合は、null で埋めます。
7.オラクルでテーブルスペースとデータファイルの関係を説明する
表領域には、1 つ以上のデータファイルを含めることができます。テーブル スペースは、データ ファイルを追加または拡張することによってテーブル スペースを拡張します。テーブル スペースのサイズは、テーブル スペースを構成するデータ ファイルのサイズの合計です。データファイルは1つの表領域にのみ属することができます。表領域には1つ以上のデータファイルを含めることができ、各データファイルは1つの表領域にのみ含めることができます。表内のデータは、ハッシュ・アルゴリズムによって表領域内のデータファイル間で分散されます。表領域は論理的です。データファイルの概念は、データベースのさまざまなオブジェクトを物理的に格納します。
8.論理バックアップとは
1)論理バックアップ (exp/imp) は、データベース オブジェクトの復元に使用されます。ただし、ポイント イン タイムの完全にリカバリ可能なバックアップ戦略に基づくものではありません。オンライン バックアップとオフライン バックアップの補足としてのみ使用できます。
2)完全な論理バックアップ
完全な論理バックアップでは、データベース全体をデータベース形式のファイルにエクスポートします。このファイルは、異なるデータベース バージョン、オペレーティング システム、およびハードウェア プラットフォーム間で移植できます。
3)指定されたテーブルの論理バックアップ 指定され
たデータベース テーブルは、バックアップ ツールを使用してバックアップできます。これにより、完全な論理バックアップによる時間と資金の浪費を回避できます。
9.物理バックアップとは
物理バックアップが主なバックアップ方法です。物理バックアップは、データベースの損失を最小限に抑えて、またはデータの損失なしでデータベースを復元できるようにするために使用されます。物理バックアップは、ホット バックアップとコールド バックアップに分けられます。
1)ホット バックアップ: 主に、データベースが開いていてユーザーが使用できるときにバックアップ プロセスが実行されることを意味します。ホット物理バックアップを実行する必要がある状況は次のとおりです。データベースの性質上中断のない作業が必要なため、現時点ではホット物理バックアップのみを使用できます。
2)コールド バックアップ: コールド物理バックアップは、物理的な損傷によるデータベースの損失を防ぐための最も簡単で直接的な方法を提供します。
すでに最大量のデータがあるデータベースの場合、データベースを夜間にシャットダウンすることができ、この時点で低温物理学が適用されます。
データベースサーバーのアップグレード(ハードディスクの交換など)を行う場合は、データベース情報のバックアップを行い、コールドバックアップを利用する必要があります。
10. NVLとNVL2の機能の使い方や違いは?
1 ) NVL (expr1, expr2): expr1 が NULL の場合は expr2 を返し、NULL でない場合は expr1 を返します。2 つの型は一貫している必要があることに注意してください。
2 ) NVL2 (expr1、expr2、expr3): expr1 は NULL ではありません。expr2 を返し、NULL の場合は expr3 を返します。expr2 と expr3 の型が異なる場合。expr3 は expr2 の型に変換されます
11.ユニオンとユニオンオールの違い
1) UNION : 各クエリで選択された、繰り返されないすべての行で構成されます。ユニオンには繰り返し値は含まれず、既定では、最初のクエリの最初の列で昇順に並べ替えられます。
2) UNION ALL : 各クエリで選択されたすべての行。正確な共用体には、繰り返される値が含まれます。ソートされていません。
12.マイナスと交差の違い
1 ) MINUS: 重複する行を除く、最初のクエリの行で、後続のクエリの行ではありません。クエリ 1 の列 1 で昇順に並べ替えます。
2 ) INTERSECT: 各クエリ結果の共通部分を取ります。重複する行は含まれません。クエリ 1 の列 1 で昇順に並べ替えます。
13.ストアド プロシージャとは何ですか? また、その利点は何ですか?
ストアド プロシージャは、プログラミング言語の関数と同様に、コード (PLSQL、T-SQL) をカプセル化します。ストアド プロシージャの利点:
- コードをカプセル化してデータベースに保存できます
- プログラミング言語に呼び出しを任せる
- ストアド プロシージャは、実行効率の高いプリコンパイル済みコード ブロックです。
- ストアド プロシージャは、多数の T_SQL ステートメントを置き換えます。これにより、ネットワーク トラフィックが削減され、通信速度が向上します。
14. 3 つのパラダイムとは
第 1 正規形:フィールドは最小単位であり、分割することはできません
第 2 正規形: 第 1 正規形を満たすには、テーブル内のフィールドが一部の主キーではなく、すべての主キーに完全に依存している必要があります。
第 3 正規形: 第 2 正規形を満たし、主キー以外のすべてのフィールドは互いに独立している必要があり、推移的な依存関係はありません。
15.ビューとは何ですか? また、ビューの使用シナリオは何ですか?
- ビューは、データ テーブルに基づく仮想テーブルです。
- ビューは既存のテーブルに基づいて構築され、ビューが構築されるこれらのテーブルはベース テーブルと呼ばれます
- ビューにデータ コンテンツを提供するステートメントは SELECT ステートメントであり、ビューは格納された SELECT ステートメントとして理解できます。
- ビューは、ベース テーブル データの別の表現をユーザーに提供します
- ビューには実際のデータは保存されません。実際のデータは引き続きベース テーブルに保存されます。
- プログラマはビューを操作していますが、最終的なビューも操作ベーステーブルに変換されます。
- ベース テーブルは 0 個以上のビューを持つことができます
16.指数とは何ですか? 役割とメリット・デメリットは?
(1)新華辞典のディレクトリに似た、テーブルの内容を素早くクエリする仕組みです
(2)テーブルの特定のフィールドに適用されますが、格納されると、テーブルから独立します
長所と短所:
- インデックスはデータベースの検索を高速化します
- インデックスは、挿入、削除、および変更などのメンテナンス タスクの速度を低下させます (インデックスはクエリ速度を向上させることができますが、ほとんどのデータ更新では同時にインデックスを更新する必要があるため、データベース システム内のデータ更新のパフォーマンスが低下する可能性もあります)。 )
- 一意のインデックスは、データの各行の一意性を保証できます.インデックスを使用することにより、最適化ハイダーをクエリプロセスで使用して、システムのパフォーマンスを向上させることができます.
- インデックスには物理領域とデータ領域が必要です
17. データベースの楽観的ロックと悲観的ロックとは何ですか?
複数のトランザクションがデータベース内の同じデータに同時にアクセスした場合に、トランザクションの分離と統一、およびデータベースの統一が損なわれないようにするために、楽観的ロックと悲観的ロックが同時実行制御に使用される主要な技術的手段です。
悲観的ロック: 同時実行の競合が発生することを想定し、データの整合性に違反する可能性のあるすべての操作をシールドします. データをクエリする場合、トランザクションがコミットされるまでトランザクションをロックします.実装方法: データベースのロックメカニズムを使用します.
select xxx for update操作を実行すると、データはロックされ、 commitまたはrollbackが実行された場合にのみ解放されます. select xxx for update nowait操作が実行された場合、データもロックされ、他のユーザーからアクセスされた場合にのみ解放されます、ORA-00054エラーが返される可能性があり、内容はリソースがビジーであり、対応するビジネス手段で処理する必要があります。
楽観的ロック: 同時実行の競合が発生しないと仮定して、操作をコミットするときにのみデータ整合性違反をチェックします。データ変更時にトランザクションをロックし、バージョンでロックする実装方法: バージョンのバージョンまたはタイムスタンプを使用します。
1 ): データを取得したら、データ全体をアプリケーションにコピーし、現在のデータベース内のデータと、提出時に最初に更新前に取得したデータを比較します。2 つのデータがまったく同じであることが判明した場合は、送信する競合がないことを意味します。それ以外の場合は、同時競合であるため、ビジネス ロジックで解決する必要があります。
2) :タイムスタンプ型を採用し、データが最後に更新された時刻を格納する新しいテーブル列を追加します。この種類のTimestampのデータ精度は、Oracleの時刻型の中で最も高く、マイクロ秒単位の精度です. 更新が送信されると、現在のデータベース内のデータのタイムスタンプを確認し、更新前に取得されたタイムスタンプと比較します.一貫性がある場合はOK 、それ以外の場合はバージョンの競合です。
18.データベース構造の最適化 1) パラダイム最適化:
1)冗長性を排除する(スペースを節約する)など
2)アンチパラダイム最適化: 冗長性を適切に追加する (結合を減らす) など
3)分割表: 縦分割と横分割
19.口頭でカーソルを説明する
カーソルは、レコードを検索するための結果セットを指すレコード ロケーター (インジケーター) です。カーソルの使用方法: カーソルの宣言、カーソルのオープン、カーソル データの抽出、カーソルのクローズ
Declare
cursor cur is select * from category;
record category%rowtype;
begin
open cur;
loop
fetch cur into record;
if cur%notfound then
exit;
end if;
dbms_output.put_line(to_char(record.id) || ',' || record.name);
end loop;
close cur;
end;
20.オラクルでトリガーを説明する
トリガーは、ユーザーによって明示的に呼び出される特別なストアド プロシージャであり、トリガーは、ユーザーがテーブルを実行したときです。
更新、削除、挿入は自動的に呼び出されます。通常、トリガーの種類には (挿入、削除、変更) が含まれます。
CREATE OR REPLACE TRIGGER SAL_EMP
BEFORE UPDATE ON scott.EMP
FOR EACH ROW
BEGIN
IF :OLD.SAL > :NEW.SAL THEN
DBMS_OUTPUT.PUT_LINE('工资减少');
ELSIF :OLD.SAL < :NEW.SAL THEN
DBMS_OUTPUT.PUT_LINE('工资增加');
ELSE
DBMS_OUTPUT.PUT_LINE('工资未作任何变动');
END IF;
DBMS_OUTPUT.PUT_LINE('更新前工资 :' || :OLD.SAL);
DBMS_OUTPUT.PUT_LINE('更新后工资 :' || :NEW.SAL);
END;
テストコード:
UPDATE scott.emp SET sal = 3000 WHERE empno = '7788';
21. oracle 疑似列を使用して、テーブル内の重複レコードを削除します。
t.rowid が含まれていないテーブル t を削除します
(t1.name=t.nameのtable1 t1からmax(t1.rowid)を選択)
以下に示すように、テーブル構造scott.empによると:
22.すべての従業員の名前と直属の上司の名前をリストします。
分析: テーブルの自己マッピング、テーブルのエイリアス化、および t1 テーブルをリンクして従業員テーブル t2 をシミュレートし、直属の上司情報を保存します。エンプノ;
23.雇用日が直属の上司より前のすべての従業員をリストします。
t1.MGR = t2.empno および t1.hiredate < t2.hiredate の場合、emp t1、emp t2 から t1.*,t2.hiredate を選択します。
24.最低給与が 1500 を超えるさまざまな仕事を挙げてください。
分析: ジョブの最低給与 — ジョブごとにグループ化して、最低給与を見つけます
emp group by job から min(sal) を選択します;
1500 より大きい場合はグループ化条件です —
emp group by job からジョブ、min(sal) を選択しますmin(sal) > 1500;
25.すべての従業員の年俸を、年俸の低いものから高いものの順に並べ替えてリストします。
emp order by sal*12 asc から ename, sal*12 を選択します。
26. 「SCOTT」と同じ仕事をしているすべての従業員をリストします。
分析: 最初にサブクエリを使用して SCOTT のジョブを見つけます: select job from emp where ename ='SCOTT';
select * from emp where ename <> 'SCOTT' and job = (select job from emp where ename ='SCOTT') ;
27.部門 10 で給与が最も高い従業員を削除します。
delete from emp where deptno=10 and sal >= all(select sal from emp where deptno=10 ); // MYSQL はMysql 仕様をサポートしておらず
、テーブル内のレコードを変更または削除します。 subquery
mysql solution : 一時テーブルの
削除 from emp where deptno=10 and sal >= all(select t.sal from (select sal from emp where deptno=10) t );
28.最高給の従業員の給与を 30% 削減します。
oracle:update emp set sal = sal*0.7 where sal = (select max(sal) from emp);
mysql: update emp set sal = sal*0.7 where sal = (select t.maxsal from (select max(sal) maxsal from emp) t);
29.最も給料の高い人の役職を表示します。
select job from emp where sal = (select max(sal) from emp);
select job from emp where sal >= all(select sal from emp);
30.従業員名、給与、および給与レベルのクエリ (給与>=3000 はレベル 3、給与>2000 はレベル 2、給与<=2000 はレベル 1)
分析:
select ename,sal, case when sal>=3000 then ‘3级’ when sal>2000 then ‘2级’ else ‘1级’ end 级别 from emp;
31.语法:case … when … then … when … then … else … end
行と列のスワップ
名コーススコア
張山語 74
チャン・サン・マス 83
張三物理 93
李思中国人 74
リー・シの数学 84
リージ物理学 94
になります(次の結果が得られます):
名前 中国数学物理学
—- —- —- —-
李思 74 84 94
張三 74 83 93
——————-
select name,max(case when cource =’语文’ then score else 0 end) from scores group by name;
select name,max(case when cource =’语文’ then score else 0 end) 语文,max(case when cource =’数学’ then score else 0 end) 数学,
max(case when cource =’英语’ then score else 0 end) 英语 from scores group by name;
32. Oracleのページネーション
- 行番号関数を使用する
SELECT *
FROM (SELECT ROWNUM AS rowno,r.*
FROM(SELECT * FROM tmp t ORDER BY id desc
) r
where ROWNUM <= page*size
) a
WHERE a.rowno > (page-1)*size
- row_number() over() 関数を使用する
Select * from (
Select * ,row_number() over(order by id desc) num
) a where num between (page-1)*size and page*size
33. department というテーブルには、フィールド名が 1 つだけあり、4 つのボールのペアに対応する a、b、c、および d の合計 4 つのレコードがあります. 今、4 つのボールのペアが競合しており、SQL ステートメントはすべての可能な一致の組み合わせを表示するために使用されます。
select a.name, b.name
from team a, team b
where a.name < b.name