当前位置:首页 » 编程语言 » sql逻辑和
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql逻辑和

发布时间: 2022-12-26 23:39:36

sql语句里的逻辑或写法

select t1.No NO,t2.name NAME,t2.age AGE ,t3.count COUNT from t1,t2,t3
where
t1.NAME = t2.NAME(+) and
t1.No = t3.No(+)
and t3.count=1
UNION ALL
SELECT NO,NAME,0,0
FROM T1
WHERE
T1.name NOT IN
(SELECT NAME FROM T2)

to 光和虹
你后边已经限制死了t3.count=1,即使你再怎么用t1.No = t2.No(+)这种连接,你也查不出相关的记录
而且写sql首先要实现的是考虑结果,其他的东西可以再优化
并且D 40 在表2中存在,但是在表3中也不存在,虽然D 40 这条数据因为是和表1里的name不同才没被选出来
所以你可能描述的不够详细

⑵ 谁知道SQL里面的物理文件名和逻辑文件名的区别简单点就是什么是物理文件名,什么又是逻辑文件名

物理文件名是包含文件名和文件存储路径的字符串。逻辑文件名是您在数据库中使用的物理文件名的逻辑表示。

SQL是结构化查询语言的缩写,代表结构化查询语言。SQL语言的主要功能是与各种数据库建立关系。此外,SQL被认为是关系数据库管理系统的标准语言。它是微软公司开发和推广的关系型数据库管理系统。

(2)sql逻辑和扩展阅读:

可以不同的方式使用数据库逻辑和物理名称:

1.数据库的物理名称:存在于磁盘上的名称。

2.逻辑名称:数据库的内部名称。

3.更改数据库的自维护名称不会更改数据库的逻辑名称。

简单的说:

1.物理文件名:用于计算机查找文件。

2.逻辑文件名:供用户查看。

3.在大多数情况下,在其他语言中需要的很大部分的程序实现单个事件只需要一个SQL语句可以实现一个目标,这也意味着我们可以用SQL语言编写非常复杂的语句。

⑶ 在SQL中,物理备份设备和逻辑备份设备有什么区别

可以这样理解:物理备份设备实际上就是一个文件,可以存储在介质上,逻辑备份设备是SQL指向物理备份设备的一条记录。

⑷ sql 里逻辑文件和物理文件各指什么

物理文件是实际存放数据的文件,就是在磁盘上具体对应的文件。逻辑文件LF是物理文件的一个视图,按定义的Key键值对数据进行了排序。操作方法如下:

1、打开SQLServerManagementStudio并连接到数据库引擎服务器。

⑸ 详解SQL逻辑查询的各个阶段

首先作者给出了如下的sql查询语句执行顺序

( ) select ( ) distinct ( ) <top_specification> <select_list>

( )from <left_table>

( ) <join_type> join <right_table>

( ) on <join _condition>

( ) where <where_condition>

( )group by <group_by_list>

( ) with {cube|rollup}

( )having(having_condition)

( ) order by <order_by_condition>

从这个顺序中我们不难发现 所有的 查询语句都是从from开始执行的 在执行过程中 每个步骤都会为

下一个步骤生成一个虚拟表 这个虚拟表将作为下一个执行步骤的输入

第一步 首先对from子句中的前两个表执行一个笛卡尔乘积 此时生成虚拟表 vt

第二步 接下来便是应用on筛选器 on 中的逻辑表达式将应用到 vt 中的各个行 筛选出满足on逻辑表达式的行 生成虚拟表 vt

第三步 如果是outer join 那么这一步就将添加外部行 left outer jion 就把左表在第二步中过滤的添加进来 如果是right outer join 那么就将右表在第二步中过滤掉的行添加进来 这样生成虚拟表 vt

第四步 如果 from 子句中的表数目多余两个表 那么就将vt 和第三个表连接从而计算笛卡尔乘积 生成虚拟表 该过程就是一个重复 的步骤 最终得到一个新的虚拟表 vt

第五步 应用where筛选器 对上一步生产的虚拟表引用where筛选器 生成虚拟表vt 在这有个比较重要的细节不得不说一下 对于包含outer join子句的查询 就有一个让人感到困惑的问题 到底在on筛选器还是用where筛选器指定逻辑表达式呢?on和where的最大区别在于 如果在on应用逻辑表达式那么在第三步outer join中还可以把移除的行再次添加回来 而where的移除的最终的

举个简单的例子 有一个学生表(班级 姓名)和一个成绩表(姓名 成绩) 我现在需要返回一个x班级的全体同学的成绩 但是这个班级有几个学生缺考 也就是说在成绩表中没有记录 为了得到我们预期的结果我们就需要在on子句指定学生和成绩表的关系(学生 姓名=成绩 姓名)那么我们是否发现在执行第二步的时候 对于没有参加考试的学生记录就不会出现在vt 中 因为他们被on的逻辑表达式过滤掉了 但是我们用left outer join就可以把左表(学生)中没有参加考试的学生找回来 因为我们想返回的是x班级的所有学生 如果在on中应用学生 班级= x 的话 那么在left outer join 中就会将不会把x班级的学生的所有记录找回来 所以只能在where筛选器中应用 学生 班级= x 应为它的过滤是最终的

第六步 group by 子句将中的唯一的值组合成为一组 得到虚拟表vt 如果应用了group by 那么后面的所有步骤都只能得到的vt 的列或者是聚合函数(count sum avg等) 原因在于最终的结果集中只为每个组包含一行 这一点请牢记

第七步 应用cube或者rollup选项 为vt 生成超组 生成vt

第八步 应用having筛选器 生成vt having筛选器是第一个也是为唯一一个应用到已分组数据的筛选器

第九步 处理select列表 将vt 中的在select中出现的列筛选出来 生成vt

第十步 应用distinct子句 vt 中移除相同的行 生成vt 事实上如果应用了group by子句那么distinct是多余的 原因同样在于 分组的时候是将列中唯一的值分成一组 同时只为每一组返回一行记录 那么所以的记录都将是不相同的

第十一步 应用order by子句 按照order_by_condition排序vt 此时返回的一个游标 而不是虚拟表 sql是基于集合的理论的 集合不会预先对他的行排序 它只是成员的逻辑集合 成员的顺序是无关紧要的 对表进行排序的查询可以返回一个对象 这个对象包含特定的物理顺序的逻辑组织 这个对象就叫游标 正因为返回值是游标 那么使用order by 子句查询不能应用于表表达式 排序是很需要成本的 除非你必须要排序 否则最好不要指定order by 最后 在这一步中是第一个也是唯一一个可以使用select列表中别名的步骤
lishixin/Article/program/SQL/201311/16406