SQLServer数据库学习笔记
1,exists和in的理解(参考/article/)
exists:如果子查询中包括某一行,那么就为TRUE
in:如果操作数为TRUE等于表达式列表中的一个,那么就为TRUE
exists总是搞得不太明白
select 。。。from。。。where 。。。
where就相当于一个判断条件,只有where后面的表达式运算结果为TRUE,前面的才能select出来
EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False
1: SELECT omerId, CompanyName 2: FROM Customers c 3: WHERE EXISTS( 4: SELECT OrderID FROM Orders o 5: WHERE omerID = omerID)
像这样的EXISTS子查询中的SELECT什么根本不重要,因为子查询只是检查这个表中有没有满足WHERE后条件的行, 有就返回TRUE,没有就FALSE,所以很多EXISTS后都是SELECT的*
一行行的去判定,EXISTS返回的是TRUE,就是存在,则把这行的相关信息输出
1: select distinct 姓名 from xs 2: where not exists ( 3: select * from kc 4: where not exists ( 5: select * from xs_kc 6: where 学号=xs.学号 and 课程号=kc.课程号 )
分析下上面的查询语句:
把最外层的xs表里的记录一行一行的同中层一行一的笛卡尔乘积后拿到里面去检验
在最里层,如果xs_kc表里的某行有拿来检验的这行的学号,同时有中层拿来检验的.课程号
就返回TRUE,说明这个这个学生选了这门课
中层如果某门课程没有收到返回的TRUE信息,说明这个名字和课程的搭配在xs_kc表中没有,或者说中层select出来的是没有被这个学生选择的课程信息,如果有这样的课程,就向最外层返回个TRUE
最外层在返回信息上加了not,即最外层找的是这样的一种学生:
他选择了所有的课程
最外层一行行的去检测,如果他满足这个条件,就输出他的姓名且只输出一次
我这是一层层的分析,还有么有什么别的办法?
2,select。。。into @。。。
和select @。。。 = 。。。应该是相同的吧
3,用AS为列重命名似乎比=更好点,和赋值区分开
4,用compute汇总的时候,如果是根据某列汇总的,先要order by此列,然后在compute相应信息,最后by此列
group或者compute的时候,如果by了某列,select里都要出现相同的列
区别是group的聚合函数在select行中(称为选择列表),而compute的聚合函数在compute行中,同时compute可以不带by,对所有行汇总
-
win10系统蓝屏怎么解决大纲
一些升级了Win10系统的电脑用户反映说,Win10系统在玩一些大型电脑游戏的时候,运行一点都不卡,非常值得推荐。但是,也有一些Win10系统的用户发现,他们在玩玩英雄联盟或者是其他一些腾讯游戏的时候,出现了蓝屏。这可能是系统软件的冲突所导致的,下面就来介绍一下Win10系...
-
服务质量管理系统论文
服务质量(ServiceQuality)是指服务能够满足规定和潜在需求的特征和特性的总和,是指服务工作能够满足被服务者需求的程度。下面是小编为你带来的服务质量管理系统论文,欢迎阅读。服务质量管理系统及其应用摘要:随着电信市场的不断扩大,各大运营商所面临的机遇与挑战...
-
电子商务系统分析与设计在线作业及答案
1.以下不属于灾难恢复操作的是()。A.全盘恢复B.重定向恢复C.个别文件恢复D.数据库恢复正确答案:D2.下列关于电子商务网站目标的.说法中,正确的是()。A.低技术产品更易在网上销售B.受教育水平越高,越容易成为Internet用户C.在亚洲,性别对上网无明显差别D.有形产品比...
-
怎么保证Oracle数据库的安全
在操作系统下建立用户组是保证数据库安全性的一种有效方法。Oracle程序为了安全性目的一般分为两类:一类所有的用户都可执行,另一类只DBA可执行。在Unix环境下组设置的配置文件是/etc/group,关于这个文件如何配置,请参阅Unix的有关手册。保证安全性的几种方法:(1)在安...