数据的查询

准备表中数据

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
-- 准备一张商品分类表(分类ID,分类名称,分类描述)
create table category(
    cid int primary key auto_increment,
    cname varchar(10),
    cdesc varchar(50)
);

-- 准备一张商品表(商品编号,商品名称,商品价格,商品描述,商品分类编号)
create table product(
    pid int primary key auto_increment,
    pname varchar(10),
    price double,
    pdesc varchar(50),
    cno   int
);

-- 数据的准备
insert into category values(null,'手机数码','黑马生产的小手机');
insert into category values(null,'鞋靴箱包','传智生产的包包');
insert into category values(null,'香烟酒水','黄鹤楼,茅台');
insert into category values(null,'馋嘴零食','卫龙辣条,周黑鸭');

insert into product values(null,'锤子',2999,'可以砸榴莲的手机',1);
insert into product values(null,'小米',1599,'为发烧而生',1);
insert into product values(null,'李宁',99,'不走寻常路',2);
insert into product values(null,'耐克',399,'just do it',2);
insert into product values(null,'黄鹤楼',20,'饭后一根烟,胜做活神仙',3);
insert into product values(null,'卫龙辣条',5,'卫龙辣条加料不加价',4);
insert into product values(null,'老干妈辣椒酱',9,'永远不变的味道',4);
insert into product values(null,'老干爹辣椒酱',19,'永远不变的味道',4);
insert into product values(null,'黄鹤楼',20,'饭后一根烟,胜做活神仙',3);

简单查询

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
-- 语法如下: 
select [distinct]*[列名,列名] from  [where 条件].

-- 例子: 
* 1.查询所有的商品.    select * from product;
* 2.查询商品名和商品价格. select pname,price from product;
* 3.别名查询.使用的关键字是as.as可以省略的.  
    * 3.1表别名:   select * from product as p;
    * 3.2列别名:select pname as pn from product;   
* 4.去掉重复值.  select distinct price from product;

条件查询

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
* 1.查询商品名称为十三香的商品所有信息:
    * select * from product where pname = '十三香';
* 2.查询商品价格>60元的所有的商品信息:
    * select * from product where price > 60;

    -- where后的条件写法:
    * 比较运算符:> ,<,=,>=,<=,<>
    * 逻辑运算符: 与或非

    * is null       : 专门用于判断是否为空的
    * is not null   : 专门用于判断是否不为空的
    * like 模糊查询中
                 _  : 代表一个字符 
                 %  : 代表任意个数字符. 
        -- 查询商品名称中带有 新 的商品信息         
        * select * from product where pname like '%新%';
    * in 在某个范围中获得值.
        * select * from product where pid in (2,5,8);
    * between 12 and 56

排序查询

1
2
3
4
5
6
7
8
* 1.查询所有的商品,按价格进行排序.(asc-升序,desc-降序)
    * select * from product order by price;
* 2.查询名称有新的商品的信息并且按价格降序排序.
    * select * from product where pname like '%新%' order by price desc;

 按价格排序  分数排序  日期  年龄...

    order by   asc(升序) | desc(降序)

聚合查询

1
2
3
4
* sum(),avg(),max(),min(),count();
* 1.获得所有商品的价格的总和.--select sum(price) from product;
* 2.获得所有商品的平均价格.--select avg(price) from product;
* 3.获得所有商品的个数.--select count(*) from product;

分组查询

1
2
3
4
5
6
7
* 1.根据cno字段分组,分组后统计商品的个数.
    * select cno,count(*) from product group by cno;

* 2.根据cno分组,分组统计每组商品的平均价格,并且平均价格> 60;
    * select cno,avg(price) from product group by cno having avg(price)>60;

    having 关键字可以让我们筛选成组后的各种数据,可以理解为对分组后的数据进行再次过滤

分页查询

1
2
-- 第一个?表示跳过前面多少条 , 第二个?表示返回多少条记录。
select * from product limit ? , ? ;