Oracle 数据库查询与过滤:对我这个初学者真正有帮助的体会
Source: Dev.to
今天安静但重要的SQL日
没有新表。没有花哨的连接。只是在学习如何对已有的数据提出更好的问题。
本课全部围绕 查询和过滤行——基本上是学习如何精确告诉数据库我想要返回什么,且仅返回这些。
我通过一个简单的 toys 表学会了这些,老实说帮助很大。Oracle 课程以一种奇特但有趣的方式授课,让你在学习的同时还能获得乐趣。它们通过易于理解、贴近生活的概念,使那些令人望而生畏的主题看起来不那么吓人。
create table toys (
toy_name varchar2(100),
colour varchar2(10),
price number(10,2)
);
insert into toys values ( 'Sir Stripypants', 'red', 0.01 );
insert into toys values ( 'Miss Smelly_bottom','blue', 6.00 );
insert into toys values ( 'Cuteasaurus', 'blue', 17.22 );
insert into toys values ( 'Mr Bunnykins', 'red', 14.22 );
insert into toys values ( 'Baby Turtle', 'green', null );
commit;
Source: …
选择行(以及为什么 SELECT * 是陷阱)
最先要学会的是,SELECT 实际上有两个职责:
- FROM → 数据所在的位置
- SELECT → 我真正想要返回的列
起初,SELECT * FROM toys; 非常方便,但只适用于数据库很小的情况。想象一下,一个拥有超过 10 000 行的大型数据库——SELECT * 并不能帮助你在其中找到 Mr Bunnykins。
select toy_name, price
from toys;
这迫使你 思考到底需要哪些数据,同时它还能:
- 减少网络传输的数据量
- 在列结构变化时出错的概率更低
仅此一点就已经改变了我的查询写法。要具体、要高效。
使用 WHERE 过滤行
与其获取表中的所有数据,你可以开始提出类似以下的问题:
“只显示红色玩具”
select *
from toys
where colour = 'red';
“只给我一行特定的数据”
select *
from toys
where toy_name = 'Sir Stripypants';
很简单,但这几乎是所有实际查询的基础。
合并条件:AND、OR 与困惑
这部分让我比预期更吃惊。
where toy_name = 'Mr Bunnykins'
or toy_name = 'Baby Turtle'
and colour = 'green';
结果并不是我预期的,因为 AND 在 OR 之前执行。SQL 并不像我们的大脑那样从左到右读取条件。
解决办法? 始终使用括号。
where (toy_name = 'Mr Bunnykins' or toy_name = 'Baby Turtle')
and colour = 'green';
现在查询正好按照看起来应该的方式工作。仅此就帮我避免了以后出现的 bug。
使用 IN 的值列表
而不是写:
where colour = 'red'
or colour = 'green'
or colour = 'blue'
or colour = 'yellow';
您可以写:
where colour in ( 'red', 'green', 'blue', 'yellow' );
更简洁、更易读,而且更高效——尤其是当您只需要从 100 000+ 行中挑选出少量行时。
使用 = 和 BETWEEN 的范围
where price between 6 and 20;
重要细节:BETWEEN 包括两端。如果想要严格的边界,需要自行写出:
where price > 6
and price `:
where colour <> 'green';
但再次强调——NULL 是特殊的。要排除 null,必须使用:
where colour is not null;
这里没有快捷方式。
最后思考
这节课虽然不显眼,但却很重要。SQL 中的其他所有内容都建立在此之上:
- Aggregations
- Joins
- Subqueries
- Real‑world analytics
如果你不能自信地过滤数据,其他一切都会崩溃。
脆弱的感受
我正在学习放慢节奏、明确表达,并编写可读且高效的查询。
如果你也在学习 SQL,偶尔因为 WHERE 子句而感到尴尬、被绊倒……你并不孤单。
我会继续记录这段旅程——包括困惑、豁然开朗以及所有过程。