はじめに
さて今回もやってきます!スッキリわかるSQL2章です!
本記事もこのテーブルを題材としています。
SQLに共通する基本ルール
どうやらSQLは書き方のルールがあるらしいぞ!
しっかり学んでいかないと!
共通する基本ルール1
・文の途中に改行を入れることができる。
・行の先頭や行の途中に半角の空白を入れることができる
備考
・末尾のセミコロン(;)で、文の終了を表すこともある
わかりやすいSQL文を書くために文中の改行は必須とのこと。
SELECT 費目, 出金額
FROM 家計簿 ←改行したほうがわかりやすい
WHERE 出金額 > 3000
共通する基本ルール2 コメントアウトできる
・ハイフン2つ(--)から行末までコメントになり、無視される
・/*から*/まではコメントになり、無視される
これはコメントアウトのやり方みたいですね。
/* コメントアウト部分 */
SELECT 費目, 出金額
FROM 家計簿
WHERE 出金額 > 3000
共通する基本ルール3 予約語のルール
・SELECT や WHERE などの命令に使う単語は、SQLとして特別な意味をもつ「予約語」である。
・予約語を記述する際は、大文字と小文字の区別はない。
・テーブル名や列名に予約語を利用することはできない。
小文字で書いても処理できます。
データー型のリテラル
記述ルールといえば INSERT文で使われていたシングルクォーテーションが気になった。
➩これはデータの種類を示す為の記法です。
てかそもそもリテラル
とは?
➩SQLの文の中に書き込まれたデータそのもののことです。
INSERT INTO 家計簿
VALUES ('2013-02-25', '居住値', '3月の家賃', 0 , 85000) ←リテラル
0と85000の部分はシングルクォーテーションで囲われていない!
最後の2つのリテラルだけがシングルクォーテーションで囲われていないのは
リテラルの記述に関するルールがある。
リテラルの記述に関するルール
・で囲わない記述は、数値として扱われる。
・逆に'で囲うと基本的には文字列として扱われる
・基本的にはというからには、例外もある。'で囲われる '2013-02-25'のような形式では日付として扱われる。
じゃぁ誤って数字をシングルクォーテーションで囲って文字列情報のSQL文で送ったらどうなんの??
➩大丈夫です。データベースには安全装置が備わっています!
では、安全装置説明します。
INSERT INTO 家計簿
VALUES ('2013-02-25', '居住値', '3月の家賃', '0' , '85000')
数字(0と85000)をシングルクォーテーションで囲って誤ってSQL文を発行しちゃったああ!?
上のSQLを実行すると、DBMSは、入金額や出金額は、数値じゃないじゃん!ってことで 処理を中断するか、うけとった文字列を強制的に数値に変換して格納しようとします!
なぬ!!すごいな!SQL
でもここでさらに疑問が・・・。
え?入金額と出金額が数値じゃないとだめってどうしてわかるんだよ!
➩これは そもそも「数値」しか入らないように設定されているから。
列ごとに格納できるデータの種類をデータ型
で定めることになっている。
データ型
あー!Railsでテーブル設計した時にデータ型決めたわ〜! なるほど〜〜!
ではデータ型を説明。
データ型とは?
'列ごとに格納できるデータの種類を表すもの'
代表的なデータ型は下記記事がよかったのではっときます!
代表的なデータ型
意外とわかっているようでわかっていなかった・・・。
復習大事!!
データ型
・テーブルの各列には、データ型が指定されている
・列には、データ型で指定された種類の情報しか格納することはできない
・利用可能なデータ型は、DBMS製品によって異なる
製品によって異なるとこは注意していきたいとこですね!
SQLの命令体系
4つの重要なSQL文
ほとんどの命令文は、1章で学習したSELECT,UPDATE,DELETE,INSERTの4つの命令文で実現可能。 これらは4つの命令はDML
という。 または4大命令
という。
なんだ!4大命令さえ覚えておけば楽勝じゃん!!と思った私。
違うんです。4つの命令にさまざまな修飾語を付加することで複雑なデータ操作ができるのは
SQLの特徴らしいです。
えええええ!!パニック!!
「FROMっていろんな命令で書けた気がするけど、どれに使えるん?」
「WHEREって、どの命令にもつけていいんだっけ?」
などなど。頭混乱しますよね。
でも大丈夫。4つの命令文法をスッキリとマスターするコツがある!
4大命令をスッキリ学ぶコツ
データ抽出SELECT文の基本構文
SELECT 列名 ←この列のデータを取得しなさい
FROM テーブル名 ←このテーブルから
(WHERE) 修飾の部分
※ 修飾の部分はなくてもよい
AS + 任意のキーワードをつけることで、別名を定義できる
SELECT 費目 AS ITEM, 入金額 AS RECEIVE, 出金額 AS PAY
FROM 家計簿 AS NONEYBOOK
WHERE 費目 = '給料'
抽出した時の名前をASで変えられるみたいです。
ITEM | RECEIVE | PAY |
---|---|---|
給料 | 28000 | 0 |
データの書き換えUPDATE文の基本構文
UPDATE テーブル名 ←このテーブル情報を更新しなさい
SET 列名1= 値1, 列名2=値2・・ ←このデータを
(WHERE) 修飾の部分
※ 修飾の部分はなくてもよい
WHEREでどの行を書き変えるべきか指定する
逆に指定せず、書くと全ての行を書き換えてしまう!!
全部のデータを書き換えって・・・注意が必要ですね。
データの削除DELETE文の基本構文
DELETE ←削除しなさい
FROM テーブル名 ←このテーブルを
(WHERE) 修飾の部分
※ DELETE文はWHERE基本つけよう!理由は下記
WHEREでどの行を削除するか指定する
逆に指定せず、書くと・・・すべての行が削除対象となる
WHEREのない DELETE命令は全件削除!!!!
怖すぎる・・・。書籍には・・・本能的に「実行をためらうこと」を身につけて下さい・・って書いてある・・
データ追加INSERT文の基本構文
INSERT INTO テーブル名 ←このテーブルに追加しなさい
(列名1,列名2,列名3) ←この列に
VALUES (値1, 値2, 値3・・・) ←このデータを
2行目の (列名1,列名2,列名3)を省略した場合、全列に追加できる!!
INSERT INTO テーブル名 ←このテーブルに追加しなさい
VALUES (値1, 値2, 値3・・・) ←このデータを
気をつけるべきは、 VALUESの並びはテーブルの列と同じじゃないといかんよ。
4大命令のすべてに共通すること
ここまで基礎文法学習したけど、WHEREの前の部分がどれも似ているのに、微妙違ってて
混乱しないか?
➩大丈夫です!ちゃんとルールがある
処理対処となるテーブル名を必ず指定する必要がある
SQL書き方まとめ
①まず、命令文(SELECTやINSERTやUPDATEやDELETE)を書く
②次にテーブル指示
③テーブル指定より後ろの部分を記述する。
④テーブル指定より前の部分を記述する(SELECT文のみ)
この流れを覚えておけば、混乱しなくてすむと思います!
参考記事
- スッキリわかるSQL入門ドリル