继昨天学完了SQL语言中的DDL,今天我从这开始继续往下学习。尽量每天学完的内容多看两遍巩固,然后多练习,这样每天看两遍很快就能印在脑海里了。
DCL由于与后面事务模块有关联,最好和事务一起学,所以暂时只学了DDL,DML,DQL。
DML:
- 添加数据(INSERT)
- 修改数据(UPDATE)
- 删除数据(DELETE)
INSERT添加数据
*值得注意的是,数据大小要在字段的规定范围内,如果传的是字符串和日期这类数据,要用引号包裹,单双皆可。然后插入的值顺序要与括号内字段顺序一致。这里的四条语句其实可以分为两小组,因为每组区别只有是否有字段列表,字段列表是可省略的。
- 指定字段添加数据:insert into 表名 (字段名1,字段名2) values(值1,值2);
- 全部字段添加数据:insert into 表名 values (值1,值2);
eg:
*这里要注意的是:我写的练习中'create_time'和'update_time'两个字段加了非空约束(not null),所以这里要添加数据也要一起添加。而 now() 是SQL的函数,表示获取现在的时间。
- 批量添加数据(指定字段):insert into 表名(字段名1,字段名2) values(值1,值2),(值1,值2);
- 批量添加数据(全部字段):insert into 表名 values(值1,值2,...),(值1,值2,...);
eg:
*批量添加操作中,是根据括号内字段列表,一行一行添加数据。
UPDATE修改数据
- update 表名 set 字段名1 = 值1,字段名2=值2,...[where 条件];
eg:
*如果要改全部就不用加where限制条件
DELETE删除数据
*该语句不能删除字段的值,如果要删除值要用UPDATE,将该字段值设置为null。
- delete from 表名 [where 条件];
eg:
DQL:
-
基本查询:
具体语法:
- 查询多个字段:select 字段1,字段2,字段3 from 表名
*这个通俗理解就是,查询所有字段
- 查询所有字段(通配符):select * from 表名;
*as可省略,如果别名中间有空格之类的符号,整体要加引号区分
- 设置别名: select 字段1 [as 别名1] ,字段2 [as 别名2] from 表名
- 去除重复记录:select distinct 字段列表 from 表名
-
条件查询:
具体语法:
*语法很简单,主要还是具体情况具体分析吧
- select 字段列表 from 表名 where 条件列表;
Where限制列表:
eg:
-
分组查询:
聚合函数:
*将一列数据作为一个整体,进行纵向计算且不对null值进行计算
聚合函数具体语法:
- select 聚合函数(字段列表) from 表名
eg:
分组查询具体语法:
- select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件]
练习及解析(重要):
*这块难,我觉得要点在于分清楚模块。比如记住select后面跟的是字段列表,意思是从这个表中挑选这个字段的数据。以2为例子。
先查询入职时间在‘2015-01-01’前的员工 -->select *from tb_emp where entrydate
接着对结果进行分组,就在后面加group by job。-->
select *from tb_emp where entrydate
此时注意,最终是要获取职位,所以要把前面通配符*改成job,最后还有一个条件员工数量大于等于,但由于count(*)只能出现一次。要筛选必须写在having后面。
注意事项:
where与having不同:
1.执行时机不同:where是分组前过滤,不满足条件不分组;having是分组后对结果进行再过滤
2.判断条件不同:where不能对聚合函数进行判断,having可以。
执行顺序:
where>聚合函数>having
*今天所学个人认为DQL格外琐碎,特别是分组查询,很绕,需要多多理解,DQL到这还没完,后面还有两种查询。
*******本人小白,望路过大佬指正