SQLの絵本 - 2章 SQLの基礎

SQLの絵本―データベースがみるみるわかる9つの扉のメモ。
MySQL入れて動かしつつ読んでいるのでMySQL寄り。

SQLについて

RDBMSSQL
  • データベースを管理するソフトウェア: DBMS(DataBase Management System)
    • リレーショナルデータベースを管理するソフトウェア: RDBMS(Relational DataBase Managemant System)
    • MySQLなどはRDBMSの一つ
  • SQL(Structured Query Language)はRDBMSに命令するための言語
    • ユーザーはSQL文によってRDBMSに要求を出す
    • 要求のことをクエリと呼ぶ
    • RDBMSはクエリを受け取ると指定された処理を実行する
SQLを書くときの決まり
  • コメントを記述できる
    • 行コメントは--
    • ブロックコメントは/* */
  • 大文字と小文字は区別しなくとも良い場合が多いが、なるべく分ける
    • 予約語は大文字
    • 行明、テーブル名は小文字(キャメルケースを使う場合もある)

データベースとテーブル

データベースの作成

データベースの作成は「CREATE DATABASE データベース名」

CREATE DATABASE db_echo;

文の最後にはセミコロンが必要

データベースの指定

データベースは利用する前に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
実数型
データ型 説明 使い方
DECIMAL[(m [,n])] 全桁数mと小数点以下桁数nをもつ数値。[]内は省略時は四捨五入 DECIMAL[(m [,n])]
NUMERIC[(m [,n])] DECIMALとほぼ同じ NUMERIC[(m [,n])]
REAL 単精度浮動小数 REAL
FLOAT[(n)] 浮動小数 FLOAT[(n)]
DOUBLE FLOAT 倍精度浮動小数 FLOAT(53)
文字列型
データ型 説明 使い方
CHARACTER[(n)] 固定長文字列。n省略時は1 CHAR[(n)]
CHARACTER VERYING(n) 可変長文字列。n文字以下。 VARCHAR(n)
CHARACTER LARGE OBJECT 大量のテキスト TEXT
NATIONAL CHARACTER[(n)] 固定長UNICODE文字列 NCHAR[(n)]
NATIONAL CHARACTER VERYING 可変長UNICODE文字列 NVARCHAR(n)
NATIONAL CHARACTER LARGE OBJECT 大量のUNICODEテキスト NTEXT

IDENTITY

列にIDENTITYの指定をするとその列の値は基本的に自由に設定できず、データが登録されるたびに連番が入力される

id INT IDENTITY (0, 10)

のようにすると、初期値0として10ずつインクリメントする連番が設定される。
IDENTITYの利用は以下のルールに従って行う。

  • テーブルの中で1つの列だけに使える
  • NULL値を入れることは出来ない
  • DEFAULTを同時に指定できない