【SQL CRAD】
SQL文 | CRUD | 機能 |
---|---|---|
INSERT文 | Create | データ追加 |
SELECT文 | Read | データ取得 |
UPDATE文 | Update | データ更新 |
DELETE文 | Delete | データ削除 |
・データ追加
INSERT INTO テーブル名(カラム名)VALUES(値);
INSERT INTO user_table (id, name, age, address, created_at) VALUES (1, '山田花子', 20, '東京都〜', now()), (2, '佐藤太郎', 30, '千葉県〜', now());
・データ更新
UPDATE テーブル名 SET カラム名=値;
UPDATE user_table SET address = '山口県〜' WHERE id = 1;
参考
【MySQL入門③】データベースの基本操作CRUDを解説!
https://snome.jp/database/db-intro-3/
【SELECT文】
・一つのカラムのデータを取得
-- usersテーブルから、nameカラムのデータを取得
SELECT カラム名
FROM テーブル名;
SELECT name
FROM users;
・複数カラムのデータを取得
-- usersテーブルから、「nameカラム」と「prefectureカラム」のデータを取得
SELECT カラム名, カラム名
FROM テーブル名;
SELECT name, prefecture
FROM users;
・全てのカラムのデータを取得
-- usersテーブルから、全てのカラムのデータを取得
SELECT *
FROM テーブル名;
SELECT *
FROM users;
【WHERE文】
〜どこのレコード(行)を取得するか指定する〜
データ型
データ型 | 例 | 特徴 |
---|---|---|
テキスト | "日本" | ダブルクオーテーションまたはシングルクオーテーションで囲まれた文字 |
数値 | 20 | 数値データ |
日付 | "2021-10-01" | ダブルクオーテーションまたはシングルクオーテーションで囲まれた日付("年-月-日") |
・usersテーブルから、countryカラムが日本のデータを取得
-- usersテーブルから、countryカラムが日本のデータを取得
SELECT *
FROM テーブル名
WHERE カラム名 = 値;
SELECT *
FROM users
WHERE country = "日本";
-- ageカラムが「20」のデータを取得
SELECT *
FROM users
WHERE age = 20;
SELECT *
FROM users
WHERE age = 20;
-- created_atカラムが「2021-10-01」のデータを取得
SELECT *
FROM users
WHERE created_at ="2021-10-01";
SELECT *
FROM users
WHERE created_at ="2021-10-01";
・比較演算子
-- ageカラムが「20以上」のデータを取得
SELECT *
FROM users
WHERE age >= 20;
SELECT *
FROM users
WHERE age >= 20;
-- created_atカラムが「2021-10-01以前」のデータを取得
-- 日付データにも比較演算子は使える。クオーテーションで囲むことを忘れずに。
SELECT *
FROM users
WHERE created_at <= "2021-10-01";
【LIKE演算子】
〜〇〇を含む(〇〇のような)〜
*指定したカラムが〇〇を含む(〇〇のような)レコード」という条件。
ワイルドカードとは、「どんな文字列にも一致することをさす記号」
LIKE演算子では「%」をワイルドカードとして扱う。
これにより「うさぎ」を含むデータを全て取得している。
SELECT *
FROM users
WHERE name LIKE %文字列%;
SELECT *
FROM users
WHERE name LIKE "%うさぎ%";
--「うさぎ」を含むデータを全て取得
●うさぎ
●垂れ耳うさぎ
●うさぎいぬ
●垂れ耳うさぎパンダ
--前方一致
"うさぎ%"
●うさぎまんじゅう
●うさぎ
●うさぎ耳
--後方一致
"%うさぎ"
●うさぎ
●白うさぎ
●赤色うさぎ
【NOT演算子】
・演算子の前に「NOT」を置くことで、その条件を満たさないデータを取得
-- 「age > 20」 という条件を満たさないものを取得できる
SELECT *
FROM users
WHERE NOT age > 20;
--「name LIKE "%うさぎ%"」という条件を満たさないレコードを取得
--名前に「うさぎ」という文字列を含まないものを取得する
SELECT *
FROM users
WHERE NOT name LIKE "%うさぎ%";
【IS NULL ・ IS NOT NULL】
-- priceカラムがNULLのレコードを取得
SELECT * FROM products
WHERE price IS NULL;
-- priceカラムがNULLでないレコードを取得
SELECT * FROM products
WHERE price IS NOT NULL;
-- 間違った書き方 price = NULLは使用できない
SELECT * FROM products
WHERE price = NULL;
【AND 演算子】
-- AND
-- WHEREに複数の条件を指定できる
-- 「WHERE 条件1 AND 条件2」 と書くと、条件1と条件2を満たすデータを検索することができる
SELECT * FROM products
WHERE brand_name = "pole"
AND category = "cream";
【OR 演算子】
-- OR
-- 条件をどちらか満たせば、検索できる
-- 「WHERE 条件1 OR 条件2」どちらかを満たすデータを検索することができる
SELECT * FROM = products
WHERE brand_name = "pole"
OR category = "cream";
【AND・OR 演算子 混在パターン】
-- ()をつけて優先順位をつける
select * from employees where last_name = 'Taro' and ( hire_date < '1990-05-20' or hire_date > '2000-10-01' ) limit 10;
【追加】
・INSERT
-- usersテーブルにデータを追加。
INSERT INTO users(name, age)
VALUES("Usagi", 20);
【更新】
・UPDATE
-- usersテーブルのidカラムの値が6のレコードをnameをInuに、ageを30に変更してください。
UPDATE students
SET name = "Inu", age = 30
WHERE id = 6;
【重複を除いてカラムのデータ取得】
・DISTINCT
-- userテーブルの、nameカラムからデータを取得。(重複するデータ除いて)
SELECT DISTINCT(カラム名)
FROM テーブル名;
SELECT DISTINCT(name)
FROM users;
【指定したカラムのデータの合計数】
・COUNT
NULLはカウント数に入らないことに注意!
-- usersテーブルのnameカラムにあるデータの数が返ってくる
-- NULLはカウント数に入らないことに注意!
SELECT COUNT(カラム名)
FROM テーブル名;
SELECT COUNT(name)
FROM users;
-- NULLも含めてデータの数を知りたい時は、COUNT(*)というように全てのカラムを指定すると良い。
-- そうすると,特定のカラムのデータの数ではなく、テーブルのレコード数を返してくれる。
-- こうするとNULLを含めてデータの数を教えてくれる。
SELECT COUNT(*)
FROM purchases;
【単数のカラムでグループ化】
指定したカラムで完全に同一のデータを持つレコード同士が同じグループになる
・GROUP BY カラム名
--GROUP BYは、SELECTで使えるのは、GROUP BYに指定しているカラム名と集計関数のみ。
SELECT SUM(point), charged_at
FROM point_cards
GROUP BY charged_at;
【複数のカラムでグループ化】
・GROUP BY 複数の条件
SELECT SUM(point), charged_at, name
FROM users
GROUP BY charged_at, name;
【GROUP BY と WHERE を併用 】
・GROUP BY 複数の条件
-- 集計関数とは、 COUNT, SUM, AVG, MAX, MIN など
SELECT 集計関数
FROM テーブル名
WHERE 条件
GROUP BY カラム名、 カラム名;
【SELECT INTO】
・SELECT INTOは、SELECT文で抽出したデータを別テーブルとして作成することができる。
SELECT カラム名, カラム名, ...
INTO 新しいテーブル名
FROM 既存テーブル名
WHERE 条件
SELECT
[id]
,[name]
,[animal]
,[height]
,[weight]
INTO newTABLE
FROM KIZON_TABLE
WHERE weight > 60