31
SQL 基礎の基礎 @satomicchy

Sql基礎の基礎

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Sql基礎の基礎

SQL基礎の基礎@satomicchy

Page 2: Sql基礎の基礎

自己紹介

つじたさとみ

@satomicchy

経理ときどきエンジニア

Minami.rb, Coffee女子会, Ruby関西

プログラム歴3年目

Page 3: Sql基礎の基礎

発表の前に

自分で勉強したことをまとめました。

Railsを使う上で知っておいた方がいいかなと思うことだけ抜き出してあります。本気でDBしたい人は本を買ってください。

ツッコミ、間違いのご指摘お願いします。

最後に質問があるで教えてください。

Page 4: Sql基礎の基礎

SQL?

SQL : Structured Query Language(構造化問合せ言語)

リレーショナルデータベース: RDBとデータをやりとりするための言語

Page 5: Sql基礎の基礎

RDB?

RDB: Relational Data Base(リレーショナルデータベース)

行と列の表形式でデータを保存

RDBMS: Relational Data Base Management System(リレーショナルデータベースマネージメントシステム)

例)SQLite3, MySQL, PostgreSQL, MongoDB ...

クライアント(Rails,ターミナルetc.)

RDBMS

SQL

データ

データRDB

Page 6: Sql基礎の基礎

データの型

SMALLINT, INT, FLOAT, REAL, DEC, NUMERIC ...数値

CHAR, NATIONAL CHAR, VARCHAR ...文字列

DATE, TIME, TIMESTAMP ...日時データ

BINARY LARGE OBJECT ...バイナリ型

BIT, BIT VARYING ...ビット列

BOOLEAN ...ブール型

システムによって異なるので注意

Page 7: Sql基礎の基礎

SQLを書く前に

RDBMSによって記述が異なるので注意

構文は慣習的に大文字(実は小文字でもいい)

文の最後はセミコロン;

改行、スペースは文中で自由に使ってよい

文字列と日付はシングルクォート ’ で囲む

テーブル名とカラム名は日本語でできるものもある

Page 8: Sql基礎の基礎

SQLを書く前に(例)

☆社員id 名前 入社日INTEGER CHAR DATE

社員テーブル employees

☆出勤日id 出勤日INTEGER DATE

出勤日テーブル attendance_days

☆出勤id 出勤日id 社員idINTEGER INTEGER INTEGER

出勤テーブル attendance_book

出勤テーブル

社員テーブル

出勤日テーブル

1 1

多 多

Page 9: Sql基礎の基礎

SQL: データベース作成

文法

CREATE DATABASE データベース名;

CREATE DATABASE attendances;

Page 10: Sql基礎の基礎

SQL: テーブル作成

文法

CREATE TABLE テーブル名 (列名 データ型 制約, ...,

PRIMARY KEY (列名));

CREATE TABLE employees ( id INTEGER, name CHAR(15) NOT NULL, PRIMARY KEY (id));

列毎の制約をまとめて書く方法もある(テーブル制約)

一つのデータを特定するためのもの = 空欄・重複厳禁

Page 11: Sql基礎の基礎

SQL: 列の追加

文法

ALTER TABLE テーブル名 ADD (列名 データ型 制約, ...);

ALTER TABLE employees ADD ( beginning_on DATE);

Page 12: Sql基礎の基礎

SQL: データ入力

文法

INSERT INTO テーブル名 (列名1, 列名2, ...)

VALUES (列名1の値, 列名2の値, ...);

INSERT INTO employees (name, beginning_on) VALUES (‘つじたさとみ’, ‘2010/4/1’);

型によってシングルクオート忘れずに

日付区切りはハイフンでも可

Page 13: Sql基礎の基礎

SQL: データ参照

文法(全部参照)

SELECT 列名1, 列名2 FROM テーブル名;

SELECT name, beginning_on FROM employees;

Page 14: Sql基礎の基礎

SQL: データ参照

文法(条件付き参照)

SELECT 列名1, 列名2 FROM テーブル名

WHERE 条件;

SELECT name, beginning_on FROM employees WHERE name = ‘つじた’;

Page 15: Sql基礎の基礎

SQL: データ参照

条件例

a < b, a <= ba > b, a >= ba <> ba NOT b, a AND b, a OR ba IN (b, c)a BETWEEN b AND ca LIKE ‘b’a IS NULL

ワイルドカードとして、%(とある文字列)、_(とある一文字)が使える

Page 16: Sql基礎の基礎

SQL: データ変更

文法

UPDATE テーブル名 SET 列名1 = 値1, 列名2 = 値2

WHERE 条件;

UPDATE employees SET beginning_on = ‘2009/4/1’ WHERE id = ‘1’;

Page 17: Sql基礎の基礎

SQL: データ削除

文法

DELETE FROM テーブル名

WHERE 条件;

DELETE FROM employees WHERE id = ‘1’;

Page 18: Sql基礎の基礎

SQL: データ集計

文法(集約関数)

SELECT 関数 FROM テーブル名;

SELECT COUNT(name) FROM employees;

Page 19: Sql基礎の基礎

SQL: データ集計

関数例

SUM()AVG()MAX()MIN()COUNT()

Page 20: Sql基礎の基礎

SQL: データ集計

文法

SELECT 列名1, 列名2, 関数 FROM テーブル名

GROUP BY 列名1, 列名2;

SELECT attend_on COUNT(employee_id) FROM attendance_book GROUP BY attend_on;

文の最後にHAVINGを用いて集約条件をつけることができる

Page 21: Sql基礎の基礎

SQL: データ並べ替え

文法

SELECT * FROM テーブル名

ORDER BY 列名1 DESC;

SELECT * FROM employees ORDER BY beginning_on DESC;

何も書かなければ昇順のASC。

Page 22: Sql基礎の基礎

SQL: 内部結合と外部結合

内部結合:対象テーブルのすべてのデータの組み合わせが取れる(データが多重表示される)

外部結合:基準テーブルのデータに対して対象となるデータが取れる

☆社員id 名前 入社日

☆出勤id 出勤日id 社員id社員テーブル employees

出勤テーブル attendance_book

↑結合キー

Page 23: Sql基礎の基礎

SQL: テーブル内部結合

文法

SELECT テーブル1.列1, テーブル2.列1, ...

FROM テーブル1 INNER JOIN テーブル2

WHERE テーブル1.列1 = テーブル2.列1

AND 参照条件;

結果としてほしい列

結合するテーブル

結合キーWHEREの代わりにONでもいい

参照するデータの条件ONで結合キーを指定したときはWHEREで条件追加

Page 24: Sql基礎の基礎

SQL: テーブル内部結合

SELECT attendance_book.attend_on, employees.name FROM attendance_book INNER JOIN employees WHERE attendance_book.employee_id = employees.id AND attendance_book.attend_on > ‘2010/4/1’;

Page 25: Sql基礎の基礎

SQL: テーブル外部結合

文法

SELECT テーブル1.列1, テーブル2.列1, ...

FROM テーブル1 LEFT OUTER JOIN テーブル2

WHERE テーブル1.列1 = テーブル2.列1

AND 参照条件;

結果としてほしい列

結合するテーブルLEFT OUTER : 基準テーブルは左RIGHT OUTER : 基準テーブルは右

結合キーWHEREの代わりにONでもいい

参照するデータの条件ONで結合キーを指定したときはWHEREで条件追加

Page 26: Sql基礎の基礎

トランザクション?

ひとまとまりで実行されるべき処理の集まり

例:出勤日を間違えて登録した

  →出勤日を変更する+社員の出勤登録を変更する

ルールがある

まとめて変更しなければ孤立したおかしなデータが残る

Page 27: Sql基礎の基礎

ルール=ACID?

Atomicity: 原子性・・・トランザクション(作業の最小単位)は、すべて有効に処理されるか、全く処理されないかのどちらかということ

Consistency: 一貫性・・・トランザクションが実行された前後でデータの整合性が保証されるということ

Isolation: 独立性・・・トランザクション中は、他の操作を一切受け付けないということ

Durability: 永続性・・・トランザクションが終了した時点でのデータが保証(保存)されるということ

Page 28: Sql基礎の基礎

ルール=ACID?

ACIDはRDBMSがよきに計らってくれるものではなく、実装して自分で守るもの。

Railsでも自分で実装しなければならない!

というところだけ覚えていてください。

Page 29: Sql基礎の基礎

おまけ

Railsで見られるSQL → rails sしたターミナルを見てみる

資料や書籍は1つを鵜呑みにせず3つは当たる

Page 30: Sql基礎の基礎

疑問

SQL statementて何ですか?

SQLのGROUP BYとRubyの.group_byは同じものですか?

SQLのORDER BYとRubyの.orderは同じものですか?

Page 31: Sql基礎の基礎

参考サイト・書籍

TECHSCOREhttp://www.techscore.com/tech/sql

SQLitehttp://www.sqlite.org/

MySQLhttp://www.mysql.com/

http://www.mysql.gr.jp/

ゼロからはじめるデータベース操作 SQL翔泳社 ミック著