知识卡片
SQL 的说明性本质:描述要什么而非怎么做
内容
SQL 查询表面上看像一串命令,本质却是说明性语句:程序员只需要描述”我想要什么样的信息”(select 哪些列、from 哪些表、where 满足什么条件),而不必编写”该怎样一步步从存储里搜索、连接、筛选出这些数据”的算法。一条 SQL 语句底层等价于关系代数里 JOIN(连接多张表)、SELECT(挑选满足条件的行)、PROJECT(挑选需要的列)这三种基本运算的某种组合,但这个组合过程完全由数据库管理系统自己去规划执行,应用程序员不必操心。发散:这正是[[四大程序设计范型的核心区别]]里说明性范型的典型代表——程序员从”设计一个正确高效的检索算法”这项工作里被解放出来,代价是查询效率的优化责任整体转移给了数据库内部的查询优化器,这也是为什么同一条逻辑上等价的 SQL 语句,交给不同数据库系统执行,实际耗时可能天差地别——决定效率的权力已经从程序员手中转移走了。
参考来源
《计算机科学概论》第9章《数据库系统》