SQLの絵本―データベースがみるみるわかる9つの扉のメモ。
MySQL入れて動かしつつ読んでいるのでMySQL寄り。
データベースとテーブル
データベースの指定
データベースは利用する前にUSEで指定する必要がある。
USE db_ehon;
テーブルの作成
「CREATE TABLE テーブル名」で作成し、引数に「列名 データ型」をカンマで区切って並べる。
CREATE TABLE tbl_ehon ( code INT, title VARCHAR(30), price INT);
制約
データを常に正しい状態に保つためテーブルに規則を設定できる。
列制約とテーブル制約
列に対して制約を設定するにはデータ型の指定のあとに制約を列挙する。複数の制約はスペース1つあけて記述する。
テーブルに対する制約は全ての列を定義した後に記述する。
CREATE TABLE tbl_ehon ( code INT UNIQUE, -- 列制約 title VARCHAR(30), price INT, PRIMARY KEY (title, price)); -- テーブル制約(連結キーの定義)
制約の例
制約 | 意味 |
---|---|
PRIMARY KEY | 主キーを指定しデータの重複とNULLを禁止 |
UNIQUE | データに一意性を持たせる |
CHECK(条件式) | 条件式を満たさないデータを禁止する |
NOT NULL | NULLを禁止する |
DEFAULT=値 | 初期値を指定する |
データの登録と取り出し
データを登録する
INSERT INTOで登録する
INSERT INTO tbl_ehon (code, title, price) VALUES (111, 'Cの絵本', 1380);
列名とVALUESに続く値が対応していることに注意。
データを取り出す
SELECT文を使ってデータを取り出す
SELECT * FROM tbl_ehon;
SELECTに続く部分は列の指定で、*は全部の列を取り出すことを意味する。FROMにはテーブル名を指定する。
列の部分に列名を指定すればその列だけ取り出す
SELECT title FROM tbl_ehon;
複数の列を指定するにはカンマで区切って列挙する
SELECT title, price FROM tbl_ehon;
データを並び替える
SELECT文のオプションであるORDER BY句を使うと指定の列を基準としてテーブルを並び替えることができる。
ORDER BY句にはASC(昇順)、DESC(降順)の指定を追加できる。
SELECT * FROM tbl_ehon ORDER BY price ASC;
複数の列を指定することもできる。列名はカンマで区切る。この場合、先に指定したものから順に基準として使用される。
ASC、DESCの指定は列ごとにする必要があり、省略時はASCであることに注意する。複数列ならば明示的にそれぞれ指定したほうが分かりやすい。
SELECT * FROM tbl_height ORDER BY height ASC, id DESC;
データをグループ化する
GROUP BY句を使うと指定の列に同じデータがあった場合、それらの行を一つにまとめることができる。
これは集約関数とともに利用する場合が多い。
SELECT price, COUNT(title) FROM tbl_ehon GROUP BY price;
この例ではCOUNT(title)が集約関数で、これは指定した列内に存在する行数を返す。
これによってpriceのある値に対応するデータが何件あるかが分かる。
|-------+--------------| | price | COUNT(price) | |-------+--------------| | 1380 | 1 | | 1580 | 2 | | 1680 | 1 | |-------+--------------|
重複データの除去
DISTINCT句は列中の重複したデータを除去して表示する。
SELECT DISTINCT title FROM tbl_ehon;
列名を一時的に変えて表示
AS演算子により列名を一時的に変更して表示できる。
SELECT price, COUNT(price) AS count FROM tbl_ehon GROUP BY price;
|-------+-------| | price | count | |-------+-------| | 1380 | 1 | | 1580 | 2 | | 1680 | 1 | |-------+-------|
データ型
実際に扱えるデータ型の種類はDBMSによって多少異なる。
整数型
データ型 | 説明 | 使い方 |
---|---|---|
INTEGER | 整数 | INT |
SMALLINT | INTEGERより小さい整数 | SMALLINT |
IDENTITY
列にIDENTITYの指定をするとその列の値は基本的に自由に設定できず、データが登録されるたびに連番が入力される
id INT IDENTITY (0, 10)
のようにすると、初期値0として10ずつインクリメントする連番が設定される。
IDENTITYの利用は以下のルールに従って行う。
- テーブルの中で1つの列だけに使える
- NULL値を入れることは出来ない
- DEFAULTを同時に指定できない