SQL主外键和子查询

主键

数据库主键是指表中一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。

主键的作用

主键的主要作用如下:

(1)保证实体的完整性;

(2)加快数据库的操作速度;

(3) 在表中添加新记录时,数据库会自动检查新记录的主键值,不允许该值与其他记录的主键值重复;

(4) 数据库自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。

主键具有的特点:唯一性、非空性。

设置主键语句示例:

code int primary key,   主键不能为空,不能重复,确保唯一性

设置自增长主键语句示例:

code int primary key identity(1,1)从1开始,每次增长1,添加values时不用添加此列

设置外键:

在要设置外键的表上右键,选择设计,在需要设置外键的列名前右键,如下图:

SQL主外键和子查询

选择关系单击,出现对话框,单击添加,单击表和列规范后面的省略号,如下图:

SQL主外键和子查询

在出现的界面做出如下操作:

SQL主外键和子查询

点击确定,再点击确定,操作成功。

子查询,又叫做嵌套查询。

将一个查询语句做为一个结果集供其他SQL语句使用,就像使用普通的表一样,被当作结果集的查询语句被称为子查询。

子查询有两种类型:

一种是只返回一个单值的子查询,这时它可以用在一个单值可以使用的地方,这时子查询可以看作是一个拥有返回值的函数;

另外一种是返回一列值的子查询,这时子查询可以看作是一个在内存中临时存在的数据表。

新建一个部门表,一个员工表,员工表中每个人员的部门列用部门的编号。

子查询示例:

SQL主外键和子查询

create database lianxi117
go
use lianxi117
go
create table Student
(
bcode int primary key identity(101,1),
bname varchar(10),
bxueke int,
)
go
create table Teacher
(
tcode int primary key identity(1,1),
tkemu varchar(10),
tname varchar(10),
tage int,
)
go insert into Teacher values('语文','岳飞',68)
insert into Teacher values('数学','岳云',35)
insert into Teacher values('英语','岳雷',75)
insert into Teacher values('历史','叶挺',34)
insert into Teacher values('政治','张国荣',57)
insert into Teacher values('地理','*生',46)
insert into Teacher values('生物','张桂芳',73)
insert into Teacher values('物理','李云龙',23)
insert into Teacher values('化学','索超',48)
go select *from Teacher insert into Student values('李世民',1)
insert into Student values('李元霸',3)
insert into Student values('李建成',9)
insert into Student values('李元吉',7)
insert into Student values('李渊',5)
insert into Student values('李广',6)
insert into Student values('刘备',4)
insert into Student values('关羽',2)
insert into Student values('张飞',8)
insert into Student values('赵云',2)
insert into Student values('马超',6)
insert into Student values('黄忠',3)
go
select *from Student
--我就要选 A老师 教的课
select *from Teacher where tname ='岳飞'
--我就要选年龄最小的老师的课
select *from Teacher where tage =(select MIN(tage) from Teacher)
--某个学生选的哪门课哪个老师多少岁
select *from Teacher where tcode=(select bxueke from Student where bxueke=1)
--有几个人选了 老师A 都叫什么
select bname from Student where bxueke=(select bxueke from Student where bxueke=1)
select bname from Student where bxueke=(select tcode from Teacher where tname='岳云')
--用代码 给 学生表加一个年龄列
alter table Student
add bage int
--我就要比我小的老师教
select tname from Teacher where tage < (select bage from Student where bcode=106)
--老师A里 年龄最小的
select MIN(bage) from Student where bxueke=(select tcode from Teacher where tname='岳飞')
--所有选择 数学的学生 信息
select bname from Student where bxueke=(select tcode from Teacher where tkemu='数学')
--所有学生选择的老师年龄大于20的 学神信息
select *from Student where bxueke in (select tcode from Teacher where tage>20)
上一篇:Oracle常用sql语句(三)之子查询


下一篇:Nginx中root与alias的用法及区别: