SQL入門 2章 :)
今日はスッキリわかるSQL入門(中山清喬・飯田理恵子著)2章
基本文法と4大命令
まずはSQLの基本ルールから!
◎SQLに共通する基本ルール1
- 文の途中に改行を入れることができる
- 行の先頭や途中に半角の空白を入れることができる
これで読みやすいSQL文を書ける〜
ちなみに文の終了はセミコロンで表す;(複数のSQL文を続けて書くとき使える)
◎SQLに共通する基本ルール2
- ハイフン2つ(--)から行末まではコメントになり無視される
- /*から*/まではコメントになり無視される
解説とかコメントを書き込める
チームで作ってるときとか便利
◎SQLに共通する基本ルール3
SELECTやWHEREなどの一部の単語はSQLの機能として特別な意味を持つため列名などに使えない
大文字小文字の区別については会社やプロジェクトで決められたルールに従えばいいんでないかと書いてあった
データの種類を示す記法
SQL文の中に書き込まれたデータそのものを特にリテラルという
◎リテラル記述に関するルール
- 「'」でくくらず記述されたリテラルは数値情報として扱われる
- 「'」でくくられたリテラルは基本的に文字列情報として扱われる
- 「'」でくくられ、'2016-03-03'のような一定の形式で記述されたリテラルは日付情報として扱われる
たとえば「123」と「'123'」では意味が違う
前者は123(ひゃくにじゅうさん)という数量を表す数値データ
後者は123(いち・に・さん)という3つの文字の並びを表す文字列データ
列とデータ型
データベースの中には複数のテーブルがありテーブルは行と列から成り立っている
それぞれの列には名前が付いているがそれに加え列ごとに格納できるデータの種類を表すデータ型を定めることになっている
列にはデータ型で指定された種類の情報しか格納できない
利用可能なデータ型はDBMS製品によって違う
固定長と可変長
文字列型にはCHARとVARCHARがある
- CHAR型は固定長の文字列データを扱うデータ型でたとえばCHAR(10)と指定されている列ではあらかじめ10バイトの領域が確保されていて格納するデータは常に10バイト。だから10バイトにみたないときは文字列の右側に空白が追加されぴったりに調節される
- VARCHAR型を指定された列は、入力された文字列に合わせて領域が確保されるから空白を追加したりはしない。でもVARCHAR(10)と指定されてたら11バイトの文字列は格納できない
CHAR型は郵便番号とか、格納するデータの桁数が決まってるときがよくて
VARCHAR型は氏名とか、格納するデータの桁数が変動するときよい
SQLの命令体系
SQLではSELECT,UPDATE,DELETE,INSERTの4つの命令でほとんどのデータ操作ができちゃう
この4つのSQL命令はDML(Data Manipulation Language)と総称されている
このDMLにいろんな装飾をして複雑なデータを扱っていく
◎SELECT文の基本構造
- データベースとデータのやり取りをするにあたり最も頻繁に使われる
- テーブルから目的のデータを指定して取得する役割
・SELECTの後ろには取得したい列名
・2行目はデータを取得するテーブルを指定するためFROM句を必ず指定
・以降は必要に応じWHEREによる修飾やその他の修飾を記述
SELECT文における列名やテーブル名などの指定ではそれぞれの記述の後ろにAS+任意のキーワードをつけることで別名を定義できる。これ省略できることが多いらしいしOracleだと書いたらだめらしい
別名をつけるメリットとしては
・結果表における列のタイトルを任意のものに変更できる
・わかりにくい列名や長い列名でもわかりやすく短くできる
ってなってたけどメリットというか便利らしいということしかわからん
◎UPDATE文の基本構造
- すでにテーブルに存在するデータを書き換える
・UPDATEのうしろに更新したいデータがあるテーブル名を記述
・2行目に更新したい列名とその列に書き込むデータを記述するSET句を
・ある特定の行のみ書き換えたいときはWHEREを使って目的の行を指定(基本的にWHEREは必ず一緒)
◎DELETE文の基本構造
- すでにテーブルに存在する行を削除するための命令
行をまるごと削除してしまう機能で、特定の列だけを指定することはできない
・DELETE文では列名指定がいらないから1行目のDELETEのうしろにはなにも記述しない
・2行目はデータを取得するテーブルを指定するためFROM句を必ず指定
・WHEREをつけないと全部の行が消えるので基本的にWHEREは必ず一緒
◎INSERT文の基本構造
- テーブルに新しいデータを追加する
- テーブルの行を指定するWHEREはないがどこにどのようなデータを追加するのかを指定する
・INSERTのあとINTOをつけ、データを追加するテーブル名を記述
・テーブル名のうしろにカッコでくくってデータを追加する列名を指定(そのテーブルのすべての列に値を追加する場合2行目はまるごと省略できる)
・3行目はVALUES句といい2行目に記述した列名に対応するデータの値を指定する
4つの命令を分類すると
検索系:SELECT
更新系:UPDATE,DELETE,INSERT
となる
もうひとつの分類の仕方で
既存系:SELECT,UPDATE,DELETE
新規系:INSERT
がある
書き方の順序としては
- 命令文を記述
- テーブル指定の部分を記述
- テーブル指定よりうしろの部分を記述
- テーブル指定より前の部分を記述(SELECT文のみ)
2章はだいたいこんな感じ〜
この記事書いたの大分前なのだけどその頃はASの必要性が全くわからなかった!
今は頻繁につかうから(ASとは書かないけど)結構使えるな〜くらいの認識にはなってきたかも!
次は3章操作する行の絞り込みだ!