「SQL」タグアーカイブ

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を指定することで重複行を除外することが出来ます。

  • 出力結果

データベース製品のライセンス一覧

データベース製品のライセンス一覧です。

製品名オープンソース/商用ライセンスデータ
モデル
料金
DB2商用IBMORDBMS1プロセッサ
・461万7000円
2年目から5年目の保守料
・88万700円/年
1プロセッサで5年間運用した場合のコスト
・813万9800円
HiRDB商用日立製作所RDBMS同時接続数ライセンス
・120,000円
1プロセッサ
・1,800,000円
MySQLオープンソースGPL or 商用RDBMS1-4 ソケットサーバー 1台/年(税抜)
・Standard Edition:240,000
・Enterprise Edition:600,000
・Cluster Carrier Grade Edition:1,200,000
5+ ソケット・サーバー/年(税抜)
・Standard Edition:480,000
・Enterprise Edition:1,200,000
・Cluster Carrier Grade Edition:2,400,000
Oracle Database商用オラクルRDBMS
PostgreSQLオープンソースBSDORDBMS無料

SQL:前方一致・後方一致・部分一致検索する方法

SQLで前方一致・後方一致・部分一致等のあいまい検索の方法についてご紹介します。
SQLであいまい検索を行う場合はワイルドカード文字として「%」を使用します。

サンプルテーブル

以下の商品テーブル「goods」を元に説明します。

    商品テーブル「goods」

前方一致検索

SQL文(クエリー)

    • 前方一致検索する場合、LIKE演算子を指定して検索条件の最後に「%」を記載します。
    • 「SELECT * FROM [テーブル名] WHERE LIKE ‘[条件]%’;」の形式で記述します。

実行結果

以下の様に前方に「商品」と入力されているデータのみ出力されます。

後方一致検索

SQL文(クエリー)

    • 後方一致検索する場合、LIKE演算子を指定して検索条件の先頭に「%」を記載します。
    • 「SELECT * FROM [テーブル名] WHERE LIKE ‘%[条件]’;」の形式で記述します。

実行結果

以下の様に後方に「A」と入力されているデータのみ出力されます。

部分一致検索

SQL文(クエリー)

    • 部分一致検索する場合、LIKE演算子を指定して検索条件の前後に「%」を記載します。
    • 「SELECT * FROM [テーブル名] WHERE LIKE ‘%[条件]%’;」の形式で記述します。

実行結果

以下の様に文字列に「ボード」が含まれているデータが出力されます。

SQL:INDEXのメリットとデメリットについて

業務でデータベースの操作をする場合、データが大量に登録されているテーブルへアクセスする場合に索引(INDEX)を作成するとSQLクエリの実行が劇的に早くなるケースが多々あります。この索引(INDEX)についてどういう場合に作成すれば良いのか、メリット、デメリット等についてまとめておきます。

どういう場合に索引(INDEX)を作成すれば良いのか

索引(INDEX)を作成した方が良いケース

  • 項目数/データ数が多い大規模な表の1%~15%程の行を頻繁にアクセスする場合
  • WHERE句で頻繁に使用されている列である場合
  • 列の値が比較的一意である場合
  • 参照整合性制約で使用されている外部キーになっている列である場合

索引(INDEX)を作成しない方が良いケース

  • データ登録件数が少ない表である場合
  • 列内の値がほぼユニークである場合
  • NULL値が多く、NULL以外の値を検索しない場合

索引(INDEX)のメリット

  • 表検索(SELCET)する際、特定の行を素早く検索する事が出来る為、検索のパフォーマンスが早くなります。
  • ソート作業を省略出来ます。

索引(INDEX)のデメリット

  • データの登録(INSERT)、変更(UPDATE)の際、索引変更のためのオーバーヘッドが加わるため、索引(INDEX)がないテーブルに比べると時間が掛かります。
  • 索引(INDEX)を作成する領域が必要となります。

SQL:複数の値で検索する方法

SQLで1つの項目に対して複数の値に一致した条件で検索する方法をご紹介します。
この場合、考えられる方法としては「OR」演算子を使用する方法と「IN」演算子を使用する2つの方法があります。
通常はIN演算子で済むような条件であればOR演算子は使用しません。

サンプルテーブル

    以下の商品テーブル「goods」を元に説明します。
    商品テーブル「goods」

1つの項目に対して複数の値で検索

    SQL:「OR」演算子を使用する場合

    「OR」演算子を使用する場合、以下の様にWHERE句にOR演算子を指定する事で複数の値で検索する事が出来ます。
    「SELECT * FROM [テーブル名] WHERE [条件1] OR [条件2];」形式で記述します。

    SQL:「IN」演算子を使用する場合

    「IN」演算子を使用する場合、以下の様にWHERE句にIN演算子を指定する事で複数の値で検索する事が出来ます。
    「SELECT * FROM [テーブル名] WHERE [列名] IN ([値1], [値2] …;」形式で記述します。

    実行結果

    「OR」演算子、「IN」演算子どちらで実行した場合も取得結果は以下の様になります。

SQL:範囲検索する方法

SQLで範囲検索する方法をご紹介します。

サンプルテーブル

    以下の商品テーブル「goods」を元に説明します。
    商品テーブル「goods」

単純なレコード件数の取得

    SQL

    SQLはWHERE句にBETWEEN演算子を指定する事で範囲検索結果が取得出来ます。
    「SELECT * FROM [テーブル名] WHERE [列名] BETWEEN [From値] AND [To値];」形式で記述します。

    実行結果

SQL:レコード件数を取得する方法

SQLでテーブルのレコード数を取得する方法をご紹介します。

サンプルテーブル

    以下の商品テーブル「goods」を元に説明します。
    商品テーブル「goods」

単純なレコード件数の取得

    SQL

    SQLは
    「SELECT COUNT(*) FROM [テーブル名];」形式で記述します。

    実行結果

重複データを除いたレコード件数の取得

    SQL

    重複データを除いて取得する場合、SQLは
    「SELECT COUNT(DISTINCT [列名]) FROM [テーブル名];」形式で記述します。

    実行結果

SQL:内部結合と外部結合の違い

業務でSQLを使用する場合、必ず使用する事になると言って良いのがテーブルの結合処理です。WEB系システムの場合、そのほとんどはRDBMSを使用してますのでテーブルが一つだけなどという事はまずありえません。複数のテーブルからその時々に応じて必要なデータを取得し使用するのが常です。その際に重要になるポイントの一つが内部結合と外部結合です。

サンプルテーブル

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

内部結合とは

  • 2つのテーブルで一致したデータ行のみ取得します。
  • SQLは「SELECT * FROM [テーブル名1] INNER JOIN [テーブル名2] ON [結合条件]」形式で記載します。
  • サンプルSQL

    サンプルSQLの実行結果

外部結合とは

  • 2つのテーブルで一致しないデータも含めてどちらか一方のテーブルのデータを全て取得します。
  • SQLは左外部結合の場合、「SELECT * FROM [テーブル名1] LEFT OUTER JOIN [テーブル名2] ON [結合条件]」形式で記載します。
  • SQLは右外部結合の場合、「SELECT * FROM [テーブル名1] RIGHT OUTER JOIN [テーブル名2] ON [結合条件]」形式で記載します。
  • サンプルSQL(左外部結合の場合)

    サンプルSQLの実行結果