見出し画像

SQL備忘録

勉強しながらメモしたことをそのまま記述しています。


・データベースに送る命令をクエリ
・クエリでデータベースのデータを取得できる

・SELECT カラム名(タブ名?)
データベースからカラムのデータをすべて取得できる

・FROM テーブル名(ファイル名?)

・セミコロン
完成したクエリの末尾にセミコロンをつける

・ファイル名
〇〇.sql

・複数のカラムを選択する
SELECT name, price
FROM purchases;

コンマを使う

・すべてのカラムを選択する
SELECT *
FROM purchases;

アスタリスクを使う

・WHERE
どこのレコードを取得するかを指定する

WHERE category = "食費"

categoryが食費のレコードのみ取得する
比較演算子が使える

・SQLにあるデータ型
データの種類 例
テキストデータ "にんじゃわんこ"
数値データ 1000
日付データ "2017-07-01"

数値だけクォーテーションで囲まない

・LIKE
WHERE カラム名 LIKE 検索文字列;
検索文字列を含むレコードをすべて出力する

ただ、ワイルドカードを使わないといけない
WHERE name LIKE "%プリン%";

・NOT
一致しないデータを取得することができる
WHERE NOT price > 1000;
値段が1000円以下のデータが取得できる

WHERE NOT name LINE "%プリン%";
プリンを含まないデータが取得できる

・NULL
何も保存されていないデータ

・NULLのデータを取得する
SELECT *
FROM purchases
WHERE price IS NULL;

・NULLでないデータを取得する
SELECT *
FROM purchases
WHERE price IS NOT NULL;

・NULlを取り扱うとき以下の例は使用できない!
WHERE price = NULL;
WHERE NOT price = NULL;

・複数の条件を扱う

WHERE character_name = "ひつじ仙人" AND category = "食費";
WHERE character_name = "ひつじ仙人" OR character_name = "にんじゃわんこ";

・データを並び替える
ORDER BYを使用する

ORDER BY 並べたいカラム名 並べ方

並べ方はASKとDESKがある
ASK 昇順
DESC 降順

WHEREと合わせて使え、WHEREのあとに書く

・必要な数だけデータを取得する
LIMIT データの件数;

SELECT *
FROM purchases
WHERE 条件
ORDER BY price DESC
LIMIT 5;

・検索結果を加工する

・重複したデータを省く
SELECTに使う

SELECT DISTINCT(カラム名)
FROM purchases;

・SELECTに四則演算が可能
SELECT name, price * 1.08

・SUM
SELECT SUM(price)

SELECT SUM(price)
FROM purchases
WHERE character_name = "にんじゃわんこ";

・AVG
平均
SELECT AVG(price)
FROM purchases;

・COUNT
指定したカラムのデータの数を取得する
NULLはカウントされない

SELECT COUNT(*)
WHEREと合わせて使用可能

・MAXとMIN
MAX(カラム名)
MIN(カラム名)

SELECT MAX(price)

・データをグループ化する
GROUP BY カラム名

GROUP BYの注意点

GROUP BYを使っているとき限定でSELECTで使えるのは、GROUP BYに指定しているカラム名と集計関数のみ

・GROUP BY 複数


GROUP BY カラム名a, カラム名b;

・コメント
--

・細かい条件でデータをグループ化する
WHEREとGROUP BYを使用する
WHERE 条件
GROUP BY カラム名,カラム名;

WHEREから実行される
次にGROUP BY
最後に集計関数

・HAVING
グループ化したデータをさらに絞り込むのに使う
あとで実行されるWHEREのようなもの

注意点として、グループ化されたあとのデータのカラムを使用すること
つまりSELECTにある要素でやる
SELECT SUM(price), purchased_at
:
:
HAVING SUM(price) > 1000;


・SQLの実行順序・実行順番
FROM テーブルの指定
JOIN ON テーブルの結合
WHERE 検索
GROUP BY グループ化
COUNT SUM AVG MAX MIN 集計関数
HAVING 検索
SELECT 検索
ORDER BY 順序
LIMIT 表示数

・サブクエリ
クエリの中に他のクエリを入れることができる
たとえば以下はウィルよりゴール数の多い人を抽出する例
SELECT name
FROM player
WHERE goals > (
SELECT goals
FROM players
WHERE name = "ウィル"
);
()で囲んだ部分がサブクエリで、
サブクエリの末尾に;は不要です。

・AS
SELECTで指定した名前を変更できます。
goalsの名前を"ウィルの得点数"にする例
SELECT goals AS "ウィルの得点数"

・JOIN
テーブルを結合することができる
SELECT *
FROM テーブルA
JOIN テーブルB ON テーブルA.外部キー = テーブルB.主キー

こうすることで、テーブルAとテーブルBが結合される
ONで使ったカラム名は、テーブルAのカラム名とテーブルBのカラム名の両方が存在するようになる
また、カラム名が被っている場合はカラム名のみの指定ではエラーになる。そのため、テーブル名.カラム名の形に変更する必要がある。

結合されたあとにSELECTが実行される

JOINでNULLで結合した場合は、NULLのレコードは消えてなくなる

・LEFT JOIN
NULLのレコードも、データが空の状態で残したまま結合できる。(JOINは破棄していた)
また、結合で追加されたカラムはやはりNULLになる

SELECT *
FROM players
LEFT JOIN teams
ON players.previous_team_id = teams.id

;

・3つのテーブルを結合する
SELECT *
FROM players

JOIN countries
ON players.country_id = countries.id

LEFT JOIN teams
ON players.previous_team_id = teams.id
;

・SQLのデータは操作できる

・テーブルにレコードを追加する方法
INSERT INTO students(id,name,course)
VALUES(4,"Kate","Java")

・AUTO INCREMENT
idカラムは、AUTO INCREMENT機能が働き、1ずつ値が増加する。
INSERT INTO students( name,course)
VALUES( "Kate","Java")

・UPDATE
すでにあるデータを更新する
①UPDATE students
②SET name = "Jordan", course = "HTML"
③WHERE id = 6;

①はテーブルを更新しますよという意味
SELECTのレベルと同じ
②はセットするデータを宣言
③は条件
条件を指定しないと全データが更新されてえらいことになる

UPDATEの実行前は一度SELECTで確認する癖をつける

・DELETE
レコードを削除する
一度行うと元に戻せないので、
これもSELECTで確認する癖をつける

DELETE FROM students
WHERE id = 7;

DELETE FROM studentsってやると全部消えるからマジで注意!


この記事が気に入ったらサポートをしてみませんか?