SQL基礎の基礎  @satomicchy
自己紹介つじたさとみ@satomicchy経理ときどきエンジニアMinami.rb, Coffee女子会, Ruby関西プログラム歴3年目
発表の前に自分で勉強したことをまとめました。Railsを使う上で知っておいた方がいいかなと思うことだけ抜き出してあります。本気でDBしたい人は本を買ってください。ツッコミ、間違いのご指摘お願いします。最後に質問があるで教えてください。
SQL?SQL : Structured Query Language(構造化問合せ言語)リレーショナルデータベース: RDBとデータをやりとりするための言語
RDB?RDB: Relational Data Base(リレーショナルデータベース)行と列の表形式でデータを保存RDBMS: Relational Data Base Management System(リレーショナルデータベースマネージメ...
データの型SMALLINT, INT, FLOAT, REAL, DEC, NUMERIC ...数値CHAR, NATIONAL CHAR, VARCHAR ...文字列DATE, TIME, TIMESTAMP ...日時データBINARY...
SQLを書く前にRDBMSによって記述が異なるので注意構文は慣習的に大文字(実は小文字でもいい)文の最後はセミコロン;改行、スペースは文中で自由に使ってよい文字列と日付はシングルクォート ’ で囲むテーブル名とカラム名は日本語でできるものもある
SQLを書く前に(例)社員テーブル employees  ☆社員id     名前     入社日                                    出勤 INTEGER   CHAR    DATE            ...
SQL: データベース作成文法CREATE DATABASE データベース名;例CREATE DATABASE attendances;
SQL: テーブル作成文法CREATE TABLE テーブル名 (列名 データ型 制約, ...,    PRIMARY KEY (列名));         列毎の制約をまとめて書く                              ...
SQL: 列の追加文法ALTER TABLE テーブル名 ADD (列名 データ型 制約, ...);例ALTER TABLE employees ADD (    beginning_on DATE);
SQL: データ入力文法INSERT INTO テーブル名 (列名1, 列名2, ...)    VALUES (列名1の値, 列名2の値, ...);例INSERT INTO employees (name, beginning_on)   ...
SQL: データ参照文法(全部参照)SELECT 列名1, 列名2 FROM テーブル名;例SELECT name, beginning_on FROM employees;
SQL: データ参照文法(条件付き参照)SELECT 列名1, 列名2 FROM テーブル名    WHERE 条件;例SELECT name, beginning_on FROM employees    WHERE name = ‘つじた’;
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’          ワイルドカ...
SQL: データ変更文法UPDATE テーブル名 SET 列名1 = 値1, 列名2 = 値2    WHERE 条件;例UPDATE employees SET beginning_on = ‘2009/4/1’    WHERE id = ...
SQL: データ削除文法DELETE FROM テーブル名    WHERE 条件;例DELETE FROM employees    WHERE id = ‘1’;
SQL: データ集計文法(集約関数)SELECT 関数 FROM テーブル名;例SELECT COUNT(name) FROM employees;
SQL: データ集計関数例SUM()AVG()MAX()MIN()COUNT()
SQL: データ集計文法SELECT 列名1, 列名2, 関数 FROM テーブル名    GROUP BY 列名1, 列名2;                      文の最後にHAVINGを用いて集約条件を例               ...
SQL: データ並べ替え文法SELECT * FROM テーブル名    ORDER BY 列名1 DESC;                       何も書かなければ昇順のASC。例SELECT * FROM employees    O...
SQL: 内部結合と外部結合出勤テーブル attendance_book☆出勤id   出勤日id    社員id                         社員テーブル employees                ☆社員id   ...
SQL: テーブル内部結合文法SELECT テーブル1.列1, テーブル2.列1, ...   結果としてほしい列   FROM テーブル1 INNER JOIN テーブル2                                 結合...
SQL: テーブル内部結合例SELECT attendance_book.attend_on, employees.name    FROM attendance_book INNER JOIN employees    WHERE atten...
SQL: テーブル外部結合文法SELECT テーブル1.列1, テーブル2.列1, ...   結果としてほしい列   FROM テーブル1 LEFT OUTER JOIN テーブル2   WHERE テーブル1.列1 = テーブル2.列1  ...
トランザクション?ひとまとまりで実行されるべき処理の集まり例:出勤日を間違えて登録した  →出勤日を変更する+社員の出勤登録を変更する   まとめて変更しなければ孤立したおかしなデータが残る           ルールがある
ルール=ACID?Atomicity: 原子性・・・トランザクション(作業の最小単位)は、すべて有効に処理されるか、全く処理されないかのどちらかということConsistency: 一貫性・・・トランザクションが実行された前後でデータの整合性が保...
ルール=ACID?ACIDはRDBMSがよきに計らってくれるものではなく、実装して自分で守るもの。Railsでも自分で実装しなければならない!というところだけ覚えていてください。
おまけRailsで見られるSQL → rails sしたターミナルを見てみる資料や書籍は1つを鵜呑みにせず3つは当たる
疑問SQL statementて何ですか?SQLのGROUP BYとRubyの.group_byは同じものですか?SQLのORDER BYとRubyの.orderは同じものですか?
参考サイト・書籍TECHSCOREhttp://www.techscore.com/tech/sqlSQLitehttp://www.sqlite.org/MySQLhttp://www.mysql.com/http://www.mysql.g...
Upcoming SlideShare
Loading in …5
×

Sql基礎の基礎

1,696
-1

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,696
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
17
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Sql基礎の基礎

  1. 1. SQL基礎の基礎 @satomicchy
  2. 2. 自己紹介つじたさとみ@satomicchy経理ときどきエンジニアMinami.rb, Coffee女子会, Ruby関西プログラム歴3年目
  3. 3. 発表の前に自分で勉強したことをまとめました。Railsを使う上で知っておいた方がいいかなと思うことだけ抜き出してあります。本気でDBしたい人は本を買ってください。ツッコミ、間違いのご指摘お願いします。最後に質問があるで教えてください。
  4. 4. SQL?SQL : Structured Query Language(構造化問合せ言語)リレーショナルデータベース: RDBとデータをやりとりするための言語
  5. 5. RDB?RDB: Relational Data Base(リレーショナルデータベース)行と列の表形式でデータを保存RDBMS: Relational Data Base Management System(リレーショナルデータベースマネージメントシステム)例)SQLite3, MySQL, PostgreSQL, MongoDB ... SQL ? クライアント (Rails,ターミ RDBMS RDB ナルetc.) データ データ
  6. 6. データの型SMALLINT, INT, FLOAT, REAL, DEC, NUMERIC ...数値CHAR, NATIONAL CHAR, VARCHAR ...文字列DATE, TIME, TIMESTAMP ...日時データBINARY LARGE OBJECT ...バイナリ型BIT, BIT VARYING ...ビット列BOOLEAN ...ブール型システムによって異なるので注意
  7. 7. SQLを書く前にRDBMSによって記述が異なるので注意構文は慣習的に大文字(実は小文字でもいい)文の最後はセミコロン;改行、スペースは文中で自由に使ってよい文字列と日付はシングルクォート ’ で囲むテーブル名とカラム名は日本語でできるものもある
  8. 8. SQLを書く前に(例)社員テーブル employees ☆社員id 名前 入社日 出勤 INTEGER CHAR DATE テーブル出勤日テーブル attendance_days 多 多 ☆出勤日id 出勤日 1 1 INTEGER DATE 社員 出勤日出勤テーブル attendance_book テーブル テーブル ☆出勤id 出勤日id 社員id INTEGER INTEGER INTEGER
  9. 9. SQL: データベース作成文法CREATE DATABASE データベース名;例CREATE DATABASE attendances;
  10. 10. SQL: テーブル作成文法CREATE TABLE テーブル名 (列名 データ型 制約, ..., PRIMARY KEY (列名)); 列毎の制約をまとめて書く 方法もある(テーブル制約)例 一つのデータを特定するためのCREATE TABLE employees ( もの = 空欄・重複厳禁 id INTEGER, name CHAR(15) NOT NULL, PRIMARY KEY (id));
  11. 11. SQL: 列の追加文法ALTER TABLE テーブル名 ADD (列名 データ型 制約, ...);例ALTER TABLE employees ADD ( beginning_on DATE);
  12. 12. SQL: データ入力文法INSERT INTO テーブル名 (列名1, 列名2, ...) VALUES (列名1の値, 列名2の値, ...);例INSERT INTO employees (name, beginning_on) VALUES (‘つじたさとみ’, ‘2010/4/1’);型によってシングルクオート 日付区切りはハイフンでも可忘れずに
  13. 13. SQL: データ参照文法(全部参照)SELECT 列名1, 列名2 FROM テーブル名;例SELECT name, beginning_on FROM employees;
  14. 14. SQL: データ参照文法(条件付き参照)SELECT 列名1, 列名2 FROM テーブル名 WHERE 条件;例SELECT name, beginning_on FROM employees WHERE name = ‘つじた’;
  15. 15. 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 _(とある一文字)が使える
  16. 16. SQL: データ変更文法UPDATE テーブル名 SET 列名1 = 値1, 列名2 = 値2 WHERE 条件;例UPDATE employees SET beginning_on = ‘2009/4/1’ WHERE id = ‘1’;
  17. 17. SQL: データ削除文法DELETE FROM テーブル名 WHERE 条件;例DELETE FROM employees WHERE id = ‘1’;
  18. 18. SQL: データ集計文法(集約関数)SELECT 関数 FROM テーブル名;例SELECT COUNT(name) FROM employees;
  19. 19. SQL: データ集計関数例SUM()AVG()MAX()MIN()COUNT()
  20. 20. SQL: データ集計文法SELECT 列名1, 列名2, 関数 FROM テーブル名 GROUP BY 列名1, 列名2; 文の最後にHAVINGを用いて集約条件を例 つけることができるSELECT attend_on COUNT(employee_id) FROM attendance_book GROUP BY attend_on;
  21. 21. SQL: データ並べ替え文法SELECT * FROM テーブル名 ORDER BY 列名1 DESC; 何も書かなければ昇順のASC。例SELECT * FROM employees ORDER BY beginning_on DESC;
  22. 22. SQL: 内部結合と外部結合出勤テーブル attendance_book☆出勤id 出勤日id 社員id 社員テーブル employees ☆社員id 名前 入社日 ↑結合キー内部結合:対象テーブルのすべてのデータの組み合わせが取れる(データが多重表示される)外部結合:基準テーブルのデータに対して対象となるデータが取れる
  23. 23. SQL: テーブル内部結合文法SELECT テーブル1.列1, テーブル2.列1, ... 結果としてほしい列 FROM テーブル1 INNER JOIN テーブル2 結合するテーブル WHERE テーブル1.列1 = テーブル2.列1 AND 参照条件; 結合キー WHEREの代わりにONでもいい 参照するデータの条件 ONで結合キーを指定したときはWHEREで条件追加
  24. 24. 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’;
  25. 25. 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で条件追加
  26. 26. トランザクション?ひとまとまりで実行されるべき処理の集まり例:出勤日を間違えて登録した  →出勤日を変更する+社員の出勤登録を変更する まとめて変更しなければ孤立したおかしなデータが残る ルールがある
  27. 27. ルール=ACID?Atomicity: 原子性・・・トランザクション(作業の最小単位)は、すべて有効に処理されるか、全く処理されないかのどちらかということConsistency: 一貫性・・・トランザクションが実行された前後でデータの整合性が保証されるということIsolation: 独立性・・・トランザクション中は、他の操作を一切受け付けないということDurability: 永続性・・・トランザクションが終了した時点でのデータが保証(保存)されるということ
  28. 28. ルール=ACID?ACIDはRDBMSがよきに計らってくれるものではなく、実装して自分で守るもの。Railsでも自分で実装しなければならない!というところだけ覚えていてください。
  29. 29. おまけRailsで見られるSQL → rails sしたターミナルを見てみる資料や書籍は1つを鵜呑みにせず3つは当たる
  30. 30. 疑問SQL statementて何ですか?SQLのGROUP BYとRubyの.group_byは同じものですか?SQLのORDER BYとRubyの.orderは同じものですか?
  31. 31. 参考サイト・書籍TECHSCOREhttp://www.techscore.com/tech/sqlSQLitehttp://www.sqlite.org/MySQLhttp://www.mysql.com/http://www.mysql.gr.jp/ゼロからはじめるデータベース操作 SQL翔泳社 ミック著
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×