join and group

Posted Kristin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了join and group相关的知识,希望对你有一定的参考价值。

1.创建表

首先创建两个表 category(种类表),product(商品表),并向其中插入记录

create table category(
    categoryId int auto_increment,
    categoryName varchar(10) not null,
    primary key(categoryId) 
);

  

create table product(
      productId int primary key auto_increment, 
      productName varchar(10) not null,
      categoryId int,
      price int,
      constraint pro_cat foreign key (categoryId) references category(categoryId)
);

  

2.笛卡尔积

笛卡尔积其实就是将所有记录全部罗列出来,即使字段为null也会出现在查询结果中

3.内连接

内连接就是去除笛卡尔积中为null的记录

4.左外连接

查询每件商品的种类,即使商品种类为null也会出现在查询结果中,因为是左外连接,所以product中全部记录都会出现的,因此productId=4,categoryId=null这条记录不会被剔除

5.右外连接

查询product表中每件商品的种类,因为是右外连接,所以category表中所有记录都会出现,但是productId=4这条记录categoryId=null,所以结果中不会有这条记录

6.Group by

1.分组显示左外连接查询product的商品信息,但是因为lining与nike的categoryId相同,所以只显示了一个

2.继续查询,但是要显示每种categoryId对应的product数量

7.实例

1.查询每个分类中最便宜的商品的categoryId,categoryName,price

2.查询每个分类中最便宜的商品的categoryId,categoryName,productName,price,但是productName与price并没有对应......

3.我们将每类商品最小的price对应的categoryId与category.categoryId对比就可以找到与之对应的商品名称

4.这时再加一个限定条件,将price不是最小值得商品剔除

5.再进一步美化,我们只需要查询每种商品中最便宜商品的所有信息以及种类名即可

以上是关于join and group的主要内容,如果未能解决你的问题,请参考以下文章

MIn max group wise and filter without join in pig

Left Join with same table and group by 以相反的顺序返回重复的元组

sql中 group by 的优先级高 还是 join的优先级高?

带有“Group by”、“max”和“join”的 SQL 请求?

MYSQL - 将 SUM 与 JOIN 结合使用

MYSQL join using like and get concat function