データ分析やデータサイエンスを行っていると、MySQLを使うことがあります。まだ僕自身もMySQLは勉強中の身なので、アウトプットを兼ねて基礎的なコマンドをまとめておくことにしました。
目次
基本構文
Select 、from
selectは取得する列名を指定し、fromはどのテーブルからデータを取得するのかを指定します。MySQLにおいてアスタリスク「*」は「任意の」という意味になります。
select * from users; /*usersテーブルからすべてのデータを取得する*/ select id from users; /*usersテーブルからidのカラムのみ取得する*/
Where
Whereは取得する条件を指定します。
select * from users where id = 1; /* usersテーブルからidが1のデータを取得する */ select * from users where id >= 10; /*usersテーブルからidが10以上のデータを取得する*/
Like
Likeは部分一致(あいまい検索)を行う際に用います。「%」は0文字以上の任意の値、「-」は1文字の任意の値を表します。
/* usersテーブルの中で、last_nameが「藤」から始まるデータを抽出する*/ /* 藤岡、藤原、藤木原など*/ select * from users where last_name like "藤%"; /* usersテーブルの中で、last_nameが「藤」で終わるデータを抽出する*/ /* 中藤、武藤、斎藤など*/ select * from users where last_name like "%藤"; /* usersテーブルの中で、last_nameが「田○」のデータを抽出する*/ /* 田口、田中、田代など*/ select * from users where name like "田-";
Limit
Limitは取得するデータの上限を指定します。例えば業務でDBを操作するときに、大量のデータを引っ張ってきてしまうとDBがフリーズして業務に支障がでる可能性があります。そのため、大量のデータ(数十万以上とか)が格納されたDBを操作するときは、基本的にLimitをデフォルトで利用するのが良いと思います。
/* 基本形 */ select 取得列名 from テーブル名 limit [オフセット(省略可)] 最大取得数; /* usersテーブルから最大10件を取得する*/ select * from users limit 10; /* usersテーブルの21番目から、最大10件を取得する*/ select * from users limit 20, 10;
オフセットを指定することで、取得をスタートする位置を任意で決めることが出来ます。
Between 〜 and …
Between 〜 and …は、〜と…の間、つまり範囲を表します。これはwhere句のあとに使われることが多いです。
/* usersテーブルからidが10〜20のデータを取得する*/ select * from users where id between 10 and 20;
こちらはbetween 10 and 20と指定した場合、10も含まれるので要注意です。
count
countは対象の要素数を返してくれる集約関数です。nullは除外されます。また、count(distinct 列名)と書くことで、ユニークな数を返してくれます。下の例では、記事一覧のデータテーブルarticlesにあるデータのうち、ユニークユーザーが何人いるか返してくれます。
/* 全ユーザー数を返す */ select count(*) from users; /* ユニークユーザー数を返す */ select count(distinct user) from articles;
記述順序
- select
- from
- where
- group by
- having
- order by
- limit
実行順序
- from
- where
- group by
- having
- select
- order by
- limit
一旦まとめ
今後もSQLを学んでいくごとにアップデートしていきます。