SQL學習筆記3:連接、表操作

作者:xxw9485
時間:2018/1/25
來源:W3Cschool的SQL微課


表連接

表連接

在SQL中,“表連接”表示組合來自兩個或多個表的數據。表連接創建一個臨時表,顯示連接表中的數據。
要連接customers與 orders兩個表,請在 FROM 子句中將它們指定爲逗號分隔列表。
SQL 語句如下所示:

SELECT customers.ID, customers.Name, orders.Name, orders.Amount
FROM customers, orders
WHERE customers.ID=orders.Customer_ID
ORDER BY customers.ID;

注:WHERE 子句 “連接” 表,條件是來自 customers 表的 ID 應等於 orders 表的 customer_ID。

連接類型

自定義別名

通過使用 SQL,可以爲表名稱或列名稱指定別名。
基本上,創建別名是爲了讓列名稱的可讀性更強。
例:

SELECT ct.ID, ct.Name, ord.Name, ord.Amount
FROM customers AS ct, orders AS ord
WHERE ct.ID=ord.Customer_ID
ORDER BY ct.ID;

連接類型

以下是可以在 SQL 中使用的連接類型:
- 內連接(INNER JOIN)
- 左連接(LEFT JOIN)
- 右連接 (RIGHT JOIN)

內連接(INNER JOIN)

SQL INNER JOIN 語法:

SELECT column_name(s)
FROM table1 INNER JOIN table2 
ON table1.column_name=table2.column_name;

注:
- INNER JOIN 與 JOIN是相同的。
- ON 用於指定內部連接條件。

左連接(LEFT JOIN)

LEFT JOIN 關鍵字從左表(table1)返回所有的行,即使右表(table2)中沒有匹配。
如果右表中沒有匹配,則結果爲 NULL。
SQL LEFT JOIN 語法:

SELECT table1.column1, table2.column2...
FROM table1 LEFT OUTER JOIN table2
ON table1.column_name = table2.column_name;

注:在某些數據庫中,LEFT JOIN 等價於 LEFT OUTER JOIN。

右連接(RIGHT JOIN)

RIGHT JOIN 關鍵字從右表(table2)返回所有的行,即使左表(table1)中沒有匹配。
如果左表中沒有匹配,則結果爲 NULL。
SQL RIGHT JOIN語法:

SELECT table1.column1, table2.column2...
FROM table1 RIGHT OUTER JOIN table2
ON table1.column_name = table2.column_name;

注:在某些數據庫中,RIGHT JOIN 等價於 RIGHT OUTER JOIN。

UNION 操作符

設置操作符

  • UNION 將多個數據集合併到單個數據集中,並刪除任何現有的重複項。
  • UNION ALL 將多個數據集合併到一個數據集中,但不會刪除重複的行。

UNION 操作符

UNION 操作符用於合併兩個或多個 SELECT 語句的結果集。
SQL UNION 語法:

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

注:
- UNION 內部的每個 SELECT 語句必須擁有相同數量的列。
- 列也必須擁有相似的數據類型。
- 同時,每個 SELECT 語句中的列的順序必須相同。
- 如果你的列在所有查詢中不完全匹配,您可以使用NULL(或任何其他)值。
例:

SELECT FirstName, LastName, Company FROM table3
UNION
SELECT FirstName, LastName, NULL FROM table4;

UNION ALL 操作符

UNION ALL 從每個表中選擇所有行,並將它們合併成一個表中。
例:使用 UNION ALL 從 “table1” 和 “table2” 表中選取所有的記錄(也有重複的值):

SELECT ID, FirstName, LastName, City FROM table1
UNION ALL
SELECT ID, FirstName, LastName, City FROM table2;

INSERT 語句

插入數據

INSERT INTO 語句用於向數據庫中的表添加新的數據行。
SQL INSERT INTO 語法如下:

INSERT INTO table_name
VALUES (value1, value2, value3,...);
#或者
INSERT INTO table_name (column1, column2, column3, ...,columnN)  
VALUES (value1, value2, value3,...valueN);

注:
- 確保值的順序與表中的列的順序相同。
- 必須爲沒有默認值或不支持 NULL 的每個列提供一個值。

UPDATE 和 DELETE 語句

UPDATE 語句

UPDATE 語句用於更新表中的記錄。
SQL UPDATE 的語法:

UPDATE table_name
SET column1=value1, column2=value2, ...
WHERE condition;

SET 關鍵字之後的逗號,用於分隔列表中指定列及其新值。
例:我們要更新員工表中“John”(ID=1) 的工資爲6000,則 SQL 語句爲:

UPDATE Employees 
SET Salary=6000
WHERE ID=1;

注:WHERE 子句規定哪條記錄或者哪些記錄需要更新。如果你省略了 WHERE 子句,所有的記錄都將被更新!

更新多列

在更新數據時,我們也可以通過逗號分隔來同時更新多個列。
例:

UPDATE Employees 
SET Salary=5500, FirstName='Robert'
WHERE ID=1;

DELETE 語句

DELETE 語句用於刪除表中的記錄。
SQL DELETE 的語法:

DELETE FROM table_name
WHERE condition;

例:我們要從 “Employees” 表中刪除 ID 爲 “1” 的員工:

DELETE FROM Employees
WHERE ID=1;

注:WHERE 子句規定哪條記錄或者哪些記錄需要刪除。如果您省略了 WHERE 子句,所有的記錄都將被刪除!

CREATE TABLE

SQL 表

  • SQL 表由錶行和列組成。表列負責存儲許多不同類型的數據,包括數字,文本,日期和甚至文件。
  • CREATE TABLE 語句用於創建數據庫中的表。
  • 創建基本表包括命名錶,並定義其列和每列的數據類型。

CREATE TABLE

CREATE TABLE 語句的基本語法如下:

CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
columnN data_type(size)
);
  • column_name 參數規定表中列的名稱。
  • data_type 參數規定列的數據類型(例如 varchar、integer、decimal、date 等等)。
  • size 參數規定表中列的最大長度。

例:創建一個名爲 “users” 的表,包含四個列:UserID,FirstName,LastName 和 City,則:

CREATE TABLE users
(
   UserID int,
   FirstName varchar(100), 
   LastName varchar(100),
   City varchar(100)
);
  • UserID 列的數據類型是 int,包含整數。
  • FirstName、LastName和 City 列的數據類型是 varchar,包含字符,且這些字段的最大長度爲 255 個字符。

數據類型

最常見的數據類型:

Number 類型:
  • INT(size):-2147483648 到 2147483647 常規。0 到 4294967295 無符號*。在括號中規定最大位數。
  • FLOAT(size,d):帶有浮動小數點的小數字。在括號中規定最大位數。在 d 參數中規定小數點右側的最大位數。
  • DOUBLE(size,d):帶有浮動小數點的大數字。在括號中規定最大位數。在 d 參數中規定小數點右側的最大位數。
Date 類型:
  • DATE():日期。格式:YYYY-MM-DD。
  • DATETIME():*日期和時間的組合。格式:YYYY-MM-DD HH:MM:SS。
  • TIMESTAMP():*時間戳。TIMESTAMP 值使用 Unix 紀元(‘1970-01-01 00:00:00’ UTC) 至今的描述來存儲。格式:YYYY-MM-DD HH:MM:SS。
  • TIME():時間。格式:HH:MM:SS。
String 類型:
  • VARCHAR(size):保存可變長度的字符串(可包含字母、數字以及特殊字符)。在括號中指定字符串的最大長度。最多 255 個字符。
  • TEXT:存放最大長度爲 65,535 個字符的字符串。

注:SQL 開發人員必須在創建 SQL 表時決定表中的每個列將要存儲的數據的類型。

創建主鍵

每個表最好選擇一個唯一非空的字段作爲主鍵。
例:下面的 SQL 在 “users” 表創建時,使用 PRIMARY KEY 關鍵字將 “UserId” 列定義爲主鍵:

CREATE TABLE users
(
   UserID int,
   FirstName varchar(100),
   LastName varchar(100),
   City varchar(100),
   PRIMARY KEY(UserID)
); 

NOT NULL 和 AUTO_INCREMENT

SQL 約束

SQL 約束用於規定表中的數據規則。
在 SQL 中,我們有如下約束:
- NOT NULL :指示某列不能存儲 NULL 值。
- UNIQUE : 保證某列的每行必須有唯一的值。
- PRIMARY KEY :等價於 NOT NULL 和 UNIQUE 的結合。確保某列(或兩個列多個列的結合)有唯一標識,有助於更容易更快速地找到表中的一個特定的記錄。
- FOREIGN KEY : 保證一個表中的數據匹配另一個表中的值的參照完整性。
- CHECK : 保證列中的值符合指定的條件。
- DEFAULT : 規定沒有給列賦值時的默認值。

例:以下表示 “name” 列不允許 NULL 值。

name varchar(100) NOT NULL  

注:約束可以在創建表時規定(通過 CREATE TABLE 語句),或者在表創建之後規定(通過 ALTER TABLE 語句)。

自動遞增(AUTO INCREMENT)

AUTO INCREMENT 會在新記錄插入表中時生成一個唯一的數字。
我們通常希望在每次插入新記錄時,自動地創建主鍵字段的值。
例:我們把 “UserID” 列定義爲 auto-increment 主鍵字段:

UserID int NOT NULL AUTO_INCREMENT,
PRIMARY KEY (UserID)

使用約束創建表

例:強制 “id”,“username” 和 “password” 列不接受NULL值,還將 “id” 列定義爲 auto-increment 主鍵字段:

CREATE TABLE users (
id int NOT NULL AUTO_INCREMENT,
username varchar(40) NOT NULL, 
password varchar(10) NOT NULL,
PRIMARY KEY(id)
);

ALTER, DROP, RENAME TABLE

ALTER TABLE

  • ALTER TABLE 語句用於在已有的表中添加、刪除或修改列。
  • 你還可以使用 ALTER TABLE 命令在現有表上添加和刪除各種約束。

例:在 “people” 表中添加一個名爲 “Birthdy” 的列:

ALTER TABLE people 
ADD Birthdy date;

DROP TABLE

例:在 people 表中刪除名爲 “Birthday” 的列:

ALTER TABLE people 
DROP COLUMN Birthday;

若要刪除整個表,則用DROP TABLE 語句:

DROP TABLE people;

RENAME TABLE

例:將名爲 “FirstName” 的==列重命名==爲 “name”:

ALTER TABLE people
CHANGE FirstName name varchar(55);

例:將 “people” ==表重命名==爲 “users”:

RENAME TABLE people TO users;

SQL 視圖

視圖

  • 在 SQL 中,視圖是基於 SQL 語句的結果集的可視化的表。
  • 視圖包含行和列,就像一個真實的表。視圖中的字段就是來自一個或多個數據庫中的真實的表中的字段。
  • 你可以向視圖添加 SQL 函數、WHERE 以及 JOIN 語句,也可以呈現數據,就像這些數據來自於某個單一的表一樣。

SQL CREATE VIEW 語法:

CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;

創建視圖

例:創建一個視圖,顯示每個員工的 “FirstName” 和 “Salary”:

CREATE VIEW List AS
SELECT FirstName, Salary
FROM  Employees;

更新視圖

你可以使用下面的語法來更新視圖:

CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition;

例:向 “List” 視圖添加 “LastName” 列:

CREATE OR REPLACE VIEW List AS
SELECT FirstName, LastName, Salary
FROM  Employees;

注:通過 DROP VIEW 命令來刪除視圖:

DROP VIEW List;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章