一.DML语言
DML语言即数据操纵语言,主要有三种形式:(1) 插入:INSERT (2)删除:DELETE (3) 更新:UPDATE 。即我们常说的“增、删、改、查”里面的“增、删、改”。
1.插入
语法:
insert into 表名 (列名,...) values (值,...);
insert into 表名 values(所有列的值);
2.删除
语法:
delect from 表名;
delect from 表名 where 条件;
3.修改
语法:
update 表名 set 要修改的列=值 where 条件;
二.DQL语言
DQL语言即数据查询语言,也就是我们常说的“增、删、改、查”里面的“查”。在实际开发中DQL十分重要。
数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE 子句组成的查询块: SELECT <字段名表> FROM <表或视图名> WHERE <查询条件>。
1.常见形式的查询语法有:
(1)查询部分列 语法:select 列名,列名,...from 表名;
(2)查询全部列 语法:select * from 表名; -- 开发中不建议使用*,因为效率很慢。
(3)为查询的列取别名 语法:select 列名 as 别名,列名 as 别名,... from 表名; (也可以不加as)
(4)去除重复项 语法:select distinct 列名,列名,...from 表名;
(5)查询结果进行排序 语法:select 列名,列名,...from 表名 order by 列名1 [desc],列名2,...;(desc表升序,默认为降序)
(6)根据条件查询 讲法:select 列名,列名,...from 表名 where 条件;
2.分页查询
select * from 表名 limit start,pageSize; -- start:表示从第几条记录查询,pageSize表示每页显示几条记录,一般由开发人员定义。 -- start=(page-1)*pageSize,其中page可以通过网页来获取
3.子查询
把一个查询结果作为另一个查询的条件值来进行嵌套查询。例如:
select sname,sdept
from student
where sdept=(select sdept from student where sname ='刘晨') and sname!='刘晨'
4.联表查询(重点)
当查询的内容不在一张表中时需要用到联表查询,这里要注意的是,使用联表查询一定要写也联表条件,否则会出现笛卡尔积。如果n张表相联,则联表条件至少有n-1个。
(1)联表查询
select 查询列 from 表名1,表名2 where 联表条件;
(2)左、右连接
select 查询列 from 表名1 join 表名2 on 联表条件;
select 查询列 from 表名1 left join 表名2 on 联表条件;-- 左连接除了可以把两张表都满足的记录查出来,还可以把左边未满足的记录 -- 也查出来。
select 查询列 from 表名1 right join 表名2 on 联表条件;-- 右连接除了可以把两张表都满足的记录查出来,还可以把右边未满足的记录 -- 也查出来。
(3)自连接 (说明:当查询的字段在一张表中,但是需要联表查询时使用。)
举例:查询员工的姓名以及员工对应的领导的姓名
select yg.ename,ld.ename from employee yg,employee ld where yg.mgr=ld.empno;
5. 聚合函数
max() min() avg() sum() count() (注意:select 后可以跟此类的聚合函数或者分组的字段)
6.分组查询
group by ... having 分组后的条件 (注意:where后只能跟具体的字段的条件,一般group by后的条件都是与having连用)
select语法的总结
select [distinct] 列名1,列名2,... from 表名1 [join 表名2 on 连表条件] [where 条件] [group by 列名] [having 分组条件] [order by 列名1[desc],列名2,...] [limit 分页]
多表查询的技巧(个人理解)
以从两个表中查询数据为例,列出查询的语法
select ?,?
from 表1 join 表2
on 连表条件
where 某部分列的条件
[group by 列名]
[having 分组条件]
第一步:弄清楚要查询的是哪些字段,将这些字段填入到上述语法的?中,此时要注意的是,需要标明这些字段来自于哪个表;
第二步:找出这些字段分别来自于哪几张表,分别填入上述语法的表1和表2中,为了方便,可以给表1和表2取别名;
第三步:找出这些表之间的外键约束(或者是联表时根据的条件),并将此连表条件填入上述语法相应位置。对于n张表而言,联表条件至少有n-1个。此时要注意的是,需要标明这些字段来自于哪个表;
第四步:根据题目中的要求,对某列的条件进行限制,填入上述语法的某部分列的条件中, 同样要注意的是,需要标明这些字段来自于哪个表;
第五步:若需要使用到聚合函数,则需要对某列进行分组,而group by一般会与having连用,作为其分组后的条件。