LoginSignup
0
0

More than 1 year has passed since last update.

MySQL 基礎コマンド

Last updated at Posted at 2021-07-06

関連記事

データ型

整数

  • TINYINT : -128 ~ +127    例:TINYINT(30)  ( )は扱える最大の数
  • INT : -21億 ~ +21億
  • BIGINT : -922京 ~ +922京
  • TINYINT UNSIGNED : 0 ~ +127
  • INT UNSIGNED : 0 ~ +21億
  • BIGINT UNSIGNED : 0 ~ +922京

実数

  • DECIMAL : 固定小数点   例:DECIMAL(5, 2) 第一引数は全体の桁数、第二引数は少数以下の桁数
  • FLOAT : 浮動小数点
  • DOUBLE : 浮動小数点(高精度)

文字列

  • CHAR : 0 ~ 255文字     例:CHAR(120) ( )は最大文字数
  • VARCHAR : 0 ~ 65535文字
  • TEXT : それ以上
  • ENUM : 特定の文字列から一つ
  • SET : 特定の文字列から複数

真偽値

  • BOOL : TRUE / FALSE
  • TINYINT(1) : 1 / 0

日時

  • DATE : 日付
  • TIME : 時間
  • DATETIME : 日時

用語

-- +----+---------------+-------+  全体を`table`
-- | id | title         | likes |
-- +----+---------------+-------+  1 Kokoro 7 といった行のことを`recode`
-- |  1 | Kokoro        |     7 |
-- |  3 | Ningensikkaku |    14 |  id 1 3 や title Kokoro Ningensikkaku といった列を`column`
-- +----+---------------+-------+

コメント

# comment
-- comment
/*
comment
*/

テーブルの作成

CREATE TABLE books (
  title VARCHAR(200),
  likes INT
);

テーブルの削除

DROP TABLE IF EXISTS books;

レコードの挿入

INSERT INTO books (title, likes) VALUES
  ('Kokoro', 7), 
  ('Rashomon', 10);

ENUM

特定の文字列から一つ

CREATE TABLE tests (
  subject ENUM('Chemistry', 'Economy', 'Mathematics'),
  score INT
);

INSERT INTO tests (subject, score) VALUES 
  ('Chemistry', 90),
  ('Mathematics', 68);
-- または
-- (1, 90),
-- (3, 68);

SET

特定の文字列から複数
SET( )によるINSERTは文字列で表記する方法と、整数で表記することできる。
整数表記の場合、先頭から2^0の1、2^1の2、2^2の3...

CREATE TABLE tests (
  subjects SET('Chemistry', 'Economy', 'Mathematics'),
  score INT
);

INSERT INTO tests (subjects, score) VALUES 
  -- ('Chemistry', 90),
  -- ('Economy', 58),
  -- ('Chemistry,Economy', 148),
  -- ('Mathematics', 72),
  -- ('Chemistry,Mathematics', 162),
  -- ('Economy,Mathematics', 130),
  -- ('Chemistry,Economy,Mathematics', 220);
-- または上記と同じように出力する場合下記のようになる
(1, 90),-- 第一引数は2^0で'Chemistry'を指定している
(2, 58),-- 2^1で'Economy'
(3, 148),-- この場合は、一つ目2^0と2つ目2^1を足した3で'Chemistry', 'Economy'になる
(4, 72),-- 2^2で'Mathematics'
(5, 162),-- 2^0と2^2を足した5で'Chemistry,Mathematics'
(6, 130),-- 2^1と2^2を足した6で'Economy,Mathematics'
(7, 220);-- 2^0と2^1と2^2を足した7で'Chemistry,Economy,Mathematics'

日時

CREATE TABLE tests (
  created DATETIME
);

INSERT INTO tests (created) VALUES
  ('2021-1-1 12:35:49'),
  ('2021-12-6'),-- 2020-10-12 00:00:00 
  (NOW());-- 現在日時

NULL

CREATE TABLE books (
  title VARCHAR(200),
  likes INT
-- likes INT NOT NULL <- NULLをエラーにしたい場合
-- likes INT DEFAULT 0 <- 指定のない場合の初期値設定
);

INSERT INTO books (title, likes) VALUES
  ('Kokoro', 7), 
  ('Rashomon', 10);

INSERT INTO books (title) VALUES ('Ningensikkaku');
-- 結果
--| Kokoro        |     7 |
--| Rashomon      |    10 |
--| Ningensikkaku |  NULL |

SELECT * FROM books;

CHECK

値に制限をかける

CREATE TABLE books (
-- 0 ~ 9999 以外はエラー
  likes INT CHECK (likes >= 0 AND likes <= 9999)
);

UNIQUE

重複を制限する

CREATE TABLE books (
  title VARCHAR(200) UNIQUE,
  likes INT
);

INSERT INTO books (title, likes) VALUES
  ('Kokoro', 7), 
  ('Rashomon', 10),
  ('Kokoro', 13);-- 重複しているのでエラー

SELECT * FROM books;

PRIMARY KEY

CREATE TABLE books (
  PRIMARY KEY (id), -- PRIMARY KEY をidとして扱う
  id INT NOT NULL AUTO_INCREMENT, -- PRIMARY KEYを自動で割り当てる
  title VARCHAR(200), 
  likes INT
);

INSERT INTO books (title, likes) VALUES 
  ('Kokoro', 7),
  ('Rashomon', 10);

SELECT * FROM books;
-- 結果
-- +----+----------+-------+
-- | id | title    | likes |
-- +----+----------+-------+
-- |  1 | Kokoro   |     7 |
-- |  2 | Rashomon |    10 |
-- +----+----------+-------+

SELECT

WHEREでSELECTの指定

CREATE TABLE books (
  PRIMARY KEY (id),
  id INT NOT NULL AUTO_INCREMENT,
  title VARCHAR(200), 
  likes INT
);

INSERT INTO books (title, likes) VALUES 
  ('Kokoro', 7),
  ('Rashomon', 10),
  ('Ningensikkaku', 14);

SELECT id, title FROM books WHERE likes >= 10; -- likes10以上のidとtitle
SELECT * FROM books WHERE likes >= 10; -- likes10以上の全て
SELECT * FROM books WHERE title != 'Rashomon'; -- titleが'Rashomon'以外の全て
-- 結果
-- +----+---------------+
-- | id | title         |
-- +----+---------------+
-- |  2 | Rashomon      |
-- |  3 | Ningensikkaku |
-- +----+---------------+
-- +----+---------------+-------+
-- | id | title         | likes |
-- +----+---------------+-------+
-- |  2 | Rashomon      |    10 |
-- |  3 | Ningensikkaku |    14 |
-- +----+---------------+-------+
-- +----+---------------+-------+
-- | id | title         | likes |
-- +----+---------------+-------+
-- |  1 | Kokoro        |     7 |
-- |  3 | Ningensikkaku |    14 |
-- +----+---------------+-------+

-- AND なおかつ
SELECT * FROM books WHERE likes >= 8 AND <= 12; -- likes8以上かつ12以下の全て
SELECT * FROM books WHERE likes BETWEEN 8 AND 12; -- 上記と同意
SELECT * FROM books WHERE likes NOT BETWEEN 8 AND 12; -- 上記の反転

-- OR もしくは
SELECT * FROM books WHERE likes = 7 OR likes = 10; -- likesが7か10の全て
SELECT * FROM books WHERE likes IN (7, 100); -- 上記と同意
SELECT * FROM books WHERE likes NOT IN (7, 100); -- 上記の反転

-- WHEREで指定するとNULLが含まれなくなるので、含ませる場合は`IS NULL`をつける
SELECT * FROM books WHERE likes = 7 OR likes = 10 OR likes IS NULL; 

LIKE

下記で指定したものを取得。
% - 0以上の任意の文字列
_ - 任意の文字

SELECT * FROM books WHERE title LIKE '%a'; -- titleがaまたはAで始まるrecode
SELECT * FROM books WHERE title LIKE BINARY '%a'; -- titleがaで始まるrecode
SELECT * FROM books WHERE title LIKE 'a%'; -- titleがaまたはAで終わるrecode
SELECT * FROM books WHERE title LIKE '%a%'; -- titleにaまたはAを含むrecode
SELECT * FROM books WHERE title LIKE '__a%'; -- 先頭から3番目がaまたはAのrecode
SELECT * FROM books WHERE title LIKE '___a%'; -- 先頭から4番目がaまたはAのrecode
SELECT * FROM books WHERE title. NOT LIKE '___a%'; -- 上記の反転

ORDER BY

並び順指定

SELECT * FROM posts ORDER BY title; -- titleのアルファベット順
SELECT * FROM posts ORDER BY likes; -- likesの小さい順
SELECT * FROM posts ORDER BY likes DESC; -- likesの大きい順
SELECT * FROM posts ORDER BY likes LIMIT 3 -- likesの小さい順に3つだけ
SELECT * FROM posts ORDER BY likes LIMIT 3 OFFSET 2 -- likesの小さい順で0から数えて2つ目から3つだけ
SELECT * FROM posts ORDER BY likes LIMIT 3, 2 -- likesの小さい順に先頭から3つ除外して2つ取得

数値の関数

ASでcolumn名指定

SELECT 
  FLOOR(likes / 3) AS floor, -- 端数の切り捨て
  CEIL(likes / 3) AS ceil, -- 端数の切り上げ
  ROUND(likes / 3) AS round -- 四捨五入
  ROUND(likes / 3, 2) AS round -- 小数点以下の桁数の指定

文字列の関数

SUBSTRING

文字列の中の任意の文字を取得

SELECT title, SUBSTRING(title, 2) FROM books; -- titleの2文字以降を取得
SELECT title, SUBSTRING(title, 2, 3) FROM books; -- title2文字目以降、3文字取得
SELECT title, SUBSTRING(title, -4) FROM books; -- 末尾から4文字取得

CONCAT

columnの連結

SELECT CONCAT(title, likes) FROM books; -- titleとlikesの連結
SELECT title, LENGTH(title) AS len FROM books ORDER BY len; -- タイトルの文字数
SELECT title, CHAR_LENGTH(title) AS len FROM books ORDER BY len; -- 日本語の場合はCHAR_LENGTH

日時の関数

DATE_FORMATマニュアル

CREATE TABLE foo (
  created DATETIME DEFAULT NOW(), -- 指定がない場合は現在の日時
-- updated DATETIME ON UPDATE NOW()  自動で日時を更新
);

INSERT INTO foo (created) VALUES
 ('2021-01-01');

SELECT created, YEAR(created) FROM foo; -- 2021
SELECT created, MONTH(created) FROM foo; -- 1
SELECT created, DAY(created) FROM foo; -- 1
SELECT created, DATE_FORMAT(created, '%M %D %Y, %W') FROM foo; -- January 1st 2021, Friday 
SELECT created, DATE_ADD(created, INTERVAL 3 DAY) FROM foo; -- 2021-01-04 00:00:00
SELECT created, DATEDIFF(created, '2021-1-11') FROM foo; -- -10 二つの日時の差を計算する

recodeの更新

CREATE TABLE books (
  PRIMARY KEY (id),
  id INT NOT NULL AUTO_INCREMENT,
  title VARCHAR(200), 
  likes INT
);

INSERT INTO books (title, likes) VALUES 
  ('Kokoro', 7),
  ('Rashomon', 10),
  ('Ningensikkaku', 14);

-- likesが10以上のrecodeのlikesを+5してtitleを大文字に変換
UPDATE 
  books 
SET 
  likes = likes + 5,
  title = UPPER(title)
WHERE 
  likes >= 10;

SELECT * FROM books;

recodeの削除

recodeを削除して新しいrecodeを挿入してもPRIMARY KEYは上書きされない。

DELETE FROM books WHERE likes < 10; -- likesが10未満のrecodeを削除

テーブルの削除

TRUNCATE TABLE books;

テーブルの設計変更

CREATE TABLE books (
  PRIMARY KEY (id),
  id INT NOT NULL AUTO_INCREMENT,
  title VARCHAR(200), 
  likes INT
);

ALTER TABLE books ADD author CHAR(50); -- カラムの最後にauthorを追加
ALTER TABLE books ADD author CHAR(50) AFTER id; --idの後にauthorを追加
ALTER TABLE books ADD author CHAR(50) FIRST; -- カラムの先頭にauthorを追加
ALTER TABLE books DROPS title; -- titleを削除
ALTER TABLE books CHANGE likes price INT; -- likesをpliceに変更
ALTER TABLE books RENAME foo; -- テーブル名をfooに変更
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0