數據庫(三)

DML (Data Manipulation Language)

  • 數據操做語言, 用來操做數據庫表中的記錄
  • 用來操做表中的數據. 對錶中記錄的建立, 修改和刪除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 (Data Query Language)

  • 數據查詢語言, 用來查詢數據庫表中的記錄
  • 執行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;

 

三、bonusNULL, 任何值和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字段必須在語句中出現

WHEREHAVING的區別:

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查詢

 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;

相關文章
相關標籤/搜索