一、DDL-数据定义语言,操作数据库(CRUD)和表(CRUD)
1 创建数据库(指定字符集)
create database 数据库名称 character set utf8;
数据库和表修改都是 Alter 查看都是show 删除都是drop
2 创建表
create table 表名称(字段名 数据类型,字段名 数据类型,... ...字段名 数据类型
);
二、DML-数据操作语言,对表中的数据进行增删改
1 添加数据
– 给指定字段添加数据值
insert into 表名(字段名,字段名,...) values (值1,值2,...);
-- 给所有字段添加数据insert into 表名 values (值1,值2,...);
– 批量添加多条数据
insert into 表名(字段名,字段名,...) values (值1,值2,...),(值1,值2,...),...;insert into 表名 values (值1,值2,...),(值1,值2,...),...;
注意:值和字段要一一对应,个数一样,类型和长度要符合字段要求。
2 修改数据
– 带条件修改
update 表名 set 字段名=值,字段名=值,... where 条件;
– 不带条件修改,修改当前列所有数据【慎用】
update 表名 set 字段名=值,字段名=值,...;
3 删除数据
– 带条件删除
delete from 表名 where 条件;
– 不带条件删除,删除表中所有数据【慎用】
delete from 表名;
三、DQL-数据查询语言,对表中的数据进行查询
1 查询全部数据
– 查询指定字段
select 字段名,字段名,... from 表名;
– 查询所有字段
select * from 表名;
– 查询字段取别名
select 字段名 AS 别名,字段名 别名,... from 表名;
例子:
-- 查询商品名称和库存,库存数量在原有基础上加10。进行null值判断。起别名为getsum[AS可以省略]
-- 如果第一个参数的表达式 expression 为 NULL,则返回第二个参数的备用值
SELECT NAME,IFNULL(stock,0)+10 AS getsum FROM product;
SELECT NAME,IFNULL(stock,0)+10 getsum FROM product;
– 说明:ifnull(字段名,0) 如果该字段的值是null,那么用0代替参与四则运算。
2 按条件查询
select * from 表名 where 字段名>值;
select * from 表名 where 字段名 is null;
select * from 表名 where 字段名 is not null;
– 条件连接符:and or
select * from 表名 where 字段名>=值1 and 字段名<=值2;
– between 值1 and 值2 等价于 where 字段名>=值1 and 字段名<=值2;
select * from 表名 where 字段名>=值1 and 字段名<=值2;
– 等价于
select * from 表名 where 字段名 between 值1 and 值2;
– in()查询
select * from 表名 where 字段名=值1 or 字段名=值2 or 字段名=值3;
– 等价于
select * from 表名 where 字段名 in(值1,值2,值3);
– like模糊查询: where 字段名 like ‘带占位符的字符串’;
– 占位符: _表示一个字符的占位符,%表示任意个数字符的占位符
select * from 表名 where 字段名 like '%电脑%';
3 聚合函数
-- 聚合函数查询
-- 计算product表中总记录条数
SELECT COUNT(*) FROM product;-- 获取最高价格
SELECT MAX(price) FROM product;-- 获取最低库存
SELECT MIN(stock) FROM product;-- 获取库存总数量
SELECT SUM(stock) FROM product;-- 获取品牌为苹果的总库存数量
SELECT SUM(stock) FROM product WHERE brand ='苹果';-- 获取品牌为小米的平均商品价格
SELECT AVG(price) FROM product WHERE brand = '小米';
4 分组查询
关键字:group by 字段名
select 分组字段名/聚合函数 from 表名 [where 条件] group by 字段名 [having 条件];
例子:
-- 分组查询-- 按照品牌分组,获取每组商品的总金额【按照谁分组,就展示哪个字段,*则默认展示第一个(分组写*无意义)】
SELECT brand,SUM(price) FROM product GROUP BY brand;-- 对金额大于4000元的商品,按照品牌分组,获取每组商品的总金额
SELECT brand,SUM(price) FROM product WHERE price >4000 GROUP BY brand;-- 对金额大于4000元的商品,按照品牌分组,获取每组商品的总金额,只显示总金额大于7000元的
SELECT brand,SUM(price) AS getsum FROM product WHERE price >4000 GROUP BY brand HAVING getsum>7000;
where和having的区别?
分组之前使用where,分组之后筛选使用having
5 排序查询
关键字:order by 字段名 ASC/DESC,字段名 ASC/DESC,…
说明1:只有前面的排序过程中两个值相等,才会按照后面的字段去排序。
说明2:如果不写ASC/DESC,那么默认是ASC升序。
select * from 表名 [where 条件] [group by 字段名] [having 条件] order by 字段名 ASC/DESC,字段名 ASC/DESC,...;
例子:
-- 排序查询
-- 按照库存升序排序
SELECT *FROM product ORDER BY stock ASC-- 查询名称中包含手机的商品信息。按照金额降序排序
SELECT *FROM product WHERE NAME LIKE '%手机%' ORDER BY price DESC;-- 按照金额升序排序,如果金额相同,按照库存降序排列
SELECT *FROM product ORDER BY price ASC,stock DESC;-- 对金额大于4000元的商品,按照品牌分组,获取每组商品的总金额,只显示总金额大于7000元的、并按总金额降序排序
SELECT brand,SUM(price) AS getsum FROM product
WHERE price >4000
GROUP BY brand
HAVING getsum>7000
ORDER BY getsum DESC;
6 分页查询
关键字:limit 当前页数据索引,每页条数; – 表中的数据索引从0开始
当前页数据索引=(当前页-1)*每页条数;
– LIMIT当前页数索引,每贝显示的条数;
– 公式:当前页数索引=(当前页数-1)*每页显示的条数
– 表中的数据索引从0开始
– 分页语句在最后
select *
from 表名
[where 条件]
[group by 字段名]
[having 条件]
[order by 字段名 ASC/DESC,字段名 ASC/DESC,...]
limit 当前页数据索引,每页条数;
例子:
-- 每页显示3条数据 (1-1)
-- 第一页 (1-1)*3
SELECT * FROM product LIMIT 0,3;-- 第二页 (2-1)*3
SELECT * FROM product LIMIT 3,3;-- 第三页 (3-1)*3
SELECT * FROM product LIMIT 6,3;
四、MySql常见数据类型
关键字 | 数据类型 | 备注 |
---|---|---|
int | 整数类型 | int(5)–>最大整数五位数,也就是99999 |
double/float | 小数类型 | 如果需要指定小数的长度,那么可以这么写: 列名 double(数据总位数,小数位数); 例如:price double(5,2),表示最大值是999.99 |
date | 日期类型 | 只包含年月日,yyyy-MM-dd |
datetime | 日期+时间 | 包含年月日时分秒 yyyy-MM-dd HH:mm:ss |
timestamp | 时间戳类型 | 包含年月日时分秒 yyyy-MM-dd HH:mm:ss,不赋值默认为系统时间毫秒值 |
varchar | 字符串类型 | 该类型必须指定字符串的最大长度,例如:name varchar(20); |