MySQLの基礎を勉強してみた2
前回の続きです。
基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! ) を読んで知らなかったことをまとめるシリーズ!
INを使ったサブクエリ
基本
サブクエリ(副問い合わせ)は、クエリの結果を使ってさらにクエリを実行する、2段階処理のことです。
サブクエリを使ったクエリは内部結合などでも実現できますが、サブクエリを用いた方が分かりやすく、また効率的になります。
書式は以下の通り。
SELECT * FROM テーブル名 WHERE カラム名 IN (1段階目の処理);
例えば、「1段階目の処理」に
SELECT MAX(カラム名) FROM テーブル名
と書くと、特定のカラムにおける最大値を持つレコードを表示できます。
あ、まとめて「テーブル名」と書いてしまいましたが、1段階目のテーブル名と2段階目のテーブル名は別のテーブルを指す想定です。
ビュー
ビューとは
MySQLには「ビュー」と呼ばれる機能が存在します。
ビューとはSELECTした結果をテーブルのように保持できる機能です。
データをテーブル上のそれのように扱えるが、データそのものを存在しない。
C言語のポインタみたいなイメージです。
メリット
ビューを使うメリットは、任意のテーブルから任意のデータを集められることです。
ビューを作成する際、特定のテーブルからデータを参照するのですが、参照元のデータが変更されると、ビューのデータも更新されます。
逆も然りで、ビューのデータを変更すると参照元のデータにも反映されます。
作成方法
CREATE VIEW ビュー名 AS SELECT文;
閲覧方法
SELECT * FROM ビュー名;
ストアドプロシージャ
作成方法
ストアドプロシージャを作成する際、SQL文の文末に「;」を付けると、その時点で実行されてしまいます。
そこで DELIMITER を使って区切り文字を「;」以外に変更します。
(今回は「//」)
次にストアドプロシージャを作成します。
CREATE PROCEDURE ストアドプロシージャ名(引数名 データ型) の形で宣言した後、BEGIN と END の間にSQL文を記述します。
最後に変更した区切り文字を元に戻します。
mysql> DELIMITER // -> CREATE PROCEDURE ストアドプロシージャ名(引数名 データ型) -> BEGIN -> SQL文; -> SQL文; -> ... -> END -> // mysql> DELIMITER ;
呼び出し方法
mysql> DELIMITER // -> CREATE PROCEDURE ストアドプロシージャ名(引数名 データ型) -> BEGIN -> SQL文; -> SQL文; -> ... -> END -> // mysql> DELIMITER ;
返り値のあるストアドファンクション
ストアドプロシージャには返り値がありませんでしたが、返り値の存在するストアドファンクションという機能もあります。
参考
基礎からのMySQL 改訂版 (プログラマの種シリーズ SE必修! )
- 作者: 西沢夢路
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2012/05/01
- メディア: 大型本
- 購入: 2人 クリック: 10回
- この商品を含むブログ (9件) を見る