SQLの絵本 - 3章 基本操作(1)

SQLの絵本―データベースがみるみるわかる9つの扉のメモ。

概要

  • 条件を使って特定のデータを取り出すにはWHERE句を使う
  • 各種の演算子が使える

WHERE句

条件に合うデータを取り出す

WHERE句に続いて条件式を指定するとその条件に合うデータのみが取り出される。

SELECT name FROM tbl_address WHERE zip_code = '170-0000';
条件に合うデータを並び替えて取り出す

WHERE句の後ろにORDER BY句を続けて指定することで条件式で抽出したデータを並び替えることができる。

SELECT * FROM tbl_score WHERE score_eigo >= 90 ORDER BY id DESC;

算術演算子

+ - * / % ( )

などが使える(DBMSによる)

SELECT name, (score_kokugo + score_eigo) AS sum FROM tbl_exam;

asで付けた別名をそのままORDER BY句に渡すことができるので、演算結果をソートに利用出来る。たのしい。

SELECT name, (score_kokugo + score_eigo) / 2 AS average FROM tbl_exam ORDER BY average DESC;

比較演算子

 = < <= > >= <> !=

などが使える(DBMSによる)
TRUE、FALSE、NULLのいずれかが帰る。WHERE句により取り出されるのは条件式がTRUEであった行。

論理演算子

AND OR NOTが使える。

文字列を操作する演算子

文字列の連結

SQL99では||を文字列連結演算子と定めている

SELECT namae || keisho FROM tbl_meibo;

ただし文字列連結演算子DBMSにより異なる

SQL Server +
Access &
MySQL CONCAT関数

MySQLでは||はOR、&&はANDと見なされるので、文字列連結は演算子ではなくCONCAT関数により行う。

SELECT CONCAT(myoji, ' ', namae) AS name FROM tbl_stdlist;
文字列の比較

特定の文字列を含むデータを取り出すにはLIKE演算子を用いる。

SELECT * FROM tbl_stdlist WHERE myoji LIKE '%澤%';

このとき、%は0文字以上の任意の文字列に、_は任意の1文字にヒットするワイルドカードとして作用する。

その他の演算子

BETWEEN ... AND

BETWEEN ... ANDを使うと値の範囲指定が出来る。
(score >= 10) AND (score <= 100)はBETWEEN 10 AND 100と同じである。

SELECT * FROM tbl_exam WHERE score_eigo BETWEEN 90 AND 100;
IS (NOT) NULL

「列名 IS NULL」は指定した列の値がNULLのデータに対しTRUEを返し、そうでなければFALSEを返す。
「列名 IS NOT NULL」は逆の作用をする。

SELECT * FROM tbl_bookprice WHERE price IS NOT NULL;
IN

「列名 IN (...) 」は...にカンマで区切って列挙した値のいずれかに一致する値を持つ行に対しTRUEを返す。
「列名 NOT IN (...)」は逆の作用をする。

SELECT * FROM tbl_exam WHERE id IN (2, 4);

取り出し件数の指定

RDBMSにより方法が大きく異なるがデータを取り出す件数に制限を設けることができる。
MySQLではLIMIT句を用いる

SELECT * FROM tbl_exam ORDER BY score_eigo LIMIT 0, 2;