技術資料

MySQLのサブクエリ活用法:テーブル間でデータを参照・更新する方法

2010.12.09

error この記事は最終更新日から14年以上が経過しています。

サブクエリを使うことによって、テーブル1の検索結果を元に、テーブル2に何らかの処理を行なう、というようなことが可能です。

例えば以下のように架空のショッピングサイトの、ユーザーのIDとアドレスを格納した「UserList」と、注文毎のIDと商品名と購入者のユーザーIDを格納した「OrderList」という二種類のテーブルがある場合。

UserList
UserID MailAddress
1 yukimidaifuku_daisuki@abe-tatsuya.com
2 nattou_kirai@abe-tatsuya.com
3 syabusyabu_tabetai@abe-tatsuya.com
OrderList
OrderID OrderItem OrderUserID
1 しゃぶしゃぶ用鍋 3
2 しゃぶしゃぶ用松坂牛 3
3 雪見だいふく とろける生キャラメル味 20個セット 1
4 雪見だいふく W生チョコレート味 20個セット 1
5 納豆撲滅装置 2

この場合、例えば「yukimidaifuku_daisuki@abe-tatsuya.com」というメールアドレスのユーザーが注文した商品をリストアップしたい、というときには、

  1. まず、テーブル「UserList」を検索して「yukimidaifuku_daisuki@abe-tatsuya.com」というアドレスのユーザーのIDを取得
  2. 取得したユーザーのIDを元に「OrderList」を検索して、注文した商品リストを取得

という手順になるわけですが、この処理をサブクエリを使うことによって、以下のようにできます。

select OrderList.OrderItem
from OrderList
where OrderList.OrderUserID = (select UserList.UserID
                               from UserList
                               where UserList.MailAddress = 'yukimidaifuku_daisuki@abe-tatsuya.com');

こんな感じで、where句の中に括弧でくくった別の select文を書くことで、サブクエリとして実行できます。

update文やdelete文でも、同様にwhere句の中にサブクエリを使うことができます。

他にも、

update TABLE1
set TABLE1.col1 = (select TABLE2.col2 from TABLE2 where TABLE2.col3 = 'hoge')
where TABLE1.col4 = 'huga';

こんな感じの使い方もできます。
update文で更新する値そのものを、別のテーブルから引っ張ってくる、というわけですね。

なおMySQLでは、update や delete でサブクエリを使う場合は「テーブル1の何らかの検索結果を元に、同じテーブル1に対して処理を実行する」ということができないようです(select文では可能)。

PHPとOpenAI APIで簡単なチャットシステムのコードを書いてみた

2023.04.13

PHPとOpenAI APIを使ってチャットボットを作成し、ユーザーとAIが対話できる基本的なプログラムを紹介します。サーバーに保存したチャット履歴を基に、APIから取得したレスポンスをデータベースに記録し、チャット形式で対話を進めていくサンプルコードを用意しました。

MySQL OpenAI API PHP

PHPでMySQLに接続してデータを取得する基本テンプレ

2023.04.11

PHPでMySQLに接続し、データを取得する基本的な手順のテンプレ。mysqli拡張を使用したデータベース接続から、SQLクエリ実行、結果の取得までの処理を掲載しています。

MySQL PHP

INNER JOINとLEFT JOINの違いを理解する

2023.04.09

SQLでのテーブル結合には、主にINNER JOINとLEFT JOINがありますが、これらの違いを理解することは重要です。この記事では、二つのテーブルを使用して、それぞれの結合方法を実行した結果を比較し、INNER JOINがどうデータをフィルタリングし、LEFT JOINがどう欠損データも取得するかを解説します。

MySQL

perlでMySQLを操作する基本的なテンプレート

2023.04.08

perlでMySQLデータベースを操作するための基本的なテンプレートを紹介します。DBIモジュールを使用してデータベースに接続し、SQLクエリを実行する方法を解説。

MySQL Perl

阿部辰也へのお仕事の依頼・お問い合わせ

お名前 *必須
会社名
メールアドレス *必須
電話番号
URL
お問い合わせのきっかけ
お問い合わせの内容 *必須
個人情報の取り扱いについて *必須 プライバシーポリシーをご確認いただき、同意いただける場合は「同意する」にチェックをしてください。

© 2005 - 2024 Tatsuya Abe. All Rights Reserved.