<SQLとは?>
SQL(Structured Query Language)はリレーショナル型データベース(RDB, "リレーショナルデータベース"ともいう)の操作を行うための言語である。
リレーショナル型データベース(以下RDB)は、Excelのような行と列で構成された2次元の表形式。
RDBでも代表的なのが、MySQL, PostgreSQL, SQliteですね(ちなみに私が使っているのはMySQL)。SQLを理解していれば、1つに限らず複数のRDBを扱えるということ。
ここではSQLについてまとめていきますが、その前にちょっと余談。「⚪︎⚪︎型データベースという名前ならば、他にもデータベース名があるのでは...?」その通り。
いくつか挙げると、
・階層型データベース(ツリーや枝分かれ状のような形式)
・ネットワーク型データベース(網目になって複雑)
これらは”コードの冗長・重複”、”データ構造への依存”という問題点があったようで、エンジニアやプログラマーが頭を悩ませていたとか...そこで登場したのがRDBのようです。RDBはこの問題点を見事に解決したのです。
<SQL文>
DMLとDDMの2種類がある。
DDM(Data Definition Language)
データを定義するための言語。
CREATE
・CREATE DATABASE文
CREATE DATABASE データベース名
railsの場合、rake(rails) db:create
・CREATE TABLE文
CREATE TABLE テーブル名(カラム名 カラムの型, カラム名 カラムの型, ...※複数可)
※railsの場合、
rails g model モデル名
↓
rails db:migrate
をやっていた。
ALTER
・テーブルにカラムを追加したい場合
ALTER TABLE テーブル名 ADD カラム名 カラムの型
・テーブルからカラムを削除したい場合
ALTER TABLE テーブル名 DROP カラム名
・テーブルのカラムを変更したい場合
ALTER TABLE テーブル名 CHANGE 古いカラム名 新しいカラム名 新しいカラムの型
DML(Data Manipulation Language)
データを操作するための言語
INSERT
テーブルにデータを登録する。
・全てのカラムに値を入れる場合
INSERT INTO テーブル名 VALUES(値1, 値2, 値3)
・特定のカラムにのみ値を入れる場合
INSERT INTO テーブル名(カラム名1, カラム名2) VALUES(値1, 値2)
UPDATE
UPDATE テーブル名 SET 変更内容 WHERE 条件
DELETE
テーブルにあるデータ(レコード)を削除。
DELETE FROM テーブル名 WHERE 条件(id = 2)
この場合、(id = 2)であるレコードを削除する。
SELECT
テーブルの情報を検索するときに使う。
SELECT カラム名 FROM テーブル名
検索精度を上げる知識
セレクトと組み合わせることで精度が上がる。
FROM句
あるテーブルからデータを検索する場合、でどのテーブルかを指定する
SELECT カラム名 FROM テーブル名
WHERE句
条件を指定する場合(特定のカラムの値を引き出す時など)
WHERE id = 2
→idカラムが2の値であるレコードを選択する。
※これは比較演算子や論理演算子と組み合わせると検索の精度が上がる。
例えば、FROM テーブル名 age <= 25 AND adress = "東京都"
→ageが25以下かつadressが東京都のレコードを取得できる。AND演算子があればOR演算子もある。
WHERE NOT adress = 東京都
→adressが東京都ではないものを出せる。
WHERE カラム名 BETWEEN 下限 AND 上限
→そのカラムの範囲を指定することができる(数字限定)。
WHERE adress IN ("東京都", "神奈川県")
→adressカラムでそれぞれのデータを持ったレコードを出すことができる。
ワイルドカード (*)
文字の代わりとして使う。SELECT文においては、
SELECT * FROM テーブル名
→テーブルの情報を全て選択することとなる。ワイルドだろ〜
CONCAT関数
文字列を連結させることができる
AS句
CONCAT(カラム名1, カラム名2) AS "言葉"
DISTINCTキーワード
重複を防ぐ
SELECT DISTINCT(重複を避けたいカラム名)
GROUP BY句
指定したカラムが同じ値のものを1つにグループ化する。
SELECT ~ FROM ~ WHERE ~ GROUP BY カラム名(何のカラムでひとまとめにしたいか)
COUNT関数
COUNT関数はグループ化されたデータに対して使用することができる。GROU BY句と組み合わせると良い。
SELECT COUNT(カラム名)
JOIN句
他のテーブルの情報も一緒に取得できる。
JOIN テーブル名2 ON テーブル名1.カラム名1 = テーブル名2.カラム名2```
# <終わりと参考URL>
とまあ、最後の方は羅列になってしまいましたが、SQL文はプログラミング言語の中でもとても文法チックで暗記が多いと感じました。これを言葉だけで覚えるのはキツいと思うので、実際に手を動かしてみて挙動を体感するのが定着するのに一番の近道になるのではないのでしょうか。自分も今後はそうやっていこうと思います。あとは、データってどんな仕組みで構成されているの?、どうやればデータを扱えるようになるの?など、ITの観点から勉強していくと、実際の今の仕事に役に立つかもしれませんね。そこから情報やセキュリティ関係を勉強すれば、知識もすんなり入ってくるのでしょうか。
<参考URL>
http://www.oracle.com/technetwork/jp/articles/index-155309-ja.html#p01d