ここでは SQL の学習のまとめとして、期待する結果のとおり出力するSQLを作成していきます。

サンプルデータの準備

MySQLの eldb データベース上に以下の2つのテーブルを準備します。

  • categories
  • courses

MariaDB [eldb]> select * from categories;
+----+-------------+
| id | title       |
+----+-------------+
|  1 | Programming |
|  2 | Design      |
|  3 | Marketing   |
+----+-------------+
3 rows in set (0.00 sec)

MariaDB [eldb]> select * from courses;
+----+------------------+---------------+-------------+
| id | title            | learning_time | category_id |
+----+------------------+---------------+-------------+
|  1 | PHP Basic        |            30 |           1 |
|  2 | PHP Database     |            50 |           1 |
|  3 | Python Basic     |            40 |           1 |
|  4 | Web Design       |            50 |           2 |
|  5 | History of Japan |           100 |        NULL |
+----+------------------+---------------+-------------+
5 rows in set (0.00 sec)

MariaDB [eldb]> 

これまでのデータと変わりありません。ここではデータを再登録しておいてください。

(準備)テーブル作成用SQL

drop table if exists categories;
create table categories(
  id integer primary key,
  title varchar(100)
);

insert into categories (id, title) values (1, 'Programming');
insert into categories (id, title) values (2, 'Design');
insert into categories (id, title) values (3, 'Marketing');

drop table if exists courses;
create table courses(
  id integer primary key,
  title varchar(100),
  learning_time integer,
  category_id integer
);

insert into courses (id, title, learning_time, category_id) values (1, 'PHP Basic', 30, 1);
insert into courses (id, title, learning_time, category_id) values (2, 'PHP Database', 50, 1);
insert into courses (id, title, learning_time, category_id) values (3, 'Python Basic', 40,  1);
insert into courses (id, title, learning_time, category_id) values (4, 'Web Design', 50, 2);
insert into courses (id, title, learning_time, category_id) values (5, 'Japan''s History', 100, null);

1 検索条件( where 句)

categories テーブルの中から id2 のレコードを表示します。

MariaDB [eldb]> select title from categories ???;
+--------+
| title  |
+--------+
| Design |
+--------+
1 row in set (0.00 sec)

MariaDB [eldb]> 


2 like 演算子によるパターンマッチング

categories テーブルの中から titleing で終わるレコードを表示します。

MariaDB [eldb]> select * from categories ???;
+----+-------------+
| id | title       |
+----+-------------+
|  1 | Programming |
|  3 | Marketing   |
+----+-------------+
2 rows in set (0.00 sec)

MariaDB [eldb]> 


3 並び替え( order by 句)

categories テーブルのレコードを id の降順で表示します。

MariaDB [eldb]> select * from categories ???;
+----+-------------+
| id | title       |
+----+-------------+
|  3 | Marketing   |
|  2 | Design      |
|  1 | Programming |
+----+-------------+
3 rows in set (0.00 sec)

MariaDB [eldb]> 


4 関数

categories テーブルの title を大文字で表示します。

MariaDB [eldb]> select ??? from categories; 
+-------------+
| u_title     |
+-------------+
| PROGRAMMING |
| DESIGN      |
| MARKETING   |
+-------------+
3 rows in set (0.00 sec)

MariaDB [eldb]> 


5 グループ関数

categories テーブルのレコード数を表示します。

MariaDB [eldb]> select ??? from categories; 
+----------------+
| category_count |
+----------------+
|              3 |
+----------------+
1 row in set (0.00 sec)

MariaDB [eldb]> 


6 サブクエリ(副問合せ)

categories テーブルの id が最大値( 3 )のレコードを表示します。

MariaDB [eldb]> select * from categories ???;
+----+-----------+
| id | title     |
+----+-----------+
|  3 | Marketing |
+----+-----------+
1 row in set (0.00 sec)

MariaDB [eldb]> 


7 テーブルの結合(内部結合)

categories テーブルと courses テーブルを内部結合で表示します。

MariaDB [eldb]> select ca.title category_title, co.title course_title from ???; 
+----------------+--------------+
| category_title | course_title |
+----------------+--------------+
| Programming    | PHP Basic    |
| Programming    | PHP Database |
| Programming    | Python Basic |
| Design         | Web Design   |
+----------------+--------------+
4 rows in set (0.00 sec)

MariaDB [eldb]> 


8 テーブルの結合(内部結合 - 検索条件の指定)

categories テーブルと courses テーブルを内部結合し、 categories テーブルの id1 のレコードを表示します。

MariaDB [eldb]> select ca.title category_title, co.title course_title from ???;
+----------------+--------------+
| category_title | course_title |
+----------------+--------------+
| Programming    | PHP Basic    |
| Programming    | PHP Database |
| Programming    | Python Basic |
+----------------+--------------+
3 rows in set (0.00 sec)

MariaDB [eldb]> 

9 テーブルの結合(左外部結合)

courses テーブルと categories テーブルを左外部結合で表示します。

MariaDB [eldb]> select ca.title category_title, co.title course_title from ???;
+----------------+-----------------+
| category_title | course_title    |
+----------------+-----------------+
| Programming    | PHP Basic       |
| Programming    | PHP Database    |
| Programming    | Python Basic    |
| Design         | Web Design      |
| NULL           | Japan's History |
+----------------+-----------------+
5 rows in set (0.00 sec)

MariaDB [eldb]> 

10 テーブルの結合(左外部結合 - グループ化 - 並び替え)

categories テーブルと courses テーブルを左外部結合し、 categories テーブルの id ごとのレコード件数を、件数の多いものから順に表示します。

MariaDB [eldb]> select ca.title, count(co.id) course_count from ???;
+-------------+--------------+
| title       | course_count |
+-------------+--------------+
| Programming |            3 |
| Design      |            1 |
| Marketing   |            0 |
+-------------+--------------+
3 rows in set (0.00 sec)

MariaDB [eldb]>