目的
SQLの理解が薄いため言語化し定着に勤めたいと思います。
SQLとは
RDBの操作を行うための言語。
RDB
(リレーショナルデータベース)表形式でデータを管理する、データベースです。カラムやレコードがある。
RDBMS
(RDBマネジメント・システム)RDBを使用する際、それを管理するシステム。
MYSQL
RDBMSの1つです。特徴:拡張機能が多い。:小規模から大規模のデータも取り扱いが可能。:柔軟性が高い。
SQLはデータベースやテーブルに対して様々な命令を行いますが、その命令は大きく分けて3つです。
データを定義するDDL
(Data Definition Language)
データを操作するDML
(Data Manipulation Language)
データを制御するDCL
(Data Control Language)
DDLのできること
CREATE(データベースやテーブルの設定)
ALTER(データベースやテーブルの更新)
DROP(データベースやテーブルの削除)
DMLのできること
INSERT(データの登録)
UPDATE(データの更新)
DELETE(データの削除)
SELECT(データの検索)
DCLのできること
COMMIT(DBの変更の確定)
ROLLBACK(DBの変更の取り消し)
GRANT(ユーザーに操作権限を付与)
REVOKE(ユーザーの操作権限を無効化)
SQLはどのような種類のRDBに対しても、基本的に同じ文法で操作ができます。なので一つのSQLを学んでしまえば他のRDBを扱う時でもその知識は役立つ事が保証される。
SQLの裏側
SQLにも文法があり、ルールに沿って記述すると「データベースからデータを取得する」事ができる。
(例)投稿一覧ページ(index)には様々な処理がされている。ターミナルでログを確認すると色文字で書かれているところがSQL文です。あくまで例ですがSQL文を見ると
SELECT text FROM tweets;
が書かれており。textは取得したいデータ。tweetsはテーブル名となっている。
なので一覧表示ページには、取得したSQLが表示される。
SQLを使用してみる
find_by_sql
=> Ruby on RailsでSQL文を使用し、データを検索し取得する際に使用するメソッドです。
def index
#@tweets = Tweet.includes(:user).order("created_at DESC")
query = "SELECT * FROM tweets"
@tweets = Tweet.find_by_sql(query)
end
"SELECT * FROM tweets"
tweetテーブルからすべてのレコードを取得するSQLなのでTweet.allと同義となる。
このように、SQLを直接記述することでテーブルからデータを取得できました。