Mysql学习笔记(3)--DML语句

Mysql学习笔记(2)https://blog.csdn.net/Fhujinwu/article/details/81517266

DML操作时指对数据库中表记录的操作,主要包括表记录的插入(insert)、更新(update)、删除(delete)和查询(select),是开发人员日常使用最频繁的操作。

1、①插入记录的语法如下:insert into tablename(表名)(field1,field2,...,fieldn) valuse(value1,value2,...,valuen);

例如向表emp中插入以下记录:ename为zzx1,hiredata为2018-08-08 sal为2000,deptno为1,执行

为insert into emp(ename,hiredata,sal,deptno) values('zzx1','2018-08-08','3000',1);

②查看实际插入的值:select*from tablename 比如select*from emp;

③连续插入多条记录的语法如下:

INSERT INTO tablename (field1, field2, …, fieldn)

VALUES

(record1_value1, record1_value2, …, record1_valuesn),

(record2_value1, record2_value2, …, record2_valuesn),

(recordn_value1, recordn_value2, …, recordn_valuesn)

;

比如:

2、①更新单条记录语法如下所示

UPDATE tablename SET field1=value1,field2.=value2,…,fieldn=valuen [WHERE CONDITION]

例如将表中emp中ename为xxz1的工资(sal)3000更改为5000:

update emp set sal=5000 where ename=’zzx1‘;

②更新多条记录的语法如下:

UPDATE t1,t2,…,tn set t1.field1=expr1,tn.fieldn=exprn [WHERE CONDITION]

3、①删除单条记录的语法如下:delete from tablename where 字段名=‘ ’;

比如删除emp这个表中字段ename为zzx3的那条数据;

delete from emp where ename='zzx3';

②删除多条记录语法如下:DELETE t1,t2,…,tn FROM t1,t2,…,tn [WHERE CONDITION]

比如同时删除表emp和表dept中deptno为1的记录;、

delete a,b from emp a,dept b where a.deptno=b.deptno and a.deptno=1;

4、查询记录

①可以使用select命令进行各种各样的查询,使得输出的结果符合用户的要求。

基本的语法为:select *from tablename [where condition];

例如查询emp表中是所有内容,select*from emp;

②“*”表示要将所有记录都选出来,当我们只需要选择部分时,可以选择字段,字段与字段之间用逗号隔离

比如:select ename,hiredata,sal,deptno from emp;

③查询不重复的记录:需要用到关键字distinct;

比如select distinct deptno from emp;

③条件查询 有很多情况下,我们并不需要查找所有记录,而是需要根据限定的条件来查询一部分数据,用where 关键字可以实现这样的操作。

比如查询deptno都为3的数据;

select*from emp where deptno=3;

结合第②点和第③点,我们尝试选择查询表中ename,hiredate,sal和字段deptno中,deptno=3的信息。select ename,hiredate,sal,deptno from emp where deptno=3;

除了=外,还可以使用>、<、>=、<=、!=等比较运算符;多个条件之间还可以使用 or、and 等逻辑运算符进行多条件联合查询

比如select ename,hiredate,sal,deptno from emp where deptno=3 and sal<3900;

④排序和限制

我们经常会有这样的需求,取出按照某个字段进行排序后的记录结果集,这就用到了数据库的排序操作,用关键字ORDER BY来实现,语法如下:

SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC|ASC],field2 [DESC|ASC],…,fieldn [DESC|ASC]]

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

例如,把emp表中的记录按照工资高低进行显示:select*from emp order by sal;

例如按照两个关键字进行排序,先按照第一个关键字排序,但序号相同时,看第二个关键字;

比如:

对于排序后的记录,,如果只希望显示一部分,而不是全部,这个时候就可以用limit关键字来实现。语法SELECT …[LIMIT offset_start,row_count]

其中offset_start表示记录的起始偏移量,row_count表示显示的行数。

在默认情况下,起始偏移量为 0,只需要写记录行数就可以,这时,实际显示的就是前 n条记录

例如显示emp表中按照sal排序后的前两条记录;select*from emp order by sal limit 2;

如果要显示emp表中按照sal排序后从第二条记录开始的两条记录的话;

select*from emp order by sal limit 1,2;

⑤聚合:用户进行一些汇总操作时,需要用到SQL的聚合操作。比如统计整个公司的人数或者统计每个部门的人数;聚合的语法如下所示:

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进行再过滤。

比如查询emp中总人数:select count(1) from emp;count(1)中的1能不能去掉呢?我尝试了一下,结果是不行的。那这个1是怎么一回事呢?这里的count(1)中的1不是 一个字段,这句sql语句是表示有多少符合条件的行,另外,括号里面,你填1,2,3.....这些数字得到的结果都是一样的

统计各个部门的人数:select deptno,count(1) from emp group by deptno;

统计各部门人数的同时统计总人数:select deptno,count(1) from emp group by deptno with rollup;

统计公司员工所有员工的薪水总额、最高和最低薪水:

select sum(sal),max(sal),min(sal) from emp;

⑥记录联合:

我们经常会碰到这样的应用,将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示出来,这个时候,就需要用 union和 union all关键字来实现这样的功能,具体语法如下:

SELECT * FROM t1

UNION|UNION ALL

SELECT * FROM t2

UNION|UNION ALL

SELECT * FROM tn;

UNION和UNION ALL的主要区别是UNION ALL是把结果集直接合并在一起,而UNION是将UNION ALL后的结果进行一次DISTINCT,去除重复记录后的结果。

比如 将表emp和dept中的名字显示出来

select ename from emp union select ename from dept;和

select ename from emp union all select ename from dept;

猜你喜欢

转载自blog.csdn.net/Fhujinwu/article/details/81607883