1.1 排序面試
經過order by語句,能夠將查詢出的結果進行排序。放置在select語句的最後。
格式:
SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC;
ASC 升序 (默認)
DESC 降序sql
SELECT * FROM product ORDER BY price DESC;數據庫
SELECT * FROM product ORDER BY price DESC,category_id DESC;函數
SELECT DISTINCT price FROM product ORDER BY price DESC;學習
1.2 聚合spa
以前咱們作的查詢都是橫向查詢,它們都是根據條件一行一行的進行判斷,而使用聚合函數查詢是縱向查詢,他是對查詢後的結果的列進行計算,而後返回一個單一的值;另外聚合函數會忽略空值。
今天咱們學習以下五個聚合函數:
count:統計指定列不爲NULL的記錄行數;
sum:計算指定列的數值和,若是指定列類型不是數值類型,那麼計算結果爲0;
max:計算指定列的最大值,若是指定列是字符串類型,那麼使用字符串排序運算;
min:計算指定列的最小值,若是指定列是字符串類型,那麼使用字符串排序運算;
avg:計算指定列的平均值,若是指定列類型不是數值類型,那麼計算結果爲0;code
SELECT COUNT(*) FROM product;排序
SELECT COUNT(*) FROM product WHERE price > 200;索引
SELECT SUM(price) FROM product WHERE category_id = 'c001';開發
SELECT AVG(price) FROM product WHERE category_id = 'c002';
SELECT MAX(price),MIN(price) FROM product;
1.3 分組
分組查詢是指使用group by字句對查詢信息進行分組。
格式:
SELECT 字段1,字段2… FROM 表名GROUP BY分組字段 HAVING 分組條件;
分組操做中的having子語句,是用於在分組後對數據進行過濾的,做用相似於where條件。
having與where的區別:
having是在分組後對數據進行過濾.
where是在分組前對數據進行過濾
having後面可使用統計函數過濾數據
where後面不可使用統計函數。
SELECT category_id ,COUNT(*) FROM product GROUP BY category_id ;
SELECT category_id ,COUNT() FROM product GROUP BY category_id HAVING COUNT() > 1;
1.4 分頁查詢
分頁查詢在項目開發中常見,因爲數據量很大,顯示屏長度有限,所以對數據須要採起分頁顯示方式。例如數據共有30條,每頁顯示5條,第一頁顯示1-5條,第二頁顯示6-10條。
格式:
SELECT 字段1,字段2… FROM 代表 LIMIT M,N
M: 整數,表示從第幾條索引開始,計算方式 (當前頁-1)*每頁顯示條數
N: 整數,表示查詢多少條數據
SELECT 字段1,字段2… FROM 代表 LIMIT 0,5
SELECT 字段1,字段2… FROM 代表 LIMIT 5,5
第2章 SQL備份與恢復
2.1 SQL備份
選中數據庫,右鍵」備份/導出」,指定導出路徑,保存成.sql文件便可。
2.2 SQL恢復
數據庫列表區域右鍵「從SQL轉儲文件導入數據庫」,指定要執行的SQL文件,執行便可。
第3章 SQL約束
3.1 數據完整性
添加數據完整性=添加表約束
分類:實體完整性,域完整性,引用完整性
實體完整性: 對數據行的約束,好比:主鍵約束,惟一約束
域完整性: 對數據列的約束,好比:該列的數據類型, 默認約束,非空約束
引用完整性: 外鍵約束(多表的關係)
3.2 主鍵約束
PRIMARY KEY 約束惟一標識數據庫表中的每條記錄,每條記錄中被主鍵約束 約束的字段不能相同。
主鍵必須是惟一的值。
主鍵列不能是 NULL 值。
每一個表都應該有且只能有一個主鍵。
3.2.1 添加主鍵約束
方式一:建立表時,在字段描述處,聲明指定字段爲主鍵:
CREATE TABLE Persons
(
Id_P int PRIMARY KEY,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
方式二:建立表時,在constraint約束區域,聲明指定字段爲主鍵:
格式:[constraint 名稱] primary key (字段列表)
關鍵字constraint能夠省略,若是須要爲主鍵命名,constraint不能省略,主鍵名稱通常沒用。
字段列表須要使用小括號括住,若是有多字段須要使用逗號分隔。聲明兩個以上字段爲主鍵,咱們稱爲聯合主鍵。
CREATE TABLE Persons
(
FirstName varchar(255),
LastName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (FirstName,LastName)
)
或
CREATE TABLE Persons
(
FirstName varchar(255),
LastName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (FirstName)
)
方式三:建立表以後,經過修改表結構,聲明指定字段爲主鍵:
ALTER TABLE Persons ADD [CONSTRAINT 名稱] PRIMARY KEY (字段列表)
CREATE TABLE Persons
(
FirstName varchar(255),
LastName varchar(255),
Address varchar(255),
City varchar(255)
)
ALTER TABLE Persons ADD PRIMARY KEY (FirstName)
3.2.2 刪除主鍵約束
如需撤銷 PRIMARY KEY 約束,請使用下面的 SQL:
ALTER TABLE Persons DROP PRIMARY KEY
3.3 自動增加列
咱們一般但願在每次插入新記錄時,數據庫自動生成字段的值。
咱們能夠在表中使用 auto_increment(自動增加列)關鍵字,自動增加列類型必須是整形,自動增加列必須爲鍵(通常是主鍵)。
下列 SQL 語句把 "Persons" 表中的 "P_Id" 列定義爲 auto-increment 主鍵
CREATE TABLE Persons
(
P_Id int PRIMARY KEY AUTO_INCREMENT,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
向persons添加數據時,能夠不爲P_Id字段設置值,也能夠設置成null,數據庫將自動維護主鍵值:
INSERT INTO Persons (FirstName,LastName) VALUES ('Bill','Gates')
INSERT INTO Persons (P_Id,FirstName,LastName) VALUES (NULL,'Bill','Gates')
面試:delete和truncate的區別
Delete刪除表中的數據,但不重置auto-increment記錄數。
Truncate刪除表中的數據,auto-increment記錄數將重置。Truncate其實先刪除表而後再建立表。
擴展:默認地,AUTO_INCREMENT 的開始值是 1,若是但願修改起始值,請使用下列 SQL 語法:
ALTER TABLE Persons AUTO_INCREMENT=100
3.4 非空約束NOT NULL
NOT NULL 約束強制列不接受 NULL 值。
NOT NULL 約束強制字段始終包含值。這意味着,若是不向字段添加值,就沒法插入新記錄或者更新記錄。
方式一:建立表,下面的 SQL 語句強制 "Id_P" 列和 "LastName" 列不接受 NULL 值:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
方式二:修改表結構
添加非空約束 ALTER TABLE student MODIFY LastName varchar(255) NOT NULL
刪除非空約束 ALTER TABLE student MODIFY LastName varchar(255)
3.5 惟一約束
UNIQUE 約束惟一標識數據庫表中的每條記錄。
UNIQUE 和 PRIMARY KEY 約束均爲列或列集合提供了惟一性的保證。
PRIMARY KEY 擁有自動定義的 UNIQUE 約束。
請注意,每一個表能夠有多個 UNIQUE 約束,可是每一個表只能有一個 PRIMARY KEY 約束。
3.5.1 添加惟一約束
與主鍵添加方式相同,共有3種,
方式1:建立表時,在字段描述處,聲明惟一:
CREATE TABLE Persons
(
Id_P int UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
方式2:建立表時,在約束區域,聲明惟一:
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT 名稱UNIQUE (Id_P)
)
方式3:建立表後,修改表結構,聲明字段惟一:
ALTER TABLE Persons ADD [CONSTRAINT 名稱] UNIQUE (Id_P)
3.5.2 刪除惟一約束
如需撤銷 UNIQUE 約束,請使用下面的 SQL:
ALTER TABLE Persons DROP INDEX 約束名稱
若是添加惟一約束時,沒有設置約束名稱,默認是當前字段的字段名。
惟一約束與主鍵約束的區別:
主鍵:惟1、不能爲空、一個表只能有一個主鍵,非業務數據
惟一:惟1、能夠有空值,但只能有一個空值。一個表能夠有多個惟一約束。
3.6 默認約束
在添加數據中,若是該字段不指定值,採用默認值處理 方式一: 建立表,字段處聲明 CREATE TABLE Persons ( Id_P int, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255) DEFAULT '北京', City varchar(255) ) 方式二: 修改表結構 ALTER TABLE Persons MODIFY Address VARCHAR(255) DEFAULT '北京' 刪除默認約束ALTER TABLE Persons MODIFY Address VARCHAR(255)