SQL
出典: フリー教科書『ウィキブックス(Wikibooks)』
目次 |
[編集] ようこそ
ようこそ、SQLの世界へ。 2007年現在。RDBMS[1]……所謂データベースは、世界中に広く使用されています。 え? 見た事もない? いえいえ。貴方の預金口座も、プリペイドICカードの残高も、先日注文したショッピングサイトも。 『データの蓄積』という行為がある限り、RDBMSは、貴方の生活とは切っても切り離せないものなのです。
それどころか、貴方がもし『表計算アプリケーション』(例えば、Microsoft社のExcelや、OpenOfficeのCalc)を使用しているのであれば もう貴方は、データベースの世界に足を踏み入れている可能性が高いのです。
なーに。おそれる事はありません。SQLなんて。『箱を作る、捨てる』『データを入れる』『データを書き換える』『データを引っ張り出す』『データを捨てる』ぐらいで大半の事は済ませられます。 大掛かりで面倒で大変そうだと感じるのは……SQLではなく、データベースのセットアップだとか。データベースのパフォーマンスだとか。RDBMSそのものについてのメンテナンスが大変なだけなのです。
そんなのは、DBA[2]の連中に任せて。 私達は、手早く簡単に、IT社会における膨大な情報を、お片づけしましょう。 ようこそ。膨大な情報を素早く操る術を身につける事を志す者よ。
[編集] SQLとは
SQLは、RDBMSへの要求(Query、クエリー)を行う為に定義された言語である。SQLの正式名称はSQLそのままであり略称ではない。 しかしながら1970年代に、IBM社のSanJose研究所において初のRDBMSプロトタイプSystem Rが発表された際に定義されたSEQUEL (Structured English QUEry Language) が他社商標との衝突を回避する為に、SQLと改名。Englishの部分を除いたSQL (Structured Query Language) として広く知れ渡る事になった背景があります。
次に歴史背景ですが。1970年代は、IBM社を筆頭に、ORACLE社など様々なRDBMSが生み出され、また各RDBMSに沿ったSQLが生み出されました。 そして、1980年代後半~1990年代初頭にかけて、ISOおよびJISによる標準化の試みが行われる事となり、1999年には、SQL99と呼ばれる規格が制定され運びとなりました。
[編集] 主なRDBMS(概要)
[編集] MySQL
L.A.M.P. (Linux,Apache,MySQL,PHP) という言葉が普及している通り、一定の評価を得ているオープンソースのデータベース(2007年現在)。機能よりも検索速度重視で開発が進められてきたがMySQL5を境に、機能面の充実が図られている。
[編集] PostgreSQL
MySQLがトランザクション機能(処理排他機能)をサポートしていなかった頃、機能を必要とするベンダにおいて選択の1つとして候補に挙がっていたRDBMS。また2007年現在では、富士通社によるPowerGRESシリーズによる日本国内サポート環境、NTT-Data社によるLudiaなど、日本国内での人気度が伺える。
[編集] Oracle
正しくは、Oracle Databaseシリーズ。マニュアル類のヴァージョン表記に、Oracle9i等のように記述されるため Oracle という呼び名が使われている。 RDBMSとしては世界初の商用採用として、耐障害性に特化した機能や、幅広い言語APIの提供等に一目置かれている。
[編集] DB2
IBM社のDB2は、長い間、自社プラットフォーム上でしか動作せず、表舞台に立っていたとは言えないが、SQLの歴史的背景の実績だけに留まらず、DB2シリーズ (UDB) に置いては、競合するOracle社から良きライバルとして評価されている。またIBM側もOracleのトランザクション処理における高い技術力を評価しあう関係にある。
[編集] スキーマ
スキーマとは、データを格納する枠組み(データベース)を定義するものである。 表定義の他、アクセス権限、インデックス付与、ビュー定義等もスキーマに含まれる。
[編集] 表定義
表定義とは、実際にデータの出納を行う物理的な定義を意味する。
| フィールド名 | データ型 | オプション |
|---|---|---|
| ID | char(32) | not null |
| 氏 | char(32) | not null |
| 名 | char(32) | not null |
| 年齢 | integer(3) | unsigned, not null |
| 職業 | char(128) | not null |
| 住所 | char(128) | null |
- 記述例
- CREATE TABLE personal (
- ID番号 integer(20) not null,
- ユーザID char(32) not null,
- 氏 char(32) not null,
- 名 char(32) not null,
- 年齢 integer(3) unsigned not null,
- 職業 char(128) not null,
- 住所 char(128),
- PRIMARY KEY(ID番号),
- UNIQUE(ユーザID)
- );
[編集] 整合性制約
データベースに格納されるデータの整合性を保つ為に、スキーマで指定する制約事項。
- PRIMARY KEY(主キー、PKとも)
- 該当行そのものを示す。 UNIQUEとの混同に注意。
- FOREIGN KEY(外部キー、FKとも)
- データ間リンク(結合先)を明示する。例えば、会員情報テーブルから会員を削除した際、購入履歴テーブルにある情報も削除する。これにより『ゴミデータ(孤立データ)』を防ぐ事が出来る。
- NOT NULL
- 該当フィールドには、値の無指定 (NULL) が不可である。ただし空文字列の指定は可能。
- UNIQUE
- 該当フィールドには、同一テーブル内で重複した値を持つ事が出来ない。PRIMARY KEYと混同しそうだが。例えば PRIMARY KEYが会員ID。 UNIUQEにログインIDが指定されている、と考えると分かりやすいかもしれない。
- CHECK
[編集] ビュー定義
ビュー定義とは、表定義のうち指定条件を満たす行で構成される仮想的な表である。
[編集] データ操作
[編集] INSERT
| レコード行 | ID | 氏 | 名 | 年齢 | 職業 | 住所 |
|---|---|---|---|---|---|---|
| 1 | egohgeoh | 安威 | 植雄 | 47 | 会社員 | 北海道 |
| 2 | reboof | 夏樹 | 久華子 | 24 | 会社員 | (NULL) |
| 3 | moin | 佐史 | 守瀬聰 | 36 | 住職 | シーランド公国 |
| 4 | e104da4ef | 太刀 | 津照人 | 20 | ウィキペディアン | 志賀県 |
- 文法
- INSERT INTO テーブル名 ( フィールド名1, フィールド名2, ... ) VALUES ( 値1, 値2, ... );
- 記述例
- INSERT INTO personal (ID, 氏,名,年齢,職業,住所) VALUES ('e104da4ef', '太刀','津照人','20','ウィキペディアン','滋賀県');
- ※太字のレコードが新規に追加される。
[編集] SELECT
[編集] UPDATE
[編集] DELETE
[編集] トランザクション
- SET TRANSACTION
- COMMIT
- ROLLBACK
[編集] デッドロック
[編集] RDBMSにおける正規化
[編集] 第1正規形
[編集] 第2正規形
[編集] 第3正規形
[編集] 第4正規形
[編集] SQLインジェクションの危険性
[編集] 脚注
- ^ (略語)RelationalDataBaseManagementSystem - データベースの独立性、分散データとの連携、アクセスの単純化を追求したデータベースをいう。
- ^ (略語)DataBaseAdministrator - データベース管理者。データベースのパフォーマンスや記憶媒体領域の確保、SQLの妥当性検証等、神経を使うっている方々。
[編集] 参考資料
- 標準SQLプログラミング (ISBN 4-906391-41-9)