#175 Combine Two Tables
考察原理:LEFT OUTER JOIN外联结
易错点:
1、 t1 后面不要带逗号!!!!!
FROM t1
LEFT OUTER JOIN t2
2、联结包含了两个表,a表是长一点的,b点里面只有a表的某些id里面的具体信息。这时候要联结两个表就要用outer join,而且不可以用where语句,where语句只会呈现同时出现在两个表里的那些记录。同理,“from on t1.a=t2.a”也是不可能跑出正确答案的。
常见句式: “计算/列出 XXX , 包括哪些没有/尚未……的。”
标准答案中要注意的点或提示:
1、Distinct的使用:万一有两个同样高的值呢,答案只要一个
2、用子查询的效率会低一些
3、LIMIT: 常用的考题应该是,“只查询前几行”、“只查询前五名/前十条”,这一题只选择第二高的工资,万一想查询第二到第五高的工资呢?妈呀我举一反三的能力真强:
mysql> SELECT * FROM ratings ORDER BY category, id LIMIT 5;
这里取的是ratings前五名的全部记录。LIMIT 在ORDER BY的后面。
limit后面带一个数的时候是上者,带两个数的时候是下者,注意第一个数有不一样的含义。
SELECT * FROM tbl LIMIT 5,10; # 返回 rows 6-15
第一个数字,是开始的行数,第二个数是最多返回的条数(最小的数字是0而不是1)
4、IFNULL: IF家族一个成员,
IFNULL(
If expr1
,expr2
) expr1
is not NULL
, IFNULL()
returns expr1
; otherwise it returns expr2
.
这个解法就会覆盖了如果没有这个值的时候显示的是啥的问题。
181 |
第一眼,一个表里的某些信息又是某个表里的某些信息,自然就是自结合,self join啦。原理是对同一个表格命名成两个不一样的表格,但是用的数据都一样。
两种语法,join & where
见到比较优秀的答案,where exists