はじめに
SQL学習中に使用したコマンドなどを、例とともにメモします。
SQLとは
データベースからデータを取得したり変更したりするための言語
テーブルやデータベースを作成、更新、削除、取得などができる
SQLコマンドまとめ
データベース作成等
データベース作成
CREATE DATABASE データベース名;
例.
CREATE DATABASE shop;
カラム作成
CREATE TABLE テーブル名 (カラム名1 カラム型,...,カラム名n カラム型);
例.
CREATE TABLE crop (id INT,name VARCHAR(100),plant_family VARCHAR(100),stock INT);
テーブルを見る
例.
SHOW TABLES;
+----------------+
| Tables_in_shop |
+----------------+
| crop |
+----------------+
指定したテーブルの構成を見る
DESC テーブル名;
例.
DESC crop;
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(100) | YES | | NULL | |
| plant_family | varchar(100) | YES | | NULL | |
| stock | int | YES | | NULL | |
+--------------+--------------+------+-----+---------+-------+
テーブルにデータを挿入する
INSERT INTO テーブル名 (カラム名1, カラム名2, ...)
VALUES (値1, 値2, ...);
例.
INSERT INTO crop (id, name, plant_family, stock)
VALUES (1, 'トマト', 'ナス科', 150);
データベース取得
テーブル全てを取得
SELECT *
FROM テーブル名;
例.
SELECT *
FROM crop;
+------+-----------------+--------------+---------+
| id | name | plant_family | stock |
+------+-----------------+--------------+---------+
| 1 | トマト | ナス科 | 150 |
| 2 | ナス | ナス科 | 80 |
| 3 | キュウリ | ウリ科 | 200 |
| 4 | キャベツ | アブラナ科 | |
+------+-----------------+--------------+----------+
カラムを絞り込んで取得
SELECT カラム名1, カラム名2, ..., カラム名n
FROM テーブル名;
例.
SELECT name, stock
FROM crop;
+-----------------+----------+
| name | stock |
+-----------------+----------+
| トマト | 150 |
| ナス | 80 |
| キュウリ | 200 |
| キャベツ | |
+-----------------+----------+
カラム名を変更して出力することも可能
例.
SELECT name AS '名前', stock AS '在庫',
FROM crop;
+-----------------+----------+
| 名前 | 在庫 |
+-----------------+----------+
| トマト | 150 |
| ナス | 80 |
| キュウリ | 200 |
| キャベツ | |
+-----------------+----------+
重複削除(DISTINCT)
科名の重複なし科名カラムを取得
例.
SELECT DISTINCT(plant_family)
FROM crop;
+--------------+
| plant_family |
+--------------+
| ナス科 |
| ウリ科 |
| アブラナ科 |
+--------------+
条件指定(WHERE)
在庫が150以上の条件指定を行います
例.
SELECT name, stock
FROM crop
WHERE stock > 150;
+--------------+--------+
| name | stock |
+--------------+--------+
| トマト | 150 |
| キュウリ | 200 |
+--------------+--------+
両方を満たす(AND)
在庫が150以上のナス科の条件指定を行います
例.
SELECT *
FROM crop
WHERE stock > 150 AND plant_family = 'ナス科';
+------+-----------------+--------------+---------+
| id | name | plant_family | stock |
+------+-----------------+--------------+---------+
| 1 | トマト | ナス科 | 150 |
+------+-----------------+--------------+---------+
どちらかを満たす(OR)
在庫が150以上またはナス科の条件指定を行います
例.
SELECT *
FROM crop
WHERE stock > 150 OR plant_family = 'ナス科';
+------+-----------------+--------------+---------+
| id | name | plant_family | stock |
+------+-----------------+--------------+---------+
| 1 | トマト | ナス科 | 150 |
| 2 | ナス | ナス科 | 80 |
| 3 | キュウリ | ウリ科 | 200 |
+------+-----------------+--------------+----------+
~の間(BETWEN)
在庫が50~150の間の条件指定を行います
例.
SELECT *
FROM crop
WHERE stock BETWEEN 50 AND 150;
+------+-----------------+--------------+---------+
| id | name | plant_family | stock |
+------+-----------------+--------------+---------+
| 1 | トマト | ナス科 | 150 |
| 2 | ナス | ナス科 | 80 |
+------+-----------------+--------------+----------+
まとめて指定(IN)
ウリ科とアブラナ科の作物を指定
例.
SELECT *
FROM crop
WHERE plant_family IN ('ウリ科', 'アブラナ科');
+------+-----------------+--------------+---------+
| id | name | plant_family | stock |
+------+-----------------+--------------+---------+
| 3 | キュウリ | ウリ科 | 200 |
| 4 | キャベツ | アブラナ科 | |
+------+-----------------+--------------+----------+
まとめて否定(NOT IN)
ウリ科とアブラナ科以外の作物を指定
例.
SELECT *
FROM crop
WHERE plant_family NOT IN ('ウリ科', 'アブラナ科');
+------+-----------------+--------------+---------+
| id | name | plant_family | stock |
+------+-----------------+--------------+---------+
| 1 | トマト | ナス科 | 150 |
| 2 | ナス | ナス科 | 80 |
+------+-----------------+--------------+----------+
あいまい検索(LIKE)
名前がトから始まる作物を指定
例.
SELECT *
FROM crop
WHERE name LIKE 'ト%';
+------+-----------------+--------------+---------+
| id | name | plant_family | stock |
+------+-----------------+--------------+---------+
| 1 | トマト | ナス科 | 150 |
+------+-----------------+--------------+----------+
空(値が不明)のレコードを取得(IS NULL)
stockが空の作物を指定
例.
SELECT *
FROM crop
WHERE stock IS NULL;
+------+-----------------+--------------+---------+
| id | name | plant_family | stock |
+------+-----------------+--------------+---------+
| 4 | キャベツ | アブラナ科 | |
+------+-----------------+--------------+----------+
空(値が不明)じゃないレコードを取得(IS NOT NULL)
stockが空じゃない作物を指定
例.
SELECT *
FROM crop
WHERE stock IS NOT NULL;
+------+-----------------+--------------+---------+
| id | name | plant_family | stock |
+------+-----------------+--------------+---------+
| 1 | トマト | ナス科 | 150 |
| 2 | ナス | ナス科 | 80 |
| 3 | キュウリ | ウリ科 | 200 |
+------+-----------------+--------------+----------+
行数を指定して取得(LIMIT)
行数上限を2で指定して取得
例.
SELECT *
FROM crop
LIMIT 2;
+------+-----------------+--------------+---------+
| id | name | plant_family | stock |
+------+-----------------+--------------+---------+
| 1 | トマト | ナス科 | 150 |
| 2 | ナス | ナス科 | 80 |
+------+-----------------+--------------+----------+
並び替え(ORDER BY)
在庫で昇順に並び替えして取得
例.
SELECT *
FROM crop
ORDER BY stock;
+------+-----------------+--------------+---------+
| id | name | plant_family | stock |
+------+-----------------+--------------+---------+
| 4 | キャベツ | アブラナ科 | |
| 2 | ナス | ナス科 | 80 |
| 1 | トマト | ナス科 | 150 |
| 3 | キュウリ | ウリ科 | 200 |
+------+-----------------+--------------+----------+
在庫で降順に並び替えして取得
例.
SELECT *
FROM crop
ORDER BY stock DESC;
+------+-----------------+--------------+---------+
| id | name | plant_family | stock |
+------+-----------------+--------------+---------+
| 3 | キュウリ | ウリ科 | 200 |
| 1 | トマト | ナス科 | 150 |
| 2 | ナス | ナス科 | 80 |
| 4 | キャベツ | アブラナ科 | |
+------+-----------------+--------------+----------+