MYSQL查詢語句的使用及添加約束

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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章