1.创建数据库表
创建的sql范式:create table [表名称](表字段名称1 类型 [约束条件],表字段名称2 类型 [约束条件],...) character set [字符集] collate [校验规则] engine [存储引擎];
2.插入数据
(1)全列插入
指的是,在插入数据的时候,指定了所有列对应的数据
sql范式:insert into [表名称] values(字段的值1,字段的值2,字段的值3,...);
(2)指定列插入
指的是,在插入数据的时候,指定部分列进行插入
sql范式:insert into [表名称](指定插入列名称1,指定插入列名称2,...) values(字段的值1,字段的值2,...);
(3)多行插入
指的是,一个插入的sql 语句可以插入多行数据
全列插入的多行,sql范式:insert into [表名称] values(字段值1,字段值2,...),(字段值1,字段值2,...),(字段值1,字段值2,...)...;
指定列插入的多行,sql范式:insert into [表名称](列名称1,列名称2,...) values(字段值1,字段值2,...),(字段值1,字段值2,...),(字段值1,字段值2,...)...;
3.表数据替换
替换是将原来的数据,先删除掉,在重新插入一行数据;
要替换的一行数据内,一定要有一个唯一的字段;
sql范式:replace into [表名称] values(字段名称);
4.基础查询
(1)全列查询
select * from [表名称]
(2)指定列查询
select [字段名称1],[字段名称2],...from [表名称]
(3)结果去重
distinct 关键字
select distinct [字段名称1],[字段名称2].... from [表名];
(4)where条件
约束sql语句在查询的时候,展示部分行的数据;指定查询出来的行,需要满足什么条件
运算符 | 说明 |
>,>=,<= | 大于,大于等于,小于,小于等于 |
= | 等于,NULL不安全,eg:NULL=NULL结果是NULL |
<=> | 不等于,NULL安全,eg:NULL<=>NULL结果是TRUE(1) |
!=,<> | 不等于 |
between a and b | 范围匹配,[a,b],如果a<=value<=b,返回true(1) |
in(option,....) | 如果option中的任意一个,返回TRUE(1) |
is null | 是NULL |
is not null | 不是NULL |
like | 模糊匹配 %表示任意多个(包括0个)任意字符; _表示任意一个字符 |
逻辑运算符 | 说明 |
AND | 多个条件都必须为TRUE(1),结果才是TRUE(1) |
OR | 任意一个条件为TRUE(1),结果才为TURE(1) |
NOT | 条件为TURE(1),结果为FALSE(0) |
eg:查询语文成绩在[80,100]之间的学生,两种方法,第一种使用and条件进行连接,第二种使用between a and b。
eg:数学成绩是44或者72或者74或者76分的学生及其数学成绩和编号,两种方法,第一种是使用逻辑运算符or,第二种是使用运算符in。
eg:姓何的同学以及何某同学
eg:数学成绩大于英语成绩的学生
eg:总分在180分以下的学生(注意:别名不能用在where中)
eg:英语成绩<=70并且不姓何的同学(使用and和not)
eg:何某同学,或者要求总成绩>240并且语文成绩>数学成绩并且英语成绩>76
eg:查询电话号码不为空的学生
eg:=和<=>的区别
(5)排序输出
sql范式:select 字段1,字段2 from [表名称] order by [字段名] [asc/desc]
按照 order by 后面的字段进行排序;asc为升序,默认的;desc为降序。
如果出现多个字段,先按照order by后面的第一个字段进行排序;如果第一个字段当中的排序结果有重复值,则按照第二个字段进行排序,依次类推。
order by中可以使用列别名
注意:NULL被视为比任何值都小的值,升序时出现在最上面,降序时出现在最下面;
(6)筛选分页结果
关键字:limit
应用场景:当一个表中的数据特别多的时候,如果进行查询,此时需要的时间会比较长;
输出结果当中展示n行内容;
有三种用法(起始下标为0):
第一种用法为从0开始,筛选n条结果
select ... from [表名称] [where...] [order by...] limit n;
第二种用法为从s开始,筛选n条结果
select ... from [表名称] [where...] [order by...] limit s,n;
第三种用法为从s开始,筛选n条结果
select ... from [表名称] [where...] [order by...] limit n offset s;
5.更新表数据
关键字是update,更新表数据;
语法:update [表名称] set [列名称] = [列的值]... [where...] [order by ...] [limit...];
注意:如果在更新的时候,sql语句当中没有使用where语句来确定更新的行,则会将全表的数据都更新;除非有权标更新列内容的要求,否则一定要使用where语句来进行约束;update并没有删除原来的数据,而是将原来的表数据进行了更新。
6.删除表
delete from table_name [where...] [order by...] [limit...];
删除表数据的内容,而不是删除表结构;
如果不加where或者其他约束条件,则就将全表数据全部删除了,谨慎使用;
如果说表字段当中有自增列,当我们删除了表数据之后,对表当中的自增列没有任何影响。
7.截断表
truncate table_name;
相当于全表删除数据,本质上是将表删除了,重新建立一张新表;
截断表的操作也要慎用,因为针对的全是表数据;
8.聚合函数
(1)count([distinct] expr),返回查询到的数据的数量
eg:统计班级中共有多少名学生,姓名不重复的学生多少名
(2)sum([distinct] expr),返回查询到的数据的总和,不是数字没有意义
eg:统计学生的语文成绩总分
(3)avg([distinct] expr),返回查询到的数据的平均值,不是数字没有意义
eg:统计学生的总成绩的平均分
(4)max([distinct] expr),返回查询到的数据的最大值,不是数字没意义
eg:返回英语最高成绩
(5)min([distinct] expr),返回查询到的数据的最小值,不是数字没意义
eg:返回英语最低成绩
eg:返回大于70分以上的英语的最低成绩
9.分组查询
在select中使用group by子句可对指定列进行分组查询
例题:emp员工表、dept部门表、salgrade工资等级表
eg:显示出每个部门的平均工资和最高工资
eg:显示每个部门的每种岗位的平均工资和最低工资
eg:显示平均工资低于2400的部门和它的平均工资
group by 搭配having使用,对group by 结果进行过滤
eg:显示每个岗位的平均薪资