はいどうもこんにちは。
バックエンドエンジニアとしてSQLが書けないとやばいと思っています。
そしてピンチの人にチートシートを準備しました!←自分へ
書き方とかは超端的に書くので細かい説明、使い方とかは省いています。
Table of Contents
解決したいこと
今回解決したいことは、「あのSQL文ってどうしてかくんやっけー?」
「なんとなく覚えているけど書き方があいまいや!!」
ってな人に向けて、「ああ、そうそう、書くねんな。 ありがとさん。」
ってなるように目指しています。だからあまり詳しい使い方とかは載せないと思います~
チートシート的な感じで使えるように、できるだけ記事の更新もしていきたいと思っています。願っています…
とりあえずコピペして利用したい「怠惰なエンジニア」向け!ですwww
ということでどんどん書いていきましょう!
WHERE
NULL以外のデータが入るカラムを抽出
特定のカラムがnullじゃないレコードを抽出する。
SELECT
'{カラム名}'
FROM
'{table名}'
WHERE
'{カラム名}' IS NOT NULL;
Code language: PHP (php)
例
usersテーブルのemailカラムがnullじゃないレコード(入力のあるレコード)を抽出。
SELECT
*
FROM
'users'
WHERE
'email' IS NOT NULL;
Code language: PHP (php)
NULLと空白以外を抽出
nullと空白は違うので、別の抽出方法もあります!
AND条件を指定して、とりあえず指定したカラムに文字列とか何かが入っているレコードが欲しい!って時に利用。
SELECT
'{カラム名}'
FROM
'{table名}'
WHERE
'{カラム名}' IS NOT NULL
AND
'{カラム名}' != '';
Code language: PHP (php)
GROUP BY
COUNTとGROUP BYで種類ごとの集計を取得
SELECT
カラム名,
COUNT( カラム名 )
FROM
テーブル名
GROUP BY
カラム名;
ほんなら以下のような結果がゲット。(カラム名をnameと仮定)
name | count(name) |
高橋 | 30 |
山田 | 40 |
countで全レコード数を取得
NULLも含める場合
SELECT
COUNT(*)
FROM
テーブル名;
NULLは含めない場合はnullを含めたくない列名を指定して、検索
SELECT
COUNT(列名)
FROM
users;
data type調査
特定テーブルのdata typeを知る
SELECT
TABLE_CATALOG,
TABLE_SCHEMA,
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE
FROM
INFORMATION_SCHEMA.COLUMNS
where
TABLE_NAME = '{テーブル名}'
Code language: JavaScript (javascript)
こっちでもできる↓
show columns from {テーブル名}
Code language: JavaScript (javascript)
between
日付を指定して間の期間にあるレコードを取得
usersテーブルで12月中に作成されたレコードを取得
SELECT
*
FROM
users
WHERE
created_at
BETWEEN
'2021-12-01 00:00:00' AND '2021-12-31 00:00:00'
Code language: JavaScript (javascript)
開始と終了期間の間(BETWEEN)にあるレコードをカウント(COUNT)する
SELECT
count(*)
FROM
users
WHERE
created_at
BETWEEN
'2021-01-01 00:00:00' AND '2021-12-31 00:00:00'
Code language: JavaScript (javascript)
User作成関連
ユーザー確認
現在接続しているユーザーを確認する。
select user(), current_user();
rootユーザーにログインして、ユーザーの一覧を取得する。
//mysql.userテーブルに必要な情報が入っているので必要カラムを指定
SELECT Host, User FROM mysql.user;
Code language: JavaScript (javascript)
ユーザーの権限確認
指定したユーザーに設定してある権限を確認する。
SHOW GRANTS FOR {user}
//例
SHOW GRANTS FOR root@localhost
Code language: JavaScript (javascript)
ユーザーの作成
ユーザーにhostとpasswordを指定して作成する。
create user 'ユーザー名'@'ホスト名' identified by 'パスワード';
//例
create user 'test_user'@'localhost' identified by 'password12345';
Code language: JavaScript (javascript)
DELETE(削除)関連
対象レコードの削除
delete from テーブル名 where 条件;
Code language: JavaScript (javascript)
例: nameテーブルのidが1のレコードを削除
delete from name where id = 1;
Code language: JavaScript (javascript)
DB全体
テーブル数をカウント
対象のDBにあるテーブル数をカウントする。
select count(*) from `information_schema`.`tables` where `table_schema` = 'データベース名';
Code language: JavaScript (javascript)
チートシートのデメリット
ある程度使い方を理解したうえでSQLを書くことで、応用的なこともできるので、コピペだけは避けておこうと思ってます~
ちなみにおすすめのSQLフォーマッターはこちら↓いい感じにしてくれる。