SQL是一种结构化的查询语言,是关系型数据库通用的命令
遵循了SQL92的标准
SQL的常用种类
DDL definition 数据定义语言
DCL control 数据控制语言
DML Manipulation 数据操作语言
DQL Query 数据查询语言
数据库的逻辑结构
库属性:字符集、排序规则
表属性:存储引擎类型、字符集、排序规则
列属性:数据类型、约束、其他属性
字符集
相当于编码表
最开始是ASCII码
国内常用utf8、utf8mb4、gbk
utf8 每个汉字3字节
utf8mb4 每个汉字4字节(推荐)、支持emoji
排序规则(校对规则)collation
影响对于英文字符串大小写的敏感度
一般选择bin结尾的
utf8mb4_bin 大小写敏感(包括拼音、日文)
utf8mb4_general_ci 大小写不敏感
数据类型(列的属性,在表中定义键时进行定义)
数字型
小整型TINYINT 0-255
整型INT
浮点数float
位数 bit 0或1
字符串型
定长字符串char(100) 立即申请固定空间,剩余用空格填充
变长字符串varchar(100) 每次存储之前都判断长度,来分配空间,如果少于255就会单独申请一个字符长度存储空间,如果超过255会占用两个存储空间
如何选择char与varchar:
1.少于255字符长度的、定长的列值,选择char
2.多余225字符长度、变长的字符串,可以选择varchar
枚举型
enum 枚举数据类型,类似于列表
将所有可能性放入其中的数据类型,比如
name enum(’wangsheng’,’xuehuiying’)
时间型
DATE
格式YYYY-MM-DD
TIME
格式hh:mm:ss[毫秒]
DATETIME
结合了date和time的用法,支持1000-9999年
TIMESTAMP
结合了date和time的用法,是一个常量,1970年到现在的秒数,支持1970-2038年,并且支持时区自动变更
DDL语句
数据定义语言,对库和表进行定义
库定义
1 | 创建库 |
库的定义规范
1.建库使用小写字符——因为开发环境用windows不区分大小写,测试环境使用linux小写
2.库名不能以数字开头
3.不能是数据库内部关键字
4.建库必须设置字符集
也可以在my.cnf中添加默认字符集参数
character-set-server=utf8mb4
表定义
建表
表名、表属性、列名、列属性
使用软件点点点创建表
可以看到表属性有:表名称、存储引擎、字符集、核对规则
可以看到列属性有:列名、数据类型、长度、默认值、主键约束、是否为空、是否自增、
使用命令创建表和列
1 | 相关列属性: |
表定义规范
1.表名使用小写字母,不能数字开头,不能关键字、保留字符
2.选择合适的数据类型与长度
3.每个列都设置not null+默认值这种形式,对于数字就默认0,对于字符就默认空格
4.每个列必须加注释comment
5.表必须设置存储引擎类型和字符集(也可以在my.cnf中加入)
6.主键尽量设置无关数字列,并且最好自增长
7.enum类型不要保存数字
修改表
1 | 查询表信息 |
DML语句
DML只有三个命令
insert update delete
对于数据行的操作,即插入、修改、删除
1 | DESC xuehuiyinge3; |
DQL语句
select
show
DQL是要求最高的语句,因为使用频率高,需要优化的频率比较高
select的应用
select单独使用
1 | 查找函数 |
select通用语法(常用)
from 表
where 列条件,过滤,类似于grep
group by 条件
order by 条件
limit 条件
1 | from: |
聚合函数与group by
常用聚合函数
max(),min(),avg(),count(),sum()等
类似于excle中的筛选和排序、函数使用
group by后面跟的是分组条件
1 | 统计每个国家的城市个数 |
having子句
在group by后如果要进行筛选,用where就会变形:此时还没有筛选呢,用where需要根据筛选的后果进行过滤,就不行
此时就需要使用having
1 | 统计所有国家的总人口数,且过滤人口数大于1e的 |
order by子句
是一个排序功能。同have,需要以结果为目的进行排序的情况下使用
1 | 统计所有国家的总人口数量,过滤人口数大于5000w |
limit子句
和head less类似
1 | 统计所有国家的总人口数量,过滤人口数大于5000w,并按照从大到小排序 |
union和union all
提供多个结果期合并查询的功能
其索引等级比使用or或and等逻辑判断高,所以其性能更好
1 | select * from city where country='CN' or country='USA'; |
综合示例
1 | 统计中国每个省的总人口数,只打印总人口数小于100w的 |
select多表连接查询
多表查询,就是内连接
要查找的内容是多个表查询的结果的组合,就需要进行多表连接查询
1 | 查询世界上小于100人的城市、所在国家名、国土面积、城市名、人口数 |
多表语法规则
1 | 1.找到多张表之间的关联条件列 |
多表语法案例
1 | 项目搭建语句 |
1 | student表: |
select别名
一直写表名.列名太麻烦了,所以搞个别名
表别名
1 | 修改之前 |
列别名
1 | 修改之前 |
show语句
1 | 一些常用的 |