数据库常见问题

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

牛客题目>>
根据某一条件对数据分组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Michael.Scofield

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值