易截截图软件、单文件、免安装、纯绿色、仅160KB

【转】带存在量词NOT EXISTS的SQL语句问题

带存在量词NOT EXISTS的SQL语句问题
学生表student (sno学号 sname姓名 sdept所在系)
课程表course (cno课程号 cname课程名 cpno选修课号 ccredit学分)
学生选课表sc (sn0学号 cno课程号 grade成绩)
对以上表进行查寻选修了全部课程的学生姓名
由于不,没有全称量词,可将题目的意思转换为等价的存在量词形式:查询这样的学生,没有一门课程是他不选修的
 
select sname
from student
where not exists
(select *
from course
where not exists
(select *
from sc
where sno=student.sno and cno=course.cno)) 此行的内部运行方式是怎样的?是先找出一个学生的学号,在课程表中一门课一门课地找,找到一门课以后就向下找,直到找到一门他没有学习的课或课程表的最后一门课才将相应的结果返回真或假吗?
又一问题,单说内层查询,是找他学了全部课程以后该查询应当为真还是假?经过not exists以后又向上级查询返回真还是假?
为什么有这样的问题呢?因为我的判断(当然是错误的了)是当找到了学习全部课程的学生以后,返回了假,这似乎是在找没有选修全部课程的学生,最终应当将结果取反才能得到选修了全部课程的学生的学号。
我的逻辑关系已经乱了,所以希望指点我的高人说细一点,解释地透彻一点,谢谢了
 
网友回答:
网友:w_rose
“全称量词”很自然地需要转换为not exists来处理。逻辑表达中,不需要“全称量词”,只表达“何物存在”就可以了。any xxx等价于exist xxx的“矛盾句子被否定”。逻辑中,如果去掉显式的“全称量词”,可以避免很多空洞、含糊的描述形式。
 
“学生x选修了全部课程”,转换为以下这个查询被否定。这个查询就是:存在课程y,x没有选修y。
 
了解了逻辑涵义,关于所谓“内部运行方式”就比较好说了。这是“相关子查询”,即内层的查询关联外层查询的结果,所以查询规划首先是对外层进行查询,然后再处理内层的匹配记录。相当于以下伪代码:
 
for each x in student
if 判断学生(x) then print x
next
 
function 判断学生(x)
for each y in course
if exists select (* from sc where 学生=x and 课程=y) return false
next
return true
end function
 
最初ibm开发的sql只有exists和not exists相关子查询并且认为足够了,以


相关文档:

SQL 学习笔记 Like操作符

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
SQL LIKE 操作符语法
SELECT column_name(s) from table_name WHERE column_name LIKE pattern
SQL 通配符
在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。
SQL 通配符必须与 LIKE 运算符一起使用。
在 SQL 中,可使用以下通配符:
通配符
描 ......

SQL HexString 与 Binary 互换

HexString to Binary:
DECLARE @y CHAR(34)
SET @y = '0x499104dc92dd27499da9ad8f56dcb437'
DECLARE @x BINARY(16)
DECLARE @sql NVARCHAR(200)
SET @sql = 'SELECT @x = ' + @y
EXEC sp_executesql
@sql,
N'@x BINARY(16) OUTPUT',
@x OUTPUT
SELECT @x
Binary to HexString:
DECLARE @a VARBINARY(20)
SET ......

SQL Server之分布式事务

SQL Server之分布式事务
 
 收藏
--> Title  : SQL Server之分布式事务
 
--> Author : wufeng4552
 
--> Date   : 2009-11-11
 
SQL Server之分布式事务
 
(一)概念:
 
分布式事务是涉及来自两个或多个源的资源的事务。Microsoft® SQL Serv ......

hibernate sql查询 list


本文转载: http://hi.baidu.com/%D2%BB%C6%F0%C8%A5%CC%DF%C7%F2/blog/item/802027355899fe83a61e12ee.html
使用SQLQuery
对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery
()
获取这个接口。最简单的情况下,我们可以采用以下形式:
List
cats
=
sess.createSQLQuery
(
......

sql中日期格式

1 ---上个月月初第一天
  2  select CONVERT(varchar(12) , DATEADD(mm,DATEDIFF(mm,0,dateadd(mm,-1,getdate())),0), 112 )
  3
  4  ---上个月月末最后一天
  5  select CONVERT(varchar(12),dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate()),0)), 112 )
  6
  7 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号