Problème d'achèvement des données SQL

1. Créer des données

DROP TABLE IF EXISTS sc;
CREATE TABLE sc (
	stu_no 	  VARCHAR(4) COMMENT '学号',
	class_no  VARCHAR(4) COMMENT '课程号',
	grade     INT(2)     COMMENT '成绩' 
);

DROP TABLE IF EXISTS class;
CREATE TABLE class (
	class_no   VARCHAR(4) COMMENT '课程号',
	class_name VARCHAR(8) COMMENT '课程名称'
);


INSERT INTO sc VALUES 
('0001','C001',89),
('0001','C002',85),
('0001','C003',99),
('0002','C001',78),
('0002','C002',83),
('0002','C003',86),
('0002','C004',77),
('0003','C001',88),
('0003','C003',68),
('0003','C004',55);

INSERT INTO class VALUES 
('C001','语文'),
('C002','数学'),
('C003','英语'),
('C004','科学');

Deuxièmement, affichez la structure des données

SELECT * FROM sc;
SELECT * FROM class;

Insérez la description de l'image ici
Insérez la description de l'image ici

3. Exigences (vérifiez le score de chaque étudiant pour chaque cours, si l'étudiant n'a pas de score pour ce cours dans la base de données, le score pour ce cours est fixé à 0)

  • 1. Utilisez la jointure croisée pour faire un produit cartésien sur deux tables.

    SELECT * 
    FROM sc
    CROSS JOIN class
    
    +--------+----------+-------+----------+------------+
    | stu_no | class_no | grade | class_no | class_name |
    +--------+----------+-------+----------+------------+
    | 0001   | C001     |    89 | C001     | 语文       |
    | 0001   | C001     |    89 | C002     | 数学       |
    | 0001   | C001     |    89 | C003     | 英语       |
    | 0001   | C001     |    89 | C004     | 科学       |
    | 0001   | C002     |    85 | C001     | 语文       |
    | 0001   | C002     |    85 | C002     | 数学       |
    | 0001   | C002     |    85 | C003     | 英语       |
    | 0001   | C002     |    85 | C004     | 科学       |
    | 0001   | C003     |    99 | C001     | 语文       |
    | 0001   | C003     |    99 | C002     | 数学       |
    | 0001   | C003     |    99 | C003     | 英语       |
    | 0001   | C003     |    99 | C004     | 科学       |
    | 0002   | C001     |    78 | C001     | 语文       |
    | 0002   | C001     |    78 | C002     | 数学       |
    | 0002   | C001     |    78 | C003     | 英语       |
    | 0002   | C001     |    78 | C004     | 科学       |
    | 0002   | C002     |    83 | C001     | 语文       |
    | 0002   | C002     |    83 | C002     | 数学       |
    | 0002   | C002     |    83 | C003     | 英语       |
    | 0002   | C002     |    83 | C004     | 科学       |
    | 0002   | C003     |    86 | C001     | 语文       |
    | 0002   | C003     |    86 | C002     | 数学       |
    | 0002   | C003     |    86 | C003     | 英语       |
    | 0002   | C003     |    86 | C004     | 科学       |
    | 0002   | C004     |    77 | C001     | 语文       |
    | 0002   | C004     |    77 | C002     | 数学       |
    | 0002   | C004     |    77 | C003     | 英语       |
    | 0002   | C004     |    77 | C004     | 科学       |
    | 0003   | C001     |    88 | C001     | 语文       |
    | 0003   | C001     |    88 | C002     | 数学       |
    | 0003   | C001     |    88 | C003     | 英语       |
    | 0003   | C001     |    88 | C004     | 科学       |
    | 0003   | C003     |    68 | C001     | 语文       |
    | 0003   | C003     |    68 | C002     | 数学       |
    | 0003   | C003     |    68 | C003     | 英语       |
    | 0003   | C003     |    68 | C004     | 科学       |
    | 0003   | C004     |    55 | C001     | 语文       |
    | 0003   | C004     |    55 | C002     | 数学       |
    | 0003   | C004     |    55 | C003     | 英语       |
    | 0003   | C004     |    55 | C004     | 科学       |
    +--------+----------+-------+----------+------------+
    
    
  • 2. Définissez les deux lignes de données avec un nom_classe différent dans le tableau ci-dessus et définissez la note sur 0.

    SELECT 
    	stu_no,
    	t1.class_no,
    	t2.class_no,
    	CASE 
    		WHEN t1.class_no=t2.class_no THEN grade 
    	ELSE 0 END AS grade,
    	class_name 
    FROM sc AS t1 
    CROSS JOIN class AS t2
    
    		+--------+----------+----------+-------+------------+
    | stu_no | class_no | class_no | grade | class_name |
    +--------+----------+----------+-------+------------+
    | 0001   | C001     | C001     |    89 | 语文       |
    | 0001   | C001     | C002     |     0 | 数学       |
    | 0001   | C001     | C003     |     0 | 英语       |
    | 0001   | C001     | C004     |     0 | 科学       |
    | 0001   | C002     | C001     |     0 | 语文       |
    | 0001   | C002     | C002     |    85 | 数学       |
    | 0001   | C002     | C003     |     0 | 英语       |
    | 0001   | C002     | C004     |     0 | 科学       |
    | 0001   | C003     | C001     |     0 | 语文       |
    | 0001   | C003     | C002     |     0 | 数学       |
    | 0001   | C003     | C003     |    99 | 英语       |
    | 0001   | C003     | C004     |     0 | 科学       |
    | 0002   | C001     | C001     |    78 | 语文       |
    | 0002   | C001     | C002     |     0 | 数学       |
    | 0002   | C001     | C003     |     0 | 英语       |
    | 0002   | C001     | C004     |     0 | 科学       |
    | 0002   | C002     | C001     |     0 | 语文       |
    | 0002   | C002     | C002     |    83 | 数学       |
    | 0002   | C002     | C003     |     0 | 英语       |
    | 0002   | C002     | C004     |     0 | 科学       |
    | 0002   | C003     | C001     |     0 | 语文       |
    | 0002   | C003     | C002     |     0 | 数学       |
    | 0002   | C003     | C003     |    86 | 英语       |
    | 0002   | C003     | C004     |     0 | 科学       |
    | 0002   | C004     | C001     |     0 | 语文       |
    | 0002   | C004     | C002     |     0 | 数学       |
    | 0002   | C004     | C003     |     0 | 英语       |
    | 0002   | C004     | C004     |    77 | 科学       |
    | 0003   | C001     | C001     |    88 | 语文       |
    | 0003   | C001     | C002     |     0 | 数学       |
    | 0003   | C001     | C003     |     0 | 英语       |
    | 0003   | C001     | C004     |     0 | 科学       |
    | 0003   | C003     | C001     |     0 | 语文       |
    | 0003   | C003     | C002     |     0 | 数学       |
    | 0003   | C003     | C003     |    68 | 英语       |
    | 0003   | C003     | C004     |     0 | 科学       |
    | 0003   | C004     | C001     |     0 | 语文       |
    | 0003   | C004     | C002     |     0 | 数学       |
    | 0003   | C004     | C003     |     0 | 英语       |
    | 0003   | C004     | C004     |    55 | 科学       |
    +--------+----------+----------+-------+------------+
    		
    
  • 3. En observant les données de l'étape précédente, il n'est pas difficile de constater que nous avons terminé les notes de cours manquantes de chaque étudiant avec 0, mais les données à l'origine normales ont répété certaines données de cours avec 0, nous devons donc supprimer les doublons et aller Le plus important est d'utiliser group by ou distinct, mais distinct n'est pas contrôlable, nous choisissons donc group by ici pour reproduire les données que nous voulons.

    SELECT 
    	stu_no,
    	t2.class_no,
    	SUM(CASE 
    		WHEN t1.class_no=t2.class_no THEN grade 
    		ELSE 0 
    		END
    		) AS grade,
    	class_name 
    FROM sc AS t1 
    CROSS JOIN class AS t2
    GROUP BY stu_no,t2.class_no,class_name;
    

Insérez la description de l'image ici

Je suppose que tu aimes

Origine blog.csdn.net/qq_42359956/article/details/109258786
conseillé
Classement