主键、外键和子查询

1 主键和外键的区别

1.1定义
主键--唯一标识一条记录,不能有重复的,不允许为空

外键--表的外键是另一表的主键, 外键可以有重复的, 可以是空

1.2作用

主键--用来保证数据完整性

外键--用来和其他表建立联系用的

1.3个数:

主键--主键只能有一个

外键--一个表可以有多个外键


2 主键语句
code int PRIMARY KEY IDENTITY(1,1),
--PRIMARY KEY 标识主键
--IDENTITY(1,1) 从一开始,每增加一行加一;
插入数据不用再写。


3 外键
3.1 外键取值规则:空值或参照的主键值。

(1)插入非空值时,如果主键表中没有这个值,则不能插入。

(2)更新时,不能改为主键表中没有的值。

(3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。

(4)更新主键记录时,同样有级联更新和拒绝执行的选择。
3.2设置
选中表->右键:设计->选中需要设置外键的字段->选择“关系”->选择"添加"
->在表和列规范处选择右边省略号->再选择相应关系


3 子查询
在SQL语言中,当一个查询语句嵌套在另一个查询的查询条件之中时,称为子查询
3.1(1)子查询要用括号括起来;
(2)将子查询放在比较运算符的右边;
(3)不要在子查询中使用order by子句,
select语句中只能有一个order by子句,并且它只能是主select语句的最后一个子句。
但是如果有top n 的话, 可以有order by.
3.2分页查询中:select top 5 * from emp where empno in
(select TOP 5 empno from emp order by empno desc) order by empno )


3.3单行子查询 :单行子查询是指子查询的返回结果只有一行数据。
(1)select code,name,sex,age,(select bname from bumen where bumen.bcode=renyuan.bc),
(select bceo from bumen where bumen.bcode=renyuan.bc)from renyuan
(2)select code from renyuan where age=(select max(age) from renyuan where sex='男')
3.4多行子查询:多行子查询即是子查询的返回结果是多行数据。当
主查询语句的条件语句中引用子查询结果时必须用多行比较符号(IN,ALL,ANY)来进行比较。
select top 5 *from renyuan where code not in(select top 5 code from renyuan)