技巧💡

数据操作语言,DATA MANIPULATION LANGEAGES
即增删改查。

在数据操作语言中,主要存在2种

过程式, 代表,关系代数 relational algebra
查询,往往指明了一种策略。

声明式:(Non-Procedural 非过程式),代表SQL, releational calculus
只告诉数据库,我们想要的数据,而不关心具体如何去查找到他。

区分技巧💡

有个很好理解的,即过程式,一般都有一些策略。而声明式,往往只告诉数据库,我们需要的数据,而不关心底层如何查询,给了数据库更多的优化空间。比如mysql的执行优化器等,可以发挥作用。

区别例子

image.png

如图,上面的例子中。
查询的是,RS表的笛卡尔积,并且过滤b_id= 102的数据。
一种是,先笛卡尔积,然后过滤b_id = 102
一种是,先区b_id=102的S表数据,在和R表进行笛卡尔积。
虽然最终的结果是一样的,但是关系代数的过程式,指定了具体的策略,影响了结果。

更好的方式,声明式💡

更好的方式,是指说明想要的数据,而不指定具体的策略,即声明式。如对应的sql为
Select * from R,S where S.id = 102; 具体是先过滤还是先笛卡尔积,由数据库区实现,比如根据代价来判断。给数据库更多优化的空间。而不是有使用者去关心具体的策略