Day02
一.回顾Day1知识点(增删改查)
1.1增
创建数据库:create database 库名;
创建表::create table 表名;
1.2删
删除数据库:drop database 库名;
删除表:drop table 表名;
删除字段:alter table 表名 drop 删除的字段名;
1.3改
切换数据库:use 库名;
更改表名 :rename table 旧表名 to 新表名;
增加表中字段:alter table 表名 add 字段名 字段类型;
修改表中字段:alter table 表名 change 旧字段名 新字段名 字段类型;
1.4查
查看所有库:show databases;
查看当前使用的库:select database();
查看指定库的建库语句:show create database 库名;
查看字段(本质就是查看表结构):desc 表名;
查看所有表:show tables ;
查看建表语句:show create table 表名;
二.表中记录操作
2.1插入数据记录
代码:insert into 表名 (字段名,字段名,...) values (值,值,值,....);
注意1: 具体值要和前面的字段名以及顺序一一对应上
注意2: 如果要插入的是所有字段,那么字段名可以省略(默认代表所有列都要插入数据)
注意3: 如果要插入多条记录,values后多条数据使用 逗号 分隔
2.2修改数据记录
代码:update 表名 set 字段名 = 新值 {where 条件 = 条件};---(where id = 1) 注意: 如果没有加条件就是修改对应字段的所有数据
2.3删除数据记录
代码:delete from 表名 where 条件 ;
注意: 如果没有加条件就是删除所有数据
2.3.1清空所有数据
方式1: delete from 表名; 注意:此方式有警告
方式2: truncate [table] 表名; 注意: 此方式没有警告
三.表中约束
3.1主键约束
主键约束关键字: primary key
主键约束特点: 限制主键插入的数据不能为空,不能重复
建表的时候添加主键约束: create table 表名(主键名 主键类型 primary key , 其他字段...);
注意: 一个表中只能有一个主键
3.1.1添加主键约束的方式
# 添加主键约束方式1: 建表时候添加
create table stu1(
id varchar(100) PRIMARY KEY,
name varchar(100),
age int,
cls varchar(100)
);
# 添加主键约束方式2: 建表后添加
create table stu2(
id varchar(100),
name varchar(100),
age int,
cls varchar(100)
);
alter table stu2 add PRIMARY KEY (id);
3.1.2 图示:
3.2主键自增
自增关键字: auto_increment
自增特点: 默认从1开始,每次自动加1
注意: 如果插入数据的时候指定了id字段,可以使用null或者0占位表示自动使用自增
建表的时候添加主键自增约束: create table 表名(主键名 主键类型 primary key auto_increment , 其他字段...);
3.2.1图示:
3.3非空约束
非空约束关键字: not null
非空约束特点: 限制对应数据不能为空null
建表的时候添加非空约束: create table 表名(主键名 主键类型 primary key ,字段名 字段类型 not null , 其他字段...);
注意: 一个表中可以有多个非空约束
3.3.1图示:
3.4唯一约束
唯一约束关键字: unique
唯一约束特点: 限制对应的数据不能重复
建表的时候添加唯一约束: create table 表名(主键名 主键类型 primary key ,字段名 字段类型 unique, 其他字段...);
注意: 一个表中可以有多个唯一约束
3.4.1图示:
3.5默认约束
默认约束关键字: default
默认约束特点: 可以提前给字段设置默认值
建表的时候添加默认约束: create table 表名(主键名 主键类型 primary key ,字段名 字段类型 default 默认值, 其他字段...);
注意: 一个表中可以有多个默认约束
3.5.1图示:
四.单表查询
4.1准备数据
#创建库名
create database Day02;
#
use day02_db;
# 创建商品表
CREATE TABLE product
(
pid INT PRIMARY KEY,
pname VARCHAR(20),
price DOUBLE,
category_id VARCHAR(32)
);
# 插入数据
INSERT INTO product(pid,pname,price,category_id) VALUES(1,'联想',5000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(2,'海尔',3000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(3,'雷神',5000,'c001');
INSERT INTO product(pid,pname,price,category_id) VALUES(4,'杰克琼斯',800,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(5,'真维斯',200,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(6,'花花公子',440,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(7,'劲霸',2000,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(8,'香奈儿',800,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(9,'相宜本草',200,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(10,'面霸',5,'c003');
INSERT INTO product(pid,pname,price,category_id) VALUES(11,'好想你枣',56,'c004');
INSERT INTO product(pid,pname,price,category_id) VALUES(12,'香飘飘奶茶',1,'c005');
INSERT INTO product(pid,pname,price,category_id) VALUES(13,'海澜之家',1,'c002');
INSERT INTO product(pid,pname,price,category_id) VALUES(14,'小米',1999,'');
INSERT INTO product(pid,pname,price,category_id) VALUES(15,'华为',6999,'null');
INSERT INTO product(pid,pname,price,category_id) VALUES(16,'蜜雪冰城',1,null);
4.2基础查询
基础查询关键字: select:查什么 from: 从哪儿查
基础查询格式: select [distinct] 字段名 as 新字段名 / * from 表名;
[]:可以省略
/: 或者
*: 对应表的所有字段名
distinct: 去除重复内容
as : 可以给表或者字段起别名
例如:select pname as 商品名称 from products;
注意:在平时练习可以使用中文,但是在工作中不太建议使用中文。
4.3条件查询
条件查询关键字: where
条件查询基础格式: select 字段名 from 表名 where 条件;
4.3.1 比较运算符:
符号:> < >= <= != <>
a)查询价格大于3000的商品信息
select * from product where price > 3000;
b)查询价格小于4000的商品信息
select * from product where price < 4000;
c)查询商品价格等于500的商品信息
select * from product where price = 500;
d)查询商品价格大于等于3000的商品信息
select * from product where price >= 3000;
e)查询商品价格不等于2000的商品信息
select * from product where price != 2000;
select * from product where price <> 2000;
4.3.2 逻辑运算符
符号:and or not
a)统计商品价格大于等于2000并且小于等于5000的商品信息
select * from product where price >= 2000 and price <=5000;
b)统计商品价格等于1,或者等于200,或者等于3000的商品信息
select * from product where price = 1 or price = 200 or price = 3000;
c)统计商品价格不在 2000-5000之间的商品信息
select * from product where price < 2000 or price > 5000;
select * from product where not (price >= 2000 and price <=5000);
4.3.3范围查询
连续范围:between x and y
非连续范围: in(x,y)
a)统计商品价格大于等于2000并且小于等于5000的商品信息
select * from product where price BETWEEN 2000 and 5000;
b)统计商品名称是小米或者华为或者花花公子的商品信息
select * from product where pname in ('小米','华为','花花公子');
c) 统计商品价格等于1,或者等于200,或者等于3000的商品信息
select * from product where price in (1,200,3000);
4.3.4 模糊 查询
关键字:like %:0个或者多个字符 _:一个字符
a)查找商品名称带'想'字的商品信息
select * from product where pname like '%想%';
b)查找商品名称以'海'字开头并且是2个字的商品信息
select * from product where pname like '海_';
c)查找商品名称第2个字是'想'字的商品信息
select * from product where pname like '_想%';
4.3.5非空 判断
为空: is null 不为空:is not null
注意: mysql中的null和空字符串''以及字符串'null'不是一回事
mysql中null代表空的,没有任何意义的
''代表空字符串
'null'代表具体字符串
a)查找category_id为空(null)的数据
select * from product where category_id IS NULL;
b)查找category_id不为空(null)的数据
select * from product where category_id IS NOT NULL;
4.4排序查询
关键字: order by
排序查询格式: select 字段名 from 表名 ... order by 字段名 asc|desc;
asc: 升序 (默认)
desc: 降序
a)查询所有category_id为c002的商品,并按价格升序排序
select * from product where category_id = 'c002' order by price;
b)查询所有category_id为c002的商品,并按价格降序排序
select * from product where category_id = 'c002' order by price desc;
4.5聚合函数
聚合函数: 又叫统计函数也叫分组函数
常见聚合函数: count() sum() avg() max() min()
注意: 聚合函数(字段名)方式会自动忽略null值
统计数据的时候,即使某条记录为空,依然也算一条数据
如何不忽略null值统计个数?: count(主键)或者count(*)也可以用cont(常量)
例子
a)统计商品总个数
select count(*) from product;
b)统计商品分类id不为空的商品个数
select count(*) from product where category_id is not null;
c)统计所有商品的总价
select sum(price) from product;
d)统计所有商品的平均价格
select avg(price) from product;
e)统计所有商品的最大价格
select max(price) from product;
d)统计所有商品的最大价格
select min(price) from product;