插入语句
向表中添加某些字段
INSERT INTO 表名(字段1,字段2...) VALUES(值1,值2...);
向表中添加全部字段
INSERT INTO 表名 VALUES(值1,值2,值3)
#值与字段必须对应,个数相同,类型相同
#值的数据大小必须在字段的长度范围内
#除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
#如果要插入空值,可以不写字段,或者插入null。
蠕虫复制
- 在已有的数据基础之上,将原来的数据进行复制,插入到对应的表中 语法格式
- 将表名2的内容复制到表名1中
INSERT INTO 表名1 SELECT * FROM 表名2;
简单查询
1. 普通查询
1. 查询所有数据
SELECT * FROM 表名;
2. 查询指定列
SELECT 字段1,字段2... FROM 表名;
2. 别名查询
查询时给列、表指定别名需要AS关键字
使用别名的好处是方便观看和处理查询到的数据
SELECT 字段1 AS 别名, 字段2 AS 别名... FROM 表名;
SELECT 字段1 AS 别名, 字段2 AS 别名... FROM 表名 AS 表别名;
3.查询结果去重
SELECT DISTINCT 字段1,字段2... FROM 表名;
4. 查询结果参与运算
- 某列数据和固定值运算
SELECT 字段1 + 固定值 FROM 表名;
- 某列数据和其他列数据参与运算
SELECT 字段1 + 字段2 FROM 表名;
条件查询
建表语句
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,'JACK JONES',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,'果9',1,NULL);
练习语句
# 查询所有商品
SELECT * FROM product
# 查询商品名和商品价钱
SELECT pname AS 商品名称,price AS 价钱 FROM product AS 商品表
# 去掉重复值
SELECT DISTINCT price FROM product
# 将所有的价钱添10元
SELECT price + 10,pname,pid,category_id FROM product
# 查询商品名叫做花花公子的商品
SELECT * FROM product WHERE pname = '花花公子'
# 查询商品价格为800的商品
SELECT * FROM product WHERE price = 800;
# 查询商品价格大于60元的商品
SELECT * FROM product WHERE price > 60;
# 查询商品价钱在200到1000之间的商品
SELECT * FROM product WHERE price BETWEEN 200 AND 1000
SELECT * FROM product WHERE price >= 200 AND price <= 1000
# 查询所有商品价钱是200或者800的商品
SELECT * FROM product WHERE price = 200 OR price = 1000
SELECT * FROM product WHERE price IN(200,1000)
# 查询商品名字中包含霸字的
SELECT * FROM product WHERE pname LIKE '%霸%'
# 查询以香开头的所有名字
SELECT * FROM product WHERE pname LIKE'香%'
# 查询第二字是想的
SELECT * FROM product WHERE pname LIKE '_想%'
# 查询商品没有分类的商品
SELECT * FROM product WHERE category_id IS NULL;
# 查询所有有分类的商品
SELECT * FROM product WHERE NOT category_id IS NULL
SELECT * FROM product WHERE category_id IS NOT NULL
排序查询
通过order by语句将查询出的结果进行排序
- 格式:
SELECT * FROM 表名 ORDER BY 排序字段 ASC / DESC
测试
# 按照价格降序
SELECT * FROM product ORDER BY price DESC
SELECT * FROM product ORDER BY price ASC
# 在价格降序的基础上,按照分类升序
SELECT * FROM product ORDER BY price DESC,category_id DESC
# 显示商品价格(去重),并且排序
SELECT DISTINCT price FROM product ORDER BY price DESC
聚合查询
聚合函数是纵向查询,它是对一列一列到的值进行计算,返回一个单一的值,
聚合函数会忽略空值
count:统计指定列不为NULL的记录行数;
sum:计算指定列数的和,如果指定列类型不是数值类型,那么计算结果为0;
max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;
min: 计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;
avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
# 查询商品的总条数
SELECT COUNT(*) FROM product
# 查询价钱大于200的商品的总条数
SELECT COUNT(*) FROM product WHERE price > 200
# 查询分类为c001的分类商品的总和
SELECT COUNT(*) FROM product WHERE category_id='c001'
SELECT category_id,COUNT(*) FROM product GROUP BY
#查询分类为c002所有商品的平均价格
SELECT AVG(price) FROM product WHERE category_id = 'c002'
SELECT AVG(price) FROM product WHERE category_id = 'c002'
#查询商品的最大价格和最小价格
SELECT MAX(price)AS '最高价',MIN(price) AS '最低价' FROM product
分组查询
分组查询是指使用 GROUP BY 字句对查询信息进行分组
格式
SELCET * FROM 表名 GROUP BY 分组字段 HAVING 分组条件;
- 分组操作中的having子语句,是用于在分组后对数据进行过滤的,作用类似于where条件。
HAVING 与 WHERE 的区别
- HAVING 是在分组之后进行过滤
WHERE 是在分组之前进行过滤- HAVING后面可以使用分组函数(统计函数)
WHERE后面不可以使用分组函数
# 统计各个分类商品的个数
SELECT category_id ,COUNT(*) FROM product GROUP BY category_id
# 统计各个分类商品的个数,并且显示个数大于1的信息
SELECT category_id,COUNT(*) AS 'showNum' FROM product GROUP BY category_id HAVING showNum > 1