联合索引在使用时遵循“最左优先原则”。比如你上面的联合索引,如果查询时包含了左边的字段,则索引有效,否则无效。
对于由A、B、C三个字段组成的联合索引:
(1)可以利用索引的组合有:A,A+B,A+B+C,每个都可以是精确条件、范围条件或模糊条件,且与在查询条件中哪个字段先出现或出现几次无关;
(2)不能利用索引的组合有:B、C、B+C,在任何情况下,如果查询条件中只包含这些组合,则不能利用索引。
(3)对于A+C的情况,只有A的条件可以利用索引,而C的条件无法利用索引。
右补0:select RPAD(id,8,‘0’) as num from tmp左补0:select LPAD(id,8,‘0’) as num from tmp
参数 :
id:为字段名称
8:为补全的位数
0:代表补的参数0
一般所说的左连接,外连接是指左外连接,右外连接。做个简单的测试你看吧。先说左外连接和右外连接:
[TEST1@orcl#16-12月-11] SQL>select * from t1
ID NAME
---------- --------------------
1 aaa
2 bbb
[TEST1@orcl#16-12月-11] SQL>select * from t2
IDAGE
---------- ----------
1 20
3 30
左外连接:
[TEST1@orcl#16-12月-11] SQL>select * from t1 left join t2 on t1.id=t2.id
ID NAME IDAGE
---------- -------------------- ---------- ----------
1 aaa 1 20
2 bbb
右外连接:
[TEST1@orcl#16-12月-11] SQL>select * from t1 right join t2 on t1.id=t2.id
ID NAME IDAGE
---------- -------------------- ---------- ----------
1 aaa 1 20
3 30
从上面的显示你可以看出:左外连接是以左边的表为基准。通俗的讲,先将左边的表全部显示出来,然后右边的表id与左边表id相同的记录就“拼接”上去,比如说id为1的记录。如果没有匹配的id,比如说t1中id为2的t2中就没有。那边就以null显示。
右外连接过程正好相反。
再看内连接:
[TEST1@orcl#16-12月-11] SQL>select * from t1 inner join t2 on t1.id=t2.id
ID NAME IDAGE
---------- -------------------- ---------- ----------
1 aaa 1 20
看到没有? 只有一条记录。内连接就是只取出符合过滤条件的记录 也就是t1.id=t2.id 那么符合t1.id=t2.id的记录只有id=1这一条,所以只显示一条。 不像外连接,是将你作为基准的表(左外连接就是左边表为基准,右外连接就是右边表为基准)的所有行都显示出来。
综上所述,你应该能明白了吧?如果不明白请留言。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)