1. 程式人生 > >資料庫回顧(DCL DQL聚合函式 )

資料庫回顧(DCL DQL聚合函式 )

DCL
一個專案建立一個使用者 一個專案對應的資料庫只有1個
這個使用者只能對這個資料庫有許可權,其他資料庫你就操作不了
1、建立使用者
    CREATE USER 使用者名稱@IP地址 IDENTIFIED BY '密碼'
        使用者只能在指定的IP地址上登入
    CREATE USER 使用者名稱@'%' IDENTIFIED BY '密碼';
        使用者可以在任意IP地址上登入
2、給使用者授權
    GRANT 許可權1,...許可權n ON 資料庫.* TO 使用者名稱@IP地址
        許可權、使用者、資料庫
        給使用者分派在指定的資料庫上的指定的許可權
        例如:GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON db1.* 
[email protected]
; 給user1使用者分派在db1資料庫上的create、alter、drop、insert、update、delete、select許可權 GRANT ALL ON 資料庫.* TO 使用者名稱@地址; 給使用者分派指定資料庫上的所有許可權 3、撤銷授權 REVOKE 許可權1,...,許可權n ON 資料庫.* FROM 使用者名稱@IP地址; 撤銷指定使用者在指定資料上的指定許可權 例如 REVOKE CREATE,ALTER,DROP ON db1.* FROM
[email protected]
; 撤銷user1使用者在db1資料庫上的create、alter、drop許可權 4、檢視許可權 SHOW GRANT FOR 使用者名稱@IP 地址 檢視指定使用者的許可權 5、刪除使用者 DROP USER 使用者名稱@IP地址 DQL 資料查詢語言 查詢不會修改資料庫表記錄 一、基本查詢 1、欄位(列)控制 查詢所有列 SELECT * FROM 表名; SELECT * FROM emp; 其中“*”表示查詢所有列 查詢指定列 SELECT 列1[,...列N] FROM 表名 SELECT empno,ename,sal,comm FROM 表名 完全重複的記錄只一次 當查詢結果中的多行記錄一模一樣時,只顯示一行,一般查詢所有列時很少會有這種情況,但只查詢一列(或幾列)時,可能就大了 SELECT DISTINCT * | 列1,列2...列N FROM表名 SELECT DISTINCT sal FROM emp; 查詢員工表的工資,如果存在相同的工資只顯示一次 列運算 數量型別的列可以做加、減、乘、除運算 SELECT sal*1.5 FROM emp; SELECT sal+comm FROM emp; 無法轉化成數字的當成0來對待 字串型別可以做連續運算 SELECT CONCAT('$',sal) FROM emp; 轉換NULL值 有時需要把NULL轉換成其他值,例如com+1000時,如果com列存在NULL值,那麼NULL+1000還是NULL,而我們這時希望把NULL當成0來運算, SELECT IFNULL(comm,0)+1000 FROM emp; IFNULL(comm,0)如果comm中存在null值,那麼當成0來運算 給列起別名 當使用列運算後,查詢出的結果集中的列名稱很不好看,這是我們需要給列名起個別名,這樣在結果集中列名就顯示別名了 SELECT IFNULL(comm,0)+sal AS 獎金 FROM emp; 其中AS可以省略 SELECT CONCAT('我叫',ename,',我的工作是',job) FROM emp; CONCAT連線欄位 2、條件控制 條件查詢 域UPDATE和DELETE語句一樣,SELECT語句也可以用WHERE子句來控制記錄 SELECT empno,ename,sal,comm FROM emp WHERE sal>10000 AND comm IS NOT NULL; SELECT empno,ename,sal FROM emp where sal BETWEEN 20000 AND 30000; SELECT empno,ename,job FROM emp WHERE job In('經理','董事長'); 模糊查詢 想查詢姓張,並且姓名一共兩個字的員工時,可以使用模糊查詢 SELECT * FROM emp WHERE ename LIKE '張 '; 模糊查詢需要使用運算子:LIKE 其中匹配一個任意字元,只匹配一個而不是多個 上面語句查詢的姓張,名字由兩個字組成的員工; SELECT * FROM emp WHERE ename LIKE '___';姓名由3個字組成的員工 如果我們想要查詢姓張,名字幾個字的員工就要使用"%"了 SELECT * FROM emp WHERE enmae LIKE '張%'; 其中%匹配0-N個任意字元,所以上面語句查詢的是姓張的所有員工; SLECT * FROM emp WHERE ename LIKE '%呃%'; 不能認為上面語句是在查詢姓名中間帶有呃字的員工,因為%匹配0-N個字元,所以姓名以呃開頭和結尾的員工也都會查詢到 SELECT * FROM emp WHERE ename LIKE '%'; 這個條件等同於不存在,但如果姓名為NULL的查詢不出來 二、排序 1、升序 SELECT * FROM emp ORDER BY sal ASC; 按sal排序,升序 其中ASC是可以省略的 2、降序 SELECT * FROM emp ORDER BY comm DESC; 按comm排序,降序 其中DESC不能省略 3、使用多列作為排序條件 可以任意多個 SELECT * FROM WHERE emp ORDER BY sal ASC,comm DESC; 使用sal升序排,如果sal相同那麼按照comm降序排 三、聚合函式 聚合函式用來做某列的縱向 1、COUNT SELECT COUNT(*) FROM emp; 計算emp中所有列總數 *可以是1,...n 語法沒錯誤 結果不影響 SELECT COUNT(comm) FROM emp; 會自動忽略NULL 不計入 2、MAX SELECT MAX(sal) FROM emp; 查詢最高工資 3、MIN SELECT MIN(sal) FROM emp; 查詢最低工資 4、SUM SELECT MIN(sal) FROM emp; 查詢工資和 5、AVG SELECT AVG(sal) FROM emp; 查詢平均工資 四、分組查詢 分組查詢是把記錄使用某一列進行分組,然後查詢組資訊 例如:檢視所有部門的記錄數 SELECT deptno,COUNT(*) FROM emp GROUP BY deptno; 使用deptno分組,查詢部門編號和每個部門的記錄數 SELECT job,MAX(sal) FROM emp GROUP BY job; 使用job分組,查詢每種工作的最高工資 select job,count(*) from emp group by job; 使用job分組,查詢每種工種的人數 五、limit子句 LIMIT用來限定查詢結果的起始行,以及總行數 例如:查詢起始行為第五行,一共查詢3行記錄 少於3行有幾行顯示幾行 SELECT * FROM emp LIMIT 4,3; 其中4表示從第五行開始,其中3表示一共查詢3行,即第5、6、7行記錄 語句順序 select->from->where->group by->having->order by select deptno,count(*) from emp where sal>5000 group by deptno having count(*) >=2; 一頁的記錄數:10行 查詢第3頁 select * from emp limit 20,10; (當前頁-1)*每頁記錄數 (3-1)*10