()内がサブクエリ
■WHEREで"=",">",を利用
SELECT * FROM [TableName1] WHERE
[ColName1] = (SELECT [ColName2] FROM
[TableName2] WHERE [ColName3] = 1);
SELECT * FROM [TableName1] WHERE
[ColName1] = (SELECT MAX([ColName2])
FROM [TableName2];
※上記の場合、サブクエリは1件だけ結果を返すようにしなければならない。
■IN
SELECT * FROM [TableName1] WHERE
[ColName1] IN (SELECT [ColName2] FROM
[TableName2];
※上記の場合、サブクエリーから[ColName2]の値がが返され、[ColName1]に同じ値があれば該当レコードが表示される。
■EXISTS
SELECT * FROM [TableName1] WHERE
NOT EXISTS (SELECT * FROM [TableName2] WHERE
[ColName2]=[TableName1].[ColName1]);
※サブクエリーが1以上のレコードを返したとき真になる。
※上記の場合、NOTで反転してるので、[ColName2]=[TableName1].[ColName1]が成り立たないときレコードが表示される。
■FROM内でテーブルの代わりに利用
SELECT * FROM (SELECT * FROM [TableName1])
AS [TableName2];
※サブクエリの結果をALIASで仮想テーブル[TableName2]に割り当てる。
SELECT [TableName3].[ColName1],COUNT([TableName3].[ColName2])
FROM (SELECT * FROM [TableName1] UNION SELECT *
FROM [TableName2]) AS [TableName3] GROUP
BY [TableName3].[ColName1];
※[TableName1]と[TableNmae2]を結合し、ALIASとして仮想テーブル[TableName3]に割り当てる。
GROUP BYで[ColName1]をまとめられ、ターゲットの指定通りまとめた[ColName1]と[ColName1]でまとめられたレコードの個数が表示される。
■ターゲットリストで利用
SELECT (SELECT MAX([ColName2])
FROM [TableName2]),[ColName2] FROM
[TableName1];
※[TableName2]のMAX値と[TableName1]の[ColName2]が表示される。
※上記の場合、サブクエリは1件だけ結果を返すようにしなければならない。
ALL(すべて)/ANY(どれか)
■ALL
SELECT * FROM [TableNmae1] WHERE
[ColName1] > ALL (SELECT [ColName1] FROM
[TableName2]);
※[TableNmae1]の[ColName1]のうち、[TableName2]の[ColName1]のどれよりも大きい値をもつレコードが抽出される。
■ANY
SELECT * FROM [TableNmae1] WHERE
[ColName1] = ANY (SELECT [ColName1] FROM
[TableName2]);
※[TableNmae1]の[ColName1]が[TableName2]の[ColName1]の値どれかに等しければ抽出される。