建表:
create table 表名 (
id int comment 'ID,唯一标识', # id是一行数据的唯一标识(不能重复)
username varchar(20) comment '用户名',
name varchar(10) comment '姓名',
age int comment '年龄',
gender char(1) comment '性别'
) comment '**表';
建表约束:
约束 | 描述 | 关键字 |
---|---|---|
非空约束 | 限制该字段值不能为null | not null |
唯一约束 | 保证字段的所有数据都是唯一、不重复的 | unique |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | primary key |
默认约束 | 保存数据时,如果未指定该字段值,则采用默认值 | default |
外键约束 | 让两张表的数据建立连接,保证数据的一致性和完整性 | foreign key |
sql数据类型:
数值类型:字符串类型:时间类型:
mysql的CRUD:
-
添加数据(INSERT):insert into 表名 (字段名1, 字段名2) values (值1, 值2);
-
修改数据(UPDATE):update 表名 set 字段名1 = 值1 , 字段名2 = 值2 , .... [where 条件] ;
-
删除数据(DELETE):delete from 表名 [where 条件] ;
查询分为:
1.基本查询 select 字段1, 字段2, 字段3 from 表名;
2.条件查询 select 字段列表 from 表名 where 条件列表 ; -- 条件列表:意味着可以有多个条件
3.聚合查询 select 聚合函数(字段列表) from 表名 ;
4.分组查询 select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
5.排序查询 select 字段列表 from 表名 [where 条件列表] [group by 分组字段 ] order by 字段1 排序方式1 , 字段2 排序方式2 … ;
6.分页查询 select 字段列表 from 表名 limit 起始索引, 查询记录数 ;
内外连接 /子查询
内连接: select 字段列表 from 表1 [ inner ] join 表2 on 连接条件 where 过滤条件 ;
外连接: select 字段列表 from 表1 left [ outer ] join 表2 on 连接条件 ... ;
***左外连接相当于查询表1(左表)的所有数据,当然也包含表1和表2交集部分的数据。
1.rank() over()
查出指定条件后进行排名。特点是,加入是对学生排名,使用这个函数,成绩相同的两名是并列,下一位同学空出所占的名次。
--按各科成绩进行排序,并显示排名, Score 重复时保留名次空缺
SELECT sc.cid,sc.sid,sc.score ,RANK() over(PARTITION by cid order BY score DESC)as 排名 FROM sc;
2.dense_rank() over()
与rank() over的区别是,两名学生的成绩并列以后,下一位同学并不空出所占的名次。
3.row_num() over()
这个函数不需要考虑是否并列,哪怕根据条件查询出来的数值相同也会进行连续排名。
4.row_number()
需要把多行数据按照某个字段score降序排序,并且新增一个字段作为排序序号
5.partition by
用于实现数据分段的关键字。它的作用是对结果集进行逻辑分组,在每个分组中进行独立的计算
6.order by /group by
order by升降序排序,group by 当sql中有 聚合函数(count/sum/avg)使用