【初級】SQL基礎
SQL:データベースを管理する言語(Strucrtured Query Language)
プログラミング言語ではなくリレーショナルデータベース(RDB)のデータを操作するための言語
データベースには「DB管理システム」があり、RDBの管理システムは「関係データベース管理システム(RDBMS)」という
- RDBMSの例
- Oracle
- MySQL
- PostgresSQL
- DB2
- Microsoft SQL Server
- PostureSQL
できること
-
データ(レコード)の取得・登録・更新・削除
-
データベース・テーブルの作成・変更・削除
データベース構造
データベース > テーブル > レコード
種類
DML(データ操作言語)
SELECT文:取得
UPDATE文:更新
DELETE文:削除
INSERT文:挿入
DDL(データ定義言語)
CREATE文:データベースやテーブルを作成
DROP文:データベースやテーブルの削除
ALTER文:データベースやテーブルの変更
JOIN文:テーブルの結合
TRUNCATE:テーブルのデータを削除
DCL(データ制御言語)
BEGIN文:トランザクション開始
GRANT文:ユーザ権限を与える
REVOKE文:ユーザ権限を奪う
COMMIT文:トランザクションの確定
ROLLBACK文:トランザクションの破棄
データの型
このようなテーブルがあった際にユーザ名はString型
、年齢はInt型
というようにカラムごとに型を指定する
主な種類には以下のようなものがある
- 型の種類(製品によって異なる)
- 文字列型:STRING
- 整数型:INT64
- 浮動小数点型:FLOAT64
- ブール型(真偽型):BOOL
- タイムスタンプ型:TIMESTAMP
- バイト型:BYTES
テーブルの作成
CREATE TABLE テーブル名(
カラム名1 カラムの型,
カラム名1 カラムの型,
);
上記のようなテーブルを作成したいときには、下記のように書く
CREATE TABLE user_table(
user_id INT64 PRIMARY KEY,
user_name STRING,
age INT64
job_id INT64
)
;
主キー(primary key)を設定
主キーとはそのテーブルのレコードを一意に特定することができるキーのことを指しブランク(欠損データ)はNG。今回はuser_idがそれにあたる。
主キーは1テーブルに対して1つ設定することができる*設定しなくても問題ない
ユニーク制約
ユニーク制約とは重複したデータが入ってはいけないカラム。例えばGoogleのアドレス登録や、ゲームでのユーザ名で重複しては困る場合に設定する
CREATE TABLE user_table(
user_id INT64 PRIMARY KEY,
user_name STRING,
address STRING UNIQUE //←ここ
)
;
外部キー
他のテーブルのユニーク制約があるカラム(主キーを含む)のデータを持っているカラム
外部キーがある場合、テーブル同士の関係性がわかる
テーブル結合
内部結合(Inner Join)と外部結合(Outer Join)は、SQLにおいて異なるテーブル間での結合操作を表す方法です。
-
内部結合(Inner Join):
- 内部結合は、結合条件に合致する行のみを結合します。
- 例えば、
テーブルA
とテーブルB
を内部結合する場合、結合条件に一致する行だけが結果に含まれます。 - 構文:
SELECT *
FROM テーブルA
INNER JOIN テーブルB
ON テーブルA.列 = テーブルB.列;
-
外部結合(Outer Join):
- 外部結合は、結合条件に合致しない行も含めて結合します。合致しない部分はNULLで埋められます。
- 左外部結合(Left Outer Join)や右外部結合(Right Outer Join)などがあり、どちらかのテーブルのデータを完全に含むように結合します。
- 構文(左外部結合の例):
SELECT *
FROM テーブルA
LEFT OUTER JOIN テーブルB
ON テーブルA.列 = テーブルB.列;
サブクエリ
SQLのサブクエリは、クエリ内に埋め込まれた別のクエリのことを指します。サブクエリは主に以下の2つの役割で使用されます:
-
データの抽出:
- サブクエリを使用して、外部クエリの結果に基づいてデータを抽出できます。
- 例えば、ある条件を満たす行を持つ特定の列を取得するためにサブクエリを使用できます。
SELECT column1 FROM table1 WHERE column2 = ( SELECT column2 FROM table2 WHERE condition );
-
演算処理:
- サブクエリを使用して、外部クエリの結果に基づいて演算を行うことができます。
- 例えば、サブクエリの結果を使って外部クエリ内で条件分岐を行うことができます。
SELECT column1, ( SELECT AVG(column2) FROM table2 ) as avg_value FROM table1;
サブクエリは主に以下の2つの種類に分類されます:
-
スカラーサブクエリ:
- スカラーサブクエリは、一つの値を返すサブクエリです。通常は比較演算子の右辺などで使われます。
SELECT column1 FROM table1 WHERE column2 = ( SELECT MAX(column2) FROM table2 );
-
テーブルサブクエリ:
- テーブルサブクエリは、複数の行や列を返すサブクエリで、通常はFROM句内でテーブルとして使われます。
SELECT column1 FROM ( SELECT column1, column2 FROM table1 ) AS subquery WHERE column2 > 100;
サブクエリを使用することで、より複雑な条件や操作を含むクエリを構築できます。
Discussion