SQL資料庫練習-1:學生成績資料庫
今天開始SQL練習,練習的題目是建立一個資料庫用於管理高中班級的學生資料以及記錄學生測驗的成績。
在開始之前,先簡單瞭解一下SQL是什麼。
SQL(Structured Query Language)
SQL(Structured Query Language)是一種用於管理關聯式資料庫(RDBMS)的標準語言。SQL允許用戶從資料庫中檢索和操作資料,包括添加、刪除、更新和查詢資料。SQL可用於訪問和處理大量數據,使得用戶能夠輕鬆地執行複雜的查詢和數據操作。
SQL的語法結構是基於關係代數和元組演算理論的,它包括各種命令,如SELECT、INSERT、UPDATE、DELETE、CREATE、ALTER和DROP等,以及用於組合多個查詢結果的操作符,如UNION、INTERSECT和EXCEPT。
由於SQL是一種標準語言,所以幾乎所有的關聯式資料庫系統都支持SQL。知道如何使用SQL是資料庫管理、數據分析等領域中非常重要的一項技能。
新增資料庫
首先我們開啟SQL的CMD介面,新增資料庫使用的指令是CREATE
,我們要建立一個名為「highschool」的資料庫。
CREATE DATABASE highschool;
接著進入這個資料庫,建立儲存學生資料和考試成績的資料表。
USE highschool;
新增資料表
新增學生資料表
建立儲存學生資料的資料表「students」,其中包含四個欄位:id、name、age 和 gender。id 欄位是主鍵,用於唯一標示每個學生。
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
gender VARCHAR(10)
);
新增考試成績資料表
接著再建立一個名為「grades」的資料表,用於儲存學生的成績,其中包含四個欄位:id、student_id、subject 和 score。id 欄位是主鍵,同時使用外鍵「FOREIGN」指令把student_id 欄位和前面「students」資料表中的學生id關連起來。
CREATE TABLE grades (
id INT PRIMARY KEY,
student_id INT,
subject VARCHAR(50),
score INT,
FOREIGN KEY (student_id) REFERENCES students(id)
);
新增資料到資料表中
資料表都建立完成後,我們可以試著新增學生的資料和成績,要使用「INSERT」指令操作。
新增學生資料
INSERT INTO students (id, name, age, gender) VALUES (1, 'Alice', 16, 'Female');
新增考試成績
INSERT INTO grades (id, student_id, subject, score) VALUES (1, 1, 'Math', 90);
新增成績時,我們在student_id
的欄位填入1號,這樣這筆數學成績就會連上1號同學Alice,表示這是Alice的考試成績。
一次新增多筆資料
「INSERT」指令可以接受一次新增多筆資料,我們只要將每一筆分別以括號包起來,並在括號間用逗點隔開,逐一填上要新增的值就可以了。
INSERT INTO students (id, name, age, gender) VALUES
(2, 'Bob', 16, 'Male'),
(3, 'Cathy', 17, 'Female'),
(4, 'David', 16, 'Male');
INSERT INTO grades (id, student_id, subject, score) VALUES
(2, 2, 'Math', 85),
(3, 3, 'Math', 92),
(4, 4, 'Math', 78),
(5, 1, 'Englisg', 87),
(6, 2, 'English', 80),
(7, 3, 'English', 88),
(8, 4, 'English', 85);
這樣就完成4名學生資料和數學及英文考試的資料更新了。
查詢資料庫內容
完成資料庫和學生資訊與成績資料表的建立後,我們可以用「SELECT」指令查詢剛剛建立的資料表,驗證一下我們填入的資料是否正確。
SELECT *
FROM students;
id | name | age | gender |
---|---|---|---|
1 | Alice | 16 | Female |
2 | Bob | 16 | Male |
3 | Cathy | 17 | Female |
4 | David | 16 | Male |
SELECT *
FROM grades;
id | student_id | subject | score |
---|---|---|---|
1 | 1 | Math | 90 |
2 | 2 | Math | 85 |
3 | 3 | Math | 92 |
4 | 4 | Math | 78 |
5 | 1 | Englisg | 87 |
6 | 2 | English | 80 |
7 | 3 | English | 88 |
8 | 4 | English | 85 |
設定查詢條件
另外我們也可以使用「WHERE」指令設定查詢的條件。
SELECT *
FROM students WHERE id = '2';
id | name | age | gender |
---|---|---|---|
2 | Bob | 16 | Male |
更進一步,我們可以使用「JOIN…ON」指令將兩個資料表聯集起來查詢,列出學生的座號、姓名和考試成績。
SELECT students.id, students.name, grades.subject, grades.score
FROM students
JOIN grades
ON students.id = grades.student_id;
id | name | subject | score |
---|---|---|---|
1 | Alice | Math | 90 |
1 | Alice | Englisg | 87 |
2 | Bob | Math | 85 |
2 | Bob | English | 80 |
3 | Cathy | Math | 92 |
3 | Cathy | English | 88 |
4 | David | Math | 78 |
4 | David | English | 85 |
再將這個語法與「WHERE」結合,我們就能找出特定學生在特定科目的成績啦!(這邊要注意的小細節在於WHERE指令的篩選條件要指明來自那個資料表,才能正確找出結果)
SELECT students.id, students.name, grades.subject, grades.score
FROM students
JOIN grades
ON students.id = grades.student_id
WHERE students.id = '2' AND grades.subject= 'Math';
id | name | subject | score |
---|---|---|---|
2 | Bob | Math | 85 |
結語
本篇文章完成了一個基本的資料庫建立和新增資料,接下來我們要幫這個資料庫增加一個前端介面,讓使用者能方便的查詢/新增/修正學生資料和考試成績,下篇文章見啦!