SELECT (SQL)
同じ表にそれぞれ別名を用いて結合することで、広義の等価結合に属する。使用例としては、一つの表から相関的な値が使用されている時などに用いる。たとえば、表名A(棋士番号、棋士名、師匠番号)という表があり、師匠番号には棋士番号に対し外部キーが与えられている。ここで、各棋士と師匠の関係を一覧表示したい場合、棋士番号と師匠番号を関連づけて自己結合を行うと列の抽出を行える。
※ここでは、表名Aから Kという棋士一覧表と、Sという師匠一覧表を作りだし、表Kにおける師匠番号と表Sにおける棋士番号を結びつけ、最終的に表Kの棋士名と、表Sの棋士名を師匠名と別名表記して一覧表示している。なお、データベース構築においては、新たに師匠表を作り、その主キーと棋士表の師匠番号を外部キーとして結びつける方法もある(もし、師匠番号に棋士番号と異なる値が入力された場合は新たに表を作った方が無難である)。
複数表から問合わせ結果を参照する複合問合わせを行うための演算子を用いた構文のこと。UNION(和集合)、UNION ALL(全集合)、INTERSECT(積集合)、EXCEPTまたはMINUS(差分集合)があるが、DBMS環境によって使用できないものや演算子の名称が異なるものもある。各演算子における優先順位はなく、左から右に、順番に処理される。
主な条件として
問い合わせる行を一致させる必要がある。
各SELECT句に対応する行のデータ型の種類を一致させる必要がある(一部データ型において互換性は持つ)。
データサイズは一致していなくても良い。
ある条件を満たせば、列名は異なっていても構わない。
UNION ALL以外はソートされて返される。デフォルトは前文の第1列が基準となる。
右図のテーブル"T"欄のテーブルに対して、SQL文 SELECT * FROM T; を実行すると、結果欄に示されているように、テーブル"T"のすべての行とすべての列が返される。
同じテーブル"T"に対して、SQL文 SELECT C1 FROM T; を実行すると、テーブル"T"のすべての行の列C1のみが返される。これは、関係代数 における「射影」に相当する。
同じテーブル"T"に対して、SQL文 SELECT * FROM T WHERE C1 = 1; を実行すると、列C1 の値が 1 であるすべて行のすべての列が返される。これは、関係代数 における「選択」に相当する。
最後のSQL文 SELECT * FROM T ORDER BY C1 DESC; は最初のSQL文と同じ行を返すが、並び順が、ORDER BY句により、C1に対して降順(Z-A)になる。ORDER BY句で複数列を指定する場合は、カンマで区切る。例:ORDER BY C1 ASC, C2 DESC(この場合、列C1に対しては昇順、列C2に対しては降順になる。)