Mottchanさんの助け合いフォーラム投稿一覧
解説では、
「・DML文は1つの文で1つのトランザクションになる
DML文は1つ以上の文のまとまりで1つのトランザクションになります。」
となるので、ばつとなっています。
DML文は1つ以上の文のまとまりで1つのトランザクションが正解であれば
DML文は1つの文で1つのトランザクションになる。も正解では無いでしょうか。
1つ以上の文のまとまりという言葉が理解できていないかもしれません。
誰かわかる人教えてください。
以下の文は正解のクエリとなっていますが、>の解説がありませんのでよくわかりませんでした。
SELECT department_id, AVG(salary) FROM employees WHERE salary > (SELECT MIN(salary) FROM employees) GROUP BY department_id
どなたかご教授いただけると幸いです。
以下の2つのCREATE文で、
列UNIQUE制約を付与してから複数列UNIQUE制約をつけるのと、
複数列UNIQUE制約のみの場合でどのように違うか教えてください。
CREATE TABLE temp
(
id NUMBER(2) CONSTRAINT id_uq UNIQUE NOT NULL,
name VARCHAR2(10) CONSTRAINT name_nn NOT NULL,
birth DATE,
CONSTRAINT temp_uq UNIQUE(id, name)
);
CREATE TABLE temp
(
id NUMBER(2) CONSTRAINT id_uq NOT NULL,
name VARCHAR2(10) CONSTRAINT name_nn NOT NULL,
birth DATE,
CONSTRAINT temp_uq UNIQUE(id, name)
);
解説:
表の結合を行う際に、表接頭辞として「表名」または「表別名」を指定すると、メモリの使用量が節約でき、パフォーマンスの向上につながります。
ただし、同じ表の表接頭辞として「表名」と「表別名」を混在することはできません。
「表名」と「表別名」を混在している状況ってどのようなコードでしょうか。
ON e.emp = job みたいなことでしょうか。
どちらか片方だけで表Aの参照権限はuserに付与されて、表Aをslectできるようになると思います。
表Aを参照権限を付与したい場合、
GRANT SELECT ON 表A TO user;
全ての表の参照権限を付与したい場合、
GRANT SELECT ANY TABLE TO user;
少し調べましたが、ここが一番わかりやすいとおもいます。↓
オブジェクト権限とシステム権限
そう考えると実務でテーブル数が多い場合、全部ANYでいいじゃんってなると思うんですけど、
セキュリティ面を考えてANYを使わないで多くの表に権限を付与する方法というのもあるみたいです。以下Oracleの公式サイト↓
SELECT ANY TABLEシステム権限を使わないために
Oracle® Database SQL言語リファレンスより
CASCADE CONSTRAINTS
CASCADE CONSTRAINTSを指定すると、削除される表の主キーまたは一意キーを参照するすべての参照整合性制約を削除できます。このような参照整合性制約があるときにこの句を省略した場合、エラーが戻され、表は削除されません。
上記の書き方だと、参照整合性制約を削除した上で表を削除するんだと思います。
Oracleガイドラインより
大きな表で頻繁に検索される行の割合が15%未満の場合は索引を作成してください。割合は、表スキャンの相対速度、および索引キーに対する行データの分散度によって大きく異なります。表スキャンが高速であるほど割合は低くなり、クラスタ化されている行データが多いほど割合は高くなります。
10%以上でも索引は使用した方が良いのでは無いでしょうか。
タイトルの通りです。もし、わかる方いたらお願いします。
SELECT employee_name, department_name, job_name
FROM departments d JOIN employees e
ON d.department_id = e.department_id JOIN jobs j
ON e.job_id = j.job_id;