Linux中國

SQL 入門

使用 SQL 構建資料庫比大多數人想像得要簡單。實際上,你甚至不需要成為一個有經驗的程序員就可以使用 SQL 創建資料庫。在本文中,我將解釋如何使用 MySQL 5.6 來創建簡單的關係型資料庫管理系統(RDMS)。在開始之前,我想順便感謝一下 SQL Fiddle,這是我用來運行腳本的工具。它提供了一個用於測試簡單腳本的有用的沙箱。

在本教程中,我將構建一個使用如下實體關係圖(ERD)中顯示的簡單架構的資料庫。資料庫列出了學生和正在學習的課程。為了保持簡單,我使用了兩個實體(即表),只有一種關係和依賴。這兩個實體稱為 dbo_studentsdbo_courses

資料庫的多樣性是一對多的,因為每門課程可以包含很多學生,但每個學生只能學習一門課程。

關於術語的快速說明:

  1. 一張表稱為一個實體。
  2. 一個欄位稱為一個屬性。
  3. 一條記錄稱為一個元組。
  4. 用於構建資料庫的腳本稱為架構。

構建架構

要構建資料庫,使用 CREATE TABLE <表名> 命令,然後定義每個欄位的名稱和數據類型。資料庫使用 VARCHAR(n) (字元串)和 INT(n) (整數),其中 n 表示可以存儲的值的長度。例如 INT(2) 可以是 01

這是用於創建兩個表的代碼:

CREATE TABLE dbo_students
(
  student_id INT(2) AUTO_INCREMENT NOT NULL,
  student_name VARCHAR(50),
  course_studied INT(2),
  PRIMARY KEY (student_id)
);

CREATE TABLE dbo_courses
(
  course_id INT(2) AUTO_INCREMENT NOT NULL,
  course_name VARCHAR(30),
  PRIMARY KEY (course_id)
);

NOT NULL 意味著欄位不能為空,AUTO_INCREMENT 意味著當一個新的元組被添加時,ID 號將自動生成,是對先前存儲的 ID 號加 1,以強化各實體之間的完整參照性。 PRIMARY KEY 是每個表的惟一標識符屬性。這意味著每個元組都有自己的不同的標識。

關係作為一種約束

就目前來看,這兩張表格是獨立存在的,沒有任何聯繫或關係。要連接它們,必須標識一個外鍵。在 dbo_students 中,外鍵是 course_studied,其來源在 dbo_courses 中,意味著該欄位被引用。SQL 中的特定命令為 CONSTRAINT,並且將使用另一個名為 ALTER TABLE 的命令添加這種關係,這樣即使在架構構建完畢後,也可以編輯表。

以下代碼將關係添加到資料庫構造腳本中:

ALTER TABLE dbo_students
ADD CONSTRAINT FK_course_studied
FOREIGN KEY (course_studied) REFERENCES dbo_courses(course_id);

使用 CONSTRAINT 命令實際上並不是必要的,但這是一個好習慣,因為它意味著約束可以被命名並且使維護更容易。現在資料庫已經完成了,是時候添加一些數據了。

將數據添加到資料庫

INSERT INTO <表名> 是用於直接選擇要添加哪些屬性(即欄位)數據的命令。首先聲明實體名稱,然後聲明屬性,下邊是添加到實體的數據,從而創建一個元組。如果指定了 NOT NULL,這表示該屬性不能留空。以下代碼將展示如何向表中添加記錄:

INSERT INTO dbo_courses(course_id,course_name)
VALUES(001,&apos;Software Engineering&apos;);
INSERT INTO dbo_courses(course_id,course_name)
VALUES(002,&apos;Computer Science&apos;);
INSERT INTO dbo_courses(course_id,course_name)
VALUES(003,&apos;Computing&apos;);

INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(001,&apos;student1&apos;,001);
INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(002,&apos;student2&apos;,002);
INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(003,&apos;student3&apos;,002);
INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(004,&apos;student4&apos;,003);

現在資料庫架構已經完成並添加了數據,現在是時候在資料庫上運行查詢了。

查詢

查詢遵循使用以下命令的集合結構:

SELECT <attributes>
FROM <entity>
WHERE <condition>

要顯示 dbo_courses 實體內的所有記錄並顯示課程代碼和課程名稱,請使用 * 。 這是一個通配符,它消除了鍵入所有屬性名稱的需要。(在生產資料庫中不建議使用它。)此處查詢的代碼是:

SELECT *
FROM dbo_courses

此處查詢的輸出顯示錶中的所有元組,因此可顯示所有可用課程:

| course_id |          course_name |
|-----------|----------------------|
|         1 | Software Engineering |
|         2 |     Computer Science |
|         3 |            Computing |

在後面的文章中,我將使用三種類型的連接之一來解釋更複雜的查詢:內連接、外連接和交叉連接。

這是完整的腳本:

CREATE TABLE dbo_students
(
  student_id INT(2) AUTO_INCREMENT NOT NULL,
  student_name VARCHAR(50),
  course_studied INT(2),
  PRIMARY KEY (student_id)
);

CREATE TABLE dbo_courses
(
  course_id INT(2) AUTO_INCREMENT NOT NULL,
  course_name VARCHAR(30),
  PRIMARY KEY (course_id)
);

ALTER TABLE dbo_students
ADD CONSTRAINT FK_course_studied
FOREIGN KEY (course_studied) REFERENCES dbo_courses(course_id);

INSERT INTO dbo_courses(course_id,course_name)
VALUES(001,&apos;Software Engineering&apos;);
INSERT INTO dbo_courses(course_id,course_name)
VALUES(002,&apos;Computer Science&apos;);
INSERT INTO dbo_courses(course_id,course_name)
VALUES(003,&apos;Computing&apos;);

INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(001,&apos;student1&apos;,001);
INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(002,&apos;student2&apos;,002);
INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(003,&apos;student3&apos;,002);
INSERT INTO dbo_students(student_id,student_name,course_studied)
VALUES(004,&apos;student4&apos;,003);

SELECT *
FROM dbo_courses

學習更多

SQL 並不困難;我認為它比編程簡單,並且該語言對於不同的資料庫系統是通用的。 請注意,實體關係圖中 dbo.<實體> (LCTT 譯註:文章中使用的是 dbo_<實體>)不是必需的實體命名約定;我之所以使用,僅僅是因為它是 Microsoft SQL Server 中的標準。

如果你想了解更多,在網路上這方面的最佳指南是 W3Schools.com 中對所有資料庫平台的 SQL 綜合指南。

請隨意使用我的資料庫。另外,如果你有任何建議或疑問,請在評論中回復。

via: https://opensource.com/article/18/2/getting-started-sql

作者:Aaron Cocker 譯者:MjSeven 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國