「分かりそう」で「分からない」でも「分かった」気になれる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文のことなんだな~」と お考えください。

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

おまけ

■検索してみる?




書籍画像
わわわ説明術コラム
宣伝だよ
優れたエンジニアがコミュニティの中でしていること
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本
サイバー忍者入門 忍者・スパイ・軍隊・ハッカーに学ぶ フルスタック・ハッキング