MySQL中的查詢約束語句和主鍵、聯合主鍵、外來鍵
阿新 • • 發佈:2019-02-12
查詢語句
過濾空值
過濾空值 如果該值是空的 就當做0來處理
SELECT IFNULL(欄位名,0) FROM 表名
聚合函式
排序
利用ORDER BY 關鍵字 來 約束表按照什麼 條件來排序
ASC代表升序 也是預設的
DESC代表降序
SELECT 欄位名 FROM 表名 ORDER BY 欄位名 ASC
聚合函式:
SUM AVG MAX MIN COUNT
SUM AVG MAX MIN 都可以自動過濾掉NULL,且不當做0處理
查詢表的記錄數 關鍵字COUNT
查詢的是填寫的欄位名有幾條記錄,一行代表一條記錄
SELECT COUNT(欄位名) FROM 表名;
查詢總和 關鍵字 SUM
查詢的是 某個欄位的所有資料總和 這個欄位得是全數字
SELECT SUM(欄位名) FROM 表名;
查詢最大值 關鍵字MAX
SELECT MAX (欄位名) FROM 表名;
查詢最小值 關鍵字MIN
SELECT MIN(欄位名) FROM 表名;
查詢平均值 關鍵字 AVG
SELECT AVG(欄位名) FROM 表名;
分組查詢
分組查詢 GROUP BY 關鍵字
SELECT 欄位名 FROM 表名 GROUP BY 欄位名
注意:分組查詢時,查詢的欄位必須是分組的欄位
因為記錄數要對應,
例如查詢的欄位名可能有3條記錄,而分組的欄位只有2條記錄,
不能構成一個表格,就會報錯
按條件查詢
按條件查詢 HAVING 關鍵字
SELECT 欄位名 FROM 表名 HAVING 篩選條件
例如:查詢工資總和大於9000的部門編號以及工資和
SELECT deptno,SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal) > 9000 ;
HAVING條件要放在分組之後且可以使用函式
而WHERE是分組之前使用的篩選條件,且不能使用函式
分頁查詢
分頁查詢 LIMIT 關鍵字
SELECT 欄位名 FROM 表名 LIMIT 起始頁,一共顯示幾條記錄
這裡的起始頁,如果是從第一頁開始查詢,那麼起始頁就是0
模糊查詢
模糊查詢 LIKE % 或 _ 關鍵字
%代表0-n個字元
_代表一個字元
// 查詢emp表格中 開頭是w後面是任意幾個字元的記錄
//w 後有0-n個字元 的記錄 都可以被查詢到
SELECT * FROM emp WHERE ename LIKE 'w%';
// 查詢表格中 只要帶有w字元的記錄
// w前有0-n個字元 w後有0-n個字元 都可以被查詢到
SELECT * FROM emp WHERE ename LIKE '%w%';
// 查詢表格中 w後只帶有1個字元的記錄
// 0個和超過1個字元的記錄都不會被查詢到
SELECT * FROM emp WHERE ename LIKE 'w_';
// 查詢表格中 w後只帶有3個字元的記錄
// 0個和超過3個字元的記錄都不會被查詢到
SELECT * FROM emp WHERE ename LIKE 'w___';
鍵
主鍵
主鍵 PRIMARY KEY 的特點:
1.唯一
2.不能是空的
在建立表的時候 新增主鍵 可以保證資料的完整性
新增主鍵的方式一:
CREATE TABLE 表名(
欄位名 屬性 PRIMARY KEY(主鍵),
);
新增主鍵的方式二:
CREATE TABLE 表名(
欄位名 屬性,
PRIMARY KEY(要設為主鍵的欄位名)
);
方式二的好處: 可以新增聯合主鍵
一旦確定主鍵,那麼表中被設定為主鍵的屬性就不能出現重複的,且不能為NULL
建立方式三:
CREATE TABLE 表名(
欄位名 屬性
);
ALTER TABLE 表名 ADD CONSTRAINT PRIMARY KEY(要設定為主鍵的欄位名)
ADD CONSTRAINT 是新增約束的意思
聯合主鍵
CREATE TABLE 表名(
欄位名1 屬性1,
欄位名2 屬性2,
欄位名3 屬性3,
// 新增聯合主鍵
PRIMARY KEY(欄位名1,欄位名2)
);
當設定聯合主鍵時,只要聯合主鍵不完全一致,都可以插入到資料庫中
例如:
欄位名1 欄位名2 欄位名3
1 1 a --可以
1 2 a --可以
2 1 a --可以
2 2 a --可以
1 1 a --不可以
1 2 a --不可以
2 2 a --不可以
2 1 a --不可以
前四條記錄不完全一樣,
所以可以被插入到資料庫中,
但是後四條記錄在前四條中已經插入過了,
所以不能再被插入到資料庫中,
所以只要設定了聯合主鍵的兩個欄位不完全一樣,
就可以被插入到資料庫中
而欄位三沒有被設定聯合主鍵,所以完全一樣或者不一樣,
都沒有什麼區別
外來鍵
外來鍵的作用:
引用完整性(外來鍵約束 讓表與表之間,通過欄位建立聯絡)
設定外來鍵 FOREIGN KEY 關鍵字
外來鍵要設定在從表中
CONSTRAINT fk_從表名_設定外來鍵的欄位名 FOREIGN KEY(設定外來鍵的欄位名) REFERENCES 主表名(主表中,要和外來鍵繫結的欄位名)
// fk_從表名_設定外來鍵的欄位名
// 這是自己取的名字,取什麼都可以
// 但是這樣取名方便理解,一看就明白
// fk代表外來鍵的意思
建立時,要先建立主表再建立從表,
因為沒有主表字段,
那麼從表的欄位存在就沒有任何意義了
刪除記錄的時候要先刪除從表中的記錄,
如果先刪除主表的記錄,
那麼從表的記錄就完全沒有意義了,
所以要先刪除從表的記錄
-- 主表
CREATE TABLE student(
sid INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
sex VARCHAR(100) DEFAULT 'nan'
);
-- 從表
CREATE TABLE score(
id INT ,
score INT NOT NULL,
sid INT,
-- 建立外來鍵 建立表聯絡
-- FOREIGN KEY(當前表的欄位)
-- REFERENCES student(sid);
CONSTRAINT fk_score_sid FOREIGN KEY(sid) REFERENCES student7(sid)
);
主表
從表
這裡主表的sid和從表的sid是互相對應的
第二種新增外來鍵的方式:
ALTER TABLE 從表名 ADD CONSTRAINT fk_從表名_設定外來鍵的欄位名 FOREIGN KEY(sid) REFERENCES stu(id);
// fk_從表名_設定外來鍵的欄位名
// 這是自己取的名字,取什麼都可以
// 但是這樣取名方便理解,一看就明白
// fk代表外來鍵的意思
唯一約束
唯一約束 UNIQUE 關鍵字
(不能重複,可以為有空值)
CREATE TABLE 表名(
欄位名1 屬性1,
欄位名2 屬性2 UNIQUE
);
自動增長列
自動增長列 auto_increment 關鍵字
CREATE TABLE 表名(
欄位名1 屬性1 auto_increment,
欄位名2 屬性2
);
這裡如果當欄位名1為主鍵時,也可以插入NULL
因為這個關鍵字會自動給欄位新增值,
且是+1增長的
域完整性
限制單元格的資料內容
值不為空 NOT NULL 關鍵字
CREATE TABLE 表名(
欄位名1 屬性1 NOT NULL,
欄位名2 屬性2
);
當插入資料時,欄位1不能為空
預設值 DEFAULT 關鍵字
CREATE TABLE 表名(
欄位名1 屬性1 DEFAULT 預設值
);
當插入資料時,
欄位1沒有填,
那麼就會自動將 預設值填上去
例如:
CREATE TABLE student(
gender VARCHAR(100) DEFAULT 'nan'
);
當插入資料 gender 沒有填的時候,
會預設將 'nan' 填上去