目录
SQL语句:
1.DDL 操作数据库和数据表
2.DML表数据的增删改
3.DQL表数据的查询
基础查询:
条件查询 :
聚合函数查询
排序查询
分组查询
分页查询
-- 公式:开始索引 = (想显示的第几页的页码-1) * 每页显示的条数
约束
1.主键约束
2.主键自动增长约束
3.唯一约束【值不能重复】
4.非空约束
5.外键约束
6.外键的级联更新和级联删除(了解)
DDL 对数据库,表,列进行操作 create drop alter show
数据库操作
crud
【增删进行个判断,是否存在】
创建(增)create
* 创建数据库: create database 库名称;
* 创建数据库,判断不存在,再创建: create database if not exists 库名;
* 创建数据库,并指定字符集 create database XXX character set GBK;
* 创建db4数据库,判断是否存在,并制定字符集为gbk
create database if not exists XXX character set GBK;
D(Delete):删除
* 删除数据库 drop database XXX;
* 判断数据库存在,存在再删除 drop database if exists XXX;
U(Update):修改
* 修改数据库的字符集 alter databse XXX character set GBK;
R(Retrieve):查询
* 查询所有数据库的名称: show databses;
* 查询某个数据库的字符集:查询某个数据库的创建语句 show create databse XXX;
使用
* 查询当前正在使用的数据库名称 select database();
* 使用数据库 use XXX;
关于表操作【删除进行个判断,是否存在】
创建(增)
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
....
列名n 数据类型n
);
-- 注意:最后一列,不需要加逗号
* 复制表 create table XXX like XXXed;
数据类型:
1. int:整数类型
* age int
2. double:小数类型
* score double(5,2)
* price double
3. date:日期,只包含年月日 yyyy-MM-dd
4. datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
5. timestamp:时间戳类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss
* 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
6. varchar:字符串
* name varchar(20):姓名最大20个字符
* zhangsan 8个字符 张三 2个字符
删
drop table XXX;
drop table if exists XXX;
改【对表及其表中的某列操作】修改表中的列
* 修改表名 alter table XXX rename to 新XXX;
* 修改表的字符集 alter table XXX character set GBk;
* 添加一列 alter table XXX add 列名 数据类型;
* 修改列名称及类型 alter table XXX change 列名 新列名 新数据类型;
* 修改某列的数据类型 alter table XXX modify 列名 新数据类型;
* 删除列 alter table XXX drop 列名
查
* 查询某个数据库中所有的表名称 show tables;
* 查询表结构 desc XXX;
* 查询表中的字符集 SHOW TABLE STATUS FROM 库名 LIKE '表名';
DML增删改表中数据 insert into , delete, update ,select
对数据进行操作
Eg:insert into stu values(3,’张三丰’,17,99.9,”1893-11-11”,null);
* 添加数据:insert into 表名 ( 列名1,列名2 ) values(值1,值2 );
列和值要一一对应, 列名
默认给全部列添加数据 INSERT INTO 表名 VALUES (值1,值2,值3,...);
除了数字类型,其他类型需要使用引号(单双都可以)引起来【日期类型≠数字类型】
* 删除表中数据:
delete from 表名 [where 条件] 不加条件代表全删
全删推荐用 truncate table 表明
* 修改数据:
update 表名 set 列名1 = 值1, 列名2 = 值2,... where 条件; 不加条件代表全改
eg:update stu set age=11 where id=20;
【字段:列表中的每个列名】
1.语法:
查询全部: select * from 表名; 查询表中全部内容
指定字段查询: select 字段名1,字段名2... from 表名;
去重复查询: SELECT DISTINCT 列名1,列名2,... FROM 表名;
计算列(四则运算): SELECT 列名1 运算符(+ - * /) 列名2 FROM 表名;
计算列时,如果某一列为null,可以进行替换
ifnull(表达式1,表达式2)表达式1:想替换的列
表达式2:想替换的值null参与的运算,计算结果都为null
eg:SELECT NAME, math, math+IFNULL(english,0) FROM student;
SELECT NAME,IFNULL(stock,0)+10 FROM product;如果stock列有的值为null,那么把他替换为0,在进行+10运算
给列起别名: SELECT 列名1,列名2,... AS 别名 FROM 表名;
as关键字可以省略
eg:SELECT NAME,IFNULL(stock,0)+10 AS getsum FROM product;
SELECT NAME,IFNULL(stock,0)+10 getsum FROM product;
符号 | 功能 |
---|---|
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
= | 等于 |
<> 或 != | 不等于 |
BETWEEN ... AND ... | 在某个范围之内(都包含) |
IN(...) | 多选一 |
LIKE 占位符 | 模糊查询 _一个任意字符 %多个任意字符 |
IS NULL | 是NULL |
IS NOT NULL | 不是NULL |
AND 或 && | 并且 |
OR 或 || | 或者 |
NOT 或 ! | 非,不是 |
条件查询语法:写在where后
将一列数据作为一个整体,进行纵向的计算
聚合函数分类
函数名 | 功能 |
---|---|
count(列名) | 统计数量(一般选用不为null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
聚合函数语法:
-- 标准语法
SELECT 函数名(列名) FROM 表名 [WHERE 条件]; 【where可有可无】
排序分类
注意:多个排序条件,当前边的条件值一样时,才会判断第二条件
关键词 | 功能 |
---|---|
ORDER BY 列名1 排序方式1 , 列名2 排序方式2 | 对指定列排序,ASC升序(默认的) DESC降序 |
标准语法:
SELECT 列名 FROM 表名 [WHERE 条件] ORDER BY 列名1 排序方式1,列名2 排序方式2;[where] 中括号内容表示可有可无
排序方式:
ASC升序【默认】 DESC降序 不写则默认为升序
如果有多个排序条件,只有当前边的条件值一样时,才会判断第二条件
-- 标准语法
SELECT 列名 FROM 表名 [WHERE 条件] GROUP BY 分组列名 [HAVING 分组后条件过滤] [ORDER BY 排序列名 排序方式];
先按照要求进行分组,分完组后在查询要求的字段
先按照要求进行分组,将列值相同的一条数据归纳到一组当中,然后按照要求查每组的字段
where 和 having 的区别?
1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。
当我们查询出来的数据比较多时,可以进行分页查询操作。
第一页:(1-1)*3
第二页:(2-1)*3
- limit 是一个MySQL"方言"
语法:
总结查:
1.基础查询:多字段查询,去重复查询,计算列,取别名,多条件查询
2. DQL:查询语句
1. 排序查询
2. 聚合函数
3. 分组查询
4. 分页查询
约束的概念
对表中的数据进行限定,保证数据的正确性、有效性、完整性!
约束的分类
约束 | 说明 |
---|---|
PRIMARY KEY | 主键约束 |
PRIMARY KEY AUTO_INCREMENT | 主键、自动增长 |
UNIQUE | 唯一约束 |
NOT NULL | 非空约束 |
FOREIGN KEY | 外键约束 |
FOREIGN KEY ON UPDATE CASCADE | 外键级联更新 |
FOREIGN KEY ON DELETE CASCADE | 外键级联删除 |
主键约束特点
主键约束包含:非空【不能为null】和唯一【不能重复】两个功能
一张表只能有一个列作为主键
主键一般用于表中数据的唯一标识
将来给主键这一列添加数据的时候,可以写成null,它会根据我们的编号自动增长填充数据
并非局限于主键,其他键也可以
比如订单表和用户表,一个用户可以拥有订单,理论上是存在联系的,比如1号订单属于1号用户的,3号订单属于2号用户的,而在实际创建表中,我们没有对其进行添加约束,那么这两张表没有任何联系,是单独存在的两张表
外键约束: 两表之间有关联关系的时候,如果没有数据约束,则无法保证数据的准确性。
将orderlist表中字段uid 列作为外键,关联user表中的id
添加失败,因为user表中没有uid与3关联的用户。
删除李四失败,因为订单表中由于其关联的数据
什么是级联更新和级联删除
当我想把主表中的某个用户删掉,我希望该用户所有的订单也随之被删除
当我想把主表中的某个用户id修改,我希望订单表中该用户所属的订单用户编号也随之修改