LoginSignup
1
0

【MySQL】view(ビュー)の作成

Last updated at Posted at 2022-09-19

view(ビュー)とは

SQLによるSELECT文などで問い合わせを行うことで派生的に生成される仮想的な表のこと。
表に対して複数の表を内部結合や外部結合で連結した表や
WITH句などの処理のためにシステム内に一時的に作成される表なども含まれる。
ビューは導出表とも呼ばれる。

viewの作成

CREATE VIEW viewの名前 AS ビューの定義(SELECT hoge, fuga FROM テーブル名など)

動作検証

一つのテーブルからviewを作成

テーブルからいくつかのカラムを抽出してviewを作成してみる。
データは下記のsampleテーブルを使う。
スクリーンショット 2022-09-19 10.15.49.png

viewの作成

CREATE VIEW view_sample AS SELECT id, name, point, type FROM sample;

作成したviewの確認

SELECT * FROM view_sample;

viewが作成されてSELECT文で参照できることが確認できた!
スクリーンショット 2022-09-19 10.13.45.png

ちなみにviewの削除方法は...

DROP VIEW view_sample;

複数のテーブルからviewを作成

先ほどは1つのテーブルから作成したが、今度は複数のテーブルを結合したviewを作成する。

事前準備

テーブルを3つ用意する。
◆itemsテーブル

CREATE TABLE items (id int AUTO_INCREMENT, name varchar(50), price int, PRIMARY KEY(id);

INSERT INTO items (name, price) VALUES
('chocolate', 120),
('candy', 100),
('gum', 100),
('potato chips', 200),
('jelly', 170);

◆shopsテーブル

CREATE TABLE shops (id int AUTO_INCREMENT, name varchar(50), area varchar(50), PRIMARY KEY(id));

INSERT INTO shops (name, area) VALUES
('葛飾区', '東京都'),
('福岡市中央区', '福岡県'),
('上京区', '京都府'),
('札幌市', '北海道');

◆salesテーブル

CREATE TABLE sales (id int AUTO_INCREMENT, item_id int, shop_id int, soldItems int, PRIMARY KEY(id));

INSERT INTO sales (item_id,  shop_id, soldItems) 
VALUES 
  (1, 1, 5), 
  (1, 3, 2), 
  (2, 1, 1), 
  (2, 2, 2), 
  (2, 4, 3), 
  (3, 1, 1), 
  (3, 3, 2), 
  (3, 4, 2), 
  (4, 2, 6), 
  (4, 3, 2);

viewを作成

CREATE VIEW view_sales (
  sales_id, item_name, item_price, shop_name, 
  shop_area
) AS (
  SELECT 
    sa.id, 
    i.name, 
    i.price, 
    sh.name, 
    sh.area 
  FROM 
    sales sa 
    LEFT JOIN items i ON sa.item_id = i.id 
    LEFT JOIN shops sh ON sa.shop_id = sh.id
);

viewを確認

SELECT * FROM view_sales;でviewが参照できること確認できた!
スクリーンショット 2022-09-19 12.22.37.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0