2017年3月16日木曜日

MySQL JOIN による3つのテーブルを結合

つなぎ合わせるテーブル3つは下記のとおりです。

受注一覧テーブル
SELECT * FROM order_master;
+----+------------+-----------+
| id | product_id | vendor_id |
+----+------------+-----------+
|  1 |          1 |         2 |
|  2 |          2 |         1 |
|  3 |          4 |         3 |
|  4 |          3 |         2 |
+----+------------+-----------+

商品一覧テーブル
SELECT * FROM product_master;
+----+----------------+
| id | product_name   |
+----+----------------+
|  1 | 調味料A        |
|  2 | 調味料B        |
|  3 | 佃煮           |
|  4 | コーンフレーク |
+----+----------------+

配送業者テーブル
SELECT * FROM vendor_master;
+----+-------------+---------------------+
| id | vendor_name | contract_date       |
+----+-------------+---------------------+
|  1 | 東京配送    | 2017-03-03 00:00:00 |
|  2 | なにわ屋    | 2017-05-03 00:00:00 |
|  3 | 桃山Express | 2018-03-03 00:00:00 |
+----+-------------+---------------------+


① 配送業者テーブル(vendor_master)から、有効期限内である業者からの受注情報を取得します。有効期限を判定するには、配送業者テーブル(vendor_master)の contract_date が今日よりも大きい日付であることを調べます。

② ①の結果取得される配送業者テーブル(vendor_master)を、RIGHT OUTER JOIN で受注一覧テーブル(order_master)と結合します。

③ ②の結果と商品一覧テーブル(product_master)を結合します。

SQL 文はこちらです。

SELECT
o.id '注文 ID'
,o.product_id '商品 ID'
,p.product_name '商品名'
,v.vendor_name '配送業者'
FROM
order_master o
RIGHT OUTER JOIN /*②の処理*/
(SELECT id, vendor_name FROM vendor_master WHERE contract_date > CURDATE()) v /*①の処理*/
ON
o.vendor_id = v.id
JOIN /*③の処理*/
product_master p
ON
o.product_id = p.id
;

2017年3月14日火曜日

MySQL ログイン方法

下記、root としてログインするコマンドです。

mysql -u root -p

root にパスワードが設定されている場合、続いてパスワードの入力が求められます。


※ログインユーザーは下記で確認することができます。
select user();


リンク:SQL 基本コマンド一覧
http://kainobi2.blogspot.com/2017/03/sql.html