SQLとは?
SQLとは、データベースを操作する専門の言語のことです。
SQLで書かれた命令を使って、テーブルから特定の列や行のデータを自由に取り出したり、書き換えたりできます。
SQLについて詳しくは以下の記事にまとめていますので、ぜひ参考にしてください。
【関連記事】
▶︎SQLとはどういうもの? 独自拡張と標準SQLの大きな違いって、何?
ここでは、SQLの文法について基本的なものを解説します。
SQL文法の超基本
SQLは、指定する項目と値をセットでつなぎ合わせる文法が基本的な書き方です。
そして、SQL文の終わりには必ず「;(セミコロン)」が必要になります。
基本的なSQL文の例を紹介すると、次の通りです。
SELECT カラム名 FROM テーブル名 WHERE 条件文;
「SELECT」や「FROM」、「WHERE」などの命令に使う単語は、SQLの機能として特別な意味をもち、「予約語」とも言われます。
予約語は大文字で書いても小文字で書いてもOKです。
会社やプロジェクトなどでルールが決められていれば、それに従うとよいでしょう。
ここでは予約語は大文字で記述していきます。
予約語は前述したように特別な意味をもつため、テーブル名やカラム名に使うことはできません。
よく使うSQL文法の一覧
ここでは、SQLでよく使われる文法を紹介します。
基本的な文法ばかりなので、知っておいて損はありません。
なお、ここでは「PostgreSQL」を例に解説します。
CREATE TABLE(テーブル作成)
データベースにテーブルを作成する場合は、「CREATE TABLE」を使います。
記述方法は次の通りです。
CREATE TABLE テーブル名(カラム名1 データ型, カラム名2 データ型, …);
カラムは必要な分だけ登録しましょう。
データ型には「varchar」や「integer」が使えます。
詳しくは、次のサイトが参考になります。
サンプルでテーブルを作成してみます。
mydb=# CREATE TABLE sample_tb(id integer, name varchar(20), gender varchar(10)); CREATE TABLE
ここでは「id」「name」「gender」というカラムを用意しました。
「CREATE TABLE」と表示されれば作成成功です。
INSERT INTO(テーブルにデータを追加)
作成したテーブルにデータを追加するには、「INSERT INTO」を使います。
記述方法は次の通りです。
INSERT INTO テーブル名 VALUES(値1, 値2, 値3, …);
実際に、先ほど作成したテーブルにデータを追加してみましょう。
mydb=# INSERT INTO sample_tb VALUES(1, 'potepan', 'male'); INSERT 0 1
データの追加ができました。
次に作成したテーブル内のデータを取得する方法を見ていきましょう。
SELECT(テーブルのデータを取得)
テーブルのデータを取得したい場合は、「SELECT」を使います。
記述方法は次の通りです。
SELECT カラム名 FROM テーブル名 WHERE 条件文;
この記事のはじめに紹介した記述方法と同じです。
WHERE句は条件を指定したい場合に使用します。
サンプルで表示を確認してみます。
mydb=# SELECT name FROM sample_tb; name --------- potepan (1 row)
「name」カラムのデータを取得できました!
カラム名の部分に「*(アスタリスク)」を指定すれば、すべてのカラムを表示可能です。
試しにデータをもう1つ追加して表示を確認してみました。
mydb=# SELECT * FROM sample_tb; id | name | gender ----+----------+-------- 1 | potepan | male 2 | potepan2 | female (2 rows)
このように、テーブル内にあるすべてのカラム、データが取得できます。
UPDATE(テーブルのデータを更新)
データの情報を更新したい場合は、「UPDATE」を使いましょう。
記述方法は次の通りです。
UPDATE テーブル名 SET カラム名 = 変更したい値 WHERE 条件文;
文章だと少しわかりづらいので、実際に確認してみます。
mydb=# UPDATE sample_tb SET name = 'potepan3' WHERE id = 2; UPDATE 1
上記の例だと、「sample_tb」テーブルの「name」カラムを「potepan3」に更新します。
では、どのデータを更新するのかをWHERE句で指定しています。
ここでは「id」カラムが「2」であるデータの「name」を更新しているわけです。
更新後にテーブル内のデータを確認すると、次のようになっています。
mydb=# SELECT * FROM sample_tb; id | name | gender ----+----------+-------- 1 | potepan | male 2 | potepan3 | female (2 rows)
ちゃんと「potepan2」が「potepan3」に更新されていますね。
DELETE(テーブルのデータを削除)
データの情報を削除したい場合は、「DELETE」を使いましょう。
記述方法は次の通りです。
DELETE FROM テーブル名 WHERE 条件文;
削除したいデータのあるテーブルを指定し、削除したいデータの条件を指定します。
では、「sample_tb」テーブルの「id」が「2」のデータを削除してみましょう。
mydb=# DELETE FROM sample_tb WHERE id = 2; DELETE 1
これでデータの削除が完了しました。
テーブル内を確認してみると、次のようになっているハズです。
mydb=# SELECT * FROM sample_tb; id | name | gender ----+---------+-------- 1 | potepan | male (1 row)
このように、データを作成・更新・削除といった操作はSQLの基本となります。
ぜひ、使い方をマスターしておきましょう。
検索結果を絞り込む文法
ここでは、データを検索する際に結果を絞り込むための文法を紹介します。
AND
「AND」を使うことで、条件を複数指定して検索結果を取得できます。
SELECT カラム名 FROM テーブル名 WHERE 条件 AND 条件;
サンプルでANDの使い方を確認してみましょう。
mydb=# SELECT * FROM sample_tb WHERE id = 1 AND gender = 'male'; id | name | gender ----+---------+-------- 1 | potepan | male (1 row)
このように、「id」が「1」で「gender」が「male」という条件に当てはまるデータが取得できました。
この条件のどちらかを満たさない場合はデータが取得できません。
mydb=# SELECT * FROM sample_tb WHERE id = 1 AND gender = 'female'; id | name | gender ----+------+-------- (0 rows)
ANDを使う場合は、条件のすべてを満たす必要があります。
OR
「OR」を使うことで、複数の条件の中から1つでも当てはまるデータを取得可能です。
先ほどのSQL文をORにして検索結果を確認してみましょう。
mydb=# SELECT * FROM sample_tb WHERE id = 1 OR gender = 'female'; id | name | gender ----+----------+-------- 1 | potepan | male 2 | potepan2 | female (2 rows)
このように、どちらかの条件に当てはまる検索結果を取得できます。
比較演算子
比較演算子を用いることでも、検索結果を絞り込むことが可能です。
mydb=# SELECT * FROM sample_tb WHERE id <= 1; id | name | gender ----+---------+-------- 1 | potepan | male (1 row) mydb=# SELECT * FROM sample_tb WHERE gender LIKE '%male'; id | name | gender ----+----------+-------- 1 | potepan | male 2 | potepan2 | female (2 rows)
このように、値の大きさや文字列を指定することで検索結果を絞れます。
SQLで使える比較演算子については、以下の記事で詳しく解説していますので参考にしてみてください。
【関連記事】
▶︎SQLで文字列比較する演算子の使い方を解説!【サンプル付き】
検索結果の表示を変更する文法
ここでは、SQLでデータを取得した際の表示に関わる文法を紹介します。
ORDER BY
「ORDER BY」で検索結果を指定した条件で並び替えることが可能です。
「番号の大きい順」や「文字数の少ない順」といった指定で、データを表示したい場合に使えます。
サンプルで表示を確認してみましょう。
mydb=# SELECT * FROM sample_tb ORDER BY id DESC; id | name | gender ----+----------+-------- 5 | potepan5 | male 4 | potepan4 | male 3 | potepan3 | female 2 | potepan2 | female 1 | potepan | male (5 rows)
ここでは、idが大きい順に並べ替えてみました。
「DESC」で大きい順、「ASC」で小さい順になります。
DISTINCT
「DISTINCT」を使うと、重複行を削除してデータを取得・表示できます。
DISTINCTの使い方を見るために、次のようなテーブルを用意しました。
mydb=# select * from sample_tb2; city | name -------+--------------- Tokyo | potepan Tokyo | potepan style Tokyo | potepan (3 rows)
「city」カラムが「Tokyo」で重複しています。この重複を削除すると次のようになります。
mydb=# SELECT DISTINCT city FROM sample_tb2; city ------- Tokyo (1 row)
1行だけ取得できました。
DISTINCTでカラムを複数指定することも可能です。
mydb=# SELECT DISTINCT city, name FROM sample_tb2; city | name -------+--------------- Tokyo | potepan style Tokyo | potepan (2 rows)
DISTINCTの詳しい使い方は、次の記事でも解説しています。
【関連記事】
▶︎SQL distinctのサンプルコード集 group byよりも700倍速い?
その他にも、次のような文法が使えます。
UNION
「UNION」は2つのSELECT文をUNIONでつなぎ、それぞれの検索結果を足し合わせた結果を返す演算子です。
SELECT カラム名1, カラム名2 FROM テーブル名1 UNION SELECT カラム名1, カラム名2 FROM テーブル名2
【関連記事】
▶︎【意外と知らない?】SQL unionの使い方をわかりやすく説明
EXCEPT
「EXCEPT」は、あるSELECT文の検索結果から別のSELECT文の検索結果に存在するデータを差し引く演算子です。
UNIONの逆といった感じになります。
SELECT カラム名1, カラム名2 FROM テーブル名1 EXCEPT SELECT カラム名1, カラム名2 FROM テーブル名2
【関連記事】
▶︎SQLのexceptは差分集合を作る 標準SQLなのにサポートされないDBもあり
INTERSECT
「INTERSECT」は、2つのSELECT文に共通するデータを取得する演算子です。
SELECT カラム名1, カラム名2 FROM テーブル名1 INTERSECT SELECT カラム名1, カラム名2 FROM テーブル名2
LIMIT
「LIMIT」は、取得するデータの上限を設定できる句です。
SELECT カラム名 FROM テーブル名 LIMIT オフセット データ数
【関連記事】
▶︎SQL limitを使ったページング、ランダム抽出、速度改善をおこなう
データを操作する文法
ここでは、データの一部を変更したり、追加したりといった操作ができる文法について解説します。
REPLACE
REPLACE関数は、文字列の一部を別の文字列に置換できる関数です。
UPDATE文の中で使うことで、文字列の更新が可能です。
サンプルで見ていきましょう。
mydb=# UPDATE sample_tb SET name = REPLACE(name, 'pan', 'pon'); UPDATE 5 mydb=# SELECT * FROM sample_tb; id | name | gender ----+----------+-------- 1 | potepon | male 2 | potepon2 | female 3 | potepon3 | female 4 | potepon4 | male 5 | potepon5 | male (5 rows)
「name」カラムの「pan」を「pon」に変更してみました。
一部のデータだけ置換したい場合は、WHERE句で条件を追加すればOKです。
mydb=# UPDATE sample_tb SET name = REPLACE(name, 'pan', 'pon') WHERE id = 1; UPDATE 1 mydb=# SELECT * FROM sample_tb; id | name | gender ----+----------+-------- 2 | potepan2 | female 3 | potepan3 | female 4 | potepan4 | male 5 | potepan5 | male 1 | potepon | male (5 rows)
LENGTH
LENGTH関数は、文字列の長さ指定して取得できる関数です。
サンプルで表示を確認してみます。
mydb=# SELECT name, LENGTH(name) AS name_len FROM sample_tb; name | name_len ----------+---------- potepan2 | 8 potepan3 | 8 potepan4 | 8 potepan5 | 8 potepon | 7 (5 rows)
このように、文字列の長さが取得できました。
その他にも、SQLで使える文法にはさまざまなものがあります。
当サイトでもその使い方を解説している記事がたくさんあるので、ぜひ参考に文法を理解してください!
【関連記事】
▶︎【SQL】複雑な条件にも対応できるCASE式について解説。
▶︎【SQL】文字列からスペース(空白)を削除するには?過去と現在、二通りの方法について解説
▶︎【SQL】文字列を扱う。SUBSTRING関数とRIGHT関数/LEFT関数について解説
・SQL文の終わりには必ず「;(セミコロン)」をつける
・予約語は大文字で書いても小文字で書いてもOK
・予約語はテーブル名やカラム名には使えない