RDB(リレーショナルデータベース/関係データベース)ではビューという機能があります。
ビューとは仮想的な表のことです。
つまりビューには元となる表があります。表が正規化され、たくさんの表に分割されるとデータの整合性がとりやすくなるというメリットもありますが、その分散した表の一部分ずつを取り出して使いたいという場面も出てきます。
そんな時にこのビューという仮想的な表を使うことで使い勝手が良くなります。
CREATE VIEW|SQL構文
ビューの作成は以下の構文で行います。
CREATE VIEW ビュー表の名前[(列名1, 列名2, ・・・)] AS SELECT
列名はビューが持つ列の名前で、取り出す元はSELECT文の後に続く部分で元となる表から取り出します。
SQL実行例
前提として以下のような表があったとします。
![](https://www.xn--4grr4jzer0z13b8ydc6hw8c14slx0cfdtdwftp3d.website/wp-content/uploads/2024/04/テーブル全体-901x1024.png)
この表の列の一部を組み合わせてビューを作成してみたいと思います。今回は
studentsテーブルのname列
coursesテーブルのcourse_name列
を組み合わせてビューを作成したいと思います。
CREATE VIEW TESTVIEW (name, course_name) AS SELECT name, course_name FROM courses, student_courses, students WHERE student_courses.student_id = 1 AND courses.course_id = student_courses.course_id AND students.student_id = student_courses.student_id;
ビューを表示して確認してみます。
![](https://www.xn--4grr4jzer0z13b8ydc6hw8c14slx0cfdtdwftp3d.website/wp-content/uploads/2024/04/viewnamecourse.png)
student_idが1のTaro Yamadaさんのcourse_nameを抽出できていますね。
ビューの更新
ビューは更新できるものとできないものがあります。
更新できるビュー
使える構文
更新する際には通常の表と同じように以下の構文が使えます。
INSERT文、UPDATE文、DELETE文
更新されるのは元の表|注意点
ここで注意点として更新されるデータが元の表になるということです。
更新できないビュー
更新できないビューには条件があります。
元となる行が特定できないビューは更新できない
この条件に合致するものとして以下のケースがあります。
・CREATEする時にMAX,MIN,AVG,SUMのような集合関数を用いている。
・DISTINCTを使っている。
・GROUP BYやHAVINGを使っている。
・複数の表を結合している(例外として元の行を特定できれば更新できる)
・副問合せが含まれている
コメントを残す