高频SQL 50题:查询
1757. 可回收且低脂的产品
SELECT product_id FROM Products WHERE low_fats = 'Y' AND recyclable = 'Y';
584. 寻找用户推荐人
在做题的时候,我直接使用'!='进行判断,结果只能返回一个‘Zack’,和我们预知的并不相符。MySQL使用三值逻辑--TRUE,FALSE,UNKOWN。与传统的两值逻辑不同,在三值逻辑中,与NULL值进行比较时,结果会变成UNKNOWN。这是因为NULL表示缺失或者未知的值,因此与其他任何值包括其自身比较时都会产生未知的结果。因此在实际使用时,需要使用‘IS NULL’和‘IS NOT NULL’操作符。
SELECT name FROM Customer WHERE referee_id != '2' OR referee_id IS NULL;
595. 大的国家
SELECT name, population, area FROM World WHERE area >= 3000000 OR population >= 25000000;
1148. 文章浏览 I
SELECT DISTINCT author_id AS id FROM Views WHERE author_id = viewer_id ORDER BY id;
注意:
1. 使用DISTINCT关键字来检索唯一元素;
2. 使用ORDER BY进行排序。
1683. 无效的推文
SELECT tweet_id FROM tweets WHERE CHAR_LENGTH(content) > 15;
注意:
1. 对于SQL,计算字符串中字符数的最佳函数是CHAR_LENGTH(str),返回str的长度;
2. 另一个常用的函数是LENGTH(str),因为content列只包含英文字符,没有特殊字符。否则,LENGTH()可能会返回不同的结果,因为该函数返回字符串的字节数,某些字符包含多于一个字节。以‘¥’为例,CHAR_LENGTH()返回结果为1,而LENGTH()返回结果为2,因为该字符串包含2个字节。ASCII中,一个英文字母(不区分大小写)为一个字节,一个中文汉字为两个字节。