天天看點

基礎篇:資料庫 SQL 入門教程(一)

前言

SQL語言有40多年的曆史,從它被應用至今幾乎無處不在。我們消費的每一筆支付記錄,收集的每一條使用者資訊,發出去的每一條消息,都會使用資料庫或與其相關的産品來存儲,而操縱資料庫的語言正是 SQL !

基礎篇:資料庫 SQL 入門教程(一)

SQL 對于現在的網際網路公司生産研發等崗位幾乎是一個必備技能,如果不會 SQL 的話,可能什麼都做不了。你可以把 SQL 當做是一種工具,利用它可以幫助你完成你的工作,創造價值。

🌴 SQL 介紹

🌼 什麼是 SQL

SQL 是用于通路和處理資料庫的标準的計算機語言。

  • SQL 指結構化查詢語言
  • SQL 使我們有能力通路資料庫
  • SQL 是一種 ANSI 的标準計算機語言
基礎篇:資料庫 SQL 入門教程(一)

SQL 可與資料庫程式協同工作,比如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 以及其他資料庫系統。但是由于各種各樣的資料庫出現,導緻很多不同版本的 SQL 語言,為了與 ANSI 标準相相容,它們必須以相似的方式共同地來支援一些主要的關鍵詞(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等),這些就是我們要學習的SQL基礎。

🌀 SQL 的類型

可以把 SQL 分為兩個部分:資料操作語言 (DML) 和 資料定義語言 (DDL)。

  • 資料查詢語言(DQL: Data Query Language)
  • 資料操縱語言(DML:Data Manipulation Language)

🌵 學習 SQL 的作用

SQL 是一門 ANSI 的标準計算機語言,用來通路和操作資料庫系統。SQL 語句用于取回和更新資料庫中的資料。

  • SQL 面向資料庫執行查詢
  • SQL 可從資料庫取回資料
  • SQL 可在資料庫中插入新的記錄
  • SQL 可更新資料庫中的資料
  • SQL 可從資料庫删除記錄
  • SQL 可建立新資料庫
  • SQL 可在資料庫中建立新表
  • SQL 可在資料庫中建立存儲過程
  • SQL 可在資料庫中建立視圖
  • SQL 可以設定表、存儲過程和視圖的權限

🍄 資料庫是什麼

顧名思義,你可以了解為資料庫是用來存放資料的一個容器。

打個比方,每個人家裡都會有冰箱,冰箱是用來幹什麼的?冰箱是用來存放食物的地方。

基礎篇:資料庫 SQL 入門教程(一)

同樣的,資料庫是存放資料的地方。正是因為有了資料庫後,我們可以直接查找資料。例如你每天使用餘額寶檢視自己的賬戶收益,就是從資料庫讀取資料後給你的。

最常見的資料庫類型是關系型資料庫管理系統(RDBMS):

RDBMS 是 SQL 的基礎,同樣也是所有現代資料庫系統的基礎,比如 MS SQL Server, IBM DB2, Oracle, MySQL 以及 Microsoft Access等等。

基礎篇:資料庫 SQL 入門教程(一)

RDBMS 中的資料存儲在被稱為表(tables)的資料庫對象中。表 是相關的資料項的集合,它由列和行組成。

由于本文主要講解 SQL 基礎,是以對資料庫不做過多解釋,隻需要大概了解即可。咱們直接開始學習SQL!

🐥 SQL 基礎語言學習

在了解 SQL 基礎語句使用之前,我們先講一下 表 是什麼?

一個資料庫通常包含一個或多個表。每個表由一個名字辨別(例如“客戶”或者“訂單”)。表包含帶有資料的記錄(行)。

下面的例子是一個名為 “Persons” 的表:

基礎篇:資料庫 SQL 入門教程(一)

上面的表包含三條記錄(每一條對應一個人)和五個列(Id、姓、名、位址和城市)。

有表才能查詢,那麼如何建立這樣一個表?

🐤 CREATE TABLE – 建立表

CREATE TABLE 語句用于建立資料庫中的表。

文法:

CREATE TABLE 表名稱
(
列名稱1 資料類型,
列名稱2 資料類型,
列名稱3 資料類型,
....
);      

資料類型(data_type)規定了列可容納何種資料類型。下面的表格包含了SQL中最常用的資料類型:

基礎篇:資料庫 SQL 入門教程(一)

執行個體:

本例示範如何建立名為 “Persons” 的表。

該表包含 5 個列,列名分别是:“Id_P”、“LastName”、“FirstName”、“Address” 以及 “City”:

CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);      

Id_P 列的資料類型是 int,包含整數。其餘 4 列的資料類型是 varchar,最大長度為 255 個字元。

基礎篇:資料庫 SQL 入門教程(一)
基礎篇:資料庫 SQL 入門教程(一)

空的 “Persons” 表類似這樣:

基礎篇:資料庫 SQL 入門教程(一)

可使用 INSERT INTO 語句向空表寫入資料。

🐑 INSERT – 插入資料

INSERT INTO 語句用于向表格中插入新的行。

INSERT INTO 表名稱 VALUES (值1, 值2,....);      

我們也可以指定所要插入資料的列:

INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....);      

本例示範 “Persons” 表插入記錄的兩種方式:

1、插入新的行

INSERT INTO Persons VALUES (1, 'Gates', 'Bill', 'Xuanwumen 10', 'Beijing');      

2、在指定的列中插入資料

INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees');      
基礎篇:資料庫 SQL 入門教程(一)

插入成功後,資料如下:

基礎篇:資料庫 SQL 入門教程(一)

這個資料插入之後,是通過 SELECT 語句進行查詢出來的,别急馬上講!

🐼 SELECT – 查詢資料

SELECT 語句用于從表中選取資料,結果被存儲在一個結果表中(稱為結果集)。

SELECT * FROM 表名稱;      

我們也可以指定所要查詢資料的列:

SELECT 列名稱 FROM 表名稱;      

📢 注意: SQL 語句對大小寫不敏感,SELECT 等效于 select。

SQL SELECT * 執行個體:

SELECT * FROM Persons;      
基礎篇:資料庫 SQL 入門教程(一)

📢 注意: 星号(*)是選取所有列的快捷方式。

如需擷取名為 “LastName” 和 “FirstName” 的列的内容(從名為 “Persons” 的資料庫表),請使用類似這樣的 SELECT 語句:

SELECT LastName,FirstName FROM Persons;      
基礎篇:資料庫 SQL 入門教程(一)

🐫 DISTINCT – 去除重複值

如果一張表中有多行重複資料,如何去重顯示呢?可以了解下 DISTINCT 。

SELECT DISTINCT 列名稱 FROM 表名稱;      

如果要從 “LASTNAME” 列中選取所有的值,我們需要使用 SELECT 語句:

SELECT LASTNAME FROM Persons;      
基礎篇:資料庫 SQL 入門教程(一)

可以發現,在結果集中,Wilson 被列出了多次。

如需從 “LASTNAME” 列中僅選取唯一不同的值,我們需要使用 SELECT DISTINCT 語句:

SELECT DISTINCT LASTNAME FROM Persons;      
基礎篇:資料庫 SQL 入門教程(一)

通過上述查詢,結果集中隻顯示了一列 Wilson,顯然已經去除了重複列。

🐸 WHERE – 條件過濾

如果需要從表中選取指定的資料,可将 WHERE 子句添加到 SELECT 語句。

SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值;      

下面的運算符可在 WHERE 子句中使用:

基礎篇:資料庫 SQL 入門教程(一)

📢 注意: 在某些版本的 SQL 中,操作符 <> 可以寫為 !=。

如果隻希望選取居住在城市 “Beijing” 中的人,我們需要向 SELECT 語句添加 WHERE 子句:

SELECT * FROM Persons WHERE City='Beijing';      
基礎篇:資料庫 SQL 入門教程(一)

📢 注意: SQL 使用單引号來環繞文本值(大部分資料庫系統也接受雙引号)。如果是數值,請不要使用引号。

🐹 AND & OR – 運算符

AND 和 OR 可在 WHERE 子語句中把兩個或多個條件結合起來。

  • 如果第一個條件和第二個條件都成立,則 AND 運算符顯示一條記錄。
  • 如果第一個條件和第二個條件中隻要有一個成立,則 OR 運算符顯示一條記錄。

AND 運算符執行個體:

SELECT * FROM 表名稱 WHERE 列 運算符 值 AND 列 運算符 值;      

OR 運算符執行個體:

SELECT * FROM 表名稱 WHERE 列 運算符 值 OR 列 運算符 值;      

由于 Persons 表資料太少,是以增加幾條記錄:

INSERT INTO Persons VALUES (2, 'Adams', 'John', 'Oxford Street', 'London');
INSERT INTO Persons VALUES (3, 'Bush', 'George', 'Fifth Avenue', 'New York');
INSERT INTO Persons VALUES (4, 'Carter', 'Thomas', 'Changan Street', 'Beijing');
INSERT INTO Persons VALUES (5, 'Carter', 'William', 'Xuanwumen 10', 'Beijing');
SELECT * FROM Persons;      
基礎篇:資料庫 SQL 入門教程(一)

使用 AND 來顯示所有姓為 “Carter” 并且名為 “Thomas” 的人:

SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter';      
基礎篇:資料庫 SQL 入門教程(一)

使用 OR 來顯示所有姓為 “Carter” 或者名為 “Thomas” 的人:

SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter';      
基礎篇:資料庫 SQL 入門教程(一)

結合 AND 和 OR 運算符:

我們也可以把 AND 和 OR 結合起來(使用圓括号來組成複雜的表達式):

SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William') AND LastName='Carter';      

🐰 ORDER BY – 排序

ORDER BY 語句用于根據指定的列對結果集進行排序,預設按照升序對記錄進行排序,如果您希望按照降序對記錄進行排序,可以使用 DESC 關鍵字。

SELECT * FROM 表名稱 ORDER BY 列1,列2 DESC;      

預設排序為 ASC 升序,DESC 代表降序。

SELECT * FROM Persons ORDER BY LASTNAME;      

以字母順序顯示 LASTNAME 名稱:

基礎篇:資料庫 SQL 入門教程(一)

空值(NULL)預設排序在有值行之後。

以數字順序顯示ID_P,并以字母順序顯示 LASTNAME 名稱:

SELECT * FROM Persons ORDER BY ID_P,LASTNAME;      
基礎篇:資料庫 SQL 入門教程(一)

以數字降序顯示ID_P:

SELECT * FROM Persons ORDER BY ID_P DESC;      

📢 注意: 在第一列中有相同的值時,第二列是以升序排列的。如果第一列中有些值為 null 時,情況也是這樣的。

🐱 UPDATE – 更新資料

Update 語句用于修改表中的資料。

UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值;      

更新某一行中的一個列:

UPDATE Persons SET FirstName = 'Fred' WHERE LastName = 'Wilson';      

目前 Persons 表有很多字段為 null 的資料,可以通過 UPDATE 為 LASTNAME 是 “Wilson” 的人添加FIRSTNAME:

基礎篇:資料庫 SQL 入門教程(一)

更新某一行中的若幹列:

UPDATE Persons SET ID_P = 6,city= 'London' WHERE LastName = 'Wilson';      

🐨 DELETE – 删除資料

DELETE 語句用于删除表中的行。

DELETE FROM 表名稱 WHERE 列名稱 = 值;      

删除某行:

删除 Persons 表中 LastName 為 “Fred Wilson” 的行:

DELETE FROM Persons WHERE LastName = 'Wilson';      
基礎篇:資料庫 SQL 入門教程(一)

删除所有行:

可以在不删除表的情況下删除所有的行。這意味着表的結構、屬性和索引都是完整的:

DELETE FROM table_name;      
基礎篇:資料庫 SQL 入門教程(一)

🐵 TRUNCATE TABLE – 清除表資料

如果我們僅僅需要除去表内的資料,但并不删除表本身,那麼我們該如何做呢?

可以使用 TRUNCATE TABLE 指令(僅僅删除表格中的資料):

TRUNCATE TABLE 表名稱;      

本例示範如何删除名為 “Persons” 的表。

TRUNCATE TABLE persons;      

🐯 DROP TABLE – 删除表

DROP TABLE 語句用于删除表(表的結構、屬性以及索引也會被删除)。

DROP TABLE 表名稱;      
drop table persons;      
基礎篇:資料庫 SQL 入門教程(一)

從上圖可以看出,第一次執行删除時,成功删除了表 persons,第二次執行删除時,報錯找不到表 persons,說明表已經被删除了。