このチャプターの目次
結果から重複行を除く
重複何それ?、同じ名前ということみたいです。今のままだと、データが足りないので、生徒さんのデータを増やしましょう。
その後に、点数が38点の生徒さんが3人いるので38の数字を1行だけ表示したいときは、DISTINCTを使います。DISTINCTを使うと重複する値を取り除くことができます。
--Dクラスの生徒のデータを追加--
START TRANSACTION;
INSERT INTO
ClassD
VALUES
('0005', '池', 38),
('0006', '山内', 38),
('0007', '長谷部', 68),
('0008', '桜', 38);
COMMIT;
SELECT
*
FROM
ClassD;
--Dクラスの生徒の点数を表示--
SELECT class_score AS 数学 FROM ClassD;
--重複している点数の行を取り除く--
SELECT DISTINCT class_score AS 数学 FROM ClassD;
実行結果
mysql> SELECT DISTINCT class_score AS 数学 FROM ClassD;
+--------+
| 数学 |
+--------+
| 100 |
| 95 |
| 92 |
| 78 |
| 38 |
| 68 |
+--------+
6 rows in set (0.00 sec)
mysql> SELECT class_score AS 数学 FROM ClassD;
+--------+
| 数学 |
+--------+
| 100 |
| 95 |
| 92 |
| 78 |
| 38 |
| 38 |
| 68 |
| 38 |
+--------+
8 rows in set (0.00 sec)
条件に合う行だけ検索
特定の条件で、点数が100点の生徒のデータだけ検索したい場合があります。そんなときは、WHERE句を使います。WHEREの後に、生徒の名前や点数を比較演算子を使うと、条件にマッチした情報を検索することができます。
/*比較演算子を使ったWHEREによる検索*/
/*点数が100点の人*/
SELECT student_name, class_score FROM ClassD WHERE class_score = 100;
/*点数が100点ではない人*/
SELECT student_name, class_score FROM ClassD WHERE class_score <> 100;
/*点数が38点以上の人*/
SELECT student_name, class_score FROM ClassD WHERE class_score >= 38;
/*点数が38点を超える人*/
SELECT student_name, class_score FROM ClassD WHERE class_score > 38;
/*点数が68点以下の人*/
SELECT student_name, class_score FROM ClassD WHERE class_score <= 68;
/*点数が68点未満の人*/
SELECT student_name, class_score FROM ClassD WHERE class_score < 68;
検索結果
mysql> /*比較演算子を使ったWHEREによる検索*/
mysql> /*点数が100点の人*/
mysql> SELECT student_name, class_score FROM ClassD WHERE class_score = 100;
+--------------+-------------+
| student_name | class_score |
+--------------+-------------+
| 綾小路 | 100 |
+--------------+-------------+
1 row in set (0.00 sec)
mysql> /*点数が100点ではない人*/
mysql> SELECT student_name, class_score FROM ClassD WHERE class_score <> 100;
+--------------+-------------+
| student_name | class_score |
+--------------+-------------+
| 堀北 | 95 |
| 櫛田 | 92 |
| 軽井沢 | 78 |
| 池 | 38 |
| 山内 | 38 |
| 長谷部 | 68 |
| 桜 | 38 |
+--------------+-------------+
7 rows in set (0.01 sec)
mysql> /*点数が38点以上の人*/
mysql> SELECT student_name, class_score FROM ClassD WHERE class_score >= 38;
+--------------+-------------+
| student_name | class_score |
+--------------+-------------+
| 綾小路 | 100 |
| 堀北 | 95 |
| 櫛田 | 92 |
| 軽井沢 | 78 |
| 池 | 38 |
| 山内 | 38 |
| 長谷部 | 68 |
| 桜 | 38 |
+--------------+-------------+
8 rows in set (0.00 sec)
mysql> /*点数が38点を超える人*/
mysql> SELECT student_name, class_score FROM ClassD WHERE class_score > 38;
+--------------+-------------+
| student_name | class_score |
+--------------+-------------+
| 綾小路 | 100 |
| 堀北 | 95 |
| 櫛田 | 92 |
| 軽井沢 | 78 |
| 長谷部 | 68 |
+--------------+-------------+
5 rows in set (0.00 sec)
mysql> /*点数が68点以下の人*/
mysql> SELECT student_name, class_score FROM ClassD WHERE class_score <= 68;
+--------------+-------------+
| student_name | class_score |
+--------------+-------------+
| 池 | 38 |
| 山内 | 38 |
| 長谷部 | 68 |
| 桜 | 38 |
+--------------+-------------+
4 rows in set (0.00 sec)
mysql> /*点数が68点未満の人*/
mysql> SELECT student_name, class_score FROM ClassD WHERE class_score < 68;
+--------------+-------------+
| student_name | class_score |
+--------------+-------------+
| 池 | 38 |
| 山内 | 38 |
| 桜 | 38 |
+--------------+-------------+
3 rows in set (0.00 sec)
markdownの見た目が少し崩れてしまいますね😅
これは、仕方がないですね。こんな感じでWHEREを使えば条件にマッチしたデータを検索することができます。