MariaDBかMySQLでSELECTステートメント色々 - その1
この記事で使用しているソフトウェア環境は、OSとしてDebian GNU/Linux 10を使用し、その公式リポジトリからMariaDBというデータベースをインストールしてある。
$ cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 10 (buster)" ... $ mariadb --version mariadb Ver 15.1 Distrib 10.3.27-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
しかし、記事内容のほとんどはSQLに関するものであり、オペレーティング・システムの環境には依存しないはず。
データを選び出すSELECT構文
SELECT構文はその名のとおり、1つまたは2つ以上のデータベース・テーブルからデータを選択して取得するために用いることができる。FROM句ではその対象とするテーブル名を1つまたは2つ以上指定することができる。
SELECT構文のもっとも単純な形式は次のようになる。
SELECT レコード名1,レコード名2,... FROM テーブル名1,テーブル名2,...;
SELECT構文はSQLなので構文の終わりに文末を示す;(セミコロン)が必要。
多くの場合、テーブル全体を選択するためにレコード名の代わりに*(アスタリスク)が用いられている。
SELECT * FROM テーブル名;
レコードを絞り込んで選ぶにはWHERE句に条件式を指定する。
SELECT レコード名1,レコード名2,... FROM テーブル名1,テーブル名2,... WHERE 条件式;
等価演算子
もっとも単純な条件式は「レコード名 = 値」のようなものになる。*(アスタリスク)は全てを意味する。SELECT *は全ての列(レコード)。
SELECT * FROM テーブル名 WHERE レコード名 = 値;
=(イコール)は等価演算子と呼ばれている。値が数値型以外では'(一重引用符)で挟む必要がある。
MariaDB [mydatabase]> SELECT * FROM persons; +----+-----------+-----------+--------+------------+--------+--------+ | id | 姓 | 名 | 性別 | 生年月日 | 身長 | 体重 | +----+-----------+-----------+--------+------------+--------+--------+ | 1 | 足利 | 直美 | 女 | 1997-10-11 | 164.7 | 55 | | 2 | 大岩 | 舞 | 女 | 2002-03-23 | 158.4 | 43.5 | | 3 | 木下 | 誠一 | 男 | 1995-07-15 | 168.5 | 65.5 | | 4 | 伊藤 | エリナ | 女 | 1996-09-29 | 162 | 50.5 | | 5 | 野村 | 一樹 | 男 | 1999-05-20 | 172.5 | 68.7 | | 6 | 山本 | 花梨 | 女 | 2005-12-03 | 158.8 | 42.5 | | 7 | 小野田 | 真司 | 男 | 1988-11-12 | 165.5 | 64 | | 8 | 的山 | 美麗 | 女 | 1985-07-02 | 164.5 | 50.5 | | 9 | 桑村 | 涼 | 男 | 1993-03-18 | 165 | 60.3 | | 10 | 新見 | 康隆 | 男 | 1989-06-30 | 177.6 | 70.6 | | 11 | 山田 | 真理子 | 女 | 1991-01-03 | 155.8 | 40.8 | | 12 | 田辺 | 春 | 男 | 2000-03-15 | 182 | 78.5 | +----+-----------+-----------+--------+------------+--------+--------+ 12 rows in set (0.000 sec) MariaDB [mydatabase]> SELECT * FROM persons -> WHERE 性別 = '女'; +----+--------+-----------+--------+------------+--------+--------+ | id | 姓 | 名 | 性別 | 生年月日 | 身長 | 体重 | +----+--------+-----------+--------+------------+--------+--------+ | 1 | 足利 | 直美 | 女 | 1997-10-11 | 164.7 | 55 | | 2 | 大岩 | 舞 | 女 | 2002-03-23 | 158.4 | 43.5 | | 4 | 伊藤 | エリナ | 女 | 1996-09-29 | 162 | 50.5 | | 6 | 山本 | 花梨 | 女 | 2005-12-03 | 158.8 | 42.5 | | 8 | 的山 | 美麗 | 女 | 1985-07-02 | 164.5 | 50.5 | | 11 | 山田 | 真理子 | 女 | 1991-01-03 | 155.8 | 40.8 | +----+--------+-----------+--------+------------+--------+--------+ 6 rows in set (0.000 sec)
不等価演算子
WHERE句の条件式のところで=という演算子の代わりに!=もしくは<>という演算子を用いると、その値を除くという意味になる。これらは不等価演算子と呼ばれている。下の例では「性別が女に等しくない」という条件を表している。
MariaDB [mydatabase]> SELECT * FROM persons -> WHERE 性別 != '女'; +----+-----------+--------+--------+------------+--------+--------+ | id | 姓 | 名 | 性別 | 生年月日 | 身長 | 体重 | +----+-----------+--------+--------+------------+--------+--------+ | 3 | 木下 | 誠一 | 男 | 1995-07-15 | 168.5 | 65.5 | | 5 | 野村 | 一樹 | 男 | 1999-05-20 | 172.5 | 68.7 | | 7 | 小野田 | 真司 | 男 | 1988-11-12 | 165.5 | 64 | | 9 | 桑村 | 涼 | 男 | 1993-03-18 | 165 | 60.3 | | 10 | 新見 | 康隆 | 男 | 1989-06-30 | 177.6 | 70.6 | | 12 | 田辺 | 春 | 男 | 2000-03-15 | 182 | 78.5 | +----+-----------+--------+--------+------------+--------+--------+ 6 rows in set (0.000 sec) MariaDB [mydatabase]> SELECT * FROM persons -> WHERE 性別 <> '男'; +----+--------+-----------+--------+------------+--------+--------+ | id | 姓 | 名 | 性別 | 生年月日 | 身長 | 体重 | +----+--------+-----------+--------+------------+--------+--------+ | 1 | 足利 | 直美 | 女 | 1997-10-11 | 164.7 | 55 | | 2 | 大岩 | 舞 | 女 | 2002-03-23 | 158.4 | 43.5 | | 4 | 伊藤 | エリナ | 女 | 1996-09-29 | 162 | 50.5 | | 6 | 山本 | 花梨 | 女 | 2005-12-03 | 158.8 | 42.5 | | 8 | 的山 | 美麗 | 女 | 1985-07-02 | 164.5 | 50.5 | | 11 | 山田 | 真理子 | 女 | 1991-01-03 | 155.8 | 40.8 | +----+--------+-----------+--------+------------+--------+--------+ 6 rows in set (0.000 sec)
IN()函数とNOT IN()函数
等価演算子の=(イコール)の右辺を複数の値にしたい場合、等価演算子の代わりにIN()函数を用いることができる。下の例では、「名」として「舞」「エリナ」「真司」「春」を指定しているので、そのいずれかと一致する名を持つ列(レコード)が全て選び出されている。
MariaDB [mydatabase]> SELECT * FROM persons -> WHERE 名 IN('舞','エリナ','真司','春'); +----+-----------+-----------+--------+------------+--------+--------+ | id | 姓 | 名 | 性別 | 生年月日 | 身長 | 体重 | +----+-----------+-----------+--------+------------+--------+--------+ | 2 | 大岩 | 舞 | 女 | 2002-03-23 | 158.4 | 43.5 | | 4 | 伊藤 | エリナ | 女 | 1996-09-29 | 162 | 50.5 | | 7 | 小野田 | 真司 | 男 | 1988-11-12 | 165.5 | 64 | | 12 | 田辺 | 春 | 男 | 2000-03-15 | 182 | 78.5 | +----+-----------+-----------+--------+------------+--------+--------+ 4 rows in set (0.000 sec)
IN()函数の代わりにNOT IN()函数を用いるとその引数に指定した値を除くという条件になる。
MariaDB [mydatabase]> SELECT * FROM persons; +----+-----------+-----------+--------+------------+--------+--------+ | id | 姓 | 名 | 性別 | 生年月日 | 身長 | 体重 | +----+-----------+-----------+--------+------------+--------+--------+ | 1 | 足利 | 直美 | 女 | 1997-10-11 | 164.7 | 55 | | 2 | 大岩 | 舞 | 女 | 2002-03-23 | 158.4 | 43.5 | | 3 | 木下 | 誠一 | 男 | 1995-07-15 | 168.5 | 65.5 | | 4 | 伊藤 | エリナ | 女 | 1996-09-29 | 162 | 50.5 | | 5 | 野村 | 一樹 | 男 | 1999-05-20 | 172.5 | 68.7 | | 6 | 山本 | 花梨 | 女 | 2005-12-03 | 158.8 | 42.5 | | 7 | 小野田 | 真司 | 男 | 1988-11-12 | 165.5 | 64 | | 8 | 的山 | 美麗 | 女 | 1985-07-02 | 164.5 | 50.5 | | 9 | 桑村 | 涼 | 男 | 1993-03-18 | 165 | 60.3 | | 10 | 新見 | 康隆 | 男 | 1989-06-30 | 177.6 | 70.6 | | 11 | 山田 | 真理子 | 女 | 1991-01-03 | 155.8 | 40.8 | | 12 | 田辺 | 春 | 男 | 2000-03-15 | 182 | 78.5 | +----+-----------+-----------+--------+------------+--------+--------+ 12 rows in set (0.000 sec) MariaDB [mydatabase]> SELECT * FROM persons -> WHERE 姓 NOT IN('大岩','伊藤','山本','桑村','田辺'); +----+-----------+-----------+--------+------------+--------+--------+ | id | 姓 | 名 | 性別 | 生年月日 | 身長 | 体重 | +----+-----------+-----------+--------+------------+--------+--------+ | 1 | 足利 | 直美 | 女 | 1997-10-11 | 164.7 | 55 | | 3 | 木下 | 誠一 | 男 | 1995-07-15 | 168.5 | 65.5 | | 5 | 野村 | 一樹 | 男 | 1999-05-20 | 172.5 | 68.7 | | 7 | 小野田 | 真司 | 男 | 1988-11-12 | 165.5 | 64 | | 8 | 的山 | 美麗 | 女 | 1985-07-02 | 164.5 | 50.5 | | 10 | 新見 | 康隆 | 男 | 1989-06-30 | 177.6 | 70.6 | | 11 | 山田 | 真理子 | 女 | 1991-01-03 | 155.8 | 40.8 | +----+-----------+-----------+--------+------------+--------+--------+ 7 rows in set (0.000 sec)
左不等価演算子と右不等価演算子
次の例ではWHERE句の条件式に小なり(<)/大なり(>)を利用している。<は左不等価演算子と呼ばれ、>は右不等価演算子と呼ばれている。
MariaDB [mydatabase]> SELECT * FROM persons -> WHERE 身長 < 165; +----+--------+-----------+--------+------------+--------+--------+ | id | 姓 | 名 | 性別 | 生年月日 | 身長 | 体重 | +----+--------+-----------+--------+------------+--------+--------+ | 1 | 足利 | 直美 | 女 | 1997-10-11 | 164.7 | 55 | | 2 | 大岩 | 舞 | 女 | 2002-03-23 | 158.4 | 43.5 | | 4 | 伊藤 | エリナ | 女 | 1996-09-29 | 162 | 50.5 | | 6 | 山本 | 花梨 | 女 | 2005-12-03 | 158.8 | 42.5 | | 8 | 的山 | 美麗 | 女 | 1985-07-02 | 164.5 | 50.5 | | 11 | 山田 | 真理子 | 女 | 1991-01-03 | 155.8 | 40.8 | +----+--------+-----------+--------+------------+--------+--------+ 6 rows in set (0.000 sec) MariaDB [mydatabase]> SELECT * FROM persons -> WHERE 生年月日 > '1999-12-31'; +----+--------+--------+--------+------------+--------+--------+ | id | 姓 | 名 | 性別 | 生年月日 | 身長 | 体重 | +----+--------+--------+--------+------------+--------+--------+ | 2 | 大岩 | 舞 | 女 | 2002-03-23 | 158.4 | 43.5 | | 6 | 山本 | 花梨 | 女 | 2005-12-03 | 158.8 | 42.5 | | 12 | 田辺 | 春 | 男 | 2000-03-15 | 182 | 78.5 | +----+--------+--------+--------+------------+--------+--------+ 3 rows in set (0.000 sec)
以上演算子と以下演算子
<=(以下)または>=(以上)もある。前者は以下演算子、後者は以上演算子。
MariaDB [mydatabase]> SELECT * FROM persons -> WHERE 体重 >= 55; +----+-----------+--------+--------+------------+--------+--------+ | id | 姓 | 名 | 性別 | 生年月日 | 身長 | 体重 | +----+-----------+--------+--------+------------+--------+--------+ | 1 | 足利 | 直美 | 女 | 1997-10-11 | 164.7 | 55 | | 3 | 木下 | 誠一 | 男 | 1995-07-15 | 168.5 | 65.5 | | 5 | 野村 | 一樹 | 男 | 1999-05-20 | 172.5 | 68.7 | | 7 | 小野田 | 真司 | 男 | 1988-11-12 | 165.5 | 64 | | 9 | 桑村 | 涼 | 男 | 1993-03-18 | 165 | 60.3 | | 10 | 新見 | 康隆 | 男 | 1989-06-30 | 177.6 | 70.6 | | 12 | 田辺 | 春 | 男 | 2000-03-15 | 182 | 78.5 | +----+-----------+--------+--------+------------+--------+--------+ 7 rows in set (0.000 sec)
>= 55は55を含むので体重が55であるIDが1の名簿も選ばれている。
論理演算子
論理演算子としてANDまたは&&、ORまたは||、そしてXORがある。
次の例では、女であることと生年月日が2000-01-01以降であることを共に満たすことを条件にしている。
MariaDB [mydatabase]> SELECT * FROM persons -> WHERE 性別 = '女' AND 生年月日 >= '2000-01-01'; +----+--------+--------+--------+------------+--------+--------+ | id | 姓 | 名 | 性別 | 生年月日 | 身長 | 体重 | +----+--------+--------+--------+------------+--------+--------+ | 2 | 大岩 | 舞 | 女 | 2002-03-23 | 158.4 | 43.5 | | 6 | 山本 | 花梨 | 女 | 2005-12-03 | 158.8 | 42.5 | +----+--------+--------+--------+------------+--------+--------+ 2 rows in set (0.001 sec)
次の例では、身長が150より低いか、生年月日が1989-12-31以前か、いずれかを満たせばよいことを条件にしている。
MariaDB [mydatabase]> SELECT * FROM persons -> WHERE 身長 < 150 OR 生年月日 <= '1989-12-31'; +----+-----------+--------+--------+------------+--------+--------+ | id | 姓 | 名 | 性別 | 生年月日 | 身長 | 体重 | +----+-----------+--------+--------+------------+--------+--------+ | 7 | 小野田 | 真司 | 男 | 1988-11-12 | 165.5 | 64 | | 8 | 的山 | 美麗 | 女 | 1985-07-02 | 164.5 | 50.5 | | 10 | 新見 | 康隆 | 男 | 1989-06-30 | 177.6 | 70.6 | +----+-----------+--------+--------+------------+--------+--------+ 3 rows in set (0.000 sec)
次の例では、男でかつ生年月日が1990-01-01以前でないか、生年月日が1990-01-01以前でかつ男でないか、いずれかを満たすことを条件にしている。
MariaDB [mydatabase]> SELECT * FROM persons -> WHERE 性別 = '男' XOR 生年月日 < '1990-01-01'; +----+--------+--------+--------+------------+--------+--------+ | id | 姓 | 名 | 性別 | 生年月日 | 身長 | 体重 | +----+--------+--------+--------+------------+--------+--------+ | 3 | 木下 | 誠一 | 男 | 1995-07-15 | 168.5 | 65.5 | | 5 | 野村 | 一樹 | 男 | 1999-05-20 | 172.5 | 68.7 | | 8 | 的山 | 美麗 | 女 | 1985-07-02 | 164.5 | 50.5 | | 9 | 桑村 | 涼 | 男 | 1993-03-18 | 165 | 60.3 | | 12 | 田辺 | 春 | 男 | 2000-03-15 | 182 | 78.5 | +----+--------+--------+--------+------------+--------+--------+ 5 rows in set (0.000 sec)
XORとは「XOR部分 = OR部分 - AND部分」に相当する。
特定の列(カラム)だけを選び出す
SELECTの後を*(アスタリスク)でなく具体的な列名にすれば、特定の列名だけを選んで出力することができる。
MariaDB [mydatabase]> SELECT 姓,名,性別,生年月日 -> FROM persons -> WHERE 生年月日 < '2000-01-01' -> AND 性別 = '男'; +-----------+--------+--------+------------+ | 姓 | 名 | 性別 | 生年月日 | +-----------+--------+--------+------------+ | 木下 | 誠一 | 男 | 1995-07-15 | | 野村 | 一樹 | 男 | 1999-05-20 | | 小野田 | 真司 | 男 | 1988-11-12 | | 桑村 | 涼 | 男 | 1993-03-18 | | 新見 | 康隆 | 男 | 1989-06-30 | +-----------+--------+--------+------------+ 5 rows in set (0.000 sec)
BETWEEN...AND...演算子
ある区間を条件にしたいときにはBETWEEN演算子を用いる。次の例では、WHERE句に身長が160から170までの間を条件に指定している。
MariaDB [mydatabase]> SELECT 姓,名,身長 -> FROM persons -> WHERE 身長 -> BETWEEN 160 AND 170; +-----------+-----------+--------+ | 姓 | 名 | 身長 | +-----------+-----------+--------+ | 足利 | 直美 | 164.7 | | 木下 | 誠一 | 168.5 | | 伊藤 | エリナ | 162 | | 小野田 | 真司 | 165.5 | | 的山 | 美麗 | 164.5 | | 桑村 | 涼 | 165 | +-----------+-----------+--------+ 6 rows in set (0.000 sec)
並べ替え(ソート)
SELECT構文にORDER BY句と特定の列名を追加することにより、その列(カラム)を基準に行(レコード)を並べ替えて出力することができる。通常はその列の昇順に並べ替えが行われる。
次の例では、生年月日が古い順(昇順)に名簿を並べ替えている。
MariaDB [mydatabase]> SELECT 姓,名,生年月日 -> FROM persons -> ORDER BY 生年月日; +-----------+-----------+------------+ | 姓 | 名 | 生年月日 | +-----------+-----------+------------+ | 的山 | 美麗 | 1985-07-02 | | 小野田 | 真司 | 1988-11-12 | | 新見 | 康隆 | 1989-06-30 | | 山田 | 真理子 | 1991-01-03 | | 桑村 | 涼 | 1993-03-18 | | 木下 | 誠一 | 1995-07-15 | | 伊藤 | エリナ | 1996-09-29 | | 足利 | 直美 | 1997-10-11 | | 野村 | 一樹 | 1999-05-20 | | 田辺 | 春 | 2000-03-15 | | 大岩 | 舞 | 2002-03-23 | | 山本 | 花梨 | 2005-12-03 | +-----------+-----------+------------+ 12 rows in set (0.000 sec)
降順に並べ替えるにはORDER BY句の列名にDESCというキーワードを添える。
MariaDB [mydatabase]> SELECT 姓,名,生年月日 -> FROM persons -> ORDER BY 生年月日DESC; +-----------+-----------+------------+ | 姓 | 名 | 生年月日 | +-----------+-----------+------------+ | 山本 | 花梨 | 2005-12-03 | | 大岩 | 舞 | 2002-03-23 | | 田辺 | 春 | 2000-03-15 | | 野村 | 一樹 | 1999-05-20 | | 足利 | 直美 | 1997-10-11 | | 伊藤 | エリナ | 1996-09-29 | | 木下 | 誠一 | 1995-07-15 | | 桑村 | 涼 | 1993-03-18 | | 山田 | 真理子 | 1991-01-03 | | 新見 | 康隆 | 1989-06-30 | | 小野田 | 真司 | 1988-11-12 | | 的山 | 美麗 | 1985-07-02 | +-----------+-----------+------------+ 12 rows in set (0.000 sec)
出力行数を制限する
SELECT構文にLIMIT句を設けることにより、出力される行数(レコード数)を制限することができる。
次の例では、出力行数を20行までとしている。ORDER BY句には総人口の値を指定しているので、昇順、つまり総人口が少ない順に20位まで都道府県が出力される。ただし2019年の時点の値。
MariaDB [mydatabase]> SELECT 男女別,人口,全国都道府県, -> 時間軸(年),value -> FROM popu_jp -> WHERE 時間軸(年) = '2019年' -> AND 人口 = '総人口' -> AND 男女別 = '男女計' -> ORDER BY value -> LIMIT 20; +-----------+-----------+--------------------+--------------------+-------+ | 男女別 | 人口 | 全国都道府県 | 時間軸(年) | value | +-----------+-----------+--------------------+--------------------+-------+ | 男女計 | 総人口 | 鳥取県 | 2019年 | 556 | | 男女計 | 総人口 | 島根県 | 2019年 | 674 | | 男女計 | 総人口 | 高知県 | 2019年 | 698 | | 男女計 | 総人口 | 徳島県 | 2019年 | 728 | | 男女計 | 総人口 | 福井県 | 2019年 | 768 | | 男女計 | 総人口 | 山梨県 | 2019年 | 811 | | 男女計 | 総人口 | 佐賀県 | 2019年 | 815 | | 男女計 | 総人口 | 和歌山県 | 2019年 | 925 | | 男女計 | 総人口 | 香川県 | 2019年 | 956 | | 男女計 | 総人口 | 秋田県 | 2019年 | 966 | | 男女計 | 総人口 | 富山県 | 2019年 | 1044 | | 男女計 | 総人口 | 宮崎県 | 2019年 | 1073 | | 男女計 | 総人口 | 山形県 | 2019年 | 1078 | | 男女計 | 総人口 | 大分県 | 2019年 | 1135 | | 男女計 | 総人口 | 石川県 | 2019年 | 1138 | | 男女計 | 総人口 | 岩手県 | 2019年 | 1227 | | 男女計 | 総人口 | 青森県 | 2019年 | 1246 | | 男女計 | 総人口 | 長崎県 | 2019年 | 1327 | | 男女計 | 総人口 | 奈良県 | 2019年 | 1330 | | 男女計 | 総人口 | 愛媛県 | 2019年 | 1339 | +-----------+-----------+--------------------+--------------------+-------+ 20 rows in set (0.016 sec)
都道府県の総人口のデータセットは、政府統計のポータルサイトe-Statから借りている。出典は「人口推計 / 2019年10月1日現在」の「都道府県,男女別人口-総人口,日本人人口」。
次の例では、総人口の多い都道府県の順(降順)に10位から30位までを出力している。LIMIT句に10,30と指定することによってそれを実現できる。
MariaDB [mydatabase]> SELECT 男女別,人口,全国都道府県, -> 時間軸(年),value -> FROM popu_jp -> WHERE 時間軸(年) = '2019年' -> AND 人口 = '総人口' -> AND 男女別 = '男女計' -> ORDER BY value DESC -> LIMIT 10,30; +-----------+-----------+--------------------+--------------------+-------+ | 男女別 | 人口 | 全国都道府県 | 時間軸(年) | value | +-----------+-----------+--------------------+--------------------+-------+ | 男女計 | 総人口 | 静岡県 | 2019年 | 3644 | | 男女計 | 総人口 | 茨城県 | 2019年 | 2860 | | 男女計 | 総人口 | 広島県 | 2019年 | 2804 | | 男女計 | 総人口 | 京都府 | 2019年 | 2583 | | 男女計 | 総人口 | 宮城県 | 2019年 | 2306 | | 男女計 | 総人口 | 新潟県 | 2019年 | 2223 | | 男女計 | 総人口 | 長野県 | 2019年 | 2049 | | 男女計 | 総人口 | 岐阜県 | 2019年 | 1987 | | 男女計 | 総人口 | 群馬県 | 2019年 | 1942 | | 男女計 | 総人口 | 栃木県 | 2019年 | 1934 | | 男女計 | 総人口 | 岡山県 | 2019年 | 1890 | | 男女計 | 総人口 | 福島県 | 2019年 | 1846 | | 男女計 | 総人口 | 三重県 | 2019年 | 1781 | | 男女計 | 総人口 | 熊本県 | 2019年 | 1748 | | 男女計 | 総人口 | 鹿児島県 | 2019年 | 1602 | | 男女計 | 総人口 | 沖縄県 | 2019年 | 1453 | | 男女計 | 総人口 | 滋賀県 | 2019年 | 1414 | | 男女計 | 総人口 | 山口県 | 2019年 | 1358 | | 男女計 | 総人口 | 愛媛県 | 2019年 | 1339 | | 男女計 | 総人口 | 奈良県 | 2019年 | 1330 | | 男女計 | 総人口 | 長崎県 | 2019年 | 1327 | | 男女計 | 総人口 | 青森県 | 2019年 | 1246 | | 男女計 | 総人口 | 岩手県 | 2019年 | 1227 | | 男女計 | 総人口 | 石川県 | 2019年 | 1138 | | 男女計 | 総人口 | 大分県 | 2019年 | 1135 | | 男女計 | 総人口 | 山形県 | 2019年 | 1078 | | 男女計 | 総人口 | 宮崎県 | 2019年 | 1073 | | 男女計 | 総人口 | 富山県 | 2019年 | 1044 | | 男女計 | 総人口 | 秋田県 | 2019年 | 966 | | 男女計 | 総人口 | 香川県 | 2019年 | 956 | +-----------+-----------+--------------------+--------------------+-------+ 30 rows in set (0.001 sec)
今回はここまで。
まとめ
- SELECT構文の基本
- SELECT 列名 FROM テーブル名;
- SELECT 列名1,列名2,... FROM テーブル名1,テーブル名2,...;
- 例えば列名にワイルドカードとして*(アスタリスク)を用いると、全ての列が選択される。この用法はもっとも多く用いられている。
- SELECT * FROM テーブル名;
- 条件句を設ける
- SELECT 列名 FROM テーブル名 WHERE 列名 = 値;
- 値が数値型以外の場合は'(一重引用符)で挟む必要がある。
- SELECT 列名 FROM テーブル名 WHERE 列名 = '値';
- !(感嘆符)によって等価演算子=を否定することができる。
- SELECT 列名 FROM テーブル名 WHERE 列名 != '値';
- 「列名 = 複数の値」を指定したいとき
- 等価演算子の代わりにIN()函数を使う。
- SELECT 列名 FROM テーブル名 WHERE 列名 IN(値1,値2,...);
- NOT IN()函数を用いると「それらを除く」という条件を指定できる。
- SELECT 列名 FROM テーブル名 WHERE 列名 NOT IN(値1,値2,...);
- 条件式に比較演算子を使うことができる
- SELECT 列名 FROM テーブル名 WHERE 列名 > 値;
- SELECT 列名 FROM テーブル名 WHERE 列名 < 値;
- >=は以上を意味し、<=は以下を意味する。
- SELECT 列名 FROM テーブル名 WHERE 列名 >= 値;
- SELECT 列名 FROM テーブル名 WHERE 列名 <= 値;
- 条件式は論理演算子を使って複数指定可能
- SELECT 列名 FROM テーブル名 WHERE 条件1 AND 条件2 AND ...;
- SELECT 列名 FROM テーブル名 WHERE 条件1 OR 条件2 OR ...;
- SELECT 列名 FROM テーブル名 WHERE 条件1 AND 条件2 OR ...;
- XOR演算子は排他的なOR演算子。ORの集合からANDの集合を差し引いた残りがXORの集合になる。XOR = OR - AND。
- SELECT 列名 FROM テーブル名 WHERE 条件1 XOR 条件2;
- ある値から別の値までを条件式にする
- SELECT 列名 FROM テーブル名 WHERE BETWEEN 値1 AND 値2;
- 特定の列に基づく行(レコード)の並べ替え(昇順)
- SELECT 列名 FROM テーブル名 ORDER BY 列名;
- 特定の列に基づく行(レコード)の並べ替え(降順)
- SELECT 列名 FROM テーブル名 ORDER BY 列名 DESC;
- 出力行数を制限する
- SELECT 列名 FROM テーブル名 LIMIT 最大行数;
- カンマで区切って2つ数値を並べると「何行目から何行目まで」という意味になる。
- SELECT 列名 FROM テーブル名 LIMIT 行目1, 行目2;
コメント
コメントを投稿