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
(リレーショナルデータベースマネージメントシステム)

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

               SQL              ?
  クライアント
  (Rails,ターミ          RDBMS              RDB
    ナルetc.)
                データ             データ
データの型

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

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

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

BINARY LARGE OBJECT ...バイナリ型

BIT, BIT VARYING ...ビット列

BOOLEAN ...ブール型

システムによって異なるので注意
SQLを書く前に

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

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

文の最後はセミコロン;

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

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

テーブル名とカラム名は日本語でできるものもある
SQLを書く前に(例)
社員テーブル employees
  ☆社員id     名前     入社日
                                    出勤
 INTEGER   CHAR    DATE
                                    テーブル
出勤日テーブル attendance_days         多          多
 ☆出勤日id    出勤日              1                  1
 INTEGER   DATE            社員              出勤日

出勤テーブル attendance_book     テーブル            テーブル

  ☆出勤id    出勤日id   社員id
 INTEGER INTEGER INTEGER
SQL: データベース作成
文法

CREATE DATABASE データベース名;


例

CREATE DATABASE attendances;
SQL: テーブル作成
文法

CREATE TABLE テーブル名 (列名 データ型 制約, ...,
    PRIMARY KEY (列名));         列毎の制約をまとめて書く
                               方法もある(テーブル制約)
例
                              一つのデータを特定するための
CREATE TABLE employees (      もの = 空欄・重複厳禁
    id INTEGER,
    name CHAR(15) NOT NULL,
    PRIMARY KEY (id));
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)
    VALUES (‘つじたさとみ’, ‘2010/4/1’);


型によってシングルクオート              日付区切りはハイフンでも可
忘れずに
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 <= b
a > b, a >= b
a <> b
a NOT b, a AND b, a OR b
a IN (b, c)
a BETWEEN b AND c
a LIKE ‘b’          ワイルドカードとして、%(とある文字列)、
a IS NULL           _(とある一文字)が使える
SQL: データ変更
文法

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

    WHERE 条件;


例

UPDATE employees SET beginning_on = ‘2009/4/1’
    WHERE id = ‘1’;
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を用いて集約条件を
例                     つけることができる

SELECT attend_on COUNT(employee_id)
    FROM attendance_book
    GROUP BY attend_on;
SQL: データ並べ替え
文法

SELECT * FROM テーブル名

    ORDER BY 列名1 DESC;

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

SELECT * FROM employees
    ORDER BY beginning_on DESC;
SQL: 内部結合と外部結合
出勤テーブル attendance_book
☆出勤id   出勤日id    社員id
                         社員テーブル employees
                ☆社員id    名前   入社日
                ↑結合キー
内部結合:対象テーブルのすべてのデータの組み合わせが取
れる(データが多重表示される)

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

SELECT テーブル1.列1, テーブル2.列1, ...   結果としてほしい列

   FROM テーブル1 INNER JOIN テーブル2
                                 結合するテーブル
   WHERE テーブル1.列1 = テーブル2.列1

      AND 参照条件;        結合キー
                       WHEREの代わりにONでもいい


         参照するデータの条件
         ONで結合キーを指定したときはWHEREで条件追加
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’;
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で条件追加
トランザクション?
ひとまとまりで実行されるべき処理の集まり


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

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

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




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

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

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

Durability: 永続性・・・トランザクションが終了した時点
でのデータが保証(保存)されるということ
ルール=ACID?
ACIDはRDBMSがよきに計らってくれるものではなく、実装
して自分で守るもの。




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

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



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

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



SQL statementて何ですか?

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

SQLのORDER BYとRubyの.orderは同じものですか?
参考サイト・書籍
TECHSCORE
http://www.techscore.com/tech/sql
SQLite
http://www.sqlite.org/
MySQL
http://www.mysql.com/
http://www.mysql.gr.jp/
ゼロからはじめるデータベース操作 SQL
翔泳社 ミック著

More Related Content

PDF
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
PDF
データベース02 - SQL概要
PDF
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
PPTX
Sql server のバックアップとリストアの基礎
PDF
データベース04 - SQL(SELECT:基本)
PDF
データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)
PPTX
[BurpSuiteJapan]Burp Suite回答編
PDF
Mvcc in postgreSQL 권건우
Sql server エンジニアに知ってもらいたい!! sql server チューニングアプローチ
データベース02 - SQL概要
[GKE & Spanner 勉強会] Cloud Spanner の技術概要
Sql server のバックアップとリストアの基礎
データベース04 - SQL(SELECT:基本)
データベース03 - SQL(CREATE, INSERT, DELETE, UPDATEなど)
[BurpSuiteJapan]Burp Suite回答編
Mvcc in postgreSQL 권건우

What's hot (20)

PDF
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
PDF
AWS Black Belt Tech シリーズ 2016 - Amazon SQS / Amazon SNS
PDF
SQLアンチパターン(インデックスショットガン)
PDF
Data platformdesign
PDF
[A31]AWS上でOracleを利用するためのはじめの一歩!by Masatoshi Yoshida
PDF
Amazon Redshiftによるリアルタイム分析サービスの構築
PDF
ハイブリッド時代のID基盤構成の基礎
PDF
PHPで大規模ブラウザゲームを開発してわかったこと
PPTX
[BurpSuiteJapan]Burp Suite実践編
PPTX
연고대학교 Si구축 ppt
 
PDF
Ad設計
PDF
O/Rマッパーによるトラブルを未然に防ぐ
PDF
はじめてのDynamoDBスキーマ設計
PDF
20180425 AWS Black Belt Online Seminar Amazon Relational Database Service (Am...
PDF
#logstudy 01 rsyslog入門
PPTX
初心者向け負荷軽減のはなし
PDF
AWSのPCI DSSへの取り組みと 押さえておきたい耳寄り情報
PDF
VPC Reachability Analyzer 使って人生が変わった話
PDF
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践
PDF
コスト最適化概論
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
AWS Black Belt Tech シリーズ 2016 - Amazon SQS / Amazon SNS
SQLアンチパターン(インデックスショットガン)
Data platformdesign
[A31]AWS上でOracleを利用するためのはじめの一歩!by Masatoshi Yoshida
Amazon Redshiftによるリアルタイム分析サービスの構築
ハイブリッド時代のID基盤構成の基礎
PHPで大規模ブラウザゲームを開発してわかったこと
[BurpSuiteJapan]Burp Suite実践編
연고대학교 Si구축 ppt
 
Ad設計
O/Rマッパーによるトラブルを未然に防ぐ
はじめてのDynamoDBスキーマ設計
20180425 AWS Black Belt Online Seminar Amazon Relational Database Service (Am...
#logstudy 01 rsyslog入門
初心者向け負荷軽減のはなし
AWSのPCI DSSへの取り組みと 押さえておきたい耳寄り情報
VPC Reachability Analyzer 使って人生が変わった話
【de:code 2020】 Azure Red hat OpenShift (ARO) によるシステムアーキテクチャ構築の実践
コスト最適化概論
Ad

Viewers also liked (15)

PDF
TAM 新人ディレクター システムスキルアップ プログラム 第6回 「データベース」
PDF
第6回勉強会 はじめてのデータベース
PDF
超入門データベース基礎の基礎
PDF
データベース06 - SQL(VIEW, ALTER, GRANTなど)
PDF
データベース05 - SQL(SELECT:結合,副問合せ)
KEY
データベースのお話
PDF
データベース09 - データベース設計
PDF
データベース10 - 正規化
PPTX
Barracuda NextG Firewall Fシリーズ製品のご紹介
PDF
データベース08 - 関係データモデルと関係代数
PDF
データベース入門1
PDF
実務で役立つデータベースの活用法
PDF
データベース01 - データベースとは
PDF
情報推薦システム入門:講義スライド
PPTX
Sql server これだけはやっておこう 最終版
TAM 新人ディレクター システムスキルアップ プログラム 第6回 「データベース」
第6回勉強会 はじめてのデータベース
超入門データベース基礎の基礎
データベース06 - SQL(VIEW, ALTER, GRANTなど)
データベース05 - SQL(SELECT:結合,副問合せ)
データベースのお話
データベース09 - データベース設計
データベース10 - 正規化
Barracuda NextG Firewall Fシリーズ製品のご紹介
データベース08 - 関係データモデルと関係代数
データベース入門1
実務で役立つデータベースの活用法
データベース01 - データベースとは
情報推薦システム入門:講義スライド
Sql server これだけはやっておこう 最終版
Ad

Similar to Sql基礎の基礎 (20)

PPTX
開発者の方向けの Sql server(db) t sql 振り返り
PPTX
T sql 振り返り
PDF
OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)
PPT
20080617 05 Mysql
PDF
sql講座 (初心者向け)
PPT
Online schema change in mysql casual #1(2010/12/11)
PPT
Online schema change in mysql casual #1(2010/12/11)
PDF
PerlとSQLのいろいろ
PPTX
Db seminar 20190619
PDF
エンタープライズ.Net DataSet
PPTX
SQL Serverの関数を一覧でマスターしよう
PPTX
データサイエンティスト必見!M-1グランプリ
PDF
データベースシステム論06 - SQL基礎演習1 データの定義と操作
PDF
PostgreSQL Conference Japan 2021 B2 Citus 10
PDF
Google Gears データベースの基礎
PPTX
SQLの内部結合と外部結合について
PDF
Redash・SQL勉強会 ~目指せクエリ女子~
PPTX
BPStudy32 CouchDB 再入門
PDF
今更だけどSqLite触ってみたよ
PPTX
Sql world を支える技術
開発者の方向けの Sql server(db) t sql 振り返り
T sql 振り返り
OSS-DB Silver ポイント解説セミナー ~SQL編~ (PostgreSQL9.0)
20080617 05 Mysql
sql講座 (初心者向け)
Online schema change in mysql casual #1(2010/12/11)
Online schema change in mysql casual #1(2010/12/11)
PerlとSQLのいろいろ
Db seminar 20190619
エンタープライズ.Net DataSet
SQL Serverの関数を一覧でマスターしよう
データサイエンティスト必見!M-1グランプリ
データベースシステム論06 - SQL基礎演習1 データの定義と操作
PostgreSQL Conference Japan 2021 B2 Citus 10
Google Gears データベースの基礎
SQLの内部結合と外部結合について
Redash・SQL勉強会 ~目指せクエリ女子~
BPStudy32 CouchDB 再入門
今更だけどSqLite触ってみたよ
Sql world を支える技術

More from Satomi Tsujita (20)

PDF
Osaka rubykaigi01
PDF
Rubykansai 81
PDF
Raspberry Pi3 のCPUまわりを整理してみた
PDF
2017年12月 linux kernel
PDF
2017年9月 サイト紹介
PDF
Devfes kyoto2017
PDF
いわみくとMeetup第15回
PDF
セキュリティー入門(メールウイルス編)
PDF
Gemの話 紹介編
PDF
RubyとRailsのおいしい使い方 ver. okayama1
PDF
RubyとRailsのおいしい使い方
PDF
Minami.rbの履歴書
PDF
PDF
Rubyビジネスセミナー大阪2015
PDF
経理屋がRailsを始めた理由
PDF
JAWS-UG2014
PDF
Rails初心者レッスン lesson3 3edition
PDF
Uragamiso re
PDF
Rails初心者レッスン lesson2 3edition
PDF
Rails初心者レッスン lesson4 2edition
Osaka rubykaigi01
Rubykansai 81
Raspberry Pi3 のCPUまわりを整理してみた
2017年12月 linux kernel
2017年9月 サイト紹介
Devfes kyoto2017
いわみくとMeetup第15回
セキュリティー入門(メールウイルス編)
Gemの話 紹介編
RubyとRailsのおいしい使い方 ver. okayama1
RubyとRailsのおいしい使い方
Minami.rbの履歴書
Rubyビジネスセミナー大阪2015
経理屋がRailsを始めた理由
JAWS-UG2014
Rails初心者レッスン lesson3 3edition
Uragamiso re
Rails初心者レッスン lesson2 3edition
Rails初心者レッスン lesson4 2edition

Sql基礎の基礎