CodeGym /课程 /SQL SELF /使用SELECT时常见的错误

使用SELECT时常见的错误

SQL SELF
第 3 级 , 课程 3
可用

就像写别的代码一样,写SELECT的时候出错是很正常的。哪怕是很有经验的开发者,SQL查询有时候也会带bug。今天我们来聊聊用SELECT时常见的错误、它们的原因,以及怎么避免这些坑。

SQL是个对语法要求很严格的语言。漏了逗号、多了逗号、漏了关键字或者单词顺序错了——数据库马上就会给你“红灯警告”。

漏写关键字

最常见的错误就是——直接忘了写某个必须的关键字。比如,试试下面这个命令:

SELECT name age FROM students;

是不是少了点啥?这里nameage之间漏了个,。改正一下:

SELECT name, age FROM students;

这种错误其实很好理解:要么你刚开始学写SQL,要么就是太着急了。SQL可不喜欢你着急!

列名和表名拼错

SQL命令对列名和表名的拼写很敏感。比如试试这个查询:

SELECT naem, agge FROM studnts;

数据库看到这个会一脸懵:naemagge这俩列,还有studnts这张表,根本不存在。改正一下:

SELECT name, age FROM students;

小建议:如果你不确定名字,可以用\d table_name(在psql里)或者用pgAdmin的界面查一下表结构。

忘记加引号

如果列名或表名里有空格或者特殊字符,记得要用双引号括起来。比如:

SELECT "first name", age FROM students;

要是忘了加引号,SQL就不知道你想干嘛,直接报错。

逻辑错误:一切都能跑,但结果不对劲

有时候查询能跑出来,但结果看着“怪怪的”。这就是逻辑错误。它们更难发现,因为数据库不会告诉你哪里不对。

  1. 比较符号用错了。比如你想查所有大于18岁的学生:
SELECT * FROM students WHERE age > 18;

再来一个用别的符号的例子:

SELECT * FROM students WHERE age = 18;

这个查询只会返回正好18岁的学生。如果你本来想查大于18岁的,这就是逻辑错误啦。

小建议:这种细节要多留意。如果不确定,先查个小样本(比如加个LIMIT)。

组合条件时的错误

来看个例子:

SELECT * FROM students WHERE age > 18 OR grade = 'A' AND city = 'New York';

这个查询可能会把不在纽约的学生也查出来。为啥?因为SQL的逻辑运算顺序是先AND,再OR。加个括号重写一下:

SELECT * FROM students WHERE (age > 18 OR grade = 'A') AND city = 'New York';

这样就对了。

没加过滤条件

有时候像SELECT * FROM students;这样的查询会返回一大堆数据,其实你只想查某个城市的学生。解决办法?用WHERE加个过滤条件:

SELECT * FROM students WHERE city = 'New York';

性能问题

当查询数据量很大时,优化就变得特别重要了。我们来看看常见的影响性能的错误。

SELECT *这种查询,开发时用着方便,但实际用会拖慢性能。如果你只需要某些列,就直接写出来。

-- 不推荐:
SELECT * FROM students;

-- 推荐:
SELECT name, age FROM students;

为啥这么重要?SELECT *会把所有列都查出来,哪怕你根本用不到。这会让数据传输量变大。

实用建议:怎么避免出错

只要注意几个小点,SQL查询就能写得更靠谱:

  • 执行前检查语法:用IDE或者pgAdmin的提示功能,能提前发现错误。
  • 先查小样本。加LIMIT 5LIMIT 10试试。
  • 写注释,方便以后看懂查询在干嘛:
    -- 查所有大于18岁的学生
    SELECT name, age FROM students WHERE age > 18;
    
  • 用不同数据测试,看看逻辑是不是对的。
  • 别乱用SELECT *,尤其是大表。

面试常见陷阱

SQL面试经常会让你找查询里的错误。比如:

SELECT name FROM employees WHERE salary > 50000 ORDER BY department;

想想:这个查询逻辑上对吗?如果用了ORDER BY,大概率是想按工资排序:

SELECT name FROM employees WHERE salary > 50000 ORDER BY salary DESC;

SELECT是SQL的基础,刚开始肯定会犯错。但慢慢地,你会写查询就像发微信一样顺手。毕竟,真程序员不光撸猫,还得撸数据库。😉

2
任务
SQL SELF, 第 3 级, 课程 3
已锁定
修正语法错误
修正语法错误
2
任务
SQL SELF, 第 3 级, 课程 3
已锁定
查询过滤和排序中的逻辑错误
查询过滤和排序中的逻辑错误
1
调查/小测验
数据排序第 3 级,课程 3
不可用
数据排序
数据排序
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION