澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

数据库篇,Server学习之路

0.目录

0.目录

0.目录

 

作为一枚Java后端开发者,数据库知识必不可少,对数据库的掌握熟悉度的考察也是对这个人是否有扎实基本功的考察。特别对于初级开发者,面试可能不会去问框架相关知识,但是绝对不会不去考察数据库知识,这里收集一些常见类型的SQL语句,无论对于平常开发还是准备面试,都会有助益。

基本表结构:

        student(sno,sname,sage,ssex)学生表
        course(cno,cname,tno) 课程表
        sc(sno,cno,score) 成绩表

*        teacher(tno,tname) 教师表*

* *

101,查询课程1的成绩比课程2的成绩高的所有学生的学号
select a.sno from
(select sno,score from sc where cno=1) a,
(select sno,score from sc where cno=2) b
where a.score>b.score and a.sno=b.sno

 

102,查询平均成绩大于60分的同学的学号和平均成绩*
select a.sno as "学号", avg(a.score) as "平均成绩" 
from
(select sno,score from sc) a 
group by sno having avg(a.score)>60
*

* *

103,查询所有同学的学号、姓名、选课数、总成绩*
select a.sno as 学号, b.sname as 姓名,
count(a.cno) as 选课数, sum(a.score) as 总成绩
from sc a, student b
where a.sno = b.sno
group by a.sno, b.sname
*

或者:

*selectstudent.sno as 学号, student.sname as 姓名,
 count(sc.cno) as 选课数, sum(score) as 总成绩
from student left Outer join sc on student.sno = sc.sno
group by student.sno, sname

*104,查询姓“张”的老师的个数

selectcount(distinct(tname)) from teacher where tname like '张%‘
或者:
select tname as "姓名", count(distinct(tname)) as "人数" 
from teacher 
where tname like'张%'
group by tname

 

105,查询没学过“张三”老师课的同学的学号、姓名
select student.sno,student.sname from student
where sno not in (select distinct(sc.sno) from sc,course,teacher
where sc.cno=course.cno and teacher.tno=course.tno and teacher.tname='张三')

 

106,查询同时学过课程1和课程2的同学的学号、姓名
select sno, sname from student
where sno in (select sno from sc where sc.cno = 1)
and sno in (select sno from sc where sc.cno = 2)
或者:

selectc.sno, c.sname from
(select sno from sc where sc.cno = 1) a,
(select sno from sc where sc.cno = 2) b,
student c
where a.sno = b.sno and a.sno = c.sno
或者:

select student.sno,student.sname from student,sc where student.sno=sc.sno and sc.cno=1
and exists( select * from sc as sc_2 where sc_2.sno=sc.sno and sc_2.cno=2)

 

107,查询学过“李四”老师所教所有课程的所有同学的学号、姓名
select a.sno, a.sname from student a, sc b
where a.sno = b.sno and b.cno in
(select c.cno from course c, teacher d where c.tno = d.tno and d.tname = '李四')

或者:

select a.sno, a.sname from student a, sc b,
(select c.cno from course c, teacher d where c.tno = d.tno and d.tname = '李四') e
where a.sno = b.sno and b.cno = e.cno

 

108,查询课程编号1的成绩比课程编号2的成绩高的所有同学的学号、姓名
select a.sno, a.sname from student a,
(select sno, score from sc where cno = 1) b,
(select sno, score from sc where cno = 2) c
where b.score > c.score and b.sno = c.sno and a.sno = b.sno

 

109,查询所有课程成绩小于60分的同学的学号、姓名
select sno,sname from student
where sno not in (select distinct sno from sc where score > 60)

澳门新浦京娱乐场网站, 

110,查询至少有一门课程与学号为1的同学所学课程相同的同学的学号和姓名
select distinct a.sno, a.sname
from student a, sc b
where a.sno <> 1 and a.sno=b.sno and
b.cno in (select cno from sc where sno = 1)

或者:

select s.sno,s.sname 
from student s,
(select sc.sno 
from sc
where sc.cno in (select sc1.cno from sc sc1 where sc1.sno=1)and sc.sno<>1
group by sc.sno)r1
where r1.sno=s.sno

 

Java知音公众号整理一些各大公司常用的面试笔试题,供大家在每天闲暇之余学习其中几道题目,日积月累,等到出去面试时,一切都水到渠成,面试时就自然会游刃有余了。

澳门新浦京娱乐场网站 1

 

作为一枚Java后端开发者,数据库知识必不可少,对数据库的掌握熟悉度的考察也是对这个人是否有扎实基本功的考察。特别对于初级开发者,面试可能不会去问框架相关知识,但是绝对不会不去考察数据库知识,这里收集一些常见类型的SQL语句,无论对于平常开发还是准备面试,都会有助益。

基本表结构:

        student(sno,sname,sage,ssex)学生表
        course(cno,cname,tno) 课程表
        sc(sno,cno,score) 成绩表

*        teacher(tno,tname) 教师表*

 

111、把“sc”表中“王五”所教课的成绩都更改为此课程的平均成绩
update sc set score = (select avg(sc_2.score) from sc sc_2 wheresc_2.cno=sc.cno)
from course,teacher where course.cno=sc.cno and course.tno=teacher.tno andteacher.tname='王五'

112、查询和编号为2的同学学习的课程完全相同的其他同学学号和姓名
这一题分两步查:

1,

select sno
from sc
where sno <> 2
group by sno
having sum(cno) = (select sum(cno) from sc where sno = 2)

2,
select b.sno, b.sname
from sc a, student b
where b.sno <> 2 and a.sno = b.sno
group by b.sno, b.sname
having sum(cno) = (select sum(cno) from sc where sno = 2)

113、删除学习“王五”老师课的sc表记录
delete sc from course, teacher
where course.cno = sc.cno and course.tno = teacher.tno and tname = '王五'

114、向sc表中插入一些记录,这些记录要求符合以下条件:
将没有课程3成绩同学的该成绩补齐, 其成绩取所有学生的课程2的平均成绩

insert sc select sno, 3, (select avg(score) from sc where cno = 2)
from student
where sno not in (select sno from sc where cno = 3)

115、按平平均分从高到低显示所有学生的如下统计报表:
-- 学号,企业管理,马克思,UML,数据库,物理,课程数,平均分

select sno as 学号
,max(case when cno = 1 then score end) AS 企业管理
,max(case when cno = 2 then score end) AS 马克思
,max(case when cno = 3 then score end) AS UML
,max(case when cno = 4 then score end) AS 数据库
,max(case when cno = 5 then score end) AS 物理
,count(cno) AS 课程数
,avg(score) AS 平均分
FROM sc
GROUP by sno
ORDER by avg(score) DESC

116、查询各科成绩最高分和最低分:

以如下形式显示:课程号,最高分,最低分
*select cno as 课程号, max(score) as 最高分, min(score) 最低分
from sc group by cno

select  course.cno as '课程号'
,MAX(score) as '最高分'
,MIN(score) as '最低分'
from sc,course
where sc.cno=course.cno
group by course.cno*

117、按各科平均成绩从低到高和及格率的百分数从高到低顺序
SELECT t.cno AS 课程号,
max(course.cname)AS 课程名,
isnull(AVG(score),0) AS 平均成绩,
100
SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/count(1) AS 及格率
FROM sc t, course
where t.cno = course.cno
GROUP BY t.cno
ORDER BY 及格率 desc*

118、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 

企业管理(001),马克思(002),UML (003),数据库(004) 
select 
avg(case when cno = 1 then score end) as 平均分1,
avg(case when cno = 2 then score end) as 平均分2,
avg(case when cno = 3 then score end) as 平均分3,
avg(case when cno = 4 then score end) as 平均分4,
100
sum(case when cno = 1 and score > 60 then 1 else 0 end) / sum(casewhen cno = 1 then 1 else 0 end) as 及格率1,
100 * sum(case when cno = 2 and score > 60 then 1 else 0 end) / sum(casewhen cno = 2 then 1 else 0 end) as 及格率2,
100 * sum(case when cno = 3 and score > 60 then 1 else 0 end) / sum(casewhen cno = 3 then 1 else 0 end) as 及格率3,
100 * sum(case when cno = 4 and score > 60 then 1 else 0 end) / sum(casewhen cno = 4 then 1 else 0 end) as 及格率4
from sc*

119、查询不同老师所教不同课程平均分, 从高到低显示
select max(c.tname) as 教师, max(b.cname) 课程, avg(a.score) 平均分
from sc a, course b, teacher c
where a.cno = b.cno and b.tno = c.tno
group by a.cno
order by 平均分 desc

或者:
select r.tname as '教师',r.rname as '课程' , AVG(score) as '平均分'
from sc,
(select  t.tname,c.cno as rcso,c.cname as rname
from teacher t ,course c
where t.tno=c.tno)r
where sc.cno=r.rcso
group by sc.cno,r.tname,r.rname 
order by AVG(score) desc

120、查询如下课程成绩均在第3名到第6名之间的学生的成绩:
-- [学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩

select top 6 max(a.sno) 学号, max(b.sname) 姓名,
max(case when cno = 1 then score end) as 企业管理,
max(case when cno = 2 then score end) as 马克思,
max(case when cno = 3 then score end) as UML,
max(case when cno = 4 then score end) as 数据库,
avg(score) as 平均分
from sc a, student b
where a.sno not in 

(select top 2 sno from sc where cno = 1 order by score desc)
  and a.sno not in (select top 2 sno from sc where cno = 2 order by scoredesc)
  and a.sno not in (select top 2 sno from sc where cno = 3 order by scoredesc)
  and a.sno not in (select top 2 sno from sc where cno = 4 order by scoredesc)
  and a.sno = b.sno
group by a.sno

 

 

* *

Java知音公众号整理一些各大公司常用的面试笔试题,供大家在每天闲暇之余学习其中几道题目,日积月累,等到出去面试时,一切都水到渠成,面试时就自然会游刃有余了。

1.定义

  • 1.1 什么是主键和外键
  • 1.2 主键和外键的作用
  • 1.3 主键、外键和索引的区别

1.前言

1.前言

2.主键(primary key)

  • 2.1 通过SSMS设置主键
  • 2.2 通过SQL语句设置主键

2.通过SSMS添加数据

2.通过SSMS添加数据

3.外键(foreign key)

  • 3.1 通过SSMS设置外键
  • 3.2 通过SQL语句设置外键

3.通过SQL语句添加数据

  • 3.1 添加单条数据
  • 3.2 添加多条数据

3.通过SQL语句添加数据

  • 3.1 添加单条数据
  • 3.2 添加多条数据

4.SQL语句向已存在表设置主键和外键

  • 4.1 已存在表设置主键
  • 4.2 已存在表设置外键

4.通过其他表导入数据

  • 4.1 通过数据库中的其他表导入数据
  • 4.2 通过excel表导入数据

4.通过其他表导入数据

  • 4.1 通过数据库中的其他表导入数据
  • 4.2 通过excel表导入数据

1.定义

1.前言

增删改查都是对数据的操作,其中“增”对应的SQL语句便是“insert”,也就是“插入”的意思。
本篇主要介绍数据的添加,有GUI方式的添加,也有SQL语句的添加,还有导入的添加。

1.前言

增删改查都是对数据的操作,其中“增”对应的SQL语句便是“insert”,也就是“插入”的意思。
本篇主要介绍数据的添加,有GUI方式的添加,也有SQL语句的添加,还有导入的添加。

1.1 什么是主键和外键

关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键。
比如:
学生表(学号,姓名,性别,班级)
其中每个学生的学号是唯一的,学号就是一个主键

课程表(课程编号,课程名,学分)
其中课程编号是唯一的,课程编号就是一个主键

成绩表(学号,课程号,成绩)
成绩表中单一一个属性无法唯一标识一条记录,学号和课程号的组合才可以唯一标识一条记录,所以 学号和课程号的属性组是一个主键

成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键

2.通过SSMS添加数据

2.1选择 数据库->SSMSTest->表->dbo.student 右键单击dbo.student选择编辑前200行。
澳门新浦京娱乐场网站 2
2.2按照下图将数据依次填入,并保存。
澳门新浦京娱乐场网站 3
2.3同理将下图数据输入到course表中,并保存。
澳门新浦京娱乐场网站 4
2.4同理将下图数据输入到sc表中,并保存。
澳门新浦京娱乐场网站 5
2.5至此,已将数据添加到三张表中。

2.通过SSMS添加数据

2.1选择 数据库->SSMSTest->表->dbo.student 右键单击dbo.student选择编辑前200行。
澳门新浦京娱乐场网站 6
2.2按照下图将数据依次填入,并保存。
澳门新浦京娱乐场网站 7
2.3同理将下图数据输入到course表中,并保存。
澳门新浦京娱乐场网站 8
2.4同理将下图数据输入到sc表中,并保存。
澳门新浦京娱乐场网站 9
2.5至此,已将数据添加到三张表中。

1.2 主键和外键的作用

1.2.1为了维护关系数据库的完整性:
主键是能确定一条记录的唯一标识,比如,一条记录包括身份正号,姓名,年龄。身份证号是唯一能确定你这个人的,其他都可能有重复,所以,身份证号是主键。

外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。比如,A表中的一个字段,是B表的主键,那他就可以是A表的外键。

1.2.2起约束作用:
外键取值规则:空值或参照的主键值。
(1)插入非空值时,如果主键表中没有这个值,则不能插入。
(2)更新时,不能改为主键表中没有的值。
(3)删除主键表记录时,你可以在建外键时选定外键记录一起级联删除还是拒绝删除。
(4)更新主键记录时,同样有级联更新和拒绝执行的选择。

数据库篇,Server学习之路。3.通过SQL语句添加数据

3.通过SQL语句添加数据

1.3 主键、外键和索引的区别

区别 主键 外键 索引
定义 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 该字段没有重复值,但可以有一个空值
作用 用来保证数据完整性 用来和其他表建立联系用的 是提高查询排序的速度
个数 主键只能有一个 一个表可以有多个外键 一个表可以有多个唯一索引

参考网站:SQL的主键和外键的作用

3.1 添加单条数据

3.1.1选择 数据库->SQLTest,点击新建查询,注意左上角的框里是SQLTest,不是的话手动选择一下。
3.1.2在点击新建查询出来的界面中输入以下代码:

insert into student values('0001', '张三', 18, '男', '文学院')
insert into student values('0002', '李四', 19, '女', '理学院')
insert into student values('0003', '王五', 20, '男', '文学院')
insert into student values('0004', '赵六', 21, '女', '理学院')

insert into course values('1001', '英语', null, 3)
insert into course values('1002', '体育', null, 3)
insert into course values('1003', '书法', null, 3)

insert into sc values('0001', '1001', 90)
insert into sc values('0001', '1002', 80)
insert into sc values('0001', '1003', 70)
insert into sc values('0002', '1001', 75)
insert into sc values('0002', '1002', 85)
insert into sc values('0002', '1003', 95)

3.1.3点击执行。
澳门新浦京娱乐场网站 10
3.1.4选择 数据库->SQLTest->表->dbo.student 右键单击dbo.student选择编辑前200行。
澳门新浦京娱乐场网站 11
3.1.5可以看到student表中已经成功添加了数据,同理也可以看到其他两个表中也成功添加了数据。
澳门新浦京娱乐场网站 12
3.1.6至此,已将数据添加到三张表中。

3.1 添加单条数据

3.1.1选择 数据库->SQLTest,点击新建查询,注意左上角的框里是SQLTest,不是的话手动选择一下。
3.1.2在点击新建查询出来的界面中输入以下代码:

insert into student values('0001', '张三', 18, '男', '文学院')
insert into student values('0002', '李四', 19, '女', '理学院')
insert into student values('0003', '王五', 20, '男', '文学院')
insert into student values('0004', '赵六', 21, '女', '理学院')

insert into course values('1001', '英语', null, 3)
insert into course values('1002', '体育', null, 3)
insert into course values('1003', '书法', null, 3)

insert into sc values('0001', '1001', 90)
insert into sc values('0001', '1002', 80)
insert into sc values('0001', '1003', 70)
insert into sc values('0002', '1001', 75)
insert into sc values('0002', '1002', 85)
insert into sc values('0002', '1003', 95)

3.1.3点击执行。
澳门新浦京娱乐场网站 13
3.1.4选择 数据库->SQLTest->表->dbo.student 右键单击dbo.student选择编辑前200行。
澳门新浦京娱乐场网站 14
3.1.5可以看到student表中已经成功添加了数据,同理也可以看到其他两个表中也成功添加了数据。
澳门新浦京娱乐场网站 15
3.1.6至此,已将数据添加到三张表中。

2.主键(primary key)

3.2 添加多条数据

同时添加多条数据,只需使用union关键字即可。

insert into student(sno, sname, sage, ssex, sdept)
select '0001', '张三', 18, '男', '文学院' union
select '0002', '李四', 19, '女', '理学院' union
select '0003', '王五', 20, '男', '文学院' union
select '0004', '赵六', 21, '女', '理学院'

insert into course(cno, cname, cpno, ccredit)
select '1001', '英语', null, 3 union
select '1002', '体育', null, 3 union
select '1003', '书法', null, 3

insert into sc(sno, cno, grade)
select '0001', '1001', 90 union
select '0001', '1002', 80 union
select '0001', '1003', 70 union
select '0002', '1001', 75 union
select '0002', '1002', 85 union
select '0002', '1003', 95

3.2 添加多条数据

同时添加多条数据,只需使用union关键字即可。

insert into student(sno, sname, sage, ssex, sdept)
select '0001', '张三', 18, '男', '文学院' union
select '0002', '李四', 19, '女', '理学院' union
select '0003', '王五', 20, '男', '文学院' union
select '0004', '赵六', 21, '女', '理学院'

insert into course(cno, cname, cpno, ccredit)
select '1001', '英语', null, 3 union
select '1002', '体育', null, 3 union
select '1003', '书法', null, 3

insert into sc(sno, cno, grade)
select '0001', '1001', 90 union
select '0001', '1002', 80 union
select '0001', '1003', 70 union
select '0002', '1001', 75 union
select '0002', '1002', 85 union
select '0002', '1003', 95

2.1 通过SSMS设置主键

2.1.1打开之前建立的表,即选择 数据库->SSMSTest->表->dbo.student 右键单击dbo.student选择设计。
澳门新浦京娱乐场网站 16
2.1.2在sno处右键单击选择设置主键。
澳门新浦京娱乐场网站 17
2.1.3这时可以看到sno前面出现了一个钥匙一样的图标,这就代表着sno已经被设置为主键了。点击一下保存或者按Ctrl S就可以保存了。
2.1.4按照以上步骤打开dbo.course,右键单击cno选择设置主键。保存。
澳门新浦京娱乐场网站 18
2.1.5按照以上步骤打开dbo.sc,按住shift依次点击sno和cno前面的小框按钮,就可以同时选中这两行。然后再右键单击选择设置主键。保存。
澳门新浦京娱乐场网站 19
2.1.6至此,已经完成了三张表的主键设置。

4.通过其他表导入数据

4.通过其他表导入数据

2.2 通过SQL语句设置主键

2.2.1选择 数据库->SQLTest,点击新建查询,注意左上角的框里是SQLTest,不是的话手动选择一下。
澳门新浦京娱乐场网站 20
2.2.2在点击新建查询出来的界面中输入以下代码:

--这是SQL中的注释信息,使用两个减号来注释。
drop table student    --删除表student
create table student  --创建表student
(sno char(4) primary key,  --设置sno为主键
sname char(8),
sage int,
ssex char(2),
sdept char(20)
)

drop table course    --删除表course
create table course  --创建表course
(cno char(4) primary key,  --设置cno为主键
cname char(8),
cpno char(4),
ccredit int
)

drop table sc    --删除表sc
create table sc  --创建表sc
(sno char(4),
cno char(4),
grade int,
primary key(sno, cno)  --设置sno和cno的属性组为主键
)

2.2.3点击上面的执行,或者按F5之后出来了如下画面。
澳门新浦京娱乐场网站 21
2.2.4右键SQLTest点击刷新或者按F5,然后选择表,右键单击选择设计,能看到三张表都已经设置主键了。
澳门新浦京娱乐场网站 22
澳门新浦京娱乐场网站 23
澳门新浦京娱乐场网站 24
2.2.5至此,已经完成了三张表的主键设置。

4.1 通过数据库中的其他表导入数据

SQL Server语句把一个表的数据插入到另一个表,有以下两种方法:
4.1.1第一种,当要插入的表(student_back)不存在时

--把表student中性别为'男'的学生信息插入到表student_back(不存在)中
select * into student_back from student where ssex='男'

4.1.2第二种,当要插入的表已经存在时

--把表student中性别为'女'的学生信息插入到表student_back(已存在)中
insert into student_back(bno, bname, bage, bsex, bdept)
select sno, sname, sage, ssex, sdept from student
where ssex='女'

参考网站:SQL Server插入数据和删除数据

4.1 通过数据库中的其他表导入数据

SQL Server语句把一个表的数据插入到另一个表,有以下两种方法:
4.1.1第一种,当要插入的表(student_back)不存在时

--把表student中性别为'男'的学生信息插入到表student_back(不存在)中
select * into student_back from student where ssex='男'

4.1.2第二种,当要插入的表已经存在时

--把表student中性别为'女'的学生信息插入到表student_back(已存在)中
insert into student_back(bno, bname, bage, bsex, bdept)
select sno, sname, sage, ssex, sdept from student
where ssex='女'

参考网站:SQL Server插入数据和删除数据

3.外键(foreign key)

4.2 通过excel表导入数据

4.2.1打开excel表,观察第一行是字段名字还是具体数据,我的表这里第一行是数据。
澳门新浦京娱乐场网站 25
4.2.2选择 数据库->SQLTest,右键单击选择 任务->导入数据。
澳门新浦京娱乐场网站 26
4.2.3点击下一步。
澳门新浦京娱乐场网站 27
4.2.4数据源选择excel,文件路径选择你的文件路径,凡是excel版本在2007以上的都选择2007,特别注意首行包含列名称那里,因为我的excel中首行是数据,所以要把那个√取消掉。然后点击下一步。
澳门新浦京娱乐场网站 28
4.2.5如果出现了下图的错误,就去这个网址() 下载安装好之后重试即可。
澳门新浦京娱乐场网站 29
4.2.6按你的数据库登录方式选择身份验证方式。然后点击下一步。
澳门新浦京娱乐场网站 30
4.2.7点击下一步。
澳门新浦京娱乐场网站 31
4.2.8在目标那里选择student表。然后点击下一步。
澳门新浦京娱乐场网站 32
4.2.9点击下一步。
澳门新浦京娱乐场网站 33
4.2.10点击下一步。
澳门新浦京娱乐场网站 34
4.2.10点击完成。
澳门新浦京娱乐场网站 35
4.2.11到这里就代表着完成导入了。
澳门新浦京娱乐场网站 36
4.2.12选择 数据库->SQLTest->表->dbo.student 右键单击dbo.student选择编辑前200行,可以看到刚刚的数据已经成功导入。
澳门新浦京娱乐场网站 37

4.2 通过excel表导入数据

4.2.1打开excel表,观察第一行是字段名字还是具体数据,我的表这里第一行是数据。
澳门新浦京娱乐场网站 38
4.2.2选择 数据库->SQLTest,右键单击选择 任务->导入数据。
澳门新浦京娱乐场网站 39
4.2.3点击下一步。
澳门新浦京娱乐场网站 40
4.2.4数据源选择excel,文件路径选择你的文件路径,凡是excel版本在2007以上的都选择2007,特别注意首行包含列名称那里,因为我的excel中首行是数据,所以要把那个√取消掉。然后点击下一步。
澳门新浦京娱乐场网站 41
4.2.5如果出现了下图的错误,就去这个网址() 下载安装好之后重试即可。
澳门新浦京娱乐场网站 42
4.2.6按你的数据库登录方式选择身份验证方式。然后点击下一步。
澳门新浦京娱乐场网站 43
4.2.7点击下一步。
澳门新浦京娱乐场网站 44
4.2.8在目标那里选择student表。然后点击下一步。
澳门新浦京娱乐场网站 45
4.2.9点击下一步。
澳门新浦京娱乐场网站 46
4.2.10点击下一步。
澳门新浦京娱乐场网站 47
4.2.10点击完成。
澳门新浦京娱乐场网站 48
4.2.11到这里就代表着完成导入了。
澳门新浦京娱乐场网站 49
4.2.12选择 数据库->SQLTest->表->dbo.student 右键单击dbo.student选择编辑前200行,可以看到刚刚的数据已经成功导入。
澳门新浦京娱乐场网站 50

3.1 通过SSMS设置外键

3.1.1选择 数据库->SSMSTest->表->dbo.sc 右键单击dbo.sc选择设计。
澳门新浦京娱乐场网站 51
3.1.2右键单击sno或者cno,选择关系。
澳门新浦京娱乐场网站 52
3.1.3点击左下角的添加。
澳门新浦京娱乐场网站 53
3.1.4在 表和列规范 后面的框中点一下,就会出现后面的三个点的按钮,点击三个点图标的那个按钮。
澳门新浦京娱乐场网站 54
3.1.5因为sc中的sno引用了student中的sno,所以主键表那里选择student,然后选择对应的sno。而sc中的cno因为引用的是course中的sc,所以在这里没法设置外键,需要等下再设置,在这里把它选择为无。点击确定。
澳门新浦京娱乐场网站 55
澳门新浦京娱乐场网站 56
3.1.6再次点击左下角的添加。按照上述步骤将主键表选择为course,选择对应sc中的cno的course中的cno,并点击确定。
澳门新浦京娱乐场网站 57
澳门新浦京娱乐场网站 58
澳门新浦京娱乐场网站 59
3.1.7点击关闭,然后保存,在出现的警告中选择是。
澳门新浦京娱乐场网站 60
澳门新浦京娱乐场网站 61
3.1.8选择 数据库->SSMSTest->数据库关系图 右键单击选择新建数据库关系图,在弹窗中选择是,然后将三张表都添加,然后就可以看到三张表之间的关系了。
澳门新浦京娱乐场网站 62
澳门新浦京娱乐场网站 63
澳门新浦京娱乐场网站 64
澳门新浦京娱乐场网站 65

3.2 通过SQL语句设置外键

3.2.1选择 数据库->SQLTest,然后选择新建查询。注意左上角的那个框中要选中SQLTest,如果不是的话就手动选择一下。
3.2.2在新建查询出来的界面中输入以下代码:

--这是SQL中的注释信息,使用两个减号来注释。
drop table sc    --删除表sc
create table sc  --创建表sc
(sno char(4) foreign key references student(sno),  --加外键约束
cno char(4) foreign key references course(cno),  --加外键约束
grade int,
primary key(sno, cno)  --设置sno和cno的属性组为主键
)

3.2.3点击执行。
澳门新浦京娱乐场网站 66
3.2.4选择 数据库->SSMSTest->数据库关系图 右键单击选择新建数据库关系图,在弹窗中选择是,然后将三张表都添加,然后就可以看到三张表之间的关系了。
澳门新浦京娱乐场网站 67

4.SQL语句向已存在表设置主键和外键

4.1 已存在表设置主键

格式为:

alter table 表名
add constraint PK_字段名--"PK"为主键的缩写,字段名为要在其上创建主键的字段名,'PK__字段名'就为约束名
primary key (字段名) --字段名同上

如:

alter table student
add constraint PK_sno
primary key (sno)

PS:如果执行以上代码有以下警告,说明在建表的时候没有给sno添加非空约束,即需要在建表的时候使用以下代码。
澳门新浦京娱乐场网站 68

drop table student    --删除表student
create table student  --创建表student
(sno char(4) not null,  --加非空约束,不加"not null" 默认为:可以为空
sname char(8),
sage int,
ssex char(2),
sdept char(20)
)

4.2 已存在表设置外键

格式为:

alter table 表名
add constraint FK_字段名--"FK"为外键的缩写
foreign key (字段名) references 关联的表名(关联的字段名) --注意'关联的表名'和'关联的字段名'

如:

alter table sc add constraint FK_sno foreign key (sno) references student(sno)

本文由澳门新浦京娱乐场网站发布于数据库,转载请注明出处:数据库篇,Server学习之路