歡迎光臨
每天分享高質量文章

SQL 入門 | Linux 中國

使用 SQL 構建一個關係資料庫比你想的更容易。
— Aaron Cocker


致謝
編譯自 | https://opensource.com/article/18/2/getting-started-sql 
 作者 | Aaron Cocker
 譯者 | MjSeven ? ? ? 共計翻譯:24 篇 貢獻時間:72 天

使用 SQL 構建一個關係資料庫比你想的更容易。

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

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

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

關於術語的快速說明:

☉ 一張表稱為一個物體。
☉ 一個欄位稱為一個屬性。
☉ 一條記錄稱為一個元組。
☉ 用於構建資料庫的指令碼稱為架構。

構建架構

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

這是用於建立兩個表的程式碼:

  1. CREATE TABLE dbo_students

  2. (

  3.  student_id INT(2) AUTO_INCREMENT NOT NULL,

  4.  student_name VARCHAR(50),

  5.  course_studied INT(2),

  6.  PRIMARY KEY (student_id)

  7. );

  8. CREATE TABLE dbo_courses

  9. (

  10.  course_id INT(2) AUTO_INCREMENT NOT NULL,

  11.  course_name VARCHAR(30),

  12.  PRIMARY KEY (course_id)

  13. );

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

關係作為一種約束

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

以下程式碼將關係新增到資料庫構造指令碼中:

  1. ALTER TABLE dbo_students

  2. ADD CONSTRAINT FK_course_studied

  3. FOREIGN KEY (course_studied) REFERENCES dbo_courses(course_id);

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

將資料新增到資料庫

INSERT INTO  是用於直接選擇要新增哪些屬性(即欄位)資料的命令。首先宣告物體名稱,然後宣告屬性,下邊是新增到物體的資料,從而建立一個元組。如果指定了 NOT NULL,這表示該屬性不能留空。以下程式碼將展示如何向表中新增記錄:

  1. INSERT INTO dbo_courses(course_id,course_name)

  2. VALUES(001,'Software Engineering');

  3. INSERT INTO dbo_courses(course_id,course_name)

  4. VALUES(002,'Computer Science');

  5. INSERT INTO dbo_courses(course_id,course_name)

  6. VALUES(003,'Computing');

  7. INSERT INTO dbo_students(student_id,student_name,course_studied)

  8. VALUES(001,'student1',001);

  9. INSERT INTO dbo_students(student_id,student_name,course_studied)

  10. VALUES(002,'student2',002);

  11. INSERT INTO dbo_students(student_id,student_name,course_studied)

  12. VALUES(003,'student3',002);

  13. INSERT INTO dbo_students(student_id,student_name,course_studied)

  14. VALUES(004,'student4',003);

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

查詢

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

  1. SELECT <attributes>

  2. FROM <entity>

  3. WHERE <condition>

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

  1. SELECT *

  2. FROM dbo_courses

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

  1. | course_id |          course_name |

  2. |-----------|----------------------|

  3. |         1 | Software Engineering |

  4. |         2 |     Computer Science |

  5. |         3 |            Computing |

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

這是完整的指令碼:

  1. CREATE TABLE dbo_students

  2. (

  3.  student_id INT(2) AUTO_INCREMENT NOT NULL,

  4.  student_name VARCHAR(50),

  5.  course_studied INT(2),

  6.  PRIMARY KEY (student_id)

  7. );

  8. CREATE TABLE dbo_courses

  9. (

  10.  course_id INT(2) AUTO_INCREMENT NOT NULL,

  11.  course_name VARCHAR(30),

  12.  PRIMARY KEY (course_id)

  13. );

  14. ALTER TABLE dbo_students

  15. ADD CONSTRAINT FK_course_studied

  16. FOREIGN KEY (course_studied) REFERENCES dbo_courses(course_id);

  17. INSERT INTO dbo_courses(course_id,course_name)

  18. VALUES(001,'Software Engineering');

  19. INSERT INTO dbo_courses(course_id,course_name)

  20. VALUES(002,'Computer Science');

  21. INSERT INTO dbo_courses(course_id,course_name)

  22. VALUES(003,'Computing');

  23. INSERT INTO dbo_students(student_id,student_name,course_studied)

  24. VALUES(001,'student1',001);

  25. INSERT INTO dbo_students(student_id,student_name,course_studied)

  26. VALUES(002,'student2',002);

  27. INSERT INTO dbo_students(student_id,student_name,course_studied)

  28. VALUES(003,'student3',002);

  29. INSERT INTO dbo_students(student_id,student_name,course_studied)

  30. VALUES(004,'student4',003);

  31. SELECT *

  32. FROM dbo_courses

學習更多

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

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

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


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

作者:Aaron Cocker[4] 譯者:MjSeven 校對:wxy

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

贊(0)

分享創造快樂

© 2024 知識星球   網站地圖