「SQL」カテゴリーアーカイブ

SQL関連のカテゴリ

SQL:UNION、UNION ALL演算子の使用方法

SQLで複数のSELECTで問い合わせた結果を連結したいという場合は集合演算子関数と言われる「UNION」や「UNION ALL」演算子を使用することで取得可能となります。

イメージ図

  • UNIONは重複行を削除して取得するので「A & C」を取得出来ます。
  • UNION ALLは重複行を含めて取得するので「A & B & C」を取得出来ます。

サンプルテーブル

UNIONの使用例

サンプルテーブル「goods」をUNIONで連結して取得するサンプルとなります。

  • SQL(クエリー)
  • 出力結果

UNION ALLの使用例

サンプルテーブル「goods」をUNION ALLで連結して取得するサンプルとなります。

  • SQL(クエリー)
  • 出力結果

 

SQL:システム日付(現在日付)を取得する方法

SQLでシステム日付を取得するにはMySQLやPostgreSQlとOracleでは少し異なるのでメモしておきます。

システム日付を取得するSQL:MySQL、PostgreSQL

date型で取得、time型で取得、timestamp型で取得する方法がありますがOracleのsysdateに相当するという意味でtimestamp型の方法をご紹介します。

または

システム日付を取得するSQL:Oracle

 

PostgreSQL:年、月、日、時、分、秒以下を切り捨てて取得する方法

OracleでのTRUC関数と類似したものにPostgreSQLではDATE_TRUNC関数があります。

DATE_TRUNC関数は「DATE_TRUNC([‘精度’],[列名])」形式で指定する事で取得できます。

使用例

サンプルテーブル「goods」

クエリー(SQL)

サンプルテーブル「goods」のtype_code=’102’のadd_dateをサンプルとしてDATE_TRUNC関数で抽出してみます。

出力結果

SQL:最大値と最小値を求める方法

SQLで最大値と最小値を求めるにはMAX関数とMIN関数を使用します。

使用例

  • サンプルテーブル「goods」
  • クエリー(SQL)

    サンプルテーブル「goods」のtype_codeの最大値と最小値を抽出しているサンプルとなります。

  • 出力結果

 

SQL:IN句からEXISTS句への変換方法

IN句をEXISTS句へ変換するとパフォーマンスが向上すると言われることがあるので

IN句からEXISTS句への変換例をメモしておきます。

サンプルテーブル

以下の商品テーブル「goods」と属性コードテーブル「type_code」を元に説明します。

    商品テーブル「goods」属性コードテーブル「type_code」
    ""

IN句を使用したSQL例

商品テーブル「goods」のtype_codeが ‘101’で属性コードテーブル「type_code」にも存在する商品名を取得する例となります。

EXISTS句を使用したSQL例

WHERE句後の「tc.code IN」を「EXISTS」に変更し、「AND type_code = tc.code」を追加しただけです。

出力結果(IN句、EXISTS句)

IN句、EXISTS句どちらの場合も以下の結果となります。

NOT EXISTS句を使用したSQL例

EXISTS句は使い慣れてないと今一つ分かりにくい気がするので、上記のEXISTSをNOT EXISTSで実行してみた例も記載しておきます。なんとなくEXISTSがどういう結果を出力しているかわかるかも。。

出力結果(NOT EXISTS句)

NOT EXISTS句の結果は以下となります。

SQL:指定した件数のみ取得する方法

SQLで指定した件数のみ取得する場合、MySQLやPostgreSQLではLIMIT句を使用します。

OracleではLIMIT句は使用できないのでROWNUMを使用します。

使用例

  • サンプルテーブル「goods」
  • クエリー(SQL)

    クエリーの最後にLIMIT(取得したいレコード数)を指定することで指定した件数のみ取得することが出来ます。

    Oracleの場合、ROWNUMを指定しただけではORDER BYでソート後の状態で取得ができないので副問合せで一度ソート後にROWNUMを指定することで指定した件数で取得することが出来ます。

  • 出力結果

SQL:重複行をカウントする方法

SQLでGROUP BYとCOUNTを使用して重複行をカウントする方法です。

使用例

  • サンプルテーブル「goods」
  • クエリー(SQL)

    GROUP BYでカウントしたい列を指定し、COUNTでGROUP BYに指定した列を指定することで重複行のカウントが可能となります。

  • 出力結果

SQL:SELECT結果の重複行を除外する方法

SQLでSELECT結果の重複行を削除するためにはDISTINCTを使用します。

使用例

  • サンプルテーブル「goods」
  • クエリー(SQL)

    SELECTの直後にDISTINCTを指定することで重複行を除外することが出来ます。

  • 出力結果

SQL:全角文字と半角文字を判定する方法

SQLで全角文字と半角文字を判定するにはLENGTHBやOCTET_LENGTH関数で取得したバイト数とLENGTH関数で取得した文字数を比較することで判断することができます。

使用例

  • サンプルテーブル「goods」
  • クエリー(SQL)

    ORACLEの場合はOCTET_LENGTHをLENGTHBへ変更すれば同様の結果を得られます。

  • 出力結果

SQL:文字列のバイト数を取得する方法

SQLでバイト数を取得する場合は、LENGTHBやOCTET_LENGTH関数を使用することで取得出来ます。

DBMS毎に使用できる関数が異なり、ORACLEではLENGTHB、MYSQLやPostgreSQLではOCTET_LENGTH、AccessではLENBが使用できます。

 

DBMS毎のバイト数を取得できる関数

DBMSバイト数を取得できる関数備考
ORACLELENGTHB・全角文字の場合には使用しているキャラクタセットによりバイト数は異なる
 ※UTF-8 の場合には全角文字1文字が3バイト
・ CLOB と NCLOB において LENGTHB は使用できない
MYSQL
or
PostgreSQL
OCTET_LENGTH
AccessLENB
SQLServer対象なし

使用例

  • サンプルテーブル「goods」
  • クエリー(SQL)
  • 出力結果