Que-1:阻塞和死锁的区别。
- 阻塞:
阻塞发生是一个事务试图在另一个事务已经锁定的资源上获取不兼容的锁。被阻塞的事务一直被阻塞,直到阻塞事务释放锁。 - 死锁:
当两个或多个事务锁定了一个资源,并且每个事务请求锁定另一个事务已经锁定的资源时,就会发生死锁。这里的任何一个事务都不能向前推进,因为每个事务都在等待另一个释放锁。
Que-2:从表中删除重复数据,只有第一个数据保持不变。
经理 –
Id | Name | Salary |
---|---|---|
1 | Harpreet | 20000 |
2 | Ravi | 30000 |
3 | Vinay | 10000 |
4 | Ravi | 30000 |
5 | Harpreet | 20000 |
6 | Vinay | 10000 |
7 | Rajeev | 40000 |
8 | Vinay | 10000 |
9 | Ravi | 30000 |
10 | Sanjay | 50000 |
询问 –
DELETE M1
From managers M1, managers M2
Where M2.Name = M1.Name AND M1.Id>M2.Id;
输出 –
Id | Name | Salary | |||
---|---|---|---|---|---|
1 | Harpreet | 20000 | |||
2 | Ravi | 30000 | |||
3 | Vinay | 10000 | |||
7 | Rajeev | 40000 | 10 | Sanjay | 50000 |
问题 3:查找员工姓名。
查找员工的姓名,其中表中给出了名字、名字和姓氏。缺少某些姓名,例如名字、第二名,并且可能是姓氏。这里我们将使用 COALESCE()函数,它将返回第一个非空值。
雇员 –
ID | FName | SName | LName | Salary |
---|---|---|---|---|
1 | Har | preet | Singh | 30000 |
2 | Ashu | NULL | Rana | 50000 |
3 | NULL | Vinay | Thakur | 40000 |
4 | NULL | Vinay | NULL | 10000 |
5 | NULL | NULL | Rajveer | 60000 |
6 | Manjeet | Singh | NULL | 60000 |
询问 –
SELECT ID, COALESCE(FName, SName, LName) as Name
FROM employees;
输出 –
Que-4:找出最近 n 个月内雇佣的员工。
查找在过去 n 个月内被雇用的员工。在这里,我们通过使用 TIMESTAMPDIFF() mysql函数来获得期望的输出。
雇员 –
ID | FName | LName | Gender | Salary | Hiredate |
---|---|---|---|---|---|
1 | Rajveer | Singh | Male | 30000 | 2017/11/05 |
2 | Manveer | Singh | Male | 50000 | 2017/11/05 |
3 | Ashutosh | Kumar | Male | 40000 | 2017/12/12 |
4 | Ankita | Sharma | Female | 45000 | 2017/12/15 |
5 | Vijay | Kumar | Male | 50000 | 2018/01/12 |
6 | Dilip | Yadav | Male | 25000 | 2018/02/26 |
7 | Jayvijay | Singh | Male | 30000 | 2018/02/18 |
8 | Reenu | Kumari | Female | 40000 | 2017/09/19 |
9 | Ankit | Verma | Male | 25000 | 2018/04/04 |
10 | Harpreet | Singh | Male | 50000 | 2017/10/10 |
询问 –
Select *, TIMESTAMPDIFF (month, Hiredate, current_date()) as DiffMonth
From employees
Where TIMESTAMPDIFF (month, Hiredate, current_date())
Between 1 and 5 Order by Hiredate desc;
注意 –在查询 1 和 5 中,这里表示 1 到 n 个月,显示最近 1 到 5 个月雇用的员工。在这个查询中,DiffMonth 是我们理解的额外列,它显示了第 N 个月。
输出 –
Que-5:找出最近 n 天内雇佣的员工。
查找在过去 n 天内被雇用的员工。在这里,我们通过使用 DATEDIFF() mysql函数获得期望输出。
雇员 –
ID | FName | LName | Gender | Salary | Hiredate |
---|---|---|---|---|---|
1 | Rajveer | Singh | Male | 30000 | 2017/11/05 |
2 | Manveer | Singh | Male | 50000 | 2017/11/05 |
3 | Ashutosh | Kumar | Male | 40000 | 2017/12/12 |
4 | Ankita | Sharma | Female | 45000 | 2017/12/15 |
5 | Vijay | Kumar | Male | 50000 | 2018/01/12 |
6 | Dilip | Yadav | Male | 25000 | 2018/02/26 |
7 | Jayvijay | Singh | Male | 30000 | 2018/02/18 |
8 | Reenu | Kumari | Female | 40000 | 2017/09/19 |
9 | Ankit | Verma | Male | 25000 | 2018/04/04 |
10 | Harpreet | Singh | Male | 50000 | 2017/10/10 |
询问 –
Select *, DATEDIFF (current_date(), Hiredate) as DiffDay
From employees
Where DATEDIFF (current_date(), Hiredate) between 1 and 100 order by Hiredate desc;
注意 –在查询 1 和 100 中,这里表示 1 到 n 天。显示最近 1 到 100 天雇用的员工。在这个查询中,DiffDay 是我们理解的额外列,它显示了第 N 天。
输出 –
Que-6:找出最近 n 年雇佣的员工。
查找在过去 n 年中被雇用的员工。在这里,我们通过使用 TIMESTAMPDIFF() mysql函数来获得期望的输出。
雇员 –
ID | FName | LName | Gender | Salary | Hiredate |
---|---|---|---|---|---|
1 | Rajveer | Singh | Male | 30000 | 2010/11/05 |
2 | Manveer | Singh | Male | 50000 | 2017/11/05 |
3 | Ashutosh | Kumar | Male | 40000 | 2015/12/12 |
4 | Ankita | Sharma | Female | 45000 | 2016/12/15 |
5 | Vijay | Kumar | Male | 50000 | 2017/01/12 |
6 | Dilip | Yadav | Male | 25000 | 2011/02/26 |
7 | Jayvijay | Singh | Male | 30000 | 2012/02/18 |
8 | Reenu | Kumari | Female | 40000 | 2013/09/19 |
9 | Ankit | Verma | Male | 25000 | 2017/04/04 |
10 | Harpreet | Singh | Male | 50000 | 2017/10/10 |
询问 –
Select *, TIMESTAMPDIFF (year, Hiredate, current_date()) as DiffYear
From employees
Where TIMESTAMPDIFF (year, Hiredate, current_date()) between 1 and 4 order by Hiredate desc;
注意 –在查询 1 和 4 中,这里表示 1 到 n 年。它显示了过去 1 到 4 年雇用的员工。在这个查询中 DiffYear 是我们理解的额外列,它显示了第 N 年。
输出 –
Que-7:选择所有以给定字母开头的名字。
在这里,我们通过使用三个不同的查询来获得欲望输出。
雇员 –
ID | FName | LName | Gender | Salary | Hiredate |
---|---|---|---|---|---|
1 | Rajveer | Singh | Male | 30000 | 2010/11/05 |
2 | Manveer | Singh | Male | 50000 | 2017/11/05 |
3 | Ashutosh | Kumar | Male | 40000 | 2015/12/12 |
4 | Ankita | Sharma | Female | 45000 | 2016/12/15 |
5 | Vijay | Kumar | Male | 50000 | 2017/01/12 |
6 | Dilip | Yadav | Male | 25000 | 2011/02/26 |
7 | Jayvijay | Singh | Male | 30000 | 2012/02/18 |
8 | Reenu | Kumari | Female | 40000 | 2013/09/19 |
9 | Ankit | Verma | Male | 25000 | 2017/04/04 |
10 | Harpreet | Singh | Male | 50000 | 2017/10/10 |
询问 –
Select *
From employees
Where Fname like 'A%';
Select *
From employees
Where left(FName, 1)='A';
Select *
From employees
Where substring(FName, 1, 1)='A';
注意 –这里每个查询都会给出相同的输出,并且 FName 以字母 A 开头的员工列表。
参考 – SQL 面试问题 | 2套