テーブルからレコードを問い合わせるSQL文SELECT文は、1つ以上の表からデータを取得します。取得されたデータは、結果表または問合せ結果と呼ばれる表の形式で表示されます。社員表(emp)のすべての行から、すべての列を問い合わせる。2480004レコードが選択されました。社員表のすべての行から、社員番号列(empno)と社員名列(ename)を問い合わせる。中本すず香4レコードが選択されました。社員表から社員番号列が1002である行を問い合わせる。5940001レコードが選択されました。社員表から上司の社員番号(mgr)を問い合わせる。重複する値は除外する。10022レコードが選択されました。COUNTレコード件数を問い合わせるには、COUNT関数を使う。社員表の行数を問い合わせる。41レコードが選択されました。社員表の行数を問い合わせ、列にamountという名前を付ける。41レコードが選択されました。列に別の名前を付ける場合、AS句は省略できる。41レコードが選択されました。自分のスキーマ内にあるテーブル等から、すべての行を問い合わせる。tabletable問い合わせるテーブル(表)またはビュー、マテリアライズド・ビューを指定する。他のスキーマ内にあるテーブル等から、すべての行を問い合わせる。schema.tableschema問い合わせるテーブルなどが存在するスキーマを指定する。取り出す列の名前を指定します。全ての列を取り出すにはアスタリク記号を指定します。...subqueryサブクエリ(副問い合わせ)を指定する。constraint制約を指定する。制約の名前を指定する。指定を省略した場合、自動的に制約名が付けられる。主キー制約をしていた例を次に示す。VARCHAR2(14))FROMSELECT文のFROM節には、問合せ先となる表、ビュー、シノニム又は副問合せを指定する。カンマで区切って複数指定することができる。...schemaテーブル、ビュー又はシノニムのスキーマ名を指定する。指定を省略した場合は自スキーマとみなされる。tableテーブル名、ビュー名又はシノニム名を指定する。subquery副問合せ(サブクエリ)を指定する。alias別名を指定する。現在のスキーマと異なるスキーマにある表を指定する場合は、表名の前にスキーマ名とピリオド(ドット)を付ける。other.employeeWHEREWHERE句には選択する行の条件を指定する。条件の指定を省略した場合は、すべての行が選択される。条件に当てはまる行が無かった場合は、何も結果は返らない。条件は比較演算子を使う。複数の条件を論理演算子で繋ぐこともできる。副問合せを使って、倉島颯良と同じ部署の社員の名前を問い合わせる。'倉島颯良');職種と部署が倉島颯良と同じ社員の名前を問い合わせる。BY複数の行を条件ごとにまとめて扱うときに指定する。employee複数の列でグループ化することもできる。employeeHAVINGグループ関数の結果に対して条件を付けるには、HAVING句を使用する。BYSQLのSELECT文で表(テーブル)を問い合わせたときに返る行(レコード)の順序は不定であり、どのような順序で返されるかは保証されていない。何らかの法則があるかのように見えても、それは誤解である。SELECT文による問い合わせで返った行の順序がINSERT文で挿入した順番のように見えたとしても、それは偶然である。指定した列の値で昇順に並び替えられる。降順に並び替えるにはDESCを指定する。BY句を省略した場合は、並び替えられない。DESC句を指定すると、降順に並び替えられる。[ASC|DESC]]...column並び替えに使う列を指定する。ASC指定した列を昇順で並び替える。(デフォルト)DESC指定した列を降順で並び替える。射影とは、表から特定の列を抽出することである。student表からstudent_name列を抽出する例を次に示す。選択とは、表から特定の行を抽出ことである。student表からstudent_noが1である行を抽出する例を次に示す。結合とは、複数の表からひとつの結果表を作成することである。(単純結合)とは、結合条件を満たす行のみを戻す、複数の表の結合である。次の2つの表があったとする。department.deptno上記のSQLで得られる結果は次のとおり。総務部empnoが3の行はdeptno列がNULLであり、department表と一致する行がない。したがって結合条件を満たさないため、内部結合の結果には含まれない。内部結合を行うSQLの記述方法には2通りある。JOIN句の書式を次に示す。[,column...])WHERE句に結合条件を記述する例を次に示す。JOIN句に結合条件を記述する例を次に示す。結合条件を満たす行に加えて、一方の表については結合条件を満たさない行も戻す、複数の表の結合である。次の2つの表があったとする。JOIN)するSQL文は次のようになる。department.deptno上記のSQLで得られる結果は次のとおり。JOIN)の結果にも含まれる。[,column...])表AおよびBの外部結合を行い、すべての行をAから戻す問合せ(左側外部結合)を記述するSQL文の例を次に示す。表B.列1)上記のSQL文は、WHERE句の結合条件で外部結合演算子(+)をBの列に適用する方法でも可能である。表B.列1(+)表AおよびBの外部結合を行い、すべての行をBから戻す問合せ(右側外部結合)を記述するSQL文の例を次に示す。表B.列1)上記のSQL文は、WHERE句の結合条件で外部結合演算子(+)をAの列に適用する方法でも可能である。表B.列1内部結合の場合、WHERE節に選択条件を記述できる。'0';外部結合の場合、結合するレコードが無いときは列がNULLになるので、WHERE節ではなく、JOIN節に条件を記述する。UPDATE句を指定すると、行(レコード)レベルでロックを獲得する。ロックを獲得した行は、他のトランザクションから更新又は削除されることを防ぐことができる。コミット又はロールバックを行うことで、ロックは解放される。OF句でロックするテーブルを限定することができる。OF句に指定するのは列名であるが、ロックは列単位ではなく行単位である。条件に一致するレコードが表にあれば更新、なければ挿入(新規追加)する場合、普通にSELECTしてレコードが無かったらUPDATEするという方法では、SELECT時にレコードが存在してもUPDATE時にそのレコードがまだ存在している保証はない。UPDATEを使うと、レコードロックがかかり、UPDATEするまで削除されない。UPDATEを実行した場合、コミットするまでロックされたままなので注意が必要である。9i以降ではMERGE文を使用するのが望ましい。UPDATE句を使用できない。BY、集計関数(グループ関数)CURSOR式(ネステッド・カーソル)UNIONUNIONを使うことにより、複数のSELECT分をつなげてひとつの分として実行することができる。...複数のSELECT結果で重複する行がある場合、それらは1行にまとめられる。重複する行をまとめずにすべての行を得たい場合は、ALL句を指定する。UNIONでつなげるすべてのSELECT文の選択列は数、型ともに同じにする必要がある。BY句は最後のSELECT文に記述する。UPDATE句を指定できなくなる。FROMに指定する表がないときたいていのRDBMSではSELECT文のFROM句を省略できるが、OracleデータベースのSELECT文ではFROM句を省略できない。そのため、DUALという疑似表が用意されている。擬似列や関数を問い合わせるためFROM句に指定すべき表が無い場合は、DUALを指定する。DUALMySQLのSELECT文はFROM節を省略することができるため、DUALのようなダミーテーブルを使う必要がない。記述することができる。テーブルからレコードを削除するSQLTweet。