「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

サブクエリ【SQL】

pointこの用語のポイント

point入れ子になったSQL文だよ

pointもしくは、入れ子になったSQL文における中に書いてある方のSQL文だよ

point普通はselect文だよ

スポンサーリンク

簡単に書くよ

サブクエリ【SQL】(英:subquery)とは

ショボい例だけど、例えば「SELECT * FROM (SELECT column1 FROM tbl1)」のように、SQL文(データベースに対する命令文)の中に入れ子になってSQL文が書かれていること。
言い方を変えると

SQL文の結果を使ったSQL文
です。

もしくは

「SELECT * FROM (SELECT column1 FROM tbl1)」における「SELECT column1 FROM tbl1」の部分のように、入れ子になって書かれているSQL文における中に書いてある方のSQL文のこと
です。


image piyo

詳しく書くよ

順番に見ていきましょう。
まずは予備知識として

データベース
テーブル
SQL
SQL文クエリ
select文


について説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。

データベースは「データを入れておく箱」です。

サブクエリ

ただし「データベース」という用語は、実際には もう少し複雑な概念です。
データを入れておく箱そのものは「テーブル」と言います。

サブクエリ2

とりあえず

データベースの話において、実際にデータを入れておく箱がテーブル

と覚えてください。

SQLは「データベースと やり取りするときに使う言葉」です。

サブクエリ3

データベースにデータを入れるときは、データベースさんに「これを入れておいて」と命令します。
データベースからデータを取り出すときは、データベースさんに「こんなデータを取り出しておくれ」と命令します。
SQLは、そんな命令をするときに使う言葉です。

SQL文は「データベースに対する、SQLを使った命令文」です。
クエリ」とも呼ばれます。

サブクエリ4

「SQL」と「SQL」は違います。
あまり神経質になる必要はありませんが、区別できるように しておいてください。

SQLは「言語」です。
SQL文は「命令(文)」です。

サブクエリ5

例えば、そうですね。
ピヨ子さんがピヨ太君に日本語で「パン買ってこい!」と命令したとしましょう。

サブクエリ6

ピヨ子さんが人間、ピヨ太君がデータベースだとすれば「日本語」が「SQL」です。
「パン買ってこい!な命令」が「SQL文」になります。

サブクエリ7

select文はデータベースさんに対する「これ、探してこい」な命令文です。
データベースの中にあるデータを取り出すときに使います。

サブクエリ8

select文の基本的な書式は以下の通りです。

SELECT
 【取り出す項目】
FROM
 【対象のテーブル】
WHERE
 【取り出す条件】
;


例えば

SELECT
 column1
FROM
 tbl1
WHERE
 ID = 1
;


というselect文が あったとしましょう。

これは

「tbl1」という名前のテーブルから「項目『ID』の値が1」な条件に合うデータを選んで、選び出されたデータの項目「column1」の値を取り出してよ

な命令です。

サブクエリ9

以上を踏まえて、本題に入ります。

実はSQL文というのは入れ子にできるのです。
例えば

SELECT
 count(*)
FROM
 (
  SELECT
   column1
  FROM
   tbl1
  WHERE
   ID = 1

 )
;


のような書き方ができます。

このSQL文は

1.「tbl1」という名前のテーブルから「項目『ID』の値が1」な条件に合うデータを選んで、選び出されたデータの項目「column1」の値を取り出してよ
2.「1」で取り出したデータの件数を教えてよ


な命令です。
※【取り出す項目】に書いてある「count(*)」は「件数を教えてよ!」な指示です。

つまり

select文の結果に対してselect文をしている

わけです。

サブクエリ10

お待たせしました。

この例で登場した

SELECT
 count(*)
FROM
 (
  SELECT
   column1
  FROM
   tbl1
  WHERE
   ID = 1

 )
;


のような

入れ子になっているSQL文

が「サブクエリ」です。
言い方を変えると

SQL文の結果を使ったSQL文

です。
副問い合わせ」と表現されることも あります。

サブクエリ11

あるいは

SELECT
 count(*)
FROM
 (
  SELECT
   column1
  FROM
   tbl1
  WHERE
   ID = 1

 )
;


における

  SELECT
   column1
  FROM
   tbl1
  WHERE
   ID = 1


のような

入れ子になっているSQL文において中に書いてある方のSQL文

が「サブクエリ」です。

サブクエリ12

どちらを指しているかは文脈から判断してください。

今回は「select文の結果をselect文する」例を紹介しました。
FROM句の【対象のテーブル】のところをサブクエリにする形ですね。

他にも

■select文の結果をWHERE句の【取り出す条件】として指定する
SELECT
 column2
FROM
 tbl2
WHERE
  column1 in (
  SELECT
   column1
  FROM
   tbl1
  WHERE
   ID = 1

 )
;


とか

■select文の結果を使ってデータを投入するinsert文を発行する)
INSERT INTO tbl2 (column1)
SELECT
 column1
FROM
 tbl1
WHERE
 ID = 1

;


とか、いろいろな書き方のサブクエリがあります。
入れ子の中になる方のSQL文は、ほぼ間違いなくselect文ですけどね。

また、データベースの種類によっては「あっ!この書き方のサブクエリは使えないからね!」な場合も あります。

そこら辺の あれやこれやは他のところで勉強してください。


image piyo2

一言でまとめるよ

まぁ「サブクエリ」って単語が出てきたら「SQL文(データベースに対する命令文)を入れ子にする(SQL文の結果を使ったSQL文にする)こと、もしくは、SQL文を入れ子にしたSQL文における中に書いてある方のSQL文のことなんだな~」と お考えください。

一番上に戻るよ
スポンサーリンク
書籍画像074
書籍画像051

おまけ

■訳してみるよ

「sub(サブ)」という接頭辞が付くと「~の下」や「副~」的な意味になります。
「query(クエリ)」の意味は「質問」とか「疑問」とか「問い合わせ」とか「質問する」とか「問い合わせる」とかです。
何となく くっつけると

副問い合わせ

となります。





書籍画像
わわわ説明術コラム
宣伝だよ
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本【Audible】
マンガでわかるITパスポート
クイズで学ぶUIデザイン ユーザビリティの基本が身につく50問