2014年12月25日木曜日

データベース(SQL)

MySQL

オープンソースのリレーショナルデータベース



リレーショナルデータベース(RDB)

データを表形式で表すデータベース



phpMyAdmin

MySQLの管理ツール



DBMS

DataBase Management Systemの略でデータベース管理システム



照合順序

DBでの文字の並び替え順、比較などを決めるものでDBの文字コードもこれで決まる



ユーザー

DBにアクセスする人を区別し、権限を与えて検索や更新を許可する



テーブル

データを保存する二次元の表のようなもの



カラム

列をカラム、またはフィールドという



レコード

行単位のデータをレコードという



データ型

数値

INT 整数
FLOAT,DOUBLE 小数


文字列

VARCHAR(len) 可変長文字列
text 文字列(文字数が多い場合)


日付

DATETIME 日付時刻
DATE 日付
TIME 時刻


バイナリ

BLOB


設定情報

デフォルト値、NULLを許可、A/I(オートインクリメント)、インデックス(索引)



主キー(プライマリーキー)

レコードを一意に識別する列、全てのテーブルに設定すべき



SQL


基本

・大文字、小文字を区別しない
・キーワードの区切りは空白
・文の末尾はセミコロン(;)
・識別子(列名など)をバッククォートで囲んでもよい


SELECT
  `sid`
FROM
  `schedule`




利用できるデータベースの表示

SHOW DATABASES;



INSERT

テーブルに新規データを挿入する


INSERT INTO テーブル名 (
  フィールド名1,
  フィールド名2,
  ・・・
)
VALUES (
  値1,
  値2,
  ・・・
);


例)タイトル「打ち合わせ」日付「2014/12/25」のレコードを挿入

INSERT INTO schedule (
  title,
  sdate
)
VALUES (
  '打ち合わせ',
  '2014-12-25'
);


複数の行を一度に挿入

VALUESの後の値をカンマ区切りで複数指定する

INSERT INTO schedule
(title, sdate)
VALUES
('打ち合わせ', '2014-12-25'),
('会議', '2014-12-27');



自動でセットされる値

INSERTで値をセットしなかった値には以下の優先順で値がセットされる

1.自動連番(オートインクリメント)
2.デフォルト値
3.NULL



文字列、日付

文字列、日付は値をシングルクォート(')で囲まなければならない

INSERT INTO schedule (sid, title, sdate)
VALUES (7, 'WINGS忘年会', '2012-11-23');



UPDATE

データを更新する


UPDATE テーブル名
SET
  フィールド名1 = 値1,
  フィールド名2 = 値2,
  ・・・
WHERE
  条件式


例)sidが「2」のレコードのタイトル「面接」を時刻を「18:00」に更新

UPDATE schedule
SET
  title = '面接',
  stime = '18:00:00'
WHERE
  sid = 2;


※条件式は省略可だが、その場合は全てのレコードが更新される



DELETE

データを削除する

DELETE
FROM
  テーブル名
WHERE
  条件式

※条件式は省略可だが、その場合は全てのレコードが削除される


例)sidが「3」のレコードを削除

DELETE
FROM
  schedule
WHERE
  sid = 3;



SELECT

データを取得する


SELECT
  フィールド名1,
  フィールド名2,
FROM
  テーブル名
WHERE
  条件式
ORDER BY
  ソート式

例)sidが「2~8」のレコードを取得(日付の降順で「タイトル」「日付」のみ)

SELECT
  title,
  sdate
FROM
  schedule
WHERE
  sid BETWEEN 2 AND 8
ORDER BY
  sdate DESC


アスタリスク

フィールド名を「*」だけにすると全ての列が表示される


WHERE句

取り出すデータを絞り込む


比較演算子

BETWEEN X AND Y …X~Yの範囲
IN (X, Y, Z) …X,Y,Zのいずれか
IS NULL …NULLであるか
LIKE 文字列  …含まれるか(%をワイルドカードとして使う)
  例)LIKE '%山%' …山が含まれているかどうか



ORDER BY句

列名と並び順を指定して並び替える


並び順

ASC…昇順
DESC…降順
※並び順を省略した場合はASC(昇順)



GROUP BY句

特定の列でレコードをまとめて集計などをするためにグループ化し、集計関数と共に使う


集計関数

AVG…平均
COUNT…件数
MAX…最大値
MIN…最小値
SUM…合計


例)同じ日付の件数を集計する

SELECT
  sdate,
  COUNT(*)
FROM
  schedule
GROUP BY
  sdate



句の並び順

WHERE → GROUP BY → ORDER BY



列別名

SELECT句の列名に別の名前を付けることができる

SELECT
  列名 as 列別名
FROM
  ・・・


例)memoをdescriptionという別名で表示する

SELECT
  memo as description
FROM
  schedule



LIMIT句

取得したレコードの件数を制御する

※LIMIT句が無いDBもあるので注意(Oracleは無い)


LIMIT [開始位置,] 取得する行数

※開始位置は省略可


例)データを5件取得
SELECT  *
  FROM  schedule
 LIMIT  5

例)データを3件目から10件取得
SELECT  *
  FROM  schedule
 LIMIT  3, 10



HAVING句

グループ化したデータを絞り込む

※WHERE句はグループ化したデータには使えない為


例)平均年齢が30以上のデータを取得
SELECT  blood, AVG(age)
FROM  persons
GROUP BY  blood
HAVING  AVG(age) >= 30


0 件のコメント:

コメントを投稿