我的数据库知识精选(一)

 

1.一个属性既可以是主键又可以是外键(这种情况主要出现在一个对象属于另一个对象的情况下吗?)

学生(学号,姓名)
本科生(学号,专业)

其中学号均为主键,并且学生表的学号分别又为后表的外键

 2.参照完整性的进一步理解:

关系R( A,B,C) S(D,E,A) A是R的主键,A是S的外键
<注意这并不属于上面既是主键又是外键的情况>
A作为R的主键当然要有作为主键的限制,例如不能重复,不能为空之类的

A作为S的外键也要有一定的限制,例如A在S中一定要是R中有的值,或者NULL。(即符合参考完整性)

 3.where字句和having的区别:

两者作用对象不同。where字句作用于基本表和试图,从中选择满足条件的元组,having短语作用于组(即GROUP BY得到的组),

从中选择满足条件的组,例:

select sno

from sc

group by sno

having count(*)>3

 4.数据查询主要分为:单表查询,连接查询,嵌套查询,集合查询.   

 其中连接查询里面的自身连接可以注意一下; 而嵌套查询正是Structed Query Language 的含义所在。

下面看一个关于嵌套查询中exists查询的例子:

查询所有选修了1号课程的学生姓名:

select  sname

from student

where EXISTS

            (select *

             from sc

            where sno=student.sno and cno='1'

             )

只要exists子句为真,就把student表中的sname放到结果集了,另外in子句是先内查询再外查询,而exists子句是内外同时查询。

 同理,查询没有选修1号课程的学生姓名:

select sname

from student

where not EXISTS

(select *

from sc

where sno=student.sno and cno='1'

)

总之,只要抓住三点就行:

(1).exists子句是内外同时查询;

(2).当使用的是存在量词EXISTS:若内层查询结果时,外层的WHERE子句返回真值  ;

当使用的是存在量词NOT EXISTS:若内层查询没有结果时,外层的WHERE子句返回真值;

(3).只有当where返回为真时,内查询才把得到的结果放到结果集中。

 

 

 

补充中。。。。。。。。。。。。。。。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值