SQL基礎語句入門

SQL語句入門起因學校開設數據庫相關的課程了,打算總結一篇關于基礎SQL語句的文章 。
SQL介紹SQL最早版本是由IBM開發的,一直發展到至今 。
SQL語言有如下幾個部分:

  • 數據定義語言DDL:提供定義關系模式、刪除關系以及修改關系模式的命令
  • 數據操縱語言DML:提供從數據庫中查詢信息以及在數據庫中插入元組、刪除元組以及修改元組的能力
  • 完整性:SQL DDL包括定義完整性的約束命令
  • 視圖定義:SQL DDL包括定義視圖的命令
  • 事務控制:SQL包括定義事務的開始點和結束點命令
  • 嵌入式SQL和動態SQL:定義如何嵌入如C++等這樣的編程語言
  • 授權:SQL DDL包括定義對關系和視圖的訪問權限的命令
SQL標準支持多種固有類型:
  • char(n) 具有用戶指定長度為n的字符串
  • varchar(n) 最大長度為n的可變長字符串
  • int 整數
  • smallint 小正數(依賴于機器的整數類型的子集)
  • numeric(p,d) 指定精度的定點數 。此數字有p位(加上一個符號位)小數點右邊有p位數中的d位數字
  • real 單精度
  • double 雙精度
  • float(n) 精度至少為n的浮點數
SQL語句入門首先說明一下 , SQL語句后面的分號是可選的 。
創建關系CREATE TABLE student( Sname VARCHAR(20), Sid INT, PRIMARY KEY(Sid));上述語句會創建一個student的關系(表),它包含學生姓名和學生id號碼 。其中,Sname學生姓名的最大長度不超過20個字符,Sid為整型,并且PRIMARY KEY(Sid)對關系進行了完整性約束,說明學號作為主鍵,也就是說同一個學生他的id號碼是唯一的 。
SQL還支持許多完整性約束 , 例如外碼與非空,下面僅對這兩種進行介紹:
外碼聲明關系中的任意元組在屬性上的取值必須對應于另外的某個關系的某元組在主碼屬性上的取值,其形式為foreign key(A,B,C)references X,其中A B C為屬性,X為指定的關系
非空完整性約束表示某個屬性的取值不能為空,其形式A INT not null表示類型為整型名為A的屬性不能為空
下面我們創建一個與課程相關的表,要求主鍵(主碼)為課程id且不為空 , 外碼為上面student關系的學生姓名屬性來做演示:
CREATE TABLE course( Cid INT NOT NULL, Sname VARCHAR(20), Cname VARCHAR(20), PRIMARY KEY(Cid), FOREIGN KEY(Sname) REFERENCES student);此時Sname的取值必須是student關系的Sname中的的一個取值 。
刪除關系刪除操作有兩種:
下方這條語句會刪除名為course的關系
DROP TABLE course;
DELETE FROM course;則會刪除course關系中的所有元組(數據),但該關系保留
說白一點就是前者連表帶數據一塊刪除,后者只剩一個空表
增加與刪除屬性有時候會向關系中添加一個新的屬性,則需要用到以下語句
ALTER TABLE student ADD Sage INT;該語句向student中添加了一個名為Sage,類型為整型的屬性 , 用于表示學生的年齡
在student中原有的元組在Sage的取值都將為空,即null(意思就是老數據原來沒有年齡,現在新建了年齡這一列,之前的老數據該列上的取值都為空)
刪除屬性就很簡單了,我們刪除student關系中的Sage屬性為例,語句如下
ALTER TABLE student DROP Sage;但是注意 , 很多數據庫都不支持這一點,執行該語句可能會報錯 。
查詢SQL查詢結構由三個子居構成select,fromwhere
查詢以在from子句列出的關系作為輸入,并在這些關系上進行whereselect子句中的指定運算,然后產生一個關系作為結果 。
為方便演示,先向student表中插入如下幾條數據
INSERT INTO student VALUES('CairBin',1);INSERT INTO student VALUES('Bob',2);INSERT INTO student VALUES('Alice',3);INSERT INTO student VALUES('Alice',4);INSERT INTO course VALUES(4,'Alex','chemistry');INSERT INTO course VALUES(1,'CairBin','math');INSERT INTO course VALUES(2,'CairBin','chemistry');INSERT INTO course VALUES(3,'Alice','chemistry');單關系查詢我們現在想要獲取student關系中的所有學生的姓名,也就是Sname屬性列下的所有數據,則可以使用如下語句
SELECT Sname FROM student;當然可以跟隨多個屬性 , 例如輸出學生姓名和id
SELECT Sname,Sid FROM student;另外,在關系模型的形式化數學定義中,關系是一個集合,因此重復的元組不會出現在集合中 。但是對于實際操作來講,去重是相當費時的,所以SQL允許在數據庫關系和數據庫表達式的結果中出現重復 。

推薦閱讀