プロダクトデザイナーも知っておくと便利かもしれない【SQL編】
前回の記事ではリレーショナルデータベースについてまとめました。
今回はRDBMS(リレーショナルデータベースモデル)で作成したデータを具体的に作成したり呼び出したりする際に必要となってくるSQLについてまとめたいと思います。これを知っておくことでユーザーリサーチ等でエンジニアに頼まずとも簡単なデータは自分で取得して分析なんてこともできるようになります。
SQLとは
SQLとはStructured Query Languageの略でデータベース用の言語になります。SQLで操作をする場合は埋め込み型と対話型が存在します。対話型はWindowsのコマンドプロンプトやMacのターミナル画面でSQLコマンドを入力して操作します。例えば普段BigQueryでシェルを使用してデータを抽出している場合も対話型にあたります。一方埋め込み型はソフトウェアアプリに自動でデータを取得又は送信する際にプログラミング言語にSQLコードを埋め込むことでユーザーがアクションしたタイミングでデータを操作することが可能となります。
ちなみにRDBMS用のSQLはMySQL、PostgreSQL、SQLite等様々なオープンソースが存在します。今回はその中でもよく使われているMySQLで説明していきたいと思います。
SQLコマンドの種類
SQLのコマンドにはDDL,DML,DCL,TCLという種類に分けられています。
DDL(Data Definition Language)
DDLに含まれるコマンドは主にデータ構造を定義するときに使用します。CREATEやDROP,ALTERなどはデータテーブルを作成、変更、削除する際に使用します。
DML(Data Manipulation Language)
DMLに含まれるコマンドは主にデータを操作したいときに使用します。コマンドはデータを取得するSELECT,データを挿入するINSERT,データを更新するUPDATE,データを削除するDELETEなどがこちらに該当します。これらのコマンドはデータベース内のデータに対する日常的な操作で広く使用されます。
DCL(Data Control Language)
DCLは主にデータベースのセキュリティとアクセス権を管理する際に使用します。例えば特定のアクセス権をGRANTと言われるコマンドで付与したり、その権限をREVOKEで取り消したりできます。
TCL(Transaction Control Language)
TCLはトランザクション制御をする際に使用します。トランザクションとはデータ処理の途中で何かしらの問題が発生した際にデータベース操作の安全性と正確性を高めるために行います。そのコマンドとしてCOMMIT,ROLLBACK,SAVEPOINTなどが該当します。ここに関しては実装する際に重要になってくるのでそんなことが行われているんだ〜くらいでさらっと知っておくと十分かと思います。
SQLのデータ型
SQL内で扱うデータではカラムに対するデータの型を指定する必要があります。データ型は様々なので全部知りたい場合はググってみることをお勧めします。
例えば前回の記事でも使用した以下のテーブルがあったとします。
ArticleテーブルのPublication Dateカラムでは日付を使用しています。この場合MySQLでのデータ型はDATEになり、フォーマットとしてはYYYY-MM-DDというデータで保存されます。
Authorテーブルで使用しているEmailカラムはメールアドレスを格納する場所になります。この場合、任意の長さの文字列が保存できるVARCHARという型が使用されるのかなと思います。
どの型を使うかは基本的にカラムを作成する際に必要になってくるため、プロダクトデザイナーが知らなくてもよさそうな気もします。ただどんな型のデータが返ってくるかでUIの設計や要件定義の際に、どのようなデータ入力フィールドを提供する必要があるか、またはどのように表示するべきか理解が深まるため知っておくと便利だったりします。
SQLでデータを取得する
SQLのコマンドや型を知ったところで次は実際にデータを取得するクエリを見ていきたいと思います。
データベースを選択する
USE database_name;
まずはデータを取得するデータベースをUSEコマンドを使って選択します。
※既に選択している場合は不要です。
テーブル一覧を確認したい
SHOW TABLES;
基本的にRDBMSはテーブル同士の関係を持つことでデータベースを構築しているため複数のテーブルが存在します。どういうテーブルがあるのか一覧を確認したい場合にSHOW TABLESを使用します。※既に特定のデータベースを選択している必要があります。
テーブルの全データを取得したい
SELECT * FROM your_table_name;
テーブル内の全データを取得するには、SELECTステートメントを使用します。ちなみにyour_table_nameは取得したいテーブル名になります。SELECT横についている「*」はテーブル内の全データを取得するという意味で、特定のカラムだけを取得したい場合はここをカラム名に取得します。
特定のデータを取得したい①
SELECT * FROM Author
WHERE `Author Name` = 'Salah Patel';
上記のクエリはAuthorテーブルのAuthor Nameカラム内にSalah Patelという名前の全カラムデータを取得するようにしています。
WHERE句はSQL文において、データを取得する際の条件を指定するために使います。これを使用することで特定の条件に一致する行のみに限定することができます。
またここでも全カラムデータを取得するため「*」を使用していますが、例えば該当する名前の電話番号のみを取得したい場合はカラム名に変更します。(以下クエリ参照)
SELECT Phone FROM Author WHERE `Author Name` = 'Salah Patel';
特定のデータを取得したい②
SELECT * FROM Article WHERE Publication Date >= '2023-01-01';
上記のクエリはArticleテーブル内のPublication Dataカラムが2023年1月1日以降の全てのデータを取得します。①でも使用しているWHEREと比較演算子で様々なデータを取得することができます。ちなみに比較演算子は等しい(=)、等しくない(<>または!=)、より大きい(>)、より小さい(<)、以上(>=)、以下(<=)があります。
このようにSQLを使用することで自分の取得したいデータを確認することができるようになります。ただ上記で紹介したクエリは基本的なもので一つのテーブルからデータを確認する方法になります。では複数のテーブルを使ってデータを取得したい場合はどうするのか、次の記事で説明したいと思います。