1. DML语句
DML:数据库操作语言。
操作对象:数据库中表记录(行),
关键字:insert(插入)、update(修改/更新)、delete(删除)和select(查询)
1.1 插入记录
格式1:insert into 表名values (字段值1,字段值2,...,字段值n);
语法:->INSERT INTO tablename(field1,field2...fieldn) VALUES(value1,value2...valuen);
例如:->insert into r720 values (1,‘tom’);
->insert into r720 values (2,‘tom’);
注意:
默认插入全部字段/列;
必须保证values后面的内容的类型和顺序表结构中的字段顺序一致;
若字段类型为数字,可以省略引号
格式2:insert into 表名(字段1,字段2,....,字段n) values (字段值1,字段值2,...,字段值n);
语法:->INSERT INTO tablename(field1,field2...fieldn) VALUES(value1,value2...valuen);
注意:
插入指定字段;
必须保证values后面的内容的类型和顺序表结构中的字段类型和顺序一致;
例如:->insert into r720('id','cpu',) values (12,50);
1.2 修改记录
修改单个表中的数据:
格式:update 表名 set 字段名1=字段值1[where 条件];
语法:mysql>UPDATE tablename SET field1=value1 [WHERE CONDITION]
如:mysql>update t_user set sal=400 where t_user='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;
1.3 删除记录
格式:delete from 表名 [where 条件]
语法:mysql>delete from tablename [WHERE CONDITION]
如:mysql>delete from emp where ename='dony';
注:不管是单表还是多表,不加where条件将会把表的所有记录删除。
1.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;
人的一生中,最光辉的一天并非是功成名就那天,而是从悲叹与绝望中产生对人生的挑战,以勇敢迈向意志那天。愿你就像早晨八九点钟的太阳,活力十足,永远年轻。