一、初始化库:
1 CREATE TABLE products(pid INT PRIMARY KEY AUTO_INCREMENT, pname VARCHAR(30),price DOUBLE,pnum INT,cno INT ,pdate TIMESTAMP)
其中timeStamp类型为时间戳形式。
插入数据:
1 insert into products values (null,'泰国大榴莲',98,12,1,null); 2 insert into products values (null,'新疆大枣',38,123,1,null); 3 insert into products values (null,'新疆切糕',68,50,2,null); 4 insert into products values (null,'十三香',10,200,3,null); 5 insert into products values (null,'老干妈',20,180,3,null); 6 insert into products values (null,'豌豆黄',20,120,2,null);
表内容:
1)简单查询:
1.查询所有的商品
1 SELECT * FROM products;
2.查询商品名和商品价格.
1 SELECT pname,price FROM products;
3.查询所有商品都有那些价格.
1 SELECT DISTINCT price FROM products;
注意:去重distinct 语法
select distinct 字段名称1,字段名称2.。。。 from 表名;
4.将所有商品的价格+10元进行显示.(别名)
1 SELECT price+10 FROM products;
我们可以对price 加别名。
语法:
SELECT 字段名称 [as] 别名 FROM 表;
其中关键字as可以省略。
1 SELECT price+10 newprice FROM products;
如果别名里有空格需要用单引号或者自执行符号。
1 SELECT price+10 AS `loop price` FROM products;
2)条件查询:
1.查询商品名称为十三香的商品所有信息:
SELECT * FROM 表名 WHERE 条件;
1 SELECT * FROM products WHERE pname='十三香';
2.查询商品价格>60元的所有的商品信息:
1 SELECT * FROM products WHERE price > 60;
3.查询商品名称中包含”新”的商品
1 SELECT * FROM products WHERE pname LIKE '%新%';
模糊查询:
LIKE '%新';以什么新结尾。
LIKE '新%';以新开头。
LIKE '%新%';包含新字。无论开头和结尾。
如上的查询包含任意字符长度。
如果限制字符的长度,使用‘_’ ,一个代表一个长度。
1 SELECT *FROM products WHERE pname LIKE '新_'
如上匹配2个长度以新开头的。
4.查询价格为38,68,98的商品
SELECT * FROM 表名 WHERE 列名 IN (值1,值2,值3);
1 SELECT * FROM products WHERE price IN (38,68,98);
5:。查询价格在20到60之间的商品
SELECT * FROM 表名 WHERE 列名 BETWEEN 较小值 AND 较大值;
1 SELECT * FROM products WHERE price BETWEEN 20 AND 60;
where后的条件写法:
* > ,<,=,>=,<=,<>,!=
* like 使用占位符 _ 和 % _代表一个字符 %代表任意个字符.
* select * from product where pname like '%新%';
* in在某个范围中获得值.
* select * from product where pid in (2,5,8);
* between 较小值 and 较大值
select * from products where price between 50 and 70;
3)排序查询:
聚合函数:
* sum(),avg(),max(),min(),count();
1.获得所有商品的价格的总和:
1 SELECT SUM(price) FROM products ;
2.获得商品表中价格的平均数
1 SELECT AVG(price) FROM products;
值求四舍五入:聚合函数round()
round(四舍五入的数据,保留几位小数)
1 SELECT ROUND(AVG(price),1)FROM products ;
3.获得商品表中有多少条记录:
1 SELECT COUNT(*) productcount FROM products;
注意:自动过滤null
分组 groud by
1.根据cno字段分组,分组后统计商品的个数.
1 SELECT cno,SUM(pnum) FROM products GROUP BY cno;
2.根据cno分组,分组统计每组商品的总数量,并且总数量> 200;
1 SELECT cno,SUM(pnum)FROM products GROUP BY cno HAVING SUM(pnum) >200;
注意:
where后面不能接聚合函数,接聚合函数使用having.
where 和having的区别:
1)where是对分组前的数据进行过滤,having是对分组后的数据进行过滤。
2)where后面不能接聚合函数,having可以。
1.查询所有的商品,按价格进行排序.(asc-升序,desc-降序)
SELECT * FROM 表名 ORDER BY 字段;
1 SELECT * FROM products ORDER BY price ;
1 SELECT * FROM products ORDER BY price DESC;
2.查询名称有新的商品的信息并且按价格降序排序.
1 SELECT * FROM products WHERE pname LIKE '%新%' ORDER BY price DESC;