MYSQL-LeetcodePractice-DAY01-选择
595.大的国家
题目描述
World 表:
1 | +-------------+---------+ |
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 | # Write your MySQL query statement below |
代码2
1 | # Write your MySQL query statement below |
代码2比代码1运行更快但二者没有很大差别。
1757.可回收且低脂的产品
查找既是低脂又是可回收的产品编号。
代码
1 | # Write your MySQL query statement below |
注意点
💣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 | SELECT DISTINCT |
代码1
1 | # Write your MySQL query statement below |
代码2
1 | select customers.name as 'Customers' |
QUS:第一行为什么最后要写as ‘Customers’
ANS:答案中要求列名是Customers,所以我们要给name起别名