一.DDL: 操作表
1.创建表(create)
create table users(
);
2.查询表(Retrieve)
desc 查询表结构
3.数据类型
double(总长度,小数点后保留的位数)
varchar(20) 存储性能低 变长 节约空间
char()定长字符串 存储性能高 定长 浪费空间
4.删除表 drop table 表名
drop table if exists 表名
5.修改表 alter table 表名+
修改表名
alter table 表名 rename to 新表名;
添加一列
add table 表名 add 列名 数据类型;
修改数据类型
alter table 表名 modify 列名 新数据类型;
修改列名和数据类型
alter table 表名 change 列名 新列名 新数据类型;
删除列
alter table 表名 drop 列名;
二.DML : 对表中数据进行增删改
1.添加数据
给指定列添加数据:
insert into 表名 (列名1,列名2)values(值1,值2);
给所有列添加数据
insert into 表名 values();
2.修改数据 update 表名 set 列名1=值1 [where 条件]
注意:修改语句中如果不加条件,则将所有数据都修改
3.删除数据
delete from 表名
三.DQL: 查询数据
基础查询
1.查询多个字段
select 字段列表 from 表名;
select * from 表名; 尽量自己写字段表名
2.去掉重复记录
select distinct 字段列表 from 表名;
3.取别名
AS as可省略
条件查询语法
1.&& 并且 在SQL中建议使用and
between 20 and 30 在20-30
2.等于 = 不等于 != 或<>
3.或者 or || in(18,20)
4.null值的比较,不能使用=,!=,需要使用 is is not
is null is not null
5.like 模糊查询
通配符 : _ 代表单个字符 %代表任意个数字符
排序查询: order by 排序字段名1 [排序方式1],[排序方式2]
默认asc 升序 desc 降序
多个排序条件 : 只有第一个排序条件相同时,才会根据第二个排序
分组查询: group by
聚合函数:将一列数据作为一个整体,进行纵向计算 (null不参与聚合函数的运算)
count(列名)
count 统计的列名不能为null
取值:1.主键 2.*
max(列名)
min(列名)
sum(列名)
avg(列名)
分组后,查询字段要么是分组字段,要么是聚合函数,查询其它字段没有意义
where 不能对聚合函数进行判断,having可以
where在分组前使用 having在分组后使用
执行顺序: where>聚合函数>having
分页查询 limit
limit 起始索引,查询条目数
1.从0开始查询,查询3条数据
select * from stu limit 0,3
2.每页显示3条数据,查询第一页数据
select * from stu limit 0,3
3.每页显示3条数据,查询第二页数据
select * from stu limit 3,3
起始索引公式:(当前页码-1)*每页的条数
约束
约束的概念和分类
1.概念:
约束是作用于表中列上的规则,用于限制加入表的数据
约束的存在保证了数据库中数据的正确性,有效性和完整性
2.约束的分类
非空约束 ( 保证列中所有数据不能有null值 ) not null
唯一约束 ( 保证列中所有数据各不相同 ) unique
主键约束 ( 主键是一行数据的唯一标识,要求非空且唯一 ) primary key
检查约束 ( 保证列中的值满足某一条件 ) check
默认约束 ( 保存数据时,未指定值则采用默认值0) default
外键约束 ( 外键用来让两个表的数据之间建立连接,保证数据的统一性和完整性) foreign key
注:MySQL不支持检查约束
非空且唯一 : not null unique
自增长 : auto_increment 当列是数字类型,并且唯一约束
外键约束: foreign key (外键列名) references 主表(主表列名)
表关系之一对多(多对一)
如:一个部门对应多个员工,多个员工对应一个部门
实现方式:在多的一方建立外键,指向一的一方的主键
表关系之多对多
如: 一个商品对应多个订单,一个订单包含多个商品
实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
表关系之一对一
如:用户 和 用户详情
一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询性能
实现方式: 在任意一方加入外键,关联另一方主键,并且设置外键为唯一
多表查询
内连接: 查询两张表的交集
隐式内连接:
select * from user ,emp where user.id=emp.id;
显示内连接:
select * from user join emp on user.id=emp.id;
外连接:
左外连接:相当于查询A表所有数据和交集部分数据
select * from A left join B on user.id=emp.id;
右外连接:相当于查询B表所有数据和交集部分数据
select * from B left join A on user.id=emp.id;
子查询:
1.子查询根据查询结果不同,作用不同:
单行单列: 作为条件值,使用 = != > < 等进行条件判断
select 字段列表 from 表 where 字段名 =(子查询)
多行单列: 作为条件值,使用in等关键字进行条件判断
select 字段列表 from 表 where 字段名 in (子查询)
多行多列: 作为虚拟表
select 字段列表 from (子查询) where 条件;