SQL初心者の私へのProgateのSQLコースのまとめ
![SQL初心者の私へのProgateのSQLコースのまとめ](https://newsite-make.com/wp-content/uploads/2022/09/progate-sql1-1024x597.jpg)
1550 回閲覧されました
みなさんこんにちは、WEB制作のエンジニアのjonioです。
今回はSQLをすぐ忘れる私へのProgateのSQLコースのまとめを掲載します。
それではまとめの開始です。
「purchases」テーブルの中身が↓になっていたとして話を進めます。
目次
カラムの取得
テーブルの中から特定のカラムのデータを取得したい場合はSQL文を「SELECT カラム名 FROM テーブル名」と書きます。
今回は「name」カラムのデータを取得したいので↓と書きます。
複数のカラムのデータを取得したい場合は「SELECT カラム名1,カラム名2 FROM テーブル名」とカラムを「,」で区切って書きます。
例えば↓です。
全てのカラムの取得
テーブルの中1つまたは複数のカラムのデータを取得するのではなくテーブルの中の全てのカラムのデータを取得する場合は「SELECT * FROM テーブル名」と書きます。
例えば↓です。
特定のデータを取得
カラムの中の特定のデータの場合のみ取得したい場合があります。
例えばcategoryカラムの値が「食費」の場合のデータが欲しいとします。
こんな時は「WHERE」を使い「SELECT * FROM テーブル名 WHERE カラム名 = 特定のデータ」と書きます。
具体的に書くと↓です。
データの型による書き方の違い
特定のデータを取得する時ですがシングルクォーテーション(’ ’)やダブルクォーテーション(” ”)で囲む時と囲まない時があります。
クォーテーションで囲まないのはとりあえず数字の場合(日付は除く)と覚えておけばいいみたいです。
比較演算子を使った取得
WHEREですが比較演算子(「>」や「<=」とか)を使って取得する事ができます。
例えば↓です。
特定の文字を含んだデータの取得
特定の文字を含んだデータを取得する場合は「LIKE」を使い「WHERE カラム名 LIKE ’文字列’」とします。
例えば「わんこ」で終わる文字列を含んだデータを取得する場合は↓と書きます。
「わんこ」で終わる文字列 (〜わんこ)は「LIKE ’%わんこ’」と書きます。(%に当たるのが〜)
「わんこ」で始まる文字列(わんこ〜)の場合は「LIKE ’わんこ%’」と書きます。
「わんこ」だけしか含んではいけない場合は「LIKE ’%わんこ%’」と書きます。
指定した文字以外を取得
例えば「わんこ」を含んでない文字列が入ったデータを取得したかったとします。
その場合はカラム名の前に「NOT」を付けます。
例えば↓です。
「NOT」ですが比較演算子やLIKEの場合にも使う事ができます。
カラムの値が何もないデータを取得
カラムの値が空っぽのデータを取得する場合は「WHERE カラム名 IS NULL」とします。
例えば↓です。
カラムの値が空っぽではないデータを取得する場合は「WHERE カラム名 IS NOT NULL」とします。
例えば↓です。
「かつ」・「または」
「カラム名 = ’文字列’」を複数使って絞り込みを強くする場合は「かつ」を使います。
例えばnameカラムが「わんこ」かつageカラムが「13」であるデータを取得したい場合は↓にします。
「AND」を使って条件をつなぎます。
絞り込みを緩くする場合は「または」を使います。
例えばnameカラムが「わんこ」またはageカラムが「13」であるデータを取得したい場合は↓にします。
「OR」を使って条件をつなぎます。
該当するデータの並べる順番を変える
データを昇順(小さい値から大きい値)・降順(大きい値から小さい値)に並べる事ができ「ORDER BY」を使います。
priceカラムに対して昇順・降順にデータを並べると↓になります。
「SELECT * FROM テーブル名 ORDER BY カラム名 DESC(ASC)」と書きます。
WHEREを使った場合は↓です。
「ORDER」の前に「カラム名 = ’文字列’」と書きます。
表示するデータの数を制限する
表示するデータの数を制限する場合はSQL文の最後に「LIMIT 表示するデータの数」と書きます。
例えば↓です。
カラムの重複するデータを削除する
例えば「character_name」カラムですが名前が重複しているデータ(例えばにんじゃわんことか)があり重複しているデータをひとまとめにする場合は「SELECT DISTINCT(カラム名) FROM テーブル名」と書きます。
例えば↓です。
カラムの値に四則演算を使う
カラムの値に四則演算を使う事ができ↓を使う事ができます。
- 足し算 : +
- 引き算 : –
- 掛け算 : *
- 割り算 : /
例えば↓と書きます。
集計関数
SUM
カラムの値を全て足して表示したい場合は「SUM」を使い「SELECT SUM(カラム名) FROM テーブル名」と書きます。
例えば↓です。
カラム名を指定する場合は↓です。
AVG
データの平均を取る場合はavgを使います。
コードの書き方は「SUM」の場合と同じです。
例えば↓と書きます。
COUNT
レコードの数を数える場合は「COUNT」を使います。
コードの書き方は「SUM」の場合と同じです。
例えば↓と書きます。
カラムの中から最大・最小の値のデータを取得
カラムの中から最大の値のデータを取得したい場合は「MAX」を使い最小の値のデータを取得したい場合は「MIN」を使います。
コードの書き方はSUM・AVGなどと同じです。
例えば↓と書きます。
カラムのグループ化
特定のカラムを1つのグループにする場合は「GROUP BY」を使います。
コードの書き方はSQL文の最後に「GROUP BY カラム名」と書きます。
例えば↓です。
注意点としてはSELECTで指定できるカラム名は集計関数とGROUP BYで指定しているカラム名のみです。
コードが実行される順番はまずGROUP BYでカラムをまとめてからCOUNTを使っているのでpurchased_atが同じ値のpriceの数を合計して表示します。
複数のカラムのグループ化
複数のカラムをグループ化する場合は「GROUP BY カラム1,カラム2・・・」と書きます。
例えば↓です。
これでpurchased_atカラムとcharacter_nameカラムのpriceカラムを合計したデータが表示されます。
↑は「にんじゃわんこ」が2回表示されていますがpurchased_atが違うので別の物とされます。
WHEREを一緒に使う場合
WHEREを一緒に使うと条件を厳しく絞り込みできます。
例えば↓です。
コードの流れですがまずcategoryカラムが食費のデータを絞り込みます。
そしてpurchased_atカラムとcharacter_nameカラムの一致するデータをグループにしてSUM関数でpriceカラムの合計の値を表示します。
グループ化したデータを更に絞り込む
グループ化したデータを更に絞り込む時は「HAVING」を使いGROUP BYの後に書きます。
これでpriceカラムの合計の中で2000以上のデータだけを表示します。
サブクエリ
例えば「ウィルの得点数より多い得点数の人の名前」を表示する場合SQL文を↓にします。
1行目でウィルの点数を調べて14と分かります。
そして3行目のWHEREに使う事でウィルの得点数より多い得点数の人の名前を表示します。
このやり方だとSQL文を2回書かないといけなくて書くのが面倒です。
こんな場合はメインのSQL文の中に別のSQL文を入れますが別のSQL文の事をサブクエリと言います。
今回だとコードを↓と書きます。
サブクエリはカッコの中になりますがサブクエリ内ではセミコロン(;の事)は必要ないです。
サブクエリがある場合の実行の順番はまずカッコ内が実行されてカッコの外側が実行されます。
取得したデータが何についてかが分かるようにする
データを取得する時にコードが長くなり何について調べていたかが分からなくなる場合があります。
そんな場合は「AS」を使います。
コードの書き方は「SELECT カラム名 AS ’名称’」と書きます。
例えば↓です。
複数のテーブルを紐づける
別々のテーブルを紐づける場合元々存在するテーブルのキー(どのカラムなのかを判別できる値)に紐づけるテーブルのキーを連携します。
元々存在するテーブルのキーを主キーと言い紐づけるテーブルのキーを外部キーと言います。
主キーと外部キーはカラム名で外部キーは主キーに対応するキーを使います。
そして2つのテーブルを紐づける際に「JOIN」を使います。
コードの書き方は「SELECT * FROM 元々存在するテーブル名 JOIN 紐づけるテーブル名 ON 元々存在するテーブル.主キー = 紐づけるテーブル.外部キー」です。
例えば↓です。
複数テーブルでのカラムの指定方法
複数のテーブルを使う際に「SELECT カラム名」を書く時は「テーブル名.カラム名」と書きます。
例えば↓です。
テーブルの結合が行われる順番
ONやJOINはWHEREやGRUOP BYが実行される前に実行されます。
テーブルが結合されてからWHEREやGROUP BYが実行されます。
カラムの中身がNULLの場合
例えば2つのテーブルを結合するとして1つのカラムの中にNULLのデータがあったとします。
↓を見てほしいのですがカラムの中にNULLのデータがある所はテーブルの結合がされません。
カラムの中身がNULLでもテーブルを結合する方法
すぐ上でカラムの中身がNULLだとテーブルが結合されないと説明しましたが「LEFT JOIN」を使うとテーブルの結合ができます。
例えば↓です。
これで表示結果は↓になります。
3つ以上のテーブルの結合
「JOIN〜ON〜」の後に「JOIN〜ON〜」を使えば3つ以上のテーブルを結合させる事ができます。
例えば↓です。
カラムに値を追加
カラムに値を追加する時は「INSERT INTO」を使います。
コードの書き方は「INSERT INTO テーブル名 (カラムA,カラムB,・・・) VALUES(カラムAに追加するデータ,カラムBに追加するデータ,・・・)」と書きます。
例えば↓です。
カラムと追加するデータは増やす事ができます。
データの編集
カラムの中のデータは修正することができます。
コードの書き方は「UPDATE テーブル名 SET カラム名 = ’修正する値’,・・・WHERE id = 〜」です。
例えば↓です。
注意点はWHEREでidを指定しないと特定のカラムの全てのデータが書き換えられるので必ずWHEREでどのカラムかを指定します。
データの削除
データを削除する時は「DELETE」を使います。
コードの書き方は「DELETE FROM テーブル名 WHERE id = 〜」です。
例えば↓です。
注意点はWHEREでidを指定しないと全てのデータを削除するので必ずWHEREでどのレコードかを指定します。