MySQL之DML语句(上)

来源:互联网 发布:mac 双定制粉底液 肤质 编辑:程序博客网 时间:2024/06/08 11:02

2.2.3 DML语句

DML操作是对数据库中表记录的操作,主要包括表记录的插入(insert)、更新(update)、删除(delete)和查询(select)

1.插入记录

语法:mysq;>INSERT INTO tablename(field1,field2...fieldn) VALUES(value1,value2...valuen);

如:mysql>insert into r720 values('id','cpu',12,50);

2.更新记录

语法:mysql>UPDATE tablename SET field1=value1,field2=value2,...fieldn=valuen[WHERE CONDITION]

如:mysql>update emp set sal=400 where ename='lisa';


可以同时更新多个表中的数据:

语法:mysql>UPDATE t1,t2,....tn SET t1.field1=value1,t2.field2=value2,..,tn.fieldn=valuen[WHERE CONDITION]

如:mysql>update emp a, dept b set a.sal=a.sal*b.deptno,b.deptname=a.ename where a.deptno=b.deptno;

3.删除记录

语法:mysql>delete from tablename[WHERE CONDITION]

如:mysql>delete from emp where ename='dony';

注:不管是单表还是多表,不加where条件将会把表的所有记录删除。

4.查询记录

语法:mysql>SELECT * FROM tablename[WHERE CONDITION]

如:mysql>select * from r720;---------mysql>select * from r720 where id<10 and cpu=45;

(1)查询不重复记录

有需要将表中的记录去掉重复后显示出来,可以用dinstinct关键字来实现

mysql> select ename hiredate,sal,id from emp;

mysql> select dintinct id from emp


(2)条件查询

在多数情况下,我们并不需要查询所有的记录,只是需要根据条件来查询一部分数据,用where关键字来实现这样的操作

如:查询temperature为20的记录


where后面的条件是一个字段的=比较,出了=之外,还可以使用>、<、>=、<=、!=等比较运算符;多个条件之间还可以使用or、and等逻辑运算符进行多条件联合查询。

如:使用多字段条件查询


(3)排序和限制

去除某个字段进行排序后的记录结果集,用关键字ORDER BY来实现,语法如下:

mysql>SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1[DESC\ASC],field2[DESC\ASC],....,fieldn[DESC\ASC]]

【注】DESC和ASC是排序顺序关键字,DESC表示按照字段进行降序排列,ASC表示升序表示,如果不写此关键字默认是升序排列。ORDER BY后面可以跟不同的排序顺序,并且每个排序字段可以有不同的顺序。

如:把r720表内cpu的记录按照从高到低顺序进行显示:


对于CPU中字段相同的记录,如果要按照traffic由高到低排序,如下:


【注】对于排序后的记录,如果希望只显示一部分,而不是全部,此时可以使用LIMIT关键字来实现,LIMIT的语法如下: mysql>SELECT....[LIMIT offset_start,row_count]

其中,offset_set表示记录的起始偏移量,row_count表示显示的行数。在默认情况下,只需要记录行数即可,此时,实时显示的就是排序后的前n条记录。如下示例:


【注】如果要显示表按照某字段后的第二条记录开始的3条记录。limit常和order by配合使用来进行记录的分页显示。


(4)聚合

在多数情况下,我们有时需要进行一个汇总操作,比如统计公司人数或者统计每个部门人数,用到SQL的聚合操作。聚合操作的语法如下:

mysql>

SELECT[field1,field2,...,fieldn]fun_name

FROM tablename

[WHERE where_contition]

[GROUP BY field1,field2,...,fieldn

[WITH ROLLUP]]

[HAVING where_contition]

参数说明:

fun_name表示要做的聚合操作,也就是聚合函数,常用的有sum(求和)、count(*)(记录数)、max(最大值)、min(最小值)。

GROUP BY关键字表示要进行分类聚合的字段,比如要按照部门分类统计员工数量,部门就应该写在group by后面。

WITH ROLLUP是可选语法,表明是否对分类聚合后的结果进行再汇总。

HAVING关键字表示对分类后的结果再进行条件的过滤。【先分类在过滤】

【注】having和where的区别在于:having是对聚合后的结果记性条件的过滤,而where是在聚合前就对记录进行过滤,如果逻辑允许,我们尽可能用where先过滤记录,这样因为结果集减小,将对聚合的效率大大提高,最后再根据逻辑看是否用having进行再过滤。

如:要在表r720总统计记录条数,共17条记录。

mysql>select count(1) from r720;


在此基础上,要统计各个字段的记录条数

mysql>select cpu,count(1) from r720 group by cpu;


更细一些,即要统计CPU记录数,又要统计总记录数

mysql>select cpu,count(1) from r720 group by cpu with rollup;


统计CPU中数值小于55的记录

mysql>selec cpu,count(1) from r720 group by cpu having count(1)<55;


最后统计r720中所有字段的记录总额、最高和最低。

mysql>select * from r720;

mysql>select sum(cpu),max(cpu),min(cpu) from r720;


莫让幽怨记心头,你我不过半壶酒;策马奔腾何处走,我来世还复休。

原创粉丝点击