Mottchanさんの助け合いフォーラム投稿一覧

助け合いフォーラムの投稿
2023/02/06 コメント
一意制約について教えてください。
ありがとうございます。助かります。
2023/02/06 コメント
JOIN句の表接頭辞について
ありがとうございます。理解できました。
2023/02/06 投稿
DML文のトランザクションについて

解説では、
「・DML文は1つの文で1つのトランザクションになる
 DML文は1つ以上の文のまとまりで1つのトランザクションになります。」
となるので、ばつとなっています。

DML文は1つ以上の文のまとまりで1つのトランザクションが正解であれば
DML文は1つの文で1つのトランザクションになる。も正解では無いでしょうか。

1つ以上の文のまとまりという言葉が理解できていないかもしれません。
誰かわかる人教えてください。

2023/02/01 投稿
WHERE文で用いられる&gtとはなんでしょうか。

以下の文は正解のクエリとなっていますが、&gtの解説がありませんのでよくわかりませんでした。
SELECT department_id, AVG(salary) FROM employees WHERE salary &gt (SELECT MIN(salary) FROM employees) GROUP BY department_id

どなたかご教授いただけると幸いです。

2023/02/01 投稿
一意制約について教えてください。

以下の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)
);

2023/01/27 コメント
なぜ、SELECT句に表接頭辞がついていない列名が指定されているのにエラーにならないのでしょうか。
2つ以上の表の中で、ユニークな列名であれば表接頭辞はいらないんですね。 大変参考になります。ありがとうございます。
2023/01/27 コメント
外部キーの親表の削除
そうだと思います。 デフォルトは親表を削除できないので、デフォルト値での解答欄が作られているのだと思います。 ただ、言葉の定義が曖昧な感じはありますね。 FOREIGN KEY制約の親表に指定された表は、依存する行の有無にかかわらず削除できません。 →"FOREIGN KEY制約の親表に指定された表は"となっているので、cascade constraintsで制約指定を外さない限り、親表に制約がかかっているため削除できないと分かる。 ・FOREIGN KEY制約を定義すると、依存する行がある場合のみ親表を削除できない →定義しても、親表をcascade constraintsで削除できるじゃん。 となります。 なので、 ・FOREIGN KEY制約の親表に指定された表は、依存する行がある場合のみ親表を削除できない。 というような感じで、表に対して参照整合性制約がかかっている状態の表を主語に置く必要がありそうですね。
2023/01/27 投稿
JOIN句の表接頭辞について

解説:
表の結合を行う際に、表接頭辞として「表名」または「表別名」を指定すると、メモリの使用量が節約でき、パフォーマンスの向上につながります。
ただし、同じ表の表接頭辞として「表名」と「表別名」を混在することはできません。

「表名」と「表別名」を混在している状況ってどのようなコードでしょうか。
ON e.emp = job みたいなことでしょうか。

2023/01/26 返信
システム権限とオブジェクト権限

どちらか片方だけで表Aの参照権限はuserに付与されて、表Aをslectできるようになると思います。
表Aを参照権限を付与したい場合、
GRANT SELECT ON 表A TO user;
全ての表の参照権限を付与したい場合、
GRANT SELECT ANY TABLE TO user;

少し調べましたが、ここが一番わかりやすいとおもいます。↓
オブジェクト権限とシステム権限

そう考えると実務でテーブル数が多い場合、全部ANYでいいじゃんってなると思うんですけど、
セキュリティ面を考えてANYを使わないで多くの表に権限を付与する方法というのもあるみたいです。以下Oracleの公式サイト↓
SELECT ANY TABLEシステム権限を使わないために

2023/01/26 返信
外部キーの親表の削除

Oracle® Database SQL言語リファレンスより

CASCADE CONSTRAINTS
CASCADE CONSTRAINTSを指定すると、削除される表の主キーまたは一意キーを参照するすべての参照整合性制約を削除できます。このような参照整合性制約があるときにこの句を省略した場合、エラーが戻され、表は削除されません。

上記の書き方だと、参照整合性制約を削除した上で表を削除するんだと思います。

2023/01/25 投稿
問の解答について

Oracleガイドラインより
大きな表で頻繁に検索される行の割合が15%未満の場合は索引を作成してください。割合は、表スキャンの相対速度、および索引キーに対する行データの分散度によって大きく異なります。表スキャンが高速であるほど割合は低くなり、クラスタ化されている行データが多いほど割合は高くなります。

10%以上でも索引は使用した方が良いのでは無いでしょうか。

2023/01/25 投稿
なぜ、SELECT句に表接頭辞がついていない列名が指定されているのにエラーにならないのでしょうか。

タイトルの通りです。もし、わかる方いたらお願いします。

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;

戻る