X32专项练习部分28
多表查询和表连接例题
/*
有两张表,如下图所示
表A(仅列出部分数据作参考)
Order_id User_id Add_time
11701245001 10000 1498882474
11701245002 10001 1498882475
表B(仅列出部分数据作参考)
id Order_id goods_id price
1 11701245001 1001 10
2 11701245001 1002 20
3 11701245002 1001 10
问:用SQL查询 购买过goods_id 为1001的用户user_id
正确答案:BCD
select user_id from A where order_id = (select order_id from B where goods_id = '1001')
select a.user_id from A a,B b where a.order_id=b.order_id and b.goods_id='1001'
select user_id from A where order_id in (select order_id from B where goods_id = '1001')
select A.user_id from A left join B on A.order_id=B.order_id where B.goods_id='1001'
返回多个结果的子查询,外层where不能用"=",需要用in
B选项使用了多表查询,分别为2张表起别名
D选项使用左连接
左连接,返回左边表中所有记录和右边表中链接字段相等的记录
这道题D选项明显不严谨,on只限制了右表的哪些数据需要和左表合并
相比于内连接,D选项where语句过滤出去的数据较多
所以不如用内连接
on作为限制条件,where进行筛选过滤
*/
统计表数据忽略null值的情况
/*
表结构如下
CREATE TABLE `score` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sno` int(11) NOT NULL,
`cno` tinyint(4) NOT NULL,
`score` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`id`)
);
以下查询语句结果一定相等的是()
A.SELECT sum(score) / count(*) FROM score WHERE cno = 2;
B.SELECT sum(score) / count(id) FROM score WHERE cno = 2;
C.SELECT sum(score) / count(sno) FROM score WHERE cno = 2;
D.SELECT sum(s