目录
一、关系型数据库核心元素
- 数据库(表的集合,一个数据库中能够有多个表)——database
- 表(由行和列组成的二维表格),数据库中存储数据的基本单位——table
- 行(记录),表中的一行,在数据库中叫做记录——record
- 列(字段),表中的一列,在数据库中叫做字段——field
二、SQL语言主要分类
- DQL:数据查询语言,用于对数据进行查询,如select;
- DDL:数据定义语言,进行数据库、表的管理,如create、drop;
- DML:数据操作语言,对数据进行增、删、改,如insert、delete、update;
- TPL:事物处理语言,对事物进行处理,包括begin transaction,commit,rollback;
三、注释
(1)单行注释
--注释的内容
(2) 多行注释
/*注释的内容*/
四、常用数据类型
- 整数:int
- 小整数:tinyint
- 小数:decimal
- 字符串:varchar
- 日期时间:datetime
五、常用的SQL语言(不分大小写)
1、创建表:create table
create table 表名(
字段名 数据类型 约束,
字段名 数据类型 约束
...
);
2、添加数据:insert
- 类型一:所有字段设置值,值的顺序与表中字段的顺序对应
insert into 表名 values(...);
- 类型二:部分字段设置值,值的顺序与给出的字段顺序对应
insert into 表名(字段1,字段2,...) values(值1,值2,...);
- 一条insert语句添加多条记录,数据之间用英文逗号隔开
insert into 表名 values(...),(...)...; --所有字段
insert into 表名(字段1,...) values(值1,...),(值1,...)...; --部分字段
3、简单查询:select
- 查询所有字段
select * from 表名;
- 查询指定字段
select 字段1,字段2,... from 表名;
select 字段1 as 别名,字段2 as 别名,... from 表名 as 别名; --给字段和表取别名,as可以省略
注:distinct可以消除查询结果的重复,加在select后
4、修改数据:update
update 表名 set 字段1=值1,字段2=值2... where 条件;
5、删除表中记录:delete
delete from 表名 where 条件;
6、删除表中记录:truncate
truncate table 表名; --直接删整个表
truncate与delete的区别:
- 在速度上,truncate>delete;
- 如果想删除部分数据用delete,注意带上where字句;
- 如果想保留表而将所有数据删除,自增长字段恢复从1开始,用truncate;
7、删除表:drop table
drop table 表名;
drop table if exists 表名; --先判断表是否存在,再执行删除命令
六、常用的字段约束
1、主键(primary key)
注:值不能重复,auto_increment代表值自动增长
create table 表名(
字段名 数据类型 primary key auto_increment,
字段名 数据类型 约束
...
constraint primary key(字段名) --主键也可以在最后建,任选其一
);
注:插入时主键自增长字段的值可以用占位符代替,0或null
2、非空(not null)
注:此字段不允许填写空值
create table 表名(
字段名 数据类型 not null,
...
);
3、唯一(unique)
注:此字段的值不允许重复
create table 表名(
字段名 数据类型 unique,
...
);
4、默认值(default)
注:当不填写此值时会使用默认值,如果填写时以填写为准
create table 表名(
字段名 数据类型 default 值,
...
);
七、条件查询
1、比较运算符
- 等于:=
- 大于:>
- 大于等于:>=
- 小于:<
- 小于等于:<=
- 不等于:!= 或 <>
2、逻辑运算符
- and(与),and有两个条件,必须同时满足
- or(或),or有两个条件,满足其一即可
- not(非),not只有一个条件,结果与条件相反
3、模糊查询
- like
- % 表示任意多个任意字符,配合like使用
- _ 表示一个任意字符,配合like使用
4、范围查询
- in表示在一个非连续的范围内,not in表示不在非连续的范围内,in(值1,值2,...)
- between...and...表示在一个连续的范围内,not between... and...表示不在一个连续的范围内
5、空判断
- 判断空:is null
- 判断非空:is not null
注意:null与''是不同的,null代表什么都没有,''代表长度为0的字符串
八、排序
- asc(默认值)从小到大排序,即升序
- desc从大到小排序,即降序
select * from 表名 where 条件
order by 字段1 asc|desc,字段2 asc|desc,... --默认是升序,asc可以不写,字段在前优先级高
九、聚合函数
1、count 总记录数
count(*)表示计算总记录数,括号中写*与字段名,结果是相同的
2、max 最大值
max(字段)表示求此字段的最大值
3、min 最小值
min(字段)表示求此字段的最小值
4、sum 求和
sum(字段)表示求此字段的总和
5、avg 平均值
avg(字段)表示求此字段的平均值
注意:(1)聚合函数不能在where后面的条件中使用
(2)聚合函数不能与普通字段同时出现在查询结果中
(3)count函数不忽略空值null,其余的忽略空值null
十、数据分组
1、分组(group by)
- 按照字段分组,表示此字段相同的数据会被放到一个组中
- 分组的目的是配合聚合函数,聚合函数会对每一组的数据分别进行统计
select 字段1,字段2,聚合函数...
from 表名
where 约束条件
group by 字段1,字段2...
2、分组后的数据筛选(having)
select 字段1,字段2,聚合函数...
from 表名
where 约束条件
group by 字段1,字段2...
having 字段1,...聚合...
注意:使用having前必须先分组group by
对比where与having:
- where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
- having是对group by的结果进行筛选
- having后面的条件中可以使用聚合函数,where后面的条件不可以使用聚合函数
十一、数据分页显示
1、获取部分行
- limit 开始,获取行数
- 从start开始,获取count条数据
- start索引从0开始,如省略start默认从0开始
select * from 表名 limit start,count
2、分页
- 当一张表记录特别多的时候,就需要用到分页显示
- 已知:每页显示m条数据,求:查询第n页的数据
select * from 表名 limit (n-1)*m,m