まちいろエンジニアブログ

南池袋のWebサービス開発会社、株式会社まちいろのエンジニアブログです。

便利なSQLを紹介します~MySQL版~

こんにちは!まちいろの森です! これまでデータ抽出の際に、様々なSQLを利用してきました。そのうち、使える!便利だ!というSQLをこちらでいくつか紹介したいと思います!

複数テーブルの件数をまとめてみたい

複数テーブルのそれぞれの件数を知りたい場合にテーブル分SQLを実行するのは面倒ですよね? その場合 UNION ALL を利用すれば複数テーブルの件数を1回で抽出することが可能です。

SELECT 'テーブルA', COUNT(*) FROM テーブルAのテーブル名 UNION ALL 
SELECT 'テーブルB', COUNT(*) FROM テーブルBのテーブル名 UNION ALL 
SELECT 'テーブルC', COUNT(*) FROM テーブルCのテーブル名

結果は以下の通り、3テーブルまとめて件数を取得することができました! 条件が複雑な場合、結合を複数テーブルとしている場合等は検索結果が返ってくるのが遅い場合があるので、 注意が必要です。

f:id:e_mori:20170321175805p:plain

実行計画を見たい

SQLの実行結果が遅いとき、indexが正しくはられており、それが利用されているのかを確認したいとき、ありませんか? その場合は以下SQLを実行するとindexがはられているか、利用されているか否かがわかります。

explain 確認したいSQL

結果は以下の通りとなりました。

  • possible_keys … 利用できるindexを表す(nullの場合は、利用できるindexが存在しない)

  • key … 実際に利用したindexを表す

上記より、1行目はindexが利用されずにSQLが実行されたことを示し、 2行目は、作成したindexを利用してSQLが実行されたことがわかります。

f:id:e_mori:20170322111343p:plain

ソート項目がNULLの場合にNULLデータを一番最後に表示する

ソート項目がNULLのデータが含まれている場合、NULLデータ以外をorderByでソートし、NULLデータは最後にまとめて表示したいことはありませんか? order by ソート項目を条件につけるだけでは最初にNULLデータが表示されてしまいます。最後に表示したい場合は、order byを以下の通りに記載すると 実行結果で最後にNULLデータを表示することが可能です。

order by ソート項目 is not NULL ASC ,ソート項目 ASC

結果は以下の通りとなりました。NULLのデータを一番最後に表示することができています。

f:id:e_mori:20170322142935p:plain

最後に

MySQLにてデータ抽出を行う際に私が使って便利なSQLをご紹介しました! みなさんもぜひ活用してみてください!