Discuss / SQL / 个人观点以及疑惑

个人观点以及疑惑

Topic source

l希冀l

#1 Created at ... [Delete] [Delete and Lock User]

本小节廖老师这种方式的多表查询是个笛卡尔积查询,但真正有意义的多表查询需要将多表的主键外键相关联才行,此处为students的外键class_id和classes表的主键id需要关联相等,即查询时要添加WHERE students.class_id =classes.id。

前一小节一个很好的问题就与多表查询有关

要显示这种格式的怎么实现?

班级 人数 一班 4 二班 3 三班 3

我提供的一种解决方式:

SELECT classes.name,COUNT(classes.name)  num FROM students, classes WHERE students.class_id = classes.id GROUP BY classes.name;

提问廖老师:您本小节讲的内容笛卡尔积在怎样的实际开发或场景中会用到呢?

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

尽量不使用

郭应暄

#3 Created at ... [Delete] [Delete and Lock User]

简单粗暴

对,一般使用主键或外键进行多表关联查询,笛卡尔乘积没太多意义,而且很容易查询量爆炸,不建议使用

蔚蓝Weinan

#5 Created at ... [Delete] [Delete and Lock User]

个人觉得sql里的笛尔卡积更多的是为了让你深入理解连表查询,比如你可以试试 from t  as t1 join t as t2 on t1.field < t2.field,更好理解sql的算法

SELECT c.name [cname], COUNT(s.id) [num] , AVG(s.score)
FROM students s, classes c
WHERE s.class_id = c.id
GROUP BY c.name;

朋友你的怎么查询的哦,我用的是这种方式,能不能帮我看看有什么不对的吗?

wejong

#7 Created at ... [Delete] [Delete and Lock User]

也可以这样:SELECT c.name 班级, count(*) num FROM students s, classes c WHERE s.class_id = c.id GROUP BY class_id;


  • 1

Reply