0%

MYSQL-LeetcodePractice-DAY01-选择

还是香

换了域名

MYSQL-LeetcodePractice-DAY01-选择

595.大的国家

题目描述

World 表:

1
2
3
4
5
6
7
8
9
 +-------------+---------+
 | Column Name | Type   |
 +-------------+---------+
 | name       | varchar |
 | continent   | varchar |
 | area       | int     |
 | population | int     |
 | gdp         | int     |
 +-------------+---------+

name 是这张表的主键。这张表的每一行提供:国家名称、所属大陆、面积、人口和 GDP 值。

如果一个国家满足下述两个条件之一,则认为该国是 大国 :

面积至少为 300 万平方公里(即,3000000 km^2),或者人口至少为 2500 万(即 25000000)。

编写一个 SQL 查询以报告大国的国家名称、人口和面积。按任意顺序返回结果表。

考点

1.SQL查询语句

🔨读取MySQL数据表中字段所有记录

1
 SELECT * from database WHERE name='LBH'

MySQL 的 WHERE 子句的字符串比较是不区分大小写的。 可以使用 BINARY 关键字来设定 WHERE 子句的字符串比较是区分大小写的。

1
 SELECT * from database WHERE BINARY name='LBH'

2.OR

🔨将两个子查询合并在一起。

3.UNION

🔨用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

代码1

1
2
3
4
5
6
7
 # Write your MySQL query statement below
 SELECT
 name , population , area
 FROM
 World
 WHERE
 area>=3000000 OR population>=25000000 ;

代码2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 # Write your MySQL query statement below
 SELECT
 name , population , area
 FROM
 World
 Where
 area>=3000000
 UNION
 SELECT
 name , population , area
 FROM
 World
 Where
 population>=25000000 ;

代码2比代码1运行更快但二者没有很大差别。

1757.可回收且低脂的产品

查找既是低脂又是可回收的产品编号

代码

1
2
3
4
5
6
7
 # Write your MySQL query statement below
 SELECT
    product_id
 FROM
    Products
 WHERE
    low_fats = 'Y' AND recyclable = 'Y' ;

注意点

💣1.SELECT后面要跟的是要返回的值,比如这道题要返回产品编号,就跟product_id

💣2.等号打一个“=”即可

584.寻找用户推荐人

写一个查询语句,返回一个客户列表,列表中客户的推荐人的编号都不是 2。

考点

1.查询语句(详见第一个)

2.使用 <>(!=) 和 IS NULL

🔨最直观想法

1
 SELECT name FROM customer WHERE referee_Id <> 2;

然而,这个查询只会返回一个结果:Zach,referee_id 字段值为 NULL 的全都消失了,这是怎么回事呢?

😳MySQL 使用三值逻辑 —— TRUE, FALSE 和 UNKNOWN。任何与 NULL 值进行的比较都会与第三种值 UNKNOWN 做比较。这个“任何值”包括 NULL 本身!这就是为什么 MySQL 提供 IS NULL 和 IS NOT NULL 两种操作来对 NULL 特殊判断。(不能用“=”!😘)

因此,在 WHERE 语句中我们需要做一个额外的条件判断 referee_id IS NULL。

代码

1
 SELECT name FROM customer WHERE referee_id <> 2 OR referee_id IS NULL;

183.从不订购的客户

某网站包含两个表,Customers 表和 Orders 表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。

考点

1.NOT IN子查询

🔨用来判断表达式的值是否不存在于给出的列表中;如果不在这个列表中,返回值为 1,否则返回值为 0。

👉对NULL:NOT IN 运算符的两侧有一个为空值 NULL 时,如果找不到匹配项,则返回值为 NULL;如果找到了匹配项,则返回值为 0。

2.多表联结(这个表记下来)

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

3.distinct

🔨去重,删除重复行

👇语法如下

1
2
3
4
5
6
SELECT DISTINCT
columns
FROM
table_name
WHERE
where_conditions;

代码1

1
2
3
4
5
6
# Write your MySQL query statement below
select Name Customers
from Customers c
left join Orders o
on c.Id = o.CustomerId
where o.Id is Null

代码2

1
2
3
4
5
6
select customers.name as 'Customers' 
from customers
where customers.id not in
(
select customerid from orders
);

QUS:第一行为什么最后要写as ‘Customers’

ANS:答案中要求列名是Customers,所以我们要给name起别名

-------------本文结束感谢您的阅读-------------
请作者喝一杯蜜雪冰城吧!