目次
1. Student テーブル内のすべてのレコードをクエリします
2. Student テーブルの 2 番目から 4 番目のレコードをクエリします
3. 学生テーブルから全学生の学生番号(id)、名前(name)、学部(学科)情報を照会します。
4. 学生テーブルからコンピュータ学科と英語学科の学生情報を問い合わせる
5. 学生テーブルから18~22歳の学生の情報を問い合わせる
8. Li Si のテスト科目 (c_name) とテストのスコア (成績) をクエリします。
12. コンピューターのスコアが 95 未満の生徒の情報を照会する
13. コンピュータ試験と英語試験の両方を受けた学生の情報を照会する
14. コンピュータ試験のスコアを高いものから低いものに並べ替える
15. 学生テーブルとスコアテーブルから学生番号をクエリし、クエリ結果をマージします。
16. Zhang または Wang という名前の学生の名前、学部、試験科目、および得点を問い合わせる
17. 湖南省の学生の名前、年齢、学部、試験科目、得点を問い合わせる
はじめに: 今日のデータベース アプリケーションでは、複数テーブルのクエリは非常に重要なスキルです。これにより、さまざまなデータ テーブルから関連データを取得でき、実際のアプリケーションでは非常に一般的です。このブログでは、デモンストレーションの例として学生テーブルと成績テーブルを取り上げ、マルチテーブル クエリを使用してシンプルな学生成績管理システムを作成する方法を段階的に説明します。
ステップ 1: データベースとデータテーブルを作成する
まず、データベースを作成する必要があります。これに「Student Performance Management System」という名前を付けます。次に、データベースに 2 つのデータ テーブル、つまり「student」テーブルと「score」テーブルを作成します。「学生」テーブルは学生の基本情報を格納するために使用され、「スコア」テーブルは学生のスコア情報を格納するために使用されます。
CREATE DATABASE 学生成绩管理系统;
USE 学生成绩管理系统;
CREATE TABLE student (
id INT(10) NOT NULL UNIQUE PRIMARY KEY,
name VARCHAR(20) NOT NULL,
sex VARCHAR(4),
birth YEAR,
department VARCHAR(20),
address VARCHAR(50)
);
CREATE TABLE score (
id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,
stu_id INT(10) NOT NULL,
c_name VARCHAR(20),
grade INT(10)
);
ステップ 2: データを挿入する
次に、後続のクエリとデモンストレーションのために、いくつかのサンプル データを「student」テーブルと「score」テーブルに挿入します。
INSERT INTO student VALUES(901, '张老大', '男', 1985, '计算机系', '北京市海淀区');
INSERT INTO student VALUES(902, '张老二', '男', 1986, '中文系', '北京市昌平区');
INSERT INTO student VALUES(903, '张三', '女', 1990, '中文系', '湖南省永州市');
INSERT INTO student VALUES(904, '李四', '男', 1990, '英语系', '辽宁省阜新市');
INSERT INTO student VALUES(905, '王五', '女', 1991, '英语系', '福建省厦门市');
INSERT INTO student VALUES(906, '王六', '男', 1988, '计算机系', '湖南省衡阳市');
INSERT INTO score VALUES(NULL, 901, '计算机', 98);
INSERT INTO score VALUES(NULL, 901, '英语', 80);
INSERT INTO score VALUES(NULL, 902, '计算机', 65);
INSERT INTO score VALUES(NULL, 902, '中文', 88);
INSERT INTO score VALUES(NULL, 903, '中文', 95);
INSERT INTO score VALUES(NULL, 904, '计算机', 70);
INSERT INTO score VALUES(NULL, 904, '英语', 92);
INSERT INTO score VALUES(NULL, 905, '英语', 94);
INSERT INTO score VALUES(NULL, 906, '计算机', 90);
INSERT INTO score VALUES(NULL, 906, '英语', 85);
ステップ 3: 複数テーブルのクエリの例
1. Student テーブル内のすべてのレコードをクエリします
SELECT * FROM student;
2. Student テーブルの 2 番目から 4 番目のレコードをクエリします
SELECT * FROM student LIMIT 1 OFFSET 1; -- This will fetch the second record
SELECT * FROM student LIMIT 1 OFFSET 2; -- This will fetch the third record
SELECT * FROM student LIMIT 1 OFFSET 3; -- This will fetch the fourth record
3. 学生テーブルから全学生の学生番号(id)、名前(name)、学部(学科)情報を照会します。
SELECT id, name, department FROM student;
4. 学生テーブルからコンピュータ学科と英語学科の学生情報を問い合わせる
SELECT * FROM student WHERE department IN ('计算机系', '英语系');
5. 学生テーブルから18~22歳の学生の情報を問い合わせる
SELECT * FROM student WHERE YEAR(CURRENT_DATE) - birth BETWEEN 18 AND 22;
6. 学生テーブルから各部門に何人いるかをクエリします。
SELECT department, COUNT(*) AS total_students FROM student GROUP BY department;
7. スコアテーブルから各科目の最高スコアをクエリします。
SELECT c_name, MAX(grade) AS max_grade FROM score GROUP BY c_name;
8. Li Si のテスト科目 (c_name) とテストのスコア (成績) をクエリします。
SELECT c_name, grade FROM score WHERE stu_id = (SELECT id FROM student WHERE name = '李四');
9. 接続を通じて全学生の情報と試験情報を照会する
SELECT s.id, s.name, s.sex, s.birth, s.department, s.address, sc.c_name, sc.grade
FROM student s
JOIN score sc ON s.id = sc.stu_id;
10. 各生徒の合計スコアを計算します。
SELECT s.id, s.name, SUM(sc.grade) AS total_score
FROM student s
JOIN score sc ON s.id = sc.stu_id
GROUP BY s.id, s.name;
11. 各試験科目の平均点を計算します。
SELECT c_name, AVG(grade) AS average_grade
FROM score
GROUP BY c_name;
12. コンピューターのスコアが 95 未満の生徒の情報を照会する
SELECT s.id, s.name, s.department, sc.c_name, sc.grade
FROM student s
JOIN score sc ON s.id = sc.stu_id
WHERE sc.c_name = '计算机' AND sc.grade < 95;
13. コンピュータ試験と英語試験の両方を受けた学生の情報を照会する
SELECT s.id, s.name, s.department, sc.c_name, sc.grade
FROM student s
JOIN score sc ON s.id = sc.stu_id
WHERE sc.c_name IN ('计算机', '英语')
GROUP BY s.id, s.name, s.department
HAVING COUNT(DISTINCT sc.c_name) = 2;
14. コンピュータ試験のスコアを高いものから低いものに並べ替える
SELECT s.id, s.name, s.department, sc.c_name, sc.grade
FROM student s
JOIN score sc ON s.id = sc.stu_id
WHERE sc.c_name = '计算机'
ORDER BY sc.grade DESC;
15. 学生テーブルとスコアテーブルから学生番号をクエリし、クエリ結果をマージします。
SELECT s.id AS stu_id, s.name AS stu_name, sc.c_name, sc.grade
FROM student s
LEFT JOIN score sc ON s.id = sc.stu_id;
16. Zhang または Wang という名前の学生の名前、学部、試験科目、および得点を問い合わせる
SELECT s.name, s.department, sc.c_name, sc.grade
FROM student s
JOIN score sc ON s.id = sc.stu_id
WHERE s.name LIKE '张%' OR s.name LIKE '王%';
17. 湖南省の学生の名前、年齢、学部、試験科目、得点を問い合わせる
SELECT s.name, YEAR(CURRENT_DATE) - s.birth AS age, s.department, sc.c_name, sc.grade
FROM student s
JOIN score sc ON s.id = sc.stu_id
WHERE s.address LIKE '%湖南%';
要約する
この記事では、学生の成績管理システムを例に、SQL ステートメントを使用してさまざまなデータ テーブルから関連データを取得する方法を、複数テーブルのクエリ例を表示しながら詳しく紹介します。マルチテーブル クエリのスキルを習得すると、実際のアプリケーションでデータベースをより効率的に操作し、データの検索と分析の効率を向上させることができます。このブログ投稿が、複数テーブル クエリを学習および適用する際に役立つことを願っています。フォローしていただければ幸いです。ご質問がございましたら、プライベートメッセージをお送りいただくこともできます。