SQL基礎知識小結

SQL(Structured Query Language)結構化查詢語言,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關係數據庫系統。 數據庫

SQL 能夠作什麼 測試

  • SQL 面向數據庫執行查詢
  • SQL 可從數據庫取回數據
  • SQL 可在數據庫中插入新的記錄
  • SQL 可更新數據庫中的數據
  • SQL 可從數據庫刪除記錄
  • SQL 可建立新數據庫
  • SQL 可在數據庫中建立新表
  • SQL 可在數據庫中建立存儲過程
  • SQL 能夠設置表、存儲過程和視圖的權限

SQL語言包括三個部分:數據定義語言(DDL),數據操做語言(DML)及數據控制語言(DCL).net

  • 數據定義語言Data Definition Language(DDL),用來創建數據庫、數據對象和定義其列。例如:CREATE、DROP、ALTER等語句。
  • 數據操做語言Data Manipulation Language(DML),用來插入、修改、刪除、查詢,能夠修改數據庫中的數據。例如:INSERT(插入)、UPDATE(修改)、DELETE(刪除)語句、SELECT(查詢)
  • 數據控制語言Data Controlling Language(DCL),用來控制數據庫組件的存取許可、存取權限等。例如:GRANT、REVOKE、COMMIT、ROLLBACK等語句。

數據操做語言DML

SELECT 語句 (用於從表中選取數據)

語法:SELECT  列名  FROM 表名  (SQL 語句對大小寫並不敏感)
例子:設計

image

獲取 「LastName」 和 「FirstName」 列內容,SELECT LastName,FirstName FROM Persons對象

image

 

SELECT DISTINCT語句(關鍵詞 DISTINCT 用於返回惟一不一樣的值)

語法 SELECT DISTINCT 列名 FROM 表名
排序

image
需從 Company「 列中僅選取惟一不一樣的值,SELECT DISTINCT Company FROM Orders
結果:索引

image

 

SQL WHERE 子句(有條件地從表中選取數據)

語法:SELECT 列名 FROM 表名 WHERE 列 運算符 值
可在子句中使用的運算符: = <> > < >= <= BETWEEN LIKE    
例子ip

image

但願選取 居住在「Beijing」 的人,SELECT * FROM Persons WHERE City='Beijing' ci

image
 

AND & OR 運算符(在WHERE 子句中把兩個或多個條件結合起來)get

image

使用AND 來顯示全部姓爲 「Carter」 而且名爲「Thomas」 或者「William」的人:
  SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName ='William') AND LastName='Carter'

image

 

ORDER BY 子句(根據指定列對結果集進行排序。默認升序)

image

以逆字母順序顯示公司名稱,並以數字順序顯示順序號:SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
image

 

INSERT INTO語句(向表中插入新行)
語法: INSERT INTO 表名VALUES (值1, 值2,....)

image

 

例 1 插入新的行
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')

例 2 指定的列中插入數據
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')

 

Update 語句(用於修改表中的數據)

語法:UPDATE 表名 SET 列名 = 新值 WHERE 列名 = 某值

image
例1:更新某一行中的一個列
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'

例2:更新某一行中的若干列
修改地址(address),並添加城市(city)
UPDATE Person SET Address = ‘Zhongshan 23’, City = ‘Nanjing’  WHERE LastName = 'Wilson' 

 

DELETE 語句(用於刪除表中的行)

語法:DELETE FROM 表名WHERE 列名= 值

刪除某行
DELETE FROM Person WHERE LastName = 'Wilson'
刪除全部行
DELETE FROM table_name
DELETE * FROM table_name

 

TOP 子句(規定要返回的記錄數)不一樣的數據庫,語法不一樣

SQL Server語法:
SELECT TOP number|percent column_name(s) FROM tabel_name
例1 從表中選取頭2條記錄    SELECT TOP 2 * FROM Persons
例2 從表中選取50%的記錄   SELECT TOP 50 PERCENT * FROM Persons

MySQL語法:
SELECT column_name(s) FROM table_name LIMIT number
例  SELECT * FROM Persons LIMIT 5
Oracle語法:
SELECT column_name(s) FROM table_name WHERE ROWNUM <= number
例 SELECT * FROM Persons WHERE ROWNUM <=5

 

操做符

LIKE 操做符(在WHERE 子句中搜索列中的指定模式)

語法 SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
例  選取Persons表中居住在以N開始的城市裏的人
SELECT * FROM Persons WHERE City LIKE 'N%'

SQL 通配符(通配符必須與LIKE 運算符一塊兒使用)

  • % :替代一個或多個字符
  • _  :僅替代一個字符

SELECT * FROM Persons WHERE FirstName LIKE '_eorge'    

  • [charlist]:字符列中的任何單一字符
    「Persons」 表中選取居住在城市以「A」 或「L」 或「N」 開頭的人:   
       SELECT * FROM Persons WHERE City LIKE '[ALN]%'
  • [^charlist]     [!charlist]:不在字符列中的任何單一字符   

Persons」 表中選取居住在城市不以「A」 或「L」 或「N」 開頭的人:   
   SELECT * FROM Persons WHERE City LIKE ‘[!ALN]%'

IN 操做符(容許在WHERE 子句中規定多個值)

語法:SELECT column_name(s)
            FROM table_name
            WHERE column_name IN (value1,value2,...)

例子:選取姓氏爲Adams 和Carter 的人
SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')

 

BETWEEN 操做符(在WHERE 子句中使用,做用是選取介於兩個值之間的數據)

語法:SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)

  • 例:以字母順序顯示介於"Adams"(包括)和"Carter"之間的人
    SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'
  • 例:範圍以外的人,可以使用NOT 操做符
    SELECT * FROM Persons WHERE LastName NOT BETWEEN 'Adams' AND 'Carter'

注意:不一樣的數據庫對BETWEEN...AND 操做符的處理方式是有差別,主要體如今邊界。

 

Join 和Key(根據兩個或多個表中列之間的關係,從這些表中查詢數)

imageimage


誰訂購了產品,而且他們訂購了什麼產品?
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons, Orders WHERE Persons.Id_P = Orders.Id_P

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.Id_P = Orders.Id_P ORDER BY Persons.LastName

 

INNER JOIN (或者JOIN):內鏈接。
在表中至少存在一個匹配時,INNER JOIN 關鍵字返回行
例 前面兩張表格中中,列出全部人的定購
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P

注意:INNER JOIN 關鍵字在表中至少存在一個匹配時返回行。若是"Persons" 中的行在"Orders" 中沒有匹配,就不會列出這些

 

INNER JOIN (或者JOIN):內鏈接。


在表中至少存在一個匹配時,INNER JOIN 關鍵字返回行
例 前面兩張表格中中,列出全部人的定購
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P

注意:INNER JOIN 關鍵字在表中至少存在一個匹配時返回行。若是"Persons" 中的行在"Orders" 中沒有匹配,就不會列出這些

 

LEFT JOIN(left outer join):左外鏈接 。

從左表返回全部的行,即便右表中沒有匹配的行。
例 前面兩張表格中中,列出全部人的定購
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
注意:左表的記錄將會所有表示出來,而右表只會顯示符合搜索條件的記錄。右表記錄不足的地方均爲NULL。

image

 

RIGHT JOIN (RIGHT OUTER JOIN):右外鏈接。

會從右表(table_name2) 那裏返回全部的行,即便在左表(table_name1) 中沒有匹配的行 。
例 前面兩張表格中中,列出全部人的定購
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P
注意:右表的記錄將會所有表示出來,而左表只會顯示符合搜索條件的記錄。左表記錄不足的地方均爲NULL。

image

 

FULL JOIN(FULL OUTER JOIN) 。

只要其中某個表存在匹配,FULL JOIN 關鍵字就會返回。
例 前面兩張表格中中,列出全部人的定購
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
注意:FULL JOIN 關鍵字會從左表(Persons) 和右表(Orders) 那裏返回全部的行。若是"Persons" 表中的行在表"Orders" 中沒有匹配,或者"Orders" 表中的行在表"Persons" 中沒有匹配,這些行一樣會列出。

image

 

「Orders」 表已存在的狀況下爲「Id_P」 列建立FOREIGN KEY 約束
ALTER TABLE Orders ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)


撤銷 FOREIGN KEY 約束
以MySQL 爲例
ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders


 

操做符

 

UNION 操做符(用於合併兩個或多個SELECT 語句的結果

注:UNION 內部的SELECT 語句必須擁有相同數量的列。列也必須擁有類似的數據類型。同時,每條SELECT 語句中列的順序必須相同。
UNION 語法:SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2

UNION 操做符默認選取不一樣的值。若是容許重複值,請使用UNION ALL

CREATE DATABASE(建立數據庫)


語法:CREATE DATABASE database_name


CREATE TABLE (建立數據庫中的表)


語法:CRATE TABLE 表名
(
列名1 數據類型,
列名2 數據類型,
列名3 數據類型,
....
)

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


約束用於限制加入表的 數據的類型,


能夠在建立表時規定約束(經過 CREATE TABLE 語句),或者在表建立以後也能夠(經過 ALTER TABLE 語句)。
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT


NOT NULL(約束強制列不接受 NULL 值。即若是不向字段添加值,就沒法插入新記錄或者更新記錄)


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

UNIQUE (約束惟一標識數據庫表中的每條記錄)


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

PRIMARY KEY 約束惟一標識數據庫表中的每條記錄


主鍵必須包含惟一的值
主鍵列不能包含NULL 值
每一個表都應該有一個主鍵,而且每一個表只能有一個主鍵
以MySql爲例
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (Id_P)
)


爲多個列定義PRIMARY KEY 約束(聯合主鍵)


  CREATE TABLE Persons
  (
  Id_P int NOT NULL,
  LastName varchar(255) NOT NULL,
  FirstName varchar(255),
  Address varchar(255),
  City varchar(255),
  CONSTRAINT uc_PersonID PRIMARY KEY (Id_P,LastName)
  )

若是在表已存在的狀況下爲「Id_P」 列建立PRIMARY KEY 約束
ALTER TABLE Persons ADD PRIMARY KEY (Id_P)
注:若是使用ALTER TABLE 語句添加主鍵,必須把主鍵列聲明爲不包含NULL 值(在表首次建立時

撤銷 PRIMARY KEY 約束
MySql語法 ALTER TABLE Persons DROP PRIMARY KEY
SQL Server / Oracle / MS Access語法:
        ALTER TABLE Persons DROP CONSTRAINT pk_PersonID


FOREIGN KEY 外鍵約束


一個表中的FOREIGN KEY 指向另外一個表中的PRIMARY KEY,FOREIGN KEY 約束能防止非法數據插入外鍵列,由於它必須是它指向的那個表中的值之一

以MySql爲例:
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (O_Id),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)

「Orders」 表已存在的狀況下爲「Id_P」 列建立FOREIGN KEY 約束
ALTER TABLE Orders ADD FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)


撤銷 FOREIGN KEY 約束
以MySQL 爲例
ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders


CHECK 約束 (限制列中值的範)


下面的 SQL 在"Persons" 表建立時爲"Id_P" 列建立CHECK 約束。CHECK 約束規定"Id_P" 列必須只包含大於0 的整數。
以MySql爲例
CREATE TABLE Persons
    (
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (Id_P>0)
)

表已存在的狀況下爲"Id_P" 列建立CHECK 約束
ALTER TABLE Persons
ADD CHECK (Id_P>0)

撤銷 CHECK 約束
ALTER TABLE Persons
DROP CONSTRAINT chk_Person


DEFAULT 約束(用於向列中插入默認值)


CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
在表已存在的狀況下爲「City」 列建立DEFAULT 約束
以MySql爲例
ALTER TABLE Persons ALTER City SET DEFAULT 'SANDNES'
撤銷 DEFAULT 約束
以MySql爲例
ALTER TABLE Persons ALTER City DROP DEFAULT


CREATE INDEX(用於在表中建立索)


在表上建立一個簡單的索引。容許使用重複的
CREATE INDEX index_name ON table_name (column_name)

在表上建立一個惟一的索引。惟一的索引意味着兩個行不能擁有相同的索引值
CREATE UNIQUE INDEX index_name ON table_name (column_name)

例降序索引某個列中的值
CREATE INDEX PersonIndex ON Person (LastName DESC)

例索引不止一個列
CREATE INDEX PersonIndex ON Person (LastName, FirstName)


DROP(撤銷索引、表以及數據庫)


以MySQL爲例,撤銷索引語法
ALTER TABLE table_name DROP INDEX index_name

DROP TABLE用於刪除表(表的結構、屬性以及索引也會被刪除)
DROP TABLE 表名

DROP DATABASE用於刪除數據
DROP DATABASE 數據庫名

TRUNCATE TABLE 命令(僅僅刪除表格中的數據):
TRUNCATE TABLE 表名


ALTER TABLE(在已有的表中添加、修改或刪除列DROP)
需在表中添加列,可以使用下列語法
ALTER TABLE table_name ADD column_name datatype

刪除表中的列,可以使用下列語法
ALTER TABLE table_name DROP COLUMN column_name


NULL 值

表中某個列是可選的,那麼咱們能夠在不向該列添加值的狀況下插入新記錄或更新已有記錄。這意味着該字段將以NULL 值保存沒法比較NULL 和0;它們是不等價的沒法使用比較運算符來測試 NULL 值,好比=, <, 或者<>。必須使用 IS NULL 和IS NOT NULL 操做符例SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NULL SELECT LastName,FirstName,Address FROM Persons WHERE Address IS NOT NULL

相關文章
相關標籤/搜索