DML是(Data Manipulation Languages)數據定義語言的縮寫主要包括表記錄的插入insert、更新update、刪除select
插入記錄
insert into table(field1,field2,...fieldn) values(value1,value2,...value)
如:向表 emp 中插入以下記錄:
mysql> insert intoemp(ename,hiredate,sal,deptno) value('zzxl','2000-01-01','2000',1);
在欄位是設置默認值、允許為空、自增欄位,可以不用在value後寫值,欄位名可不用寫,如:只對表中的 ename 和 sal欄位顯式插入值
mysql> insert into emp(ename,sal) value ('dony', 1000); mysql> insert into emp(ename,sal) value ('dony', 1000);mysql> select * from emp;+-+--+--+--+----+---+| age | ename | birth | hiredate | sal | deptno |+-+--+--+--+----+---+| NULL | zzxl | NULL | 2000-01-01 | 2000.00 | 1 || NULL | dony | NULL | NULL | 1000.00 | NULL |+-+--+--+--+----+---+2 rows in set (0.00 sec)
插入多條值
mysql> insert into emp(ename,sal) value ('name1', 1001), ('name2', 1002);mysql> insert into emp(ename,sal) value ('name1', 1001), ('name2', 1002);mysql> select * from emp;+-+--+--+--+----+---+| age | ename | birth | hiredate | sal | deptno |+-+--+--+--+----+---+| NULL | zzxl | NULL | 2000-01-01 | 2000.00 | 1 || NULL | dony | NULL | NULL | 1000.00 | NULL || NULL | name1 | NULL | NULL | 1001.00 | NULL || NULL | name2 | NULL | NULL | 1002.00 | NULL |+-+--+--+--+----+---+4 rows in set (0.00 sec)
更新記錄
update tablename set field1=value1,field2=value2,...fieldn =valuen[where condition]
如:將表 emp 中 ename 為 「name1」的 sal 從 1001 更改為 4000
mysql> update emp setsal=4000 where ename='name1';
同時更新兩個數據表的數據
mysql> update emp a, dept b set a.sal=a.sal*b.deptno, b.deptname=a.ename where a.deptno=b.deptno;
查詢記錄
select * from tablename[where condition]
查詢表中所有欄位
mysql> select * from emp;
查詢不重複欄位值的記錄(需要使用關鍵字distinct),如:查詢欄位deptno
mysql> select * from emp;+-+--+--+--+----+---+| age | ename | birth | hiredate | sal | deptno |+-+--+--+--+----+---+| NULL | zzxl | NULL | 2000-01-01 | 2000.00 | 1 || NULL | dony | NULL | NULL | 1000.00 | 2 || NULL | name1 | NULL | NULL | 4000.00 | 1 || NULL | name2 | NULL | NULL | 1002.00 | 2 |+-+--+--+--+----+---+4 rows in set (0.00 sec)mysql> select distinct deptno from emp;+---+| deptno |+---+| 1 || 2 |+---+2 rows in set (0.00 sec)
根據條件查詢
mysql> select * from emp where deptno=1;
多條件查詢
mysql> select * from emp where deptno=1and sal<3000;
排序和查詢
select * from tablename [where condition] [order by field1 [DESC|ASC], field2 [DESC|ASC,...field[DESC|ASC]]]默認是升序排列(ASC)field
如:吧emp表中的記錄按照 sal 高低進行顯示
mysql> select * from emp orderby sal;
根據多個欄位排序
從第一個欄位排序,遇到相同的值則相同的記錄以第二個欄位重新裴諝,以此類推。
mysql> select * from emp order by deptno,sal desc;+-+--+--+--+----+---+| age | ename | birth | hiredate | sal | deptno |+-+--+--+--+----+---+| NULL | name1 | NULL | NULL | 4000.00 | 1 || NULL | zzxl | NULL | 2000-01-01 | 2000.00 | 1 || NULL | name2 | NULL | NULL | 1002.00 | 2 || NULL | dony | NULL | NULL | 1000.00 | 2 |+-+--+--+--+----+---+
限制顯示的記錄
select ...[limit offset_start,row_count]offset_start表示記錄的起始偏移量,如果沒寫則默認為0,記錄起始下標為0。row_count表示顯示的行數
mysql> select * from emp orderby sal limit 3;mysql> select * from emp orderby sal limit 1,4;
聚合
對數據進行匯總、求和、最大值、最小值等條件的過濾
在 emp 表中統計記錄數
mysql> select count(1) from emp;
統計欄位相同值的記錄數
mysql> select deptno, count(1) from emp groupby deptno;
統計欄位相同值得記錄數和總記錄數
mysql> select deptno, count(1) from emp group by deptno with rollup;
統計欄位deptno大於2的記錄數
mysql> select deptno, count(1) from emp groupby deptno having count(1) > 2;
統計 欄位sal 的總和、最高和最低記錄
mysql> select sum(sal),max(sal),min(sal) from emp;
表連接
內連接
內連接和外連接的區別在於僅選出兩張表中互相匹配的記錄
如:顯示出兩張表(emp、dept)中 欄位(deptno)值相同記錄的ename和deptname欄位
mysql> select ename, deptname from emp,dept where emp.deptno=dept.deptno;
外連接
外連結分為左連接和右連接左連接:包含所有的左邊表的記錄甚至是右邊表中沒有和它匹配的記錄。右連接:包含所有的右邊表的記錄甚至是左邊表中沒有和它匹配的記錄。
如:查詢表(emp 和 dept)中的欄位(ename 和 deptname),條件是兩邊相同值得欄位(deptno)
左連接:
mysql> select ename, deptname from emp left join dept on dept.deptno=emp.deptno;
右連接:
mysql> select ename, deptname from dept right join emp on dept.deptno=emp.deptno;
子查詢
當進行查詢的時候,需要的條件是另外一個select語句的結構,這個時候就要用到子查詢。用於子查詢的關鍵字主要包括in、not in、=、!=、exists、not exists等。
從 emp 表中查詢出所有部門在 dept 表中的記錄
mysql> select * from emp where deptno in (select deptno from dept );
如果子查詢記錄數唯一,可以用=代替in
mysql> select * from emp where deptno = (select deptno from dept);
表連接:
mysql> select emp.* from emp, dept where emp.deptno=dept.deptno
記錄聯合
將兩個表的數據按照一定的查詢條件查詢出來後,將結果合併到一起顯示出來需要使用union和union all關鍵字來實現
如: 將 emp 和 dept 表中的部門編號的集合顯示出來:
使用 union all:全部顯示
mysql> select deptno from emp -> unionall -> select deptno from dept;
使用 union:去除重複後顯示
mysql> select deptno from emp -> union -> select deptno from dept;
選擇操作
顯示數據表前50行
SELECT * FROM`庫名`.`表名`ORDERBY`id`DESCLIMIT0,50;
刪除操作
刪除數據表指定ID行
deletefrom`庫名`.`表名`where`id`=82;DELETEFROM tbname WHEREid > 49ANDid < 151
修改操作
修改數據表指定行的ID值為1
update `庫名`.`表名` set `id`=1 where `id`=2;
更改索引值
讓自動索引從3開始
ALTERTABLE`emp` AUTO_INCREMENT=3;
查詢結果輸出到excel文件
select * intooutfile'/tmp/tmp.xls'from help_cat where1orderby cat_id desclimit0,20;
圖片源於網絡,如有侵權請聯繫刪除!