0
点赞
收藏
分享

微信扫一扫

mysql leetcode刷题记录

东方小不点 2022-04-07 阅读 80
mysql
# Write your MySQL query statement below

select name 
from customer
where id  not in 
(select id 
from customer where  referee_id =2);

or

select name from customer where id != 2 or id is null;

11

多表连接

6.jpg

11

select …
from 表1 as a
left join 表2 as b
on a.列名=b.列名
where b.列名 is null;

中上图黑色框里的sql解决的问题是:不在表里的数据,也就是在表A里的数据,但是不在表B里的数据。

对于这个题目“不是近视眼的学生都有谁?”,就是在“学生表”里的数据,但是不在“近视学生”表里的数据。我们选择下图黑色框里的左联结sql语句。。

  • 左连接表

  • select c.Name as Customers 
    from Customers as c
    left join Orders as o on c.Id = o.CustomerId
    where o.Id is null;
    

11

# Write your MySQL query statement below

select
    user_id,
    concat(upper(left(name,1)),lower(substr(name,2))) as name
from 
    Users
order by 
    user_id;
# Write your MySQL query statement below



select sell_date,count(distinct product) as num_sold,
group_concat(distinct product order by(product)) as products 
from activities 
group by sell_date 
order by sell_date;

111

select *from patients where conditions like '%DIAB1%'
or conditions like ' DIAB1%';

11

# Write your MySQL query statement below

select employee_id from Employees where employee_id not in (select employee_id 
from salaries) union select employee_id from salaries where  employee_id not in
(select employee_id from Employees) order by employee_id;	

11

# Write your MySQL query statement below

select id,
case when t.p_id is null then 'Root' 
     when t.id in (select p_id from tree ) then 'Inner' //判断是否右孩子结点 
     else 'Leaf' 
     end as Type  //作为type列返回生成查询结果
from tree t  //起别名  tree as t  	


11

  • 要想获取第二高,需要排序,使用 order by(默认是升序 asc,即从小到大),若想降序则使用关键字 desc

  • 去重,如果有多个相同的数据,使用关键字 distinct 去重

  • 判断临界输出,如果不存在第二高的薪水,查询应返回 null,使用 ifNull(查询,null)方法

  • 起别名,使用关键字 as …

  • 因为去了重,又按顺序排序,使用 limit()方法,查询第二大的数据,即第二高的薪水,即 limit(1,1) (因为默认从0开始,所以第一个1是查询第二大的数,第二个1是表示往后显示多少条数据,这里只需要一条)

# Write your MySQL query statement below


select ifNull((
select distinct Salary
from Employee
order by Salary desc limit 1,1),null) as SecondHighestSalary


```mysql
select FirstName, LastName, City, State
from Person left join Address
on Person.PersonId = Address.PersonId
;

11

# Write your MySQL query statement below


SELECT customer_id, COUNT(customer_id) count_no_trans #count是计算出现的次数,别名是count_no_trans(题目要求返回的)
FROM visits v 
LEFT JOIN 
    transactions t ON v.visit_id = t.visit_id   #因为起了别名可以用别名直接调用,连接的条件是主键id相等
WHERE amount IS NULL
GROUP BY customer_id;          #按照id升序排序

举报

相关推荐

0 条评论