这里写目录标题
1.数据库中left join right join有什么区别
left join以左表为基准,显示左边全部元素,显示右表符合条件的元素。
mysql> select* from A;
+------+-------+
| aID | aNum |
+------+-------+
| 1 | 10000 |
| 2 | 20000 |
| 3 | 30000 |
| 4 | 40000 |
| 5 | 50000 |
+------+-------+
mysql> select* from B;
+------+-------+
| bID | bNum |
+------+-------+
| 5 | 50000 |
| 6 | 60000 |
| 7 | 70000 |
| 8 | 80000 |
| 9 | 90000 |
+------+-------+
mysql> select* from A left join B on A.aID = B.bID;
+------+-------+------+-------+
| aID | aNum | bID | bNum |
+------+-------+------+-------+
| 1 | 10000 | NULL | NULL |
| 2 | 20000 | NULL | NULL |
| 3 | 30000 | NULL | NULL |
| 4 | 40000 | NULL | NULL |
| 5 | 50000 | 5 | 50000 |
+------+-------+------+-------+
5 rows in set (0.00 sec)
rIght join以右表为基准,显示右表全部元素,显示左表符合条件的元素
mysql> select* from A right join B on A.aID = B.bID;
+------+-------+------+-------+
| aID | aNum | bID | bNum |
+------+-------+------+-------+
| 5 | 50000 | 5 | 50000 |
| NULL | NULL | 6 | 60000 |
| NULL | NULL | 7 | 70000 |
| NULL | NULL | 8 | 80000 |
| NULL | NULL | 9 | 90000 |
+------+-------+------+-------+
5 rows in set (0.00 sec)
inner join 显示两个表中符合条件的部分
mysql> select* from A inner join B on A.aID = B.bID;
+------+-------+------+-------+
| aID | aNum | bID | bNum |
+------+-------+------+-------+
| 5 | 50000 | 5 | 50000 |
+------+-------+------+-------+
1 row in set (0.00 sec)
2.正则匹配的贪婪模式与非贪婪模式
源字符串:aa<div>test1</div>bb<div>test2</div>cc
正则表达式一:<div>.*</div>
匹配结果一:<div>test1</div>bb<div>test2</div>
正则表达式二:<div>.*?</div>
匹配结果二:<div>test1</div>(这里指的是一次匹配结果,所以没包括<div>test2</div>)
根据上面的例子,从匹配行为上分析一下,什是贪婪与非贪婪模式。
正则表达式一采用的是贪婪模式,在匹配到第一个“”时已经可以使整个表达式匹配成功,但是由于采用的是贪婪模式,所以仍然要向右尝试匹配,查看是否还有更长的可以成功匹配的子串,匹配到第二个“”后,向右再没有可以成功匹配的子串,匹配结束,匹配结果为“<div>test1</div>bb<div>test2</div>”。
当然,实际的匹配过程并不是这样的,后面的匹配原理会详细介绍。
仅从应用角度分析,可以这样认为,贪婪模式,就是在整个表达式匹配成功的前提下,尽可能多的匹配,也就是所谓的“贪婪”,通俗点讲,就是看到想要的,有多少就捡多少,除非再也没有想要的了。
正则表达式二采用的是非贪婪模式,在匹配到第一个“</div>”
时使整个表达式匹配成功,由于采用的是非贪婪模式,所以结束匹配,不再向右尝试,匹配结果为“<div>test1</div>”
。
仅从应用角度分析,可以这样认为,非贪婪模式,就是在整个表达式匹配成功的前提下,尽可能少的匹配,也就是所谓的“非贪婪”,通俗点讲,就是找到一个想要的捡起来就行了,至于还有没有没捡的就不管了。
3.distinct 去重,group_by 分组
牛客题目>>
对于distinct与group by的使用: 1、当对系统的性能高并数据量大时使用group by 2、当对系统的性能不高时使用数据量少时两者皆可 3、尽量使用group by
4.not in
牛客题目>>
找出在A表但不在B表的数据
not in效率较低,一般用join代替
5.不等于 奇偶数查询
6.group_by
牛客题目>>
根据某一条件对数据分组