用來操做表中的數據. 對錶中記錄的建立, 修改和刪除sql
1,插入單條數據
語法:insert into 表名稱(column1,column2,...)values(value1,value1,...);數據庫
代碼:insert into student(id, name)values(1,'tom');函數
2.在有參數都提供, 能夠忽略列名
2.1插入單條數據spa
insert into student values(2,‘coco’);blog
2.2插入多條數據排序
insert into student values(2,‘coco’), (3,'bobo') , (4,'vivi');ip
1.單條數據修改
語法:update 表名稱 set 列名1=列值, 列名2=列值2 where 列名=列值it
代碼:update student set name=‘tom’ , age=12 where id=1;io
2.批量數據修改
2.1:將學生全部的age改成18基礎
update student set age =18;
2.2:將學生全部的age+1
update student set age=age +1;
1,刪除一列
語法:delete from 表名稱 where 列名=列值;
代碼:delete from student where id=1;
2.刪除表中全部的記錄
delete from student;
執行DQL語句不會改變數據庫原始數據, 而是讓數據庫發送結果集給客戶端查詢返回的結果集是一張虛擬表
關鍵字:select
SELECT 要查詢的列 FROM 表名
WHERE 行條件
GROUP BY 對結果分組
HAVING 分組後的行條件
ORDER BY 對結果排序
LIMIT 結果限定
1 基礎查詢
查詢students表中全部數據:SELECT * FROM students;
查詢指定列:SELECT id , gender FROM students ;
2 條件查詢
概述:在查詢時經過 WHERE 子句給出查詢條件, WHERE子句可使用到的運算符:
關係運算:
=, !=, <>, <, <=, >, >= (<>和!=用法相同)。
BETWEEN 20 AND 40 20<=值<=40。
IN('a', 'b', 'c') 值包含在集合中。
NULL判斷:IS NULL, IS NOT NULL 判斷是否爲NULL
邏輯運算:AND, OR, NOT 與, 或, 非
案例1:查詢年齡在15歲至20歲之間的學生:
SELECT * FROM student WHERE age BETWEEN 15 AND 20;
案列2:查詢年齡不等於3和年齡不等於11的學生(and,或not in分別實現)
select * from student where age!=3 and age !=11;
select * from student where age not in(3,11);案列3:查詢年齡大於10的學生
select * from student where age>10;
3 模糊查詢
關鍵字:like
使用的通配符: _ 匹配任意一個字符 _b
% 匹配任意0~n個字符
案例1:查詢名字中包含字母A的學生: SELECT * FROM students WHERE name LIKE '%A%' ;
案列2:查詢名字字母B開頭的學生: SELECT * FROM students WHERE name LIKE 'B%' ;
案列3:查詢名字爲Cxxxx的學生: SELECT * FROM students WHERE name LIKE 'C_%' ;
4 字段控制
關鍵字: DISTINCT(去重), AS(別名) 函數: IFNULL()
案例:
1、查詢僱員薪資, 使用DISTINCT去除重複記錄
SELECT DISTINCT salary FROM employee;
二、查詢僱員薪資和獎金之和
SELECT *, salary+bonus FROM employee;
三、bonus爲NULL時, 任何值和NULL相加仍是NULL,須要使用 IFNULL() 函數將NULL轉換成數值0
SELECT *, salary+IFNULL(bonus, 0) FROM employee;
四、此時列名出現了 salary+IFNULL(bonus, 0), 很不美觀,能夠用 AS 關鍵字取一個別名
SELECT *, salary+IFNULL(bonus, 0) AS total FROM employee;
5 排序和聚合
1、 排序:使用關鍵字能夠給查詢結果排序, 有兩種排序方式
關鍵字:ORDER BY
結果:asc 升序(默認) 從小到大
desc 降序 從大到小
案例:查詢全部學生, 按年齡降序排列:SELECT * FROM students ORDER BY age DESC;
二、聚合
概述,聚合函數用來作縱向運算,
分類:
計數 — COUNT
最大值 — MAX
最小值 — MIN
求和 — SUM
求平均值 — AVG
案例:
一、查詢工資+獎金大於2500的員工人數:
SELECT COUNT(*) FROM employee WHERE salary+IFNULL(bonus, 0) > 2500;
二、查詢員工最高工資和最低工資
SELECT MAX(salary), MIN(salary) FROM employee;
3、 查詢員工總工資和平均工資
SELECT SUM(salary), AVG(salary) FROM employee;
6 分組查詢
概述:使用 GROUP BY 子句作分組查詢, 分組查詢通常和聚合函數一塊兒使用
案例:
1.將查詢結果根據年齡分組
Select age from students group by age;
2.或者指定分組條件的位置
Select age from students group by 1;
Select id,age from students group by 2;
3.查詢全部年齡大於15 的人的總數
Select age count(*) from students where age>15 group by age;
7HAVING子句
概述:HAVING子句也是用來過濾查詢條件的
案例:查詢總工資大於9000的全部部門, 部門總工資, 和部門總員工數
SELECT department, SUM(salary), COUNT(*)
FROM employee
GROUP BY department
HAVING SUM(salary)>9000;
注意 having後面能夠添加聚合函數或者屬性字段 若是添加字段,name字段必須在語句中出現
WHERE和HAVING的區別:
1.WHERE是在分組(GROUP BY)前過濾數據; HAVING是在分組( GROUP BY)後過濾數據
2.WHERE子句不可使用聚合函數; HAVING子句可使用聚合函數
3.WHERE條件查詢,針對於本地文件,不能夠查詢結果集;HAVING條件查詢能夠查詢結果集
8分頁查詢
概述:使用 LIMIT 關鍵字能夠用來限定查詢結果的起始行和總行數
案例1:從第一行開始, 查詢5條記錄
SELECT * FROM employee LIMIT 0, 5;(參數一:從幾行開始;參數二:查詢幾條數據)
分頁查詢: 可使用LIMIT實現分頁功能, 例如一頁10條記錄, 則有
SELECT * FROM employee LIMIT 0, 10; -- 第一頁數據
SELECT * FROM employee LIMIT 10, 10; -- 第二頁數據
SELECT * FROM employee LIMIT 20, 10; -- 第三頁數據
案列2:查詢前5條記錄
SELECT * FROM employee LIMIT 0, 5;(LIMIT n 等價於 LIMIT 0,n)
注意: LIMIT不屬於標準的SQL語法, MySQL支持, 其它DBMS不必定支持.
where ,group by , having , order by, limit
union查詢:就是把多條sql語句的查詢結果合併成結果集;
注意:
1.若是 兩張表查詢出來的數據,有徹底同樣的,那麼union會默認的把他合併成一條數據;能夠用union all 解決
2.使用union查詢的時候,兩個sql的列數必須一致,可是列名能夠不同,若是列名不同,以第一條sql爲準
3.在union字句中不須要用order by排序,可直接在最後進行排序
子查詢:將一條sql語句的結果,做爲另外一個sql語句的查詢條件 或者查詢中間表
案列1:查詢出最新一行商品(以商品編號最大爲最新,用子查詢實現)
select * from goods where goods_id =(select max(goods_id) from goods);
案列2:查詢出編號爲19的商品的欄目名稱(用左鏈接查詢和子查詢分別)
select cat_name from category where cat_id=(select cat_id from goods where goods_id =19);
案列3:用where型子查詢把goods表中的每一個欄目下面最新的商品取出來
select *from goods where goods_id in(select max(goods_id) from goods group by cat_id);
案列4:用from型子查詢把goods表中的每一個欄目下面最新的商品取出來(用from型子查詢必須取別名)
select *from (select * from goods ORDER BY goods_id DESC) as temp GROUP BY cat_id;