mysql語句之查詢
SELECT sal,comm,sal+comm AS total FROM emp;
結果:
任何數值和null值相加 都是null值
IFNULL 這時需要過濾空值 如果該值是空的就當做0來處理
SELECT sal,comm,sal + IFNULL(comm, 0) AS total FROM emp;
結果:
ORDER BY 排序 默認是升序的 ASC升序 | DESC降序
SELECT * FROM 表名 ORDER BY 字段名 ASC|DESC;
SELECT * FROM 表名 ORDER BY 字段名1 ASC|DESC,字段名2 ASC|DESC;
聚合函數
聚合函數是用來做縱向運算的函數(COUNT、MAX、MIN、SUM、AVG)
COUNT():統計指定列不爲NULL的記錄行數;
MAX():計算指定列的最大值,如果指定列是字符串類型,那麼使用字符串排序運算;
MIN():計算指定列的最小值,如果指定列是字符串類型,那麼使用字符串排序運算;
SUM():計算指定列的數值和,如果指定列類型不是數值類型,那麼計算結果爲0;
AVG():計算指定列的平均值,如果指定列類型不是數值類型,那麼計算結果爲0;
當需要縱向統計時使用COUNT:
查詢表中所有記錄數:
SELECT COUNT(*) FROM 表名;
查詢表中某個字段的個數:
SELECT COUNT(字段名) FROM 表名;
查詢表中多個字段的個數:
SELECT COUNT(字段1),COUNT(字段2) FROM 表名;
注意:使用COUNT查詢的是不爲null的記錄數
SUM和AVG(自動過濾空值)
查詢表中某個字段的總和:
SELECT SUM(字段名) FROM 表名;
查詢表中多個字段的總和:
SELECT SUM(字段名1),SUM(字段名2) FROM 表名;
查詢表中某個字段的平均值:
SELECT AVG(字段名) FROM 表名;
MAX和MIN
查詢表中某個字段最高和最低的值:
SELECT MAX(字段名),MIN(字段名) FROM 表名;
分組查詢
當需要分組查詢時需要使用GROUP BY子句
例如查詢每個部門的工資和,這說明要使用部門來分組。
實例如下:
查詢每個部門的部門編號和每個部門的工資和:
SELECT deptno,SUM(sal) FROM emp GROUP BY deptno;
查詢每個部門的部門編號以及每個部門的人數:
SELECT deptno,COUNT(*) FROM emp GROUP BY deptno;
查詢每個部門的部門編號以及每個部門工資大於1500的人數:
SELECT deptno,COUNT(*) FROM emp WHERE sal>1500 GROUP BY deptno;
注意:凡是和聚合函數同時出現的字段名,一定要寫在GROUP BY之後
HAVING子句(分組後使用的條件)
HAVING與WHERE的區別:
1.HAVING是在分組之後對數據進行篩選,WHERE是在分組之前對數據進行篩選
2.HAVING後面可以使用聚合函數,WHERE後面不可以使用聚合函數
例如: 查詢工資總和大於9000的部門編號以及工資和:
SELECT deptno,SUM(sal) FROM emp GROUP BY deptno HAVING SUM(sal)>9000;
分頁查詢
LIMIT 參數1代表起始頁 參數2代表一共顯示幾條記錄
例如:
SELECT * FROM 表名 LIMIT 0,5;
表示查詢5行記錄,起始從0開始(即從第一行開始)
模糊查詢
模糊查詢使用關鍵字 LIKE
通配符:
_ 代表任意一個字符
% 代表任意0~n個字符
例如:
// 代表查詢到的是包含w的結果
SELECT * FROM 表名 WHERE 字段名 LIKE '%w%';
// 代表查詢到的是以w開頭的兩個字符
SELECT * FROM 表名 WHERE 字段名 LIKE 'w_';
數據的完整性
作用:保證用戶輸入的數據保存到數據庫中是正確的
確保數據的完整性 = 在創建表時給表中添加約束
實體完整性:
實體即表中的一行(一條記錄)代表一個實體
實體完整性的作用:標識每一行數據不重複
約束類型:主鍵約束(PRIMARY KEY) 唯一約束(UNIQUE) 自動增長列(auto_increment)
主鍵約束(PRIMARY KEY):
注意:每個表都要有一個主鍵
特點:數據唯一且不能爲null
第一種添加方式:
CREATE TABLE student(
id int PRIMARY KEY,
name varchar(50)
);
第二種添加方式:(好處:可以添加聯合主鍵)
CREATE TABLE student1(
id int,
name varchar(50),
PRIMARY KEY(id)
);
聯合主鍵是一個主鍵 只要兩個字段不完全一致就可以都插入到數據庫中
CREATE TABLE student2(
classid int,
stuid int,
name varchar(100),
PRIMARY KEY(classid,stuid)
);
第三種添加方式:
CREATE TABLE student3(
id int,
name varchar(100)
);
// 通過修改表結構 添加主鍵約束
ALTER TABLE student3 ADD CONSTRAINT PRIMARY KEY (id);
唯一約束(UNIQUE)
特點:數據不能重複,可以有空值
CREATE TABLE student4(
id int PRIMARY KEY,
name varchar(100) UNIQUE
);
自動增長列(auto_increment)
給主鍵添加自動增長的數值,列只能是整數類型
注意:數據被刪除了也會按照原來的數進行增長 不是主鍵也能添加自動增長列
CREATE TABLE student5(
id int PRIMARY KEY auto_increment,
name varchar(100)
);
// 給主鍵插入空值,會自動給字段添加值
INSERT INTO student5 VALUES(NULL,'zs');
INSERT INTO student5 VALUES(NULL,'ls');
域完整性 限制單元格的數據內容
域完整性的作用:限制此單元格的數據正確,不對照此列的其它單元格比較
非空約束 (not null) 和 默認值 (default)
CREATE TABLE student6(
id int PRIMARY KEY,
name varchar(50) not null,
sex varchar(50) DEFAULT '男'
);
// 錯誤插入 值不能爲空
// INSERT INTO student6 VALUES(1,NULL,'男');
// 性別默認爲男
INSERT INTO student6 (id,name) VALUES(3,'wl');
// 給null 會把null插入進去
INSERT INTO student6 VALUES(2,'wl',NULL);
引用完整性 (外鍵約束 讓表與表之間通過字段建立聯繫)
外鍵約束: FOREIGN KEY
CREATE TABLE student7(
sid int PRIMARY KEY,
name varchar(100)
);
CREATE TABLE score(
score int,
sid int,
// 第一種創建外鍵
// 建立表聯繫 FOREIGN KEY(當前表的字段)
CONSTRAINT fk_score_sid FOREIGN KEY(sid) REFERENCES student7(sid)
);
第二種創建方式:
CREATE TABLE score1(
score int,
sid int
);
ALTER TABLE score1 ADD CONSTRAINT fk_score_sid FOREIGN KEY(sid) REFERENCES student7(id);