1.連接操作
SELECT column_name(s)
FROM table1
INNER JOIN table2//也可 left join 、right join 、full join
ON table1.column_name=table2.column_name;
2.通配符[]
SELECT *
FROM student
where student.姓名 like '[^by]%';//[]匹配字符集合中的任何一個字符,[^]匹配不在括號中的任意單個字符
3.SELECT INTO
SELECT INTO 語句從一個表複製數據,然後把數據插入到另一個新表中。
SELECT Websites.name, access_log.count, access_log.date
INTO WebsitesBackup2016
FROM Websites
LEFT JOIN access_log
ON Websites.id=access_log.site_id;
4.INSERT INTO SELECT
INSERT INTO SELECT 語句從一個表複製數據,然後把數據插入到一個已存在的表中。
INSERT INTO Websites (name, country)
SELECT app_name, country FROM apps
WHERE id=1;
5.約束(UNIQUE爲例)
每個表可以有多個 UNIQUE 約束,但是每個表只能有一個 PRIMARY KEY 約束。PRIMARY KEY、check、外鍵的使用與此相似
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)
當表已被創建時,如需在 “P_Id” 列創建 UNIQUE 約束,請使用下面的 SQL:
ALTER TABLE Persons
ADD UNIQUE (P_Id)
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
撤銷 UNIQUE 約束
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
6.DEFAULT 約束
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
ALTER TABLE 時的 SQL DEFAULT 約束
//1
alter table xinxi
add default 'nihao' for course;
//2
ALTER TABLE Persons
ADD CONSTRAINT ab_c DEFAULT 'SANDNES' for City
撤銷 DEFAULT 約束
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT
7.CREATE INDEX 語句
允許使用重複的值
CREATE INDEX index_name
ON table_name (column_name,jk)
在表上創建一個唯一的索引。
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
8.撤銷索引、撤銷表以及撤銷數據庫
DROP INDEX table_name.index_name
DROP TABLE table_name
DROP DATABASE database_name
TRUNCATE TABLE table_name//僅僅需要刪除表內的數據,但並不刪除表本身
9.AUTO INCREMENT 語句
Auto-increment 會在新記錄插入表中時生成一個唯一的數字。
CREATE TABLE Persons
(
ID int IDENTITY(1,1) PRIMARY KEY,//identity 的開始值是 1,每條新記錄遞增 1
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
//要在 "Persons" 表中插入新記錄,我們不必爲 "ID" 列規定值(會自動添加一個唯一的值)
10.視圖
創建
CREATE VIEW [Products Above Average Price] AS
SELECT ProductName,UnitPrice
FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products)
查尋
SELECT * FROM [Products Above Average Price]
刪除
DROP VIEW view_name
11.sql函數
SQL Aggregate 函數
SQL Aggregate 函數計算從列中取得的值,返回一個單一的值。
有用的 Aggregate 函數:
AVG() - 返回平均值
COUNT() - 返回行數
SELECT COUNT(count) AS nums FROM access_log
WHERE site_id=3;
FIRST() - 返回第一個記錄的值
SELECT TOP 1 name FROM Websites
LAST() - 返回最後一個記錄的值
MAX() - 返回最大值
MIN() - 返回最小值
SUM() - 返回總和
12.SQL Scalar 函數
SQL Scalar 函數基於輸入值,返回一個單一的值。
有用的 Scalar 函數:
UCASE() - 將某個字段轉換爲大寫
SELECT UPPER(column_name) FROM table_name;
LCASE() - 將某個字段轉換爲小寫
SELECT LOWER(column_name) FROM table_name;
MID() - 從某個文本字段提取字符,MySql 中使用
SELECT SUBSTRING(name,0,2) FROM s;
SubString(字段,1,end) - 從某個文本字段提取字符
LEN() - 返回某個文本字段的長度
SELECT LEN(column_name) FROM table_name;
ROUND() - 對某個數值字段進行指定小數位數的四捨五入
SELECT ROUND(column_name,decimals) FROM table_name;
NOW() - 返回當前的系統日期和時間
FORMAT() - 格式化某個字段的顯示方式
SELECT FORMAT(column_name,format) FROM table_name;
13.group by
SELECT count(student.姓名) fROM student
group BY 課程;
14.having
在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與聚合函數一起使用。
HAVING 子句可以讓我們篩選分組後的各組數據。
SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log
INNER JOIN Websites
ON access_log.site_id=Websites.id)
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;
15. EXISTS 運算符
SELECT column_name(s)
FROM table_name
WHERE EXISTS
(SELECT column_name FROM table_name WHERE condition);