今天在https://leetcode-cn.com/网站中写了三道关于mysql数据库的练习题,下面是关于这三道题的详细记录:
1.查询,获取表中的第二大的值
表一:employee
id | money |
1 | 100 |
2 | 200 |
3 | 300 |
需要注意两种特殊情况,一是第二大的值为空的情况,输出null(用IFNULL()函数),一是第二大的值有多个,但只能输出一个(用max函数等)
代码为:
select ifnull((select max(money) from employee e1 where (select count(money) from employee e2 where e1.money<e2.money)=1),null) as second.
满足第一个情况的条件:select ifnull(*,null)
满足第二个情况的条件:max(money)
获取表中的第二大的值:select money from employee e1 where (select count(money) from employee e2 where e1.money<e2.money)=1(等于1的意思是,比e1大的数只有一个,若是要获取第三大的数,即改为等于2即可。count(money)是指统计所有的数)
设置别名:as second(as+名字)
2.查询,无论表一是否有表二的信息,都要获取到表一的信息(连表查询的应用)
表一:t1
tid | int |
name | varchar |
password | varchar |
realname | varchar |
表二:t2
id | int |
address | varchar |
tid | int |
tid 是两个表共有的列
条件:获取name password address三个信息
代码如下:
selcet t1.name,t1.password,t2.address from t1 left join t2 on t1.tid=t2.tid
输出结果是:把t1所有的name password 的信息都显示出来,t2的address有数据则显示,没有数据默认null
连表查询左连接:left join...on..:把左边的表的数据全部显示出来,即使右边的表没有匹配
右连接:right join …on…:与左连接相反
内连接:inner join…on…:两个表都有数据的显示出来
3.找出表一有,表二没有的数据
表一:t1
id | name |
1 | Tom |
2 | Sunny |
3 | Jok |
表二:t2
id | t1id |
1 | 3 |
2 | 1 |
代码如下:
select t1.name from t1 where t1.id not in(select t2.t1id from t2 where t1.id = t2.t1id )