数据库知识必杀,查询语句示例

数据库也是计量机类笔试面试中不可幸免会遇见的考试的地点,尤其是银行和一部分传统软件类公司。这里根据整理的材质,对数据库的相干文化也做个总计吧。希望学过数据库但长日子不用的同桌依据那些文化能够回忆和重拾,没学过的同室能调整一些数据库的基础知识。

数据库也是Computer类笔试面试中不可幸免会碰到的考试的场馆,非常是银行和有个别古板软件类集团。这里依照整理的材质,对数据库的连锁文化也做个小结吧。希望学过数据库但长日子不用的同室按照那几个知识能够回忆和重拾,没学过的同窗能调控一些数据库的基础知识。

Student(S#,Sname,Sage,Ssex) 学生表
Course(C#,Cname,T#) 课程表
SC(S#,C#,score) 成绩表
Teacher(T#,Tname) 教师表
 
问题:
1、查询“001”课程比“002”课程战表高的享有学生的学号;

Student(S#,Sname,Sage,Ssex)
学生表
Course(C#,Cname,T#) 课程表
SC(S#,C#997755.com澳门葡京 ,,score) 成绩表
Teacher(T#,Tname) 教师表

第一节

第一节

复制代码 代码如下:

问题:
1、查询“001”课程比“002”课程战绩高的全体学员的学号;
select a.S# from (select s#,score from SC where C#=’001′) a,(select
s#,score
from SC where C#=’002′) b
where a.score>b.score and a.s#=b.s#;
2、查询平均战绩超乎60分的同班的学号和平均成绩;
select S#,avg(score)
from sc
group by S# having avg(score) >60;
3、查询全体同学的学号、姓名、选课数、总成绩;
select Student.S#,Student.Sname,count(SC.C#),sum(score)
from Student left Outer join SC on Student.S#=SC.S#
group by Student.S#,Sname
4、查询姓“李”的园丁的个数;
select count(distinct(Tname))
from Teacher
where Tname like ‘李%’;
5、查询没学过“叶平”老师课的同学的学号、姓名;
select Student.S#,Student.Sname
from Student
where S# not in (select distinct( SC.S#) from SC,Course,Teacher where
SC.C#=Course.C# and Teacher.T#=Course.T# and
Teacher.Tname=’叶平’);
6、查询学过“001”何况也学过数码“002”课程的同学的学号、姓名;
select Student.S#,Student.Sname from Student,SC where
Student.S#=SC.S# and SC.C#=’001’and exists( Select * from SC as
SC_2 where SC_2.S#=SC.S# and SC_2.C#=’002′);
7、查询学过“叶平”老师所教的全部课的同室的学号、姓名;
select S#,Sname
from Student
where S# in (select S# from SC ,Course ,Teacher where
SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname=’叶平’
group by S# having count(SC.C#)=(select count(C#) from Course,Teacher
where Teacher.T#=Course.T# and Tname=’叶平’));
8、查询课程编号“002”的实际业绩比课程编号“001”课程低的具有同学的学号、姓名;
Select S#,Sname from (select Student.S#,Student.Sname,score ,(select
score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#=’002′)
score2
from Student,SC where Student.S#=SC.S# and C#=’001′) S_2 where
score2 <score;
9、查询全数科目战表小于60分的同学的学号、姓名;
select S#,Sname
from Student
where S# not in (select Student.S# from Student,SC where S.S#=SC.S#
and score>60);
10、查询未有学全全体课的同室的学号、姓名;
select Student.S#,Student.Sname
from Student,SC
where Student.S#=SC.S# group by Student.S#,Student.Sname having
count(C#) <(select count(C#) from Course);
11、查询至少有一门课与学号为“1001”的同室所学一样的同学的学号和人名;
select S#,Sname from Student,SC where Student.S#=SC.S# and C# in
select C# from SC where S#=’1001′;
12、查询至少学过学号为“001”同学全体一门课的其余同学学号和人名;
select distinct SC.S#,Sname
from Student,SC
where Student.S#=SC.S# and C# in (select C# from SC where
S#=’001′);
13、把“SC”表中“叶平”老师教的课的实绩都改造为此课程的平分战绩;
update SC set score=(select avg(SC_2.score)
from SC SC_2
where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and
Course.T#=Teacher.T# and Teacher.Tname=’叶平’);
14、查询和“1002”号的同窗学习的教程完全同样的其他同学学号和姓名;
select S# from SC where C# in (select C# from SC where S#=’1002′)
group by S# having count(*)=(select count(*) from SC where
S#=’1002′);
15、删除学习“叶平”老师课的SC表记录;
Delect SC
from course ,Teacher
where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname=’叶平’;
16、向SC表中插入一些笔录,这么些记录必要符合以下法规:未有上过编号“003”课程的校友学号、2、
号课的平均战绩;
Insert SC select S#,’002′,(Select avg(score)
from SC where C#=’002′) from Student where S# not in (Select S# from
SC where C#=’002′);
17、按平均成绩从高到低显示全部学生的“数据库”、“公司管理”、“匈牙利(Hungary)语”三门的教程战绩,按如下情势显得:
学生ID,,数据库,集团管理,法语,有效课程数,有效平均分
SELECT S# as 学生ID
,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#=’004′) AS 数据库
,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#=’001′) AS 集团管理
,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#=’006′) AS 英语
,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均战表
FROM SC AS t
GROUP BY S#
ORDER BY avg(t.score)
18、查询各科成绩最高和最低的分:以如下格局展现:课程ID,最高分,最低分
SELECT L.C# As 课程ID,L.score AS 最高分,R.score AS 最低分
FROM SC L ,SC AS R
WHERE L.C# = R.C# and
L.score = (SELECT MAX(IL.score)
FROM SC AS IL,Student AS IM
WHERE L.C# = IL.C# and IM.S#=IL.S#
GROUP BY IL.C#)
AND
R.Score = (SELECT MIN(IR.score)
FROM SC AS IR
WHERE R.C# = IR.C#
GROUP BY IR.C#
);
19、按各科平均成绩从低到高和及格率的百分比从高到低依次
SELECT t.C# AS 课程号,max(course.Cname)AS 课程名,isnull(AVG(score),0)
AS 平均成绩
,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0
END)/COUNT(*) AS 及格百分数
FROM SC T,Course
where t.C#=course.C#
GROUP BY t.C#
ORDER BY 100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0
END)/COUNT(*) DESC
20、查询如下课程平均战绩和及格率的比重(用”1行”突显):
集团管理(001),Marx(002),OO&UML (003),数据库(004)
SELECT SUM(CASE WHEN C# =’001′ THEN score ELSE 0 END)/SUM(CASE C# WHEN
‘001’ THEN 1 ELSE 0 END) AS 公司管理平均分
,100 * SUM(CASE WHEN C# = ‘001’ AND score >= 60 THEN 1 ELSE 0
END)/SUM(CASE WHEN C# = ‘001’ THEN 1 ELSE 0 END) AS
集团管理及格百分数
,SUM(CASE WHEN C# = ‘002’ THEN score ELSE 0 END)/SUM(CASE C# WHEN
‘002’ THEN 1 ELSE 0 END) AS 马克思平均分
,100 * SUM(CASE WHEN C# = ‘002’ AND score >= 60 THEN 1 ELSE 0
END)/SUM(CASE WHEN C# = ‘002’ THEN 1 ELSE 0 END) AS 马克思及格百分数
,SUM(CASE WHEN C# = ‘003’ THEN score ELSE 0 END)/SUM(CASE C# WHEN
‘003’ THEN 1 ELSE 0 END) AS UML平均分
,100 * SUM(CASE WHEN C# = ‘003’ AND score >= 60 THEN 1 ELSE 0
END)/SUM(CASE WHEN C# = ‘003’ THEN 1 ELSE 0 END) AS UML及格百分数
,SUM(CASE WHEN C# = ‘004’ THEN score ELSE 0 END)/SUM(CASE C# WHEN
‘004’ THEN 1 ELSE 0 END) AS 数据库平均分
,100 * SUM(CASE WHEN C# = ‘004’ AND score >= 60 THEN 1 ELSE 0
END)/SUM(CASE WHEN C# = ‘004’ THEN 1 ELSE 0 END) AS 数据库及格百分数
FROM SC
21、查询不一致老师所教不一样学科平均分从高到低显示
SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教授姓名,C.C# AS
课程ID,MAX(C.Cname) AS 课程名称,AVG(Score) AS 平均战绩
FROM SC AS T,Course AS C ,Teacher AS Z
where T.C#=C.C# and C.T#=Z.T#
GROUP BY C.C#
ORDER BY AVG(Score) DESC
22、查询如下课程成绩第 3 名到第 6
名的学习者成绩单:集团管理(001),马克思(002),UML
(003),数据库(004)
[学生ID],[学生姓名],公司管理,马克思,UML,数据库,平均战绩
SELECT DISTINCT top 3
SC.S# As 学生学号,
Student.Sname AS 学生姓名 ,
T1.score AS 公司管理,
T2.score AS 马克思,
T3.score AS UML,
T4.score AS 数据库,
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) +
ISNULL(T4.score,0) as 总分
FROM Student,SC LEFT JOIN SC AS T1
ON SC.S# = T1.S# AND T1.C# = ‘001’
LEFT JOIN SC AS T2
ON SC.S# = T2.S# AND T2.C# = ‘002’
LEFT JOIN SC AS T3
ON SC.S# = T3.S# AND T3.C# = ‘003’
LEFT JOIN SC AS T4
ON SC.S# = T4.S# AND T4.C# = ‘004’
WHERE student.S#=SC.S# and
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) +
ISNULL(T4.score,0)
NOT IN
(SELECT
DISTINCT
TOP 15 WITH TIES
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) +
ISNULL(T4.score,0)
FROM sc
LEFT JOIN sc AS T1
ON sc.S# = T1.S# AND T1.C# = ‘k1’
LEFT JOIN sc AS T2
ON sc.S# = T2.S# AND T2.C# = ‘k2’
LEFT JOIN sc AS T3
ON sc.S# = T3.S# AND T3.C# = ‘k3’
LEFT JOIN sc AS T4
ON sc.S# = T4.S# AND T4.C# = ‘k4’
ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) +
ISNULL(T4.score,0) DESC);

 一、相关概念    

  1.
Data:数据,是数据库中累积的骨干指标,是陈诉事物的标识记录。

     
 2.
Database:数据库,是绵绵积存在计算机内、有团体的、可分享的恢宏数指标集结

     
 3.
DBMS:数据库管理连串,是身处用户与操作系统之间的一层数码管理软件,用于科学地协会、存款和储蓄和治本数据、高效地获得和爱惜数据。

     
 4.
DBS:数据库系统,指在微机种类中引进数据库后的系统,一般由数据库、数据库管理种类、应用体系、数据库管理员(DBA)构成。

     
 5.
数据模型:是用来抽象、表示和拍卖具体世界中的数据和音讯的工具,是对切实世界的萧规曹随,是数据库系统的主导和基础;其重组元素有数据结构、数据操作和完整性约束

     
 6.
概念模型:也称新闻模型,是按用户的思想来对数据和音讯建立模型,首要用以数据库设计。

     
 7. 逻辑模型:是按Computer类别的见识对数码建立模型,用于DBMS实现。

     
 8.
物理模型:是对数据最尾巴部分的悬空,描述数据在系统内部的象征方法和存取方法,在磁盘或磁带上的储存方式和存取方法,是面向计算机类别的。

     
 9.
实体和质量:客观存在并可互相区分的东西称为实体。实体所具有的某一特点称为属性。

     
 10.E-R图:即实体-关系图,用于描述现实世界的东西及其相互关系,是数据库概念模型设计的首要工具。

     
 11.关联方式:从用户意见看,关系格局是由一组关系构成,每一种关系的数据结构是一张标准化的二维表。

     
 12.型/值:型是对某一类数据的布局和性格的表明;值是型的五个切实可行赋值,是型的实例。

     
 13.数据库方式:是对数据库中漫天数据的逻辑结构(数据项的名字、类型、取值范围等)和特点(数据里面包车型大巴联系以及数额有关的安全性、完整性要求)的汇报。

     
 14.数据库的三级系统结构:外形式、格局和内形式

     
 15.数据库内形式:又称为积存方式,是对数据库物理构造和存款和储蓄方式的呈报,是数量在数据库内部的代表方法。五个数据库独有二个内形式

     
 16.数据库外形式:又称为子方式或用户方式,它是数据库用户能够看见和行使的一部分数据的逻辑结议和特性的描述,是数据库用户的多少视图。经常是形式的子集。三个数据库可有四个外形式

     
 17.数据库的二级影象:外格局/方式印象、情势/内形式影象。

     
一、相关概念

select a.S# from (select s#,score from SC where C#=’001′) a,(select
s#,score
from SC where C#=’002′) b
where a.score>b.score and a.s#=b.s#;

23、总括列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[
<60]
SELECT SC.C# as 课程ID, Cname as 课程名称
,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 –
85]
,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 –
70]
,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 –
60]
,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]
FROM SC,Course
where SC.C#=Course.C#
GROUP BY SC.C#,Cname;

 二、入眼知识点

  1. 数据库系统由数据库、数据库管理种类、应用体系和数据库管理员构成。

     
 2. 数据模型的结缘要素是:数据结构、数据操作、完整性约束标准。

     
 3. 实体型之间的调换分为一对一、一对多和多对多三连串型。

     
 4. 常见的数据模型包涵:涉嫌、档案的次序、网状、面向对象、对象关联映射等几种。

     
 5. 关系模型的完整性约束富含:实体完整性、参照完整性和用户定义完整性。

      6. 阐述数据库三级情势、二级映象的意义及功用。

     
  数据库三级情势反映的是数量的多个抽象档案的次序: 方式是对数据库中漫天数据的逻辑结构和特色的描述内格局又称之为存储方式,是对数据库物理构造和存款和储蓄格局的汇报。外形式又称为子情势或用户格局,是对特定数据库用户相关的一部分数据的逻辑结构和特色的描述

     
  数据库三级格局通过二级映象在 DBMS 内部贯彻这个抽象档次的联络和转移。外格局面向应用程序, 通过外方式/形式映象与逻辑方式创立联系, 达成数据的逻辑独立性。 形式/内格局映象建构方式与内情势之间的一对一映射, 完结多少的物理独立性

       1.
Data:数据,是数据库中积存的主导目的,是描述事物的标志记录。
       2.
Database:数据库,是久久积累在Computer内、有社团的、可分享的大方数码的聚合。
       3.
DBMS:数据库管理类别,是投身用户与操作系统以内的一层数据管理软件,用于科学地公司、存款和储蓄和管制数据、高效地拿到和掩护数据。
       4.
DBS:数据库系统,指在管理器种类中引进数据库后的系统,一般由数据库、数据库管理种类、应用系统、数据库管理员(DBA)构成。
       5.
数据模型:是用来抽象、表示和管理具体世界中的数据和音信的工具,是对切实世界的画虎不成反类犬,是数据库系统的着力和基础;其构成成分有数据结构、数据操作和完整性约束。
       6.
概念模型:也称新闻模型,是按用户的眼光来对数据和新闻建立模型,重要用于数据库设计。
       7.
逻辑模型:是按计算机种类的意见对数码建立模型,用于DBMS达成。
       8.
大意模型:是对数据最尾部的肤浅,描述数据在系统之中的意味方法和存取方法,在磁盘或磁带上的蕴藏格局和存取方法,是面向Computer类别的。
       9.
实体和质量:客观存在并可交互区分的东西称为实体。实体所持有的某一特色称为属性。
     
 10.E-Odyssey图:即实体-关系图,用于描述现实世界的东西及其互相关系,是数据库概念模型设计的重中之重工具。
     
 11.事关形式:从用户意见看,关系格局是由一组关系结合,每种关系的数据结构是一张规范化的二维表。
     
 12.型/值:型是对某一类数据的构造和本性的验证;值是型的三个具体赋值,是型的实例。
     
 13.数据库格局:是对数据库中总体数据的逻辑结构(数据项的名字、类型、取值范围等)和特色(数据里面包车型大巴调换以及数额有关的安全性、完整性供给)的陈诉。
     
 14.数据库的三级系统结构:外形式、形式和内形式。
     
 15.数据库内方式:又称之为存款和储蓄格局,是对数据库物理构造和积存格局的陈说,是多少在数据库内部的代表方法。三个数据库唯有叁个内情势。
     
 16.数据库外情势:又称为子情势或用户方式,它是数据库用户能够看见和采用的一些数据的逻辑结商谈特点的叙说,是数据库用户的多少视图。常常是方式的子集。二个数据库可有七个外方式。
     
 17.数据库的二级影像:外方式/方式印象、情势/内形式印象。

2、查询平均成绩超乎60分的同室的学号和平均成绩;

24、查询学生平均战绩及其排名
SELECT 1+(SELECT COUNT( distinct 平均战表)
FROM (SELECT S#,AVG(score) AS 平均成绩
FROM SC
GROUP BY S#
) AS T1
WHERE 平均战绩 > T2.等分战绩) as 排行,
S# as 学生学号,平均战绩
FROM (SELECT S#,AVG(score) 平均战表
FROM SC
GROUP BY S#
) AS T2
O奔驰G级DETucson BY 平均战绩 desc;

第二节

     

复制代码 代码如下:

25、查询各科成绩前三名的笔录:(不思虑成绩并列境况)
SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
FROM SC t1
WHERE score IN (SELECT TOP 3 score
FROM SC
WHERE t1.C#= C#
ORDER BY score DESC
)
ORDER BY t1.C#;
26、查询每门课程被选修的上学的小孩子数
select c#,count(S#) from sc group by C#;
27、查询出只选修了一门课程的全数上学的小孩子的学号和姓名
select SC.S#,Student.Sname,count(C#) AS 选课数
from SC ,Student
where SC.S#=Student.S# group by SC.S# ,Student.Sname having
count(C#)=1;
28、查询男人、女孩子人数
Select count(Ssex) as 匹爱妻数 from Student group by Ssex having
Ssex=’男’;
Select count(Ssex) as 女子人数 from Student group by Ssex having
Ssex=’女’;
29、查询姓“张”的学生名单
SELECT Sname FROM Student WHERE Sname like ‘张%’;
30、查询同名同性学生名单,并总结同有名的人数
select Sname,count(*) from Student group by Sname having
count(*)>1;;
31、一九八三年诞生的学生名单(注:Student表中Sage列的种类是datetime)
select Sname, CONVERT(char (11),DATEPART(year,Sage)) as age
from student
where CONVERT(char(11),DATEPART(year,Sage))=’1981′;
32、查询每门学科的平分战绩,结果按平均战绩升序排列,平均战表同样时,按学科号降序排列
Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC
;
33、查询平均战表超越85的装有学生的学号、姓名和平均战绩
select Sname,SC.S# ,avg(score)
from Student,SC
where Student.S#=SC.S# group by SC.S#,Sname having   
avg(score)>85;
34、查询课程名字为“数据库”,且分数低于60的学童姓名和分数
Select Sname,isnull(score,0)
from Student,SC,Course
where SC.S#=Student.S# and SC.C#=Course.C# and
Course.Cname=’数据库’and score <60;
35、查询全部学员的选课情状;
SELECT SC.S#,SC.C#,Sname,Cname
FROM SC,Student,Course
where SC.S#=Student.S# and SC.C#=Course.C# ;
36、查询其他一门科目战表在70分以上的真名、课程名称和分数;
SELECT distinct student.S#,student.Sname,SC.C#,SC.score
FROM student,Sc
WHERE SC.score>=70 AND SC.S#=student.S#;
37、查询不及格的教程,并按学科号从大到小排列
select c# from sc where scor e <60 order by C# ;
38、查询课程编号为003且课程战绩在80分以上的学生的学号和姓名;
select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and
Score>80 and C#=’003′;
39、求选了课程的学员人数
select count(*) from sc;
40、查询选修“叶平”老师所授课程的学习者中,战绩最高的学生姓名及其战绩
select Student.Sname,score
from Student,SC,Course C,Teacher
where Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and
Teacher.Tname=’叶平’ and SC.score=(select max(score)from SC where
C#=C.C# );
41、查询各类学科及相应的选修人数
select count(*) from sc group by C#;
42、查询分歧科目战表一样的学生的学号、课程号、学生成绩
select distinct A.S#,B.score from SC A ,SC B where A.Score=B.Score and
A.C# <>B.C# ;
43、查询每门功战表最棒的前两名
SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
FROM SC t1
WHERE score IN (SELECT TOP 2 score
FROM SC
WHERE t1.C#= C#
ORDER BY score DESC
)
ORDER BY t1.C#;
44、计算每门课程的学童选修人数(当先10人的教程才总结)。供给输出课程号和选修人数,查询结果按人口降序排列,查询结果按人口降序排列,若人数相同,按学科号升序排列
select C# as 课程号,count(*) as 人数
from sc
group by C#
order by count(*) desc,c#
45、检索至少选修两门科目标上学的小孩子学号
select S#
数据库知识必杀,查询语句示例。from sc
group by s#
having count(*) > = 2
46、查询任何学生都选修的学科的课程号和科目名
select C#,Cname
from Course
where C# in (select c# from sc group by c#)
47、查询没学过“叶平”老师教师的任一门科目标学童姓名
select Sname from Student where S# not in (select S# from
Course,Teacher,SC where Course.T#=Teacher.T# and SC.C#=course.C# and
Tname=’叶平’);
48、查询两门以上不如格课程的同校的学号及其平均成绩
select S#,avg(isnull(score,0)) from SC where S# in (select S# from SC
where score <60 group by S# having count(*)>2)group by S#;
49、检索“004”课程分数小于60,按分数降序排列的同室学号
select S# from SC where C#=’004’and score <60 order by score
desc;
50、删除“002”同学的“001”课程的战表
delete from Sc where S#=’001’and C#=’001′;

一、相关概念

     
 1. 主键: 可以独一地方统一规范识多少个元组的个性或属性组称为关系的键或候选键。 若一个涉嫌有多少个候选键则可选其一作为主键(Primary key)。

     
 2. 外键:若是多少个提到的四个或一组属性引用(参照)了另一个关联的主键,则称那个或那组属性为外码或外键(Foreign key)。

     
 3. 关周详据库: 鲁人持竿关系模型创设的数据库称为关周详据库。 它是在有些应用领域的兼具涉及的集聚

     
 4. 提到情势: 轻松地说,关系方式正是对关乎的型的概念, 包蕴涉及的属性构成、各属性的数据类型、 属性间的依据、 元组语义及完整性约束等。 提到是涉及格局在某一随时的情事或内容, 关系模型是型, 关系是值, 关系模型是静态的、 稳固的, 而关系是动态的、随时间不断转换的,因为提到操作在随地随时地立异着数据库中的数据

     
 5.
实体完整性:用于标记实体的独一性。它须求中央关系必须要有八个可见标记元组独一性的主键,主键不能够为空,也不得取重复值。

     
 6. 参照完整性: 用于维护实体之间的引用关系。 它须求一个关系的外键要么为空, 要么取与被参照关系对应的主键值,即外键值必须是主键中已存在的值

     
 7. 用户定义的完整性:正是对准某一切实选拔的数码必须满意的语义约束。包涵非空、 独一和布尔条件约束二种处境。

 二、保护知识点

select S#,avg(score)
from sc
group by S# having avg(score) >60;

 

二、重要知识点

     
1. 关周详据库语言分为关联代数、关系演算和结构化查询语言三大类。

     
2. 关联的5种基本操作是分选、投影、并、差、笛Carl积

     
3.涉嫌方式是对关乎的叙述,五元组情势化表示为:索罗德(U,D,DOM,F),在那之中

     
      R —— 关系名

     
      U —— 组成该关系的属性名会集

     
      D —— 属性组 U 中品质所来自的域

     
      DOM —— 属性向域的镜头集合

     
      F —— 属性间的数量信赖关系集合

     
4.笛卡尔乘积,选择和影子运算如下

997755.com澳门葡京 1

     
 1. 数据库系统由数据库、数据库管理体系、应用系统数据库管理员构成。

3、查询全体同学的学号、姓名、选课数、总战绩;

(转

第三节

     
 2. 数据模型的构成成分是:数据结构、数据操作、完整性约束原则

复制代码 代码如下:

一、相关概念

     
 1. SQL:结构化查询语言的简称, 是关周到据库的规范语言。SQL 是一种通用的、 作用极强的关周全据库语言, 是对关全面据存取的标准接口, 也是不一致数据库系统里头互操作的底蕴。集数据查询、数据操作、数据定义、和数量调控作用于一体。

     
 2. 多少定义:数据定义功用包罗格局定义、表定义、视图和目录的定义。

     
 3. 嵌套查询:指将二个询问块嵌套在另三个查询块的 WHERE 子句或 HAVING 短语的原则中的查询。

     
 3. 实体型之间的联系分为一对一、一对多多对多二种等级次序。

select Student.S#,Student.Sname,count(SC.C#),sum(score)
from Student left Outer join SC on Student.S#=SC.S#
group by Student.S#,Sname

二、主要知识点

     
 1. SQL 数据定义语句的操作对象有:形式、表、视图和目录。

     
 2. SQL 数据定义语句的命令动词是:CREATE、DROP 和 ALTER。

     
 3. HighlanderDBMS 中索引一般选拔 B+树或 HASH 来实现

     
 4. 索引能够分成独一索引、非独一索引和聚簇索引三体系型。

997755.com澳门葡京 2

  6.SQL 创设表语句的貌似格式为

     
        CREATE TABLE <表名>

     
      
 ( <列名> <数据类型>[ <列级完整性约束> ]

     
      
 [,<列名> <数据类型>[ <列级完整性约束>] ] …

     
        [,<表级完整性约束> ] ) ;

里面<数据类型>能够是数据库系统协助的种种数据类型,包括长度和精度。 

   
列级完整性约束为针对单个列(本列)的完整性约束, 包蕴 PHighlanderIMA中华VY KEY、 REFERENCES表名(列名)、UNIQUE、NOT NULL 等。 

   
表级完整性约束能够是依据表中多列的牢笼,包罗 PTucsonIMA中华VY KEY ( 列名列表) 、FOREIGN KEY REFERENCES 表名(列名) 等。

     
 7. SQL 创立索引语句的相似格式为

     
        CREATE [UNIQUE] [CLUSTER] INDEX <索引名>

     
        ON <表名> (<列名列表> ) ;

里面UNIQUE:表示创造独一索引,缺省为非独一索引;

     
CLUSTELX570:表示创制聚簇索引,缺省为非聚簇索引;

     
<列名列表>:三个或逗号分隔的两个列名,每种列名后可跟 ASC 或 DESC,表示升/降序,缺省为升序。多列时则按为多元排序。 
  

   8. SQL 查询语句的形似格式为

     
      
 SELECT [ALL|DISTINCT] <算术表明式列表> FROM <表名或视图名列表>

     
        [ WHERE <条件表明式 1> ]

     
      
 [ GROUP BY <属性列表 1> [ HAVING <条件表明式 2 > ] ]

     
        [ O奥迪Q3DE奥迪Q5 BY <属性列表 2> [ ASC|DESC ] ] ;

其中

   
  ALL/DISTINCT: 缺省为 ALL, 即列出全体查询结果记录, 包蕴重复记录。 DISTINCT则对重复记录只列出一条

   
   算术表达式列表:贰个或三个逗号分隔的算术表明式,表明式由常量(包括数字和字符串)、列名、函数和算术运算符构成。每种表明式后还可跟外号。也可用 *代表查询表中的全体列。

   
  <表名或视图名列表>: 三个或多少个逗号分隔的表或视图名。 表或视图名后可跟别称。

   
  条件表明式 1:包罗关系或逻辑运算符的表达式,代表询问条件。

   
  条件表明式 2:包罗关系或逻辑运算符的表明式,代表分组条件。

   
  <属性列表 1>:贰个或逗号分隔的几个列名。

   
  <属性列表 2>: 二个或逗号分隔的八个列名, 各个列名后可跟 ASC 或 DESC, 表示升/降序,缺省为升序。

     
 4. 分布的数据模型包罗:事关、等级次序、网状、面向对象、对象关系映射等几种。

4、查询姓“李”的教师的个数;

第四节

     
 5. 关联模型的完整性约束饱含:实体完整性、参照完整性和用户定义完整性

复制代码 代码如下:

一、相关概念和文化

     
 1.触发器是用户定义在基本表上的一类由事件驱动的特别进度。由服务器自动激活, 能推行尤其复杂的自己斟酌和操作,具有更加小巧和更有力的数目调整技术。使用 CREATE T奥迪Q7IGGE帕杰罗 命令建设构造触发器。

     
 2.Computer种类存在本领安全、管理安全和计谋法则三类安全性难点。

     
 3. TCSEC/TDI 标准由安全计策、义务、有限支撑和文档多少个地方内容结合。

     
 4. 常用存取调控方法满含独立自己作主存取调整(DAC)和威吓存取调控(MAC)两种。

     
 5. 独立自己作主存取控制(DAC)的 SQL 语句包含 GRANT 和 REVOKE 两个。 用户权限由数量对象和操作类型两有的构成。

997755.com澳门葡京 3

     
 6. 常见SQL 自主权力决定命令和例子。

     
   1) 把对 Student 和 Course 表的方方面面权力授予全数用户。

     
        GRANT ALL PRIVILIGES ON TABLE Student,Course TO PUBLIC

     
   2) 把对 Student 表的查询权和人名修改权授予用户 U4。

     
        GRANT SELECT,UPDATE(Sname) ON TABLE Student TO U4 ;

     
   3) 把对 SC 表的插入权限授予 U5 用户,并允许她传播该权限。

     
        GRANT INSERT ON TABLE SC TO U5 WITH GRANT OPTION ;

     
   4) 把用户 U5 对 SC 表的 INSERT
权限收回,同一时间撤销被他传播出去的授权。

     
        REVOKE INSERT ON TABLE SC FROM U5 CASCADE ;

     
   5) 创立贰个剧中人物 Wrangler1,并使其对 Student
表具备数据查询和立异权限。

     
        CREATE ROLE R1;

     
        GRANT SELECT,UPDATE ON TABLE Student TO R1;

     
   6) 对修改 Student 表结构的操作进行审计。

     
        AUDIT ALTER ON Student ;

 
    6. 解说数据库三级方式、二级映象的意义及成效。
        数据库三级格局反映的是数码的三个抽象等级次序: 方式是对数据库中整整数据的逻辑结交涉特征的汇报。内格局又称为存款和储蓄格局,是对数据库物理结构和累积情势的陈说。外形式又称为子形式或用户情势,是对一定数据库用户相关的部分数据的逻辑结谈判特征的叙说。

select count(distinct(Tname))
from Teacher
where Tname like ‘李%’;

数据库知识计算(2)范式

     
  数据库三级形式通过二级映象在 DBMS 内部贯彻那多少个抽象档次的牵连和退换。外形式面向应用程序, 通过外方式/方式映象与逻辑方式创设联系, 完结数据的逻辑独立性。 格局/内方式映象创立形式与内形式里面包车型客车一对一映射, 完结多少的物理独立性。

5、查询没学过“叶平”老师课的校友的学号、姓名;

 一、相关概念和知识点

     
 1.数码正视:反映三个关乎之中属性与品质之间的封锁关系,是有血有肉世界属性间相互交换的抽象,属于数据内在的质量和语义的展现。

     
 2. 标准化理论:是用来规划能够的关联方式的基本理论。它通过分解关系格局来驱除在那之中不适于的数量重视,以减轻插入分外、删除分外、更新卓殊和多少冗余难点。

     
 3. 函数依赖:轻松地说,对于涉及格局的多少个属性格集X和Y,若X的任一取值能独一鲜明Y的值,则称Y函数注重于X,记作X→Y。

     
 4. 非平时函数重视:对于涉及格局的八个属性情集X和Y,要是X→Y,但Y!⊆X,则称X→Y为非通常函数注重;假设X→Y,但Y⊆X,则称X→Y为非平日函数正视。

     
 5. 通通函数注重:对于涉及形式的七个属特性集X和Y,假使X→Y,何况对于X的别的三个真子集X’,都未曾X’→Y,则称Y对X完全函数注重。

     
 6. 范式:指符合某一种级其他关系格局的会见。在统一打算关周详据库时,依据满意依赖关系须要的例外定义为差别的范式。

     
 7. 标准化:指将二个低顶级范式的关联方式,通过形式分解调换为多少个高级中学一年级流范式的涉嫌形式的集结的进度。

     
 8. 1NF:若关系方式的享有属性皆以不可分的着力数据项,则该关系形式属于1NF。

     
 9. 2NF:1NF涉及情势一旦还要满意每一个非主属性完全函数信赖于码,则该关系方式属于2NF。

     
 10. 3NF:若关系方式的每二个非主属性既不有的依据于码也不传递正视于码,则该关系情势属于3NF。

     
 11. BCNF:若二个关乎形式的每一个决定因素都富含码,则该关系情势属于BCNF。

     
 12. 数据库设计:是指对于一个加以的应用情状,构造优化的数据库逻辑方式和情理结构,并为此创建数据库及其使用系统,使之能够行得通地蕴藏和管理数据,满意种种用户的行使供给,包蕴音信保管须求和数码操作供给。

     
 13.
数据库设计的6个着力步骤:要求解析,概念结构划虚构计,逻辑结构划虚拟计,物理结构划设想计,数据库实施,数据库运维和珍贵。

     
 14. 概念结构设计:指将供给剖判获得的用户必要抽象为新闻结构即概念模型的经过。也正是因此对用户供给开始展览综合、归咎与虚无,产生三个单独于实际DBMS的概念模型。

     
 15. 逻辑结构划虚构计:将定义结构模型(基本E-途锐图)转变为有个别DBMS产品所支撑的数据模型相契合的逻辑结构,并对其张开优化。

     
 16. 物理结构划设想计:指为三个加以的逻辑数据模型采取贰个最适合应用情况的大意构造的长河。满含陈设数据库的蕴藏结构与存取方法。

     
 17. 虚幻:指对实际的人、物、事和概念实行人工管理,收取所关怀的同台湾特务点,忽略非本质的内部情状,并把那个特征用各类概念正确地加以描述,那一个概念组成了某种模型。     
 18. 数据库设计必须依据结构划设想计和行为设计相结合的原则。     
 19. 数量字典首要总结数据项、数据结构、数据流、数据存款和储蓄和管理进度八个部分。

     
 20. 三种常用抽象方法是分类、集中和包蕴。

     
 21. 局部 E-Escort图之间的龃龉主要呈未来性质龃龉、命名冲突和结构冲突多少个方面。     
 22. 数据库常用的存取方法包括索引方法、聚簇方法和 HASH方法三种。

     
 23. 规定数据贮存地点和储存结构亟待考虑的要素至关主要有: 存取时间、
存储空间利用率和爱护代价等。

第二节

复制代码 代码如下:

二、细说数据库三范式

  2.1 第一范式(1NF)无重复的列

       第一范式(1NF)中数量库表的每一列都是不可分割的着力数据项

     
 同一列中无法有四个值

     
 即实业中的有个别属性不能够有多少个值或然无法有再一次的习性

     
 简单来说,第一范式正是无重复的列。

     
 在另外贰个关周全据库中,第一范式(1NF)是对关联方式的骨干须求,不满足第一范式(1NF)的数据库就不是关周全据库

  

  2.2 第二范式(2NF)属性完全重视于主键[免去部分子函数重视]     

  满意第二范式(2NF)必须先满意第一范式(1NF)。   
 

  第二范式(2NF)要求数据库表中的各个实例或行必须能够被惟一地有别于。     

  为落到实处区分日常需求为表加上二个列,以存款和储蓄各类实例的绝世标志。 

  第二范式(2NF)供给实体的特性完全凭借于主关键字。所谓完全依据是指不可能存在仅依靠主关键字一部分的习性,如若存在,那么这些特性和主关键字的这一局部应该分离出来产生三个新的实业,新实体与原实体之间是一对多的涉嫌。为贯彻区分平常要求为表加上二个列,以存款和储蓄各类实例的惟一标志。一句话来讲,第二范式便是性质完全依赖于主键。

  2.3 第三范式(3NF)属性不借助于任何非主属性[消除传递重视]

     
 满意第三范式(3NF)必须先餍足第二范式(2NF)。

     
 简单的说,第三范式(3NF)供给二个数据库表中不分包已在任何表中已包涵的非主关键字音信。

     
 举个例子,存在二个部门信息表,当中每一种机关有机构编号(dept_id)、部门名称、部门简单介绍等音讯。那么在的职工音信表中列出单位编号后就不可能再将单位名称、部门简要介绍等与机关关于的音讯再插手职员和工人新闻表中。假设官样文章机构消息表,则基于第三范式(3NF)也理应构建它,不然就能够有大气的多寡冗余。简单的讲,第三范式正是性质不借助于于其余非主属性。

  

  2.4
具体实例分析

  上面罗列一个学院的学习者系统的实例,以示多少个范式的应用。

  在统一计划数据库表结构在此之前,我们先分明一下要统筹的剧情包涵这几个。学号、学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话等音信。为了轻便大家有时只思索这个字段音信。大家对于那个新闻,说关切的标题有如下多少个方面。

     
 1)学生有那三个基本音信 
     
 2)学生选了那多少个课,成绩是何等 
     
 3)每一种课的学分是有一点 
     
 4)学生属于卓殊系,系的中坚新闻是什么。

     
 首先第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这几个单一属性由中央项目构成,包蕴整型、实数、字符型、逻辑型、日期型等。在时下的任何关周全据库管理系列(DBMS)中,不容许你把多少库表的一列再分为二列或多列,由此做出的都是适合第一范式的数据库。 

     
 大家再思念第二范式,把装有那一个音信放到三个表中(学号,学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话)上边存在如下的依赖关系。 
     
 1)(学号)→ (姓名, 年龄,性别,系别,系办地址、系办电话) 
     
 2) (课程名称) → (学分) 
     
 3)(学号,课程)→ (学科战表)

  遵关照重关系大家得以把选课关系表SelectCourse改为如下八个表: 

     
 学生:Student(学号,姓名, 年龄,性别,系别,系办地址、系办电话); 
     
 课程:Course(课程名称, 学分); 
     
 选课关系:SelectCourse(学号, 课程名称, 战表)。

     
 事实上,对照第二范式的渴求,那正是满意第二范式的数额库表,若不满意第二范式,会爆发如下难题:
  (1)数据冗余: 同一门科目由n个学生选修,”学分”就再一次n-1次;同一个学员选修了m门课程,姓名和年龄就再也了m-1次。

  (2)更新万分:1)若调度了某门课程的学分,数据表中全部行的”学分”值都要翻新,不然会现出雷同门课程学分差别的情形。 
     
         
 2)假使要设置一门新的课程,权且还尚无人选修。那样,由于还未有”学号”关键字,课程名称和学分也不能记录入数据库。

  (3)删除非凡 : 若是一堆学生一度做到课程的选修,这个选修记录就相应从数据库表中删除。不过,与此同一时间,课程名称和学分音讯也被删去了。很肯定,那也会导致插入格外。

  我们再思考什么将其改成满足第三范式的数据库表,接着看上边的学生表Student(学号,姓名, 年龄,性别,系别,系办地址、系办电话),关键字为单纯关键字”学号”,因为存在如下决定涉及:

     
(学号)→ (姓名, 年龄,性别,系别,系办地址、系办电话) 
  然则还设有下边包车型客车主宰涉及 
     
 (学号) → (所在大学)→(大学地方, 大学电话) 
     
 
即存在非关键字段”高校地方”、”大学电话”对器重字段”学号”的传递函数依赖。 
     
 它也会设有多少冗余、更新特别、插入分外和删除非常的情状(这里就不具体剖析了,参照第二范式中的分析)。依据第三范式把学生关系表分为如下五个表就可以满意第三范式了:

     
 学生:(学号, 姓名, 年龄, 性别,系别); 
     
 系别:(系别, 系办地址、系办电话)。

SQL语句计算

一、相关概念

select Student.S#,Student.Sname
from Student
where S# not in (select distinct( SC.S#) from SC,Course,Teacher where
SC.C#=Course.C# and Teacher.T#=Course.T# and
Teacher.Tname=’叶平’);

SQL语句中常用关键词及其表明如下:

     
 1. 主键: 能够独一地方统一标准识贰个元组的性质或属性组称为关系的键或候选键。 若八个关系有四个候选键则可选其一作为主键(Primary key)。

6、查询学过“001”并且也学过数码“002”课程的校友的学号、姓名;

1)SELECT

将材质从数据库中的表格内选出,五个关键字:从 (FROM) 数据库中的表格内选出
(SELECT)。语法为
SELECT
“栏位名” FROM “表格名”。

     
 2. 外键:如果二个涉嫌的贰个或一组属性引用(参照)了另叁个事关的主键,则称这一个或那组属性为外码或外键(Foreign key)。

复制代码 代码如下:

2)DISTINCT

在上述 SELECT 关键词后增加三个 DISTINCT
就能够去除选收取来的栏位中的重复,进而完毕求得这些表格/栏位内有啥差别的值的功能。语法为
SELECT
DISTINCT “栏位名” FROM “表格名”。

     
 3. 关周到据库: 依照关系模型创设的数据库称为关全面据库。 它是在有些应用领域的有着涉及的成团。

select Student.S#,Student.Sname from Student,SC where
Student.S#=SC.S# and SC.C#=’001’and exists( Select * from SC as
SC_2 where SC_2.S#=SC.S# and SC_2.C#=’002′);

3)WHERE

以此珍视词能够援助大家选取性地抓资料,并非全收取来。语法为
SELECT
“栏位名” FROM “表格名” WHERE “条件” 

     
 4. 关系情势: 轻便地说,关系格局便是对涉及的型的概念, 包含涉嫌的脾气构成、各属性的数据类型、 属性间的借助、 元组语义及完整性约束等。 关系是事关方式在某有毛病时的动静或内容, 关系模型是型, 关系是值, 关系模型是静态的、 牢固的, 而关系是动态的、随时间不断调换的,因为涉嫌操作在不断地翻新着数据库中的数据。

7、查询学过“叶平”老师所教的全体课的同校的学号、姓名;

4)AND OR

上例中的 WHERE
指令可以被用来由表格中有准绳地挑选资料。那个原则大概是归纳的
(像上一页的例子),也说不定是复杂的。复杂条件是由二或八个简易标准经过 AND
或是 OTiguan 的接连而成。语法为:
SELECT
“栏位名”  FROM “表格名”  WHERE “轻松标准”  {[AND|OR]
“轻巧标准”}+

     
 5. . 实体完整性:用于标志实体的独一性。它须求主旨关系必须要有多少个能够标记元组独一性的主键,主键不可能为空,也不足取重复值

复制代码 代码如下:

5)IN

在 SQL 中,在三个景况下会用到 IN  那几个命令;这一页将介绍在这之中之一:与
WHERE
有关的那些动静。在这几个用法下,大家事先已知晓至少一个大家须求的值,而小编辈将那一个知道的值都放入IN  这些子句。语法为:
SELECT
“栏位名”  FROM “表格名”  WHERE “栏位名” IN (‘值一’, ‘值二’, …)
 

     
 6. 参照完整性: 用于保养实体之间的引用关系。 它必要三个涉及的外键要么为空, 要么取与被参照关系对应的主键值,即外键值必须是主键中已存在的值

select S#,Sname
from Student
where S# in (select S# from SC ,Course ,Teacher where
SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname=’叶平’
group by S# having count(SC.C#)=(select count(C#) from Course,Teacher
where Teacher.T#=Course.T# and Tname=’叶平’));

6)BETWEEN

IN 那么些命令能够让我们根据一或数个不接二连三(discrete)的值的界定之内抓出资料库中的值,而 BETWEEN
则是让我们得以选拔三个限制 (range)
 内抓出资料库中的值,语法为:
SELECT
“栏位名”  FROM “表格名” WHERE “栏位名” BETWEEN ‘值一’ AND
‘值二’ 

     
 7. 用户定义的完整性:正是本着某一切实运用的数量必须满意的语义约束。包括非空、 独一和布尔条件约束三种情况。

8、查询课程编号“002”的成就比课程编号“001”课程低的装有同学的学号、姓名;

7)LIKE

LIKE 是另二个在 WHERE  子句中会用到的一声令下。基本上, LIKE
 能让我们依照三个形式(pattern) 来寻找大家要的材质。语法为:
SELECT
“栏位名”  FROM “表格名”  WHERE “栏位名” LIKE {模式} 

      二、首要知识点

复制代码 代码如下:

8)ORDER BY

大家平常必要能够将抓出的资料做二个有系统的展现。那说不定是由小往大
(ascending)  或是由大往小(descending)。在这种景色下,我们就能够使用
O奥德赛DEPRADO BY 这一个命令来落成大家的指标。语法为:
SELECT
“栏位名”  FROM “表格名 [WHERE “条件”] ORDER BY “栏位名” [ASC,
DESC] 

      1. 关周详据库语言分为关系代数、关系演算和结构化查询语言三大类。

Select S#,Sname from (select Student.S#,Student.Sname,score ,(select
score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#=’002′)
score2
from Student,SC where Student.S#=SC.S# and C#=’001′) S_2 where
score2 <score;

9)函数

函数允许大家能够对这一个数字的型态存在的行照旧列做运算,包罗 AVG
(平均)、COUNT (计数)、MAX (最大值)、MIN (最小值)、SUM
(总合)。语法为:
SELECT
“函数名”(“栏位名”) FROM “表格名”  

      2. 事关的 5 种基本操作是选项、投影、并、差、笛Carl积。

9、查询全体课程战表小于60分的同学的学号、姓名;

10)COUNT

本条入眼词可以帮自身大家总结有微微笔资料被选出来,语法为:
SELECT
COUNT(“栏位名”) FROM “表格名”

     
3.事关情势是对涉及的陈说,五元组方式化表示为:Tiggo(U,D,DOM,F),当中

复制代码 代码如下:

11)GROUP BY

GROUP BY
语句用于结合合计函数,依据二个或三个列对结果集举办分组。语法为:
SELECT
“栏位1”, SUM(“栏位2”)  FROM “表格名”  GROUP BY “栏位1” 

            R —— 关系名

select S#,Sname
from Student
where S# not in (select Student.S# from Student,SC where S.S#=SC.S#
and score>60);

12)HAVING

该重大词能够扶助大家对函数发生的值来设定条件。语法为:
SELECT
“栏位1”, SUM(“栏位2”)  FROM “表格名”  GROUP BY “栏位1”  HAVING
(函数条件)  

            U —— 组成该关系的属性名会集

10、查询未有学全所有课的同校的学号、姓名;

13)ALIAS

大家得以经过ALIAS为列名称和表名称钦赐外号,语法为:
SELECT
“表格别名”.”栏位1″ “栏位别称”  FROM “表格名” “表格小名”  

  • *

            D —— 属性组 U 中品质所来自的域

复制代码 代码如下:

问题:

1、查询“001”课程比“002”课程战绩高的有着学员的学号;
select
a.S#
from
(select s#,score from SC where C#=’001′) a,
(select
s#,score from SC where C#=’002′) b
where
a.score>b.score and a.s#=b.s#;

2、查询平均成绩抢先60分的同校的学号和平均战表;
select
S#,avg(score)
from
sc
group
by S# having avg(score) >60;

3、查询全体同学的学号、姓名、选课数、总战表;
select
Student.S#,Student.Sname,count(SC.C#),sum(score)
from
Student left Outer join SC on Student.S#=SC.S#
group
by Student.S#,Sname

4、查询姓“李”的园丁的个数;
select
count(distinct(Tname))
from
Teacher
where
Tname like ‘李%’;

5、查询没学过“叶平”老师课的同班的学号、姓名;
select
Student.S#,Student.Sname
from
Student
where
S# not in (select distinct( SC.S#) from SC,Course,Teacher where
SC.C#=Course.C# and Teacher.T#=Course.T# and
Teacher.Tname=’叶平’);

6、查询学过“001”而且也学过数码“002”课程的同班的学号、姓名;
select
Student.S#,Student.Sname
from
Student,SC

where
Student.S#=SC.S# and SC.C#=’001′and exists( Select * from SC as
SC_2 where SC_2.S#=SC.S# and SC_2.C#=’002′);

 

7、查询学过“叶平”老师所教的全体课的同窗的学号、姓名;
select
S#,Sname
from
Student
where
S# in
(select
S#
from
SC ,Course ,Teacher
where
SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname=’叶平’
group by S# having count(SC.C#)=(select count(C#) from Course,Teacher
where Teacher.T#=Course.T# and Tname=’叶平’));

8、查询全体课程成绩小于60分的同窗的学号、姓名;
select
S#,Sname
from
Student
where
S# not in (select Student.S# from Student,SC where S.S#=SC.S# and
score>60);

9、查询未有学全全数课的同室的学号、姓名;
select
Student.S#,Student.Sname
from
Student,SC
where
Student.S#=SC.S#
group
by Student.S#,Student.Sname having count(C#) <(select count(C#)
from Course);

10、查询至少有一门课与学号为“1001”的同室所学同样的同学的学号和姓名;
select
S#,Sname
from
Student,SC
where
Student.S#=SC.S# and C# in (select C# from SC where
S#=’1001’);

11、删除学习“叶平”老师课的SC表记录;
Delect
SC
from
course ,Teacher
where
Course.C#=SC.C# and Course.T#= Teacher.T# and Tname=’叶平’;

12、查询各科战表最高和最低的分:以如下方式显示:课程ID,最高分,最低分
SELECT
L.C# 课程ID,L.score 最高分,R.score 最低分
FROM
SC L ,SC R
WHERE
L.C# = R.C#
and
L.score
= (SELECT MAX(IL.score)
FROM
SC IL,Student IM
WHERE
IL.C# = L.C# and IM.S#=IL.S#
GROUP
BY IL.C#)
and
R.Score
= (SELECT MIN(IR.score)
FROM
SC IR
WHERE
IR.C# = R.C#
GROUP
BY IR.C# );

13、查询学平生均成绩及其排行
SELECT
1+(SELECT COUNT( distinct 平均战绩)
FROM
(SELECT S#,AVG(score) 平均成绩
FROM
SC
GROUP
BY S# ) T1
WHERE
平均成绩 > T2.等分成绩) 排行, S# 学生学号,平均成绩
FROM
(SELECT S#,AVG(score) 平均成绩 FROM SC GROUP BY S# ) T2
ORDER
BY 平均成绩 desc;

14、查询各科成绩前三名的记录:(不思虑战表并列意况)
SELECT
t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
FROM
SC t1
WHERE
score IN (SELECT TOP 3 score
FROM
SC
WHERE
t1.C#= C#
ORDER
BY score DESC)
ORDER
BY t1.C#;

15、查询每门功战绩最棒的前两名
SELECT
t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
FROM
SC t1
WHERE
score IN (SELECT TOP 2 score
FROM
SC
WHERE
t1.C#= C#
ORDER
BY score DESC )

ORDER
BY t1.C#;

            DOM —— 属性向域的镜头集结

select Student.S#,Student.Sname
from Student,SC
where Student.S#=SC.S# group by Student.S#,Student.Sname having
count(C#) <(select count(C#) from Course);

            F —— 属性间的数额正视关系集合

11、查询至少有一门课与学号为“1001”的校友所学一样的同桌的学号和人名;

       4.笛Carl乘积,选用和阴影运算如下

复制代码 代码如下:

997755.com澳门葡京 4

select S#,Sname from Student,SC where Student.S#=SC.S# and C# in
select C# from SC where S#=’1001′;

第三节

12、查询至少学过学号为“001”同学全体一门课的别的同学学号和人名;

一、相关概念

复制代码 代码如下:

     
 1. SQL:结构化查询语言的简称, 是关周全据库的正经语言。SQL 是一种通用的、 作用极强的关全面据库语言, 是对关周详据存取的规范接口, 也是分化数据库系统里头互操作的基础。集数据查询、数据操作、数据定义、和数量调控作而成效于一体。

select distinct SC.S#,Sname
from Student,SC
where Student.S#=SC.S# and C# in (select C# from SC where
S#=’001′);

     
 2. 数码定义:数据定义功效包含情势定义、表定义、视图和目录的概念。

13、把“SC”表中“叶平”老师教的课的大明尼阿波利斯改成为此课程的平均成绩;

     
 3. 嵌套查询:指将二个询问块嵌套在另多少个查询块的 WHERE 子句或 HAVING 短语的条件中的查询。

复制代码 代码如下:

 
    二、首要知识点

update SC set score=(select avg(SC_2.score)
from SC SC_2
where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and
Course.T#=Teacher.T# and Teacher.Tname=’叶平’);

       1. SQL
数据定义语句的操作对象有:情势、表、视图和目录。
       2. SQL 数据定义语句的下令动词是:CREATE、DROP 和 ALTELX570。
       3. KoleosDBMS 中索引一般选择 B+树或 HASH 来落到实处。
       4. 索引能够分为独一索引、非独一索引和聚簇索引二种档案的次序。

14、查询和“1002”号的同校学习的教程完全同样的其他同学学号和姓名;

997755.com澳门葡京 5

复制代码 代码如下:

     
 6.SQL 成立表语句的相似格式为

select S# from SC where C# in (select C# from SC where S#=’1002′)
group by S# having count(*)=(select count(*) from SC where
S#=’1002′);

            
 CREATE TABLE <表名>

15、删除学习“叶平”老师课的SC表记录;

            
 ( <列名> <数据类型>[ <列级完整性约束> ]

复制代码 代码如下:

            
 [,<列名> <数据类型>[ <列级完整性约束>] ] …

Delect SC
from course ,Teacher
where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname=’叶平’;

            
 [,<表级完整性约束> ] ) ;

16、向SC表中插入一些记下,那个记录供给符合以下标准:没有上过编号“003”课程的同桌学号、2、
号课的平分战表;

其中<数据类型>能够是数据库系统帮忙的种种数据类型,包蕴长度和精度。 

复制代码 代码如下:

   
列级完整性约束
为针对单个列(本列)的完整性约束, 富含 PTucsonIMA宝马X3Y KEY、 REFERENCES表名(列名)、UNIQUE、NOT NULL 等。 

Insert SC select S#,’002′,(Select avg(score)
from SC where C#=’002′) from Student where S# not in (Select S# from
SC where C#=’002′);

   
表级完整性约束
能够是根据表中多列的束缚,饱含 P中华VIMA大切诺基Y KEY ( 列名列表) 、FOREIGN KEY REFERENCES 表名(列名) 等。

17、按平均成绩从高到低展现全数学生的“数据库”、“公司管理”、“意大利语”三门的科目成绩,按如下情势显得:
学生ID,,数据库,公司管理,斯洛伐克语,有效课程数,有效平均分

 
     7. SQL 成立索引语句的貌似格式为

复制代码 代码如下:

     
      
 CREATE [UNIQUE] [CLUSTER] INDEX <索引名>

SELECT S# as 学生ID
,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#=’004′) AS 数据库
,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#=’001′) AS 企管
,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#=’006′) AS 英语
,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均战绩
FROM SC AS t
GROUP BY S#
ORDER BY avg(t.score)

     
      
 ON <表名> (<列名列表> ) ;

18、查询各科战绩最高和最低的分:以如下情势显得:课程ID,最高分,最低分

其中UNIQUE:表示创设唯一索引,缺省为非独一索引;

复制代码 代码如下:

      CLUSTER:表示创立聚簇索引,缺省为非聚簇索引;

SELECT L.C# As 课程ID,L.score AS 最高分,R.score AS 最低分
FROM SC L ,SC AS R
WHERE L.C# = R.C# and
L.score = (SELECT MAX(IL.score)
FROM SC AS IL,Student AS IM
WHERE L.C# = IL.C# and IM.S#=IL.S#
GROUP BY IL.C#)
AND
R.Score = (SELECT MIN(IR.score)
FROM SC AS IR
WHERE R.C# = IR.C#
GROUP BY IR.C#
);

      <列名列表>:二个或逗号分隔的多少个列名,种种列名后可跟 ASC 或 DESC,表示升/降序,缺省为升序。多列时则按为浩如烟海排序。

19、按各科平均战绩从低到高和及格率的比重从高到低依次

     
  8. SQL 查询语句的相似格式为

复制代码 代码如下:

     
      
 SELECT [ALL|DISTINCT] <算术表达式列表> FROM <表名或视图名列表>

SELECT t.C# AS 课程号,max(course.Cname)AS 课程名,isnull(AVG(score),0)
AS 平均成绩
,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0
END)/COUNT(*) AS 及格百分数
FROM SC T,Course
where t.C#=course.C#
GROUP BY t.C#
ORDER BY 100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0
END)/COUNT(*) DESC

     
      
 [ WHERE <条件表达式 1> ]

20、查询如下课程平均成绩和及格率的比例(用”1行”突显):
公司管理(001),马克思(002),OO&UML (003),数据库(004)

     
      
 [ GROUP BY <属性列表 1> [ HAVING <条件表明式 2 > ] ]

复制代码 代码如下:

     
      
 [ O阿斯顿·马丁DB11DEWrangler BY <属性列表 2> [ ASC|DESC ] ] ;

SELECT SUM(CASE WHEN C# =’001′ THEN score ELSE 0 END)/SUM(CASE C# WHEN
‘001’ THEN 1 ELSE 0 END) AS 公司管理平均分
,100 * SUM(CASE WHEN C# = ‘001’ AND score >= 60 THEN 1 ELSE 0
END)/SUM(CASE WHEN C# = ‘001’ THEN 1 ELSE 0 END) AS
公司管理及格百分数
,SUM(CASE WHEN C# = ‘002’ THEN score ELSE 0 END)/SUM(CASE C# WHEN
‘002’ THEN 1 ELSE 0 END) AS 马克思平均分
,100 * SUM(CASE WHEN C# = ‘002’ AND score >= 60 THEN 1 ELSE 0
END)/SUM(CASE WHEN C# = ‘002’ THEN 1 ELSE 0 END) AS 马克思及格百分数
,SUM(CASE WHEN C# = ‘003’ THEN score ELSE 0 END)/SUM(CASE C# WHEN
‘003’ THEN 1 ELSE 0 END) AS UML平均分
,100 * SUM(CASE WHEN C# = ‘003’ AND score >= 60 THEN 1 ELSE 0
END)/SUM(CASE WHEN C# = ‘003’ THEN 1 ELSE 0 END) AS UML及格百分数
,SUM(CASE WHEN C# = ‘004’ THEN score ELSE 0 END)/SUM(CASE C# WHEN
‘004’ THEN 1 ELSE 0 END) AS 数据库平均分
,100 * SUM(CASE WHEN C# = ‘004’ AND score >= 60 THEN 1 ELSE 0
END)/SUM(CASE WHEN C# = ‘004’ THEN 1 ELSE 0 END) AS 数据库及格百分数
FROM SC

其中

21、查询差别老师所教分歧科目平均分从高到低展现

   
  ALL/DISTINCT: 缺省为 ALL, 即列出全体查询结果记录, 富含重复记录。 DISTINCT则对重复记录只列出一条。

复制代码 代码如下:

       算术表明式列表:三个或七个逗号分隔的算术表明式,表明式由常量(包罗数字和字符串)、列名、函数和算术运算符构成。各种表达式后还可跟小名。也可用 *代表查询表中的全数列。

SELECT max(Z.T#) AS 教授ID,MAX(Z.Tname) AS 教授姓名,C.C# AS
课程ID,MAX(C.Cname) AS 课程名称,AVG(Score) AS 平均成绩
FROM SC AS T,Course AS C ,Teacher AS Z
where T.C#=C.C# and C.T#=Z.T#
GROUP BY C.C#
ORDER BY AVG(Score) DESC

   
  <表名或视图名列表>: 一个或多个逗号分隔的表或视图名。 表或视图名后可跟外号。

22、查询如下课程成绩第 3 名到第 6
名的学习者成绩单:企管(001),马克思(002),UML
(003),数据库(004)
[学生ID],[学生姓名],公司管理,马克思,UML,数据库,平均成绩

   
  准则表明式 1:包括关系或逻辑运算符的表明式,代表询问条件。

复制代码 代码如下:

   
  标准化发挥式 **2**:包罗关系或逻辑运算符的表明式,代表分组条件。

SELECT DISTINCT top 3
SC.S# As 学生学号,
Student.Sname AS 学生姓名 ,
T1.score AS 集团管理,
T2.score AS 马克思,
T3.score AS UML,
T4.score AS 数据库,
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) +
ISNULL(T4.score,0) as 总分
FROM Student,SC LEFT JOIN SC AS T1
ON SC.S# = T1.S# AND T1.C# = ‘001’
LEFT JOIN SC AS T2
ON SC.S# = T2.S# AND T2.C# = ‘002’
LEFT JOIN SC AS T3
ON SC.S# = T3.S# AND T3.C# = ‘003’
LEFT JOIN SC AS T4
ON SC.S# = T4.S# AND T4.C# = ‘004’
WHERE student.S#=SC.S# and
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) +
ISNULL(T4.score,0)
NOT IN
(SELECT
DISTINCT
TOP 15 WITH TIES
ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) +
ISNULL(T4.score,0)
FROM sc
LEFT JOIN sc AS T1
ON sc.S# = T1.S# AND T1.C# = ‘k1’
LEFT JOIN sc AS T2
ON sc.S# = T2.S# AND T2.C# = ‘k2’
LEFT JOIN sc AS T3
ON sc.S# = T3.S# AND T3.C# = ‘k3’
LEFT JOIN sc AS T4
ON sc.S# = T4.S# AND T4.C# = ‘k4’
ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) +
ISNULL(T4.score,0) DESC);

   
  <属性列表 1>:三个或逗号分隔的五个列名。

23、计算列印各科战绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[
<60]

   
  <属性列表 2>: 二个或逗号分隔的七个列名, 每一种列名后可跟 ASC 或 DESC, 表示升/降序,缺省为升序。

复制代码 代码如下:

 
   
关于SQL语句的学问这里先作如上海高校概介绍,具体写法下一次将特地拿出一篇来说述。

SELECT SC.C# as 课程ID, Cname as 课程名称
,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 –
85]
,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 –
70]
,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 –
60]
,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]
FROM SC,Course
where SC.C#=Course.C#
GROUP BY SC.C#,Cname;

第四节

24、查询学一生均战绩及其排名

一、相关概念和文化

复制代码 代码如下:

     
 1.触发器是用户定义在基本表上的一类由事件驱动的独具匠心进度。由服务器自动激活, 能施行特别复杂的检讨和操作,具有越来越精细和更壮大的多寡调整技术。使用 CREATE TWranglerIGGE奇骏 命令营造触发器。

SELECT 1+(SELECT COUNT( distinct 平均成绩)
FROM (SELECT S#,AVG(score) AS 平均战表
FROM SC
GROUP BY S#
) AS T1
WHERE 平均战绩 > T2.平均成绩) as 排行,
S# as 学生学号,平均战绩
FROM (SELECT S#,AVG(score) 平均成绩
FROM SC
GROUP BY S#
) AS T2
OEnclaveDELX570 BY 平均成绩 desc;

     
 2.管理器连串设有技术安全、处理安全和计谋法律三类安全性难题。

25、查询各科战绩前三名的笔录:(不思量成绩并列情状)

     
 3. TCSEC/TDI 标准由安全攻略、义务、保障和文书档案三个方面内容结合。

复制代码 代码如下:

     
 4. 常用存取调整方法富含自立存取调节(DAC)和强制存取调控(MAC)两种。

SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
FROM SC t1
WHERE score IN (SELECT TOP 3 score
FROM SC
WHERE t1.C#= C#
ORDER BY score DESC
)
ORDER BY t1.C#;

     
 5. 独立存取调节(DAC)的 SQL 语句包蕴 GRANT 和 REVOKE 七个。 用户权限由数据对象和操作类型两部分构成。

26、查询每门学科被选修的学员数

997755.com澳门葡京 6

复制代码 代码如下:

       6. 常见SQL 发言权力决定命令和例子。
         1) 把对 Student 和 Course 表的任何权力授予全数用户。
            
 GRANT ALL PRIVILIGES ON TABLE Student,Course TO PUBLIC ;
       
 2) 把对 Student 表的查询权和姓名修改权授予用户 U4。
            
 GRANT SELECT,UPDATE(Sname) ON TABLE Student TO U4 ;
       
 3) 把对 SC 表的插入权限授予 U5 用户,并允许她传播该权限。
            
 GRANT INSERT ON TABLE SC TO U5 WITH GRANT OPTION ;
       
 4) 把用户 U5 对 SC 表的 INSERT
权限收回,同一时候打消被他传播出去的授权。
            
 REVOKE INSERT ON TABLE SC FROM U5 CASCADE ;
       
 5) 创建二个剧中人物 奥迪Q51,并使其对 Student
表具备数据查询和更新权限。
            
 CREATE ROLE R1;
            
 GRANT SELECT,UPDATE ON TABLE Student TO R1;
       
 6) 对修改 Student 表结构的操作举办审计。
            
 AUDIT ALTER ON Student ;

select c#,count(S#) from sc group by C#;

=====================================

27、查询出只选修了一门科目标全方位上学的小孩子的学号和人名

数据库知识计算(2)范式

 一、相关概念和知识点

       1.数目依赖:反映三个提到之中属性与品质之间的封锁关系,是实际世界属性间相互交流的架空,属于数据内在的特性和语义的呈现。
       2. 标准化理论:是用来统筹美貌的涉嫌情势的主干理论。它通过分解关系格局来打消当中不妥当的数码依赖,以消除插入相当、删除格外、更新极度和多少冗余难点。
       3. 函数信赖:轻便地说,对于涉及方式的七个属天性集X和Y,若X的任一取值能独一鲜明Y的值,则称Y函数信赖于X,记作X→Y。
       4. 非平日函数正视:对于涉及方式的多少个属个性集X和Y,即便X→Y,但Y!⊆X,则称X→Y为非平日函数重视;假使X→Y,但Y⊆X,则称X→Y为非日常函数正视。
       5. 通通函数注重:对于涉嫌格局的三个属天性集X和Y,倘诺X→Y,而且对于X的别的二个真子集X’,都尚未X’→Y,则称Y对X完全函数信赖。
       6. 范式:指符合某一种等第的关系情势的集纳。在统一准备关周全据库时,依照满意注重关系必要的分化定义为分歧的范式。
       7. 标准化:指将一个低一流范式的关联情势,通过情势分解转变为多少个高超级范式的涉及格局的汇合的进度。
       8. 1NF:若关系形式的具备属性都是不可分的着力数据项,则该关系形式属于1NF。
       9. 2NF:1NF事关方式一旦还要知足每一个非主属性完全函数重视于码,则该关系情势属于2NF。
       10. 3NF:若关系方式的每一个非主属性既不有的借助于码也不传递重视于码,则该关系格局属于3NF。
       11. BCNF:若三个涉嫌情势的每一个垄断(monopoly)因素都满含码,则该关系情势属于BCNF。
       12. 数据库设计:是指对于二个加以的应用境况,构造优化的数据库逻辑方式和物理构造,并为此建设构造数据库及其使用系统,使之能力所能达到使得地囤积和管制数据,满意各类用户的采纳需要,包罗新闻保管供给和数据操作须要。
       13. 数据库设计的6个基本步骤:须要深入分析,概念结构划虚构计,逻辑结构划虚拟计,物理结构划设想计,数据库执行,数据库运转和爱戴。
       14. 定义结构划虚拟计:指将供给剖判获得的用户须求抽象为讯息结构即概念模型的进度。也正是经过对用户要求进行汇总、归咎与聊以自慰,产生多少个单独于实际DBMS的概念模型。
       15. 逻辑结构设计:将定义结构模型(基本E-大切诺基图)转变为有个别DBMS产品所协理的数据模型相适合的逻辑结构,并对其开始展览优化。
       16. 物理结构划设想计:指为二个加以的逻辑数据模型选择二个最适合应用景况的概略构造的进程。包蕴安插数据库的仓库储存结构与存取方法。
       17. 抽象:指对实际的人、物、事和定义进行人工处理,收取所关怀的同步特点,忽略非本质的细节,并把那么些特色用各样概念正确地加以描述,这个概念组成了某种模型。

     
 18. 数据库设计必须听从结构划虚拟计和行为设计相结合的尺码。

     
 19. 数量字典首要富含数据项、数据结构、数据流、数据存款和储蓄和管理进度多少个部分。
       20. 三种常用抽象方法是分类、聚焦和回顾。
       21. 片段 E-本田UR-V 图之间的争辨首要表未来性质冲突、命名冲突和结构冲突多少个地点。

       22.
数据库常用的存取方法包含索引方法、聚簇方法和
HASH方法三种。
       23. 规定数据贮存地点和仓储结构亟待考虑的成分至关心注重要有: 存取时间、
存储空间利用率和保证代价等。

二、细说数据库三范式

2.1 第一范式(1NF)无重复的列

       第一范式(1NF)中多少库表的每一列都是不可分割的骨干数据项
       同一列中不能够有几个值
     
 即实体中的某些属性不可能有多少个值也许不能够有重新的属性。
     
 简来讲之,第一范式正是无重复的列。

     
 在任何三个关全面据库中,第一范式(1NF)是对涉嫌方式的骨干供给,不满意第一范式(1NF)的数据库就不是关全面据库。

2.2 第二范式(2NF)属性完全信赖于主键[排除部分子函数信赖]

     
满意第二范式(2NF)必须先满足第一范式(1NF)。

     
第二范式(2NF)需求数据库表中的种种实例或行必须能够被惟一地有别于。

     
为落到实处区分经常须求为表加上三个列,以存储各种实例的独步天下标志。 
     
第二范式(2NF)必要实体的属性完全凭仗于主关键字。所谓完全信赖是指不可能存在仅依附主关键字一部分的天性,假设存在,那么这一个性格和主关键字的这一片段应该分离出来形成七个新的实业,新实体与原实体之间是一对多的涉嫌。为落到实处区分日常须要为表加上三个列,以存款和储蓄各类实例的惟一标志。简单来讲,第二范式正是性质完全依附于主键。
2.3 第三范式(3NF)属性不依赖于任何非主属性[搞定传递信赖]

     
知足第三范式(3NF)必须先满意第二范式(2NF)。

     
简单来说,第三范式(3NF)供给三个数据库表中不带有已在任何表中已盈盈的非主关键字新闻。

     
比如,存在一个机构信息表,在那之中各样单位有单位编号(dept_id)、部门名称、部门简要介绍等消息。那么在的职员和工人消息表中列出机关编号后就不可能再将机关名称、部门简介等与机构有关的音讯再走入职员和工人消息表中。若是不设有机构音讯表,则依据第三范式(3NF)也应当营造它,不然就能够有雅量的数码冗余。简单的说,第三范式就是性质不依据于其余非主属性。

2.4
具体实例剖判

     
下边罗列四个学校的学生系统的实例,以示多少个范式的行使。

     
 在规划数据库表结构从前,大家先鲜明一下要规划的内容富含那几个。学号、学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话等音讯。为了轻松大家一时只思考那几个字段音讯。大家对此那几个音信,说关心的主题素材有如下多少个地方。

     
 1)学生有那个基本新闻 
       2)学生选了那么些课,战绩是什么样 
       3)每一个课的学分是稍微 
       4)学生属于卓殊系,系的大旨消息是怎么。

       第一第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。那些单一属性由宗旨类型构成,满含整型、实数、字符型、逻辑型、日期型等。在当下的任何关全面据库管理体系(DBMS)中,不容许你把多少库表的一列再分为二列或多列,由此做出的都以顺应第一范式的数据库。 

       咱俩再思量第二范式,把持有那么些音讯放到二个表中(学号,学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话)上边存在如下的借助关系。 
       1)(学号)→ (姓名, 年龄,性别,系别,系办地址、系办电话) 
       2) (课程名称) → (学分) 
       3)(学号,课程)→ (学科成绩)

基于依赖关系我们得以把选课关系表SelectCourse改为如下八个表: 

     
 学生:Student(学号,姓名, 年龄,性别,系别,系办地址、系办电话); 
       课程:Course(课程名称, 学分); 
       选课关系:SelectCourse(学号, 课程名称, 战绩)。

     
 事实上,对照第二范式的渴求,那正是知足第二范式的数量库表,若不满意第二范式,会发出如下难点 
数码冗余: 同一门学科由n个学生选修,”学分”就再次n-1次;同多个上学的儿童选修了m门课程,姓名和年龄就再也了m-1次。

履新万分: 1)若调度了某门课程的学分,数据表中全体行的”学分”值都要翻新,不然会现出同等门学科学分不一致的动静。 
               
 2)如若要开办一门新的教程,一时还平昔不人选修。那样,由于还未曾”学号”关键字,课程名称和学分也无从记录入数据库。

删除非凡 : 要是一群学生已经到位课程的选修,那么些选修记录就应当从数据库表中删除。然而,与此同有的时候间,课程名称和学分消息也被剔除了。很显明,那也会促成插入至极。

       我们再挂念怎么将其改成满足第三范式的多少库表,接着看下边的学员表Student(学号,姓名, 年龄,性别,系别,系办地址、系办电话),关键字为单纯关键字”学号”,因为存在如下决定涉及:

     
(学号)→ (姓名, 年龄,性别,系别,系办地址、系办电话) 
而是还留存上面包车型大巴决定涉及 
       (学号) → (所在高校)→(高校地方, 大学电话) 
       
即存在非关键字段”高校地方”、”高校电话”对主要字段”学号”的传递函数依赖。 
     
 它也会存在数量冗余、更新特别、插入非凡和删除极度的气象(这里就不具体解析了,参照第二范式中的深入分析)。依照第三范式把学生关系表分为如下多个表就足以满意第三范式了:

     
 学生:(学号, 姓名, 年龄, 性别,系别); 
       系别:(系别, 系办地址、系办电话)。

SQL语句计算

SQL语句中常用关键词及其表达如下:

复制代码 代码如下:

1)SELECT

将质感从数据库中的表格内选出,五个首要字:从
(FROM) 数据库中的表格内选出 (SELECT)。语法为
SELECT “栏位名” FROM “表格名”。

select SC.S#,Student.Sname,count(C#) AS 选课数
from SC ,Student
where SC.S#=Student.S# group by SC.S# ,Student.Sname having
count(C#)=1;

2)DISTINCT

在上述
SELECT 关键词后增加三个 DISTINCT
就可以去除选抽取来的栏位中的重复,进而完毕求得这么些表格/栏位内有啥样分裂的值的法力。语法为
SELECT DISTINCT “栏位名” FROM
“表格名”。

28、查询男士、女人人数

3)WHERE

那一个重大词能够扶助大家选用性地抓资料,并非全抽取来。语法为
SELECT “栏位名” FROM “表格名”
WHERE “条件” 

复制代码 代码如下:

4)AND OR

上例中的
WHERE 指令能够被用来由表格中有标准化地挑选资料。那么些规范恐怕是回顾的
(像上一页的例子),也说不定是纵横交叉的。复杂条件是由二或五个简易规范经过 AND
或是 O奥迪Q3 的连续而成。语法为:
SELECT “栏位名”  FROM “表格名”
 WHERE “简单规范”  {[AND|OR] “轻便标准”}+

Select count(Ssex) as 匹夫人数 from Student group by Ssex having
Ssex=’男’;
Select count(Ssex) as 女孩子人数 from Student group by Ssex having
Ssex=’女’;

5)IN


SQL 中,在多少个情状下会用到 IN  这几个命令;这一页将介绍当中之一:与 WHERE
有关的那多少个情景。在那么些用法下,大家先行已清楚至少四个大家要求的值,而笔者辈将那么些知道的值都放入IN  这么些子句。语法为:
SELECT “栏位名”  FROM “表格名”
 WHERE “栏位名” IN (‘值一’, ‘值二’, …)  

29、查询姓“张”的学生名单

6)BETWEEN

IN
这么些命令能够让大家依照一或数个不三回九转(discrete)的值的限定之内抓出资料库中的值,而 BETWEEN
则是让大家可以使用一个限量 (range)  内抓出资料库中的值,语法为:
SELECT “栏位名”  FROM “表格名”
WHERE “栏位名” BETWEEN ‘值一’ AND ‘值二’ 

复制代码 代码如下:

7)LIKE

LIKE
是另贰个在 WHERE  子句中会用到的下令。基本上, LIKE
 能让大家依据多个格局(pattern) 来找寻我们要的素材。语法为:
SELECT “栏位名”  FROM “表格名”
 WHERE “栏位名” LIKE {模式} 

SELECT Sname FROM Student WHERE Sname like ‘张%’;

8)ORDER BY

我们日常须求能够将抓出的材质做二个有系统的展现。那恐怕是由小往大
(ascending)  或是由大往小(descending)。在这种状态下,我们就能够运用
O瑞鹰DE汉兰达 BY 这一个命令来实现大家的目标。语法为:
SELECT “栏位名”  FROM “表格名
[WHERE “条件”] ORDER BY “栏位名” [ASC, DESC] 

30、查询同名同性学生名单,并总括同有名气的人数

9)函数

函数允许大家能够对那么些数字的型态存在的行照旧列做运算,包括AVG (平均)、COUNT (计数)、MAX (最大值)、MIN (最小值)、SUM
(总合)。语法为:
SELECT “函数名”(“栏位名”) FROM
“表格名”  

复制代码 代码如下:

10)COUNT

其一第一词能够帮本人大家总计有个别许笔资料被选出来,语法为:
SELECT COUNT(“栏位名”) FROM
“表格名”

select Sname,count(*) from Student group by Sname having
count(*)>1;

11)GROUP BY

GROUP
BY 语句用于结合合计函数,根据八个或多个列对结果集进行分组。语法为:
SELECT “栏位1”, SUM(“栏位2”)  FROM
“表格名”  GROUP BY “栏位1” 

31、一九八一年出生的学生名单(注:Student表中Sage列的项目是datetime)

12)HAVING

该重大词能够帮忙大家对函数产生的值来设定条件。语法为:
SELECT “栏位1”, SUM(“栏位2”)  FROM
“表格名”  GROUP BY “栏位1”  HAVING (函数条件)  

复制代码 代码如下:

13)ALIAS

笔者们可以透过ALIAS为列名称和表名称内定小名,语法为:
SELECT “表格小名”.”栏位1″
“栏位小名”  FROM “表格名” “表格小名”  

上边为三个例证,通过它大家应该能很好地左右以上海重型机器厂大词的使用情势。

Student(S#,Sname,Sage,Ssex) 学生表
Course(C#,Cname,T#) 课程表
SC(S#,C#,score) 成绩表
Teacher(T#,Tname) 教师表

问题:
1、查询“001”课程比“002”课程成绩高的具有学生的学号;
select a.S#
from (select s#,score from SC where C#=’001′) a,
(select s#,score from SC where C#=’002′) b
where a.score>b.score and a.s#=b.s#;

2、查询平均战绩超越60分的同室的学号和平均战表;
select S#,avg(score)
from sc
group by S# having avg(score) >60;

3、查询全数同学的学号、姓名、选课数、总战表;
select Student.S#,Student.Sname,count(SC.C#),sum(score)
from Student left Outer join SC on Student.S#=SC.S#
group by Student.S#,Sname

4、查询姓“李”的教育工小编的个数;
select count(distinct(Tname))
from Teacher
where Tname like ‘李%’;

5、查询没学过“叶平”老师课的同班的学号、姓名;
select Student.S#,Student.Sname
from Student
where S# not in (select distinct( SC.S#) from SC,Course,Teacher where
SC.C#=Course.C# and Teacher.T#=Course.T# and
Teacher.Tname=’叶平’);

6、查询学过“001”而且也学过数码“002”课程的同班的学号、姓名;
select Student.S#,Student.Sname
from Student,SC

where
Student.S#=SC.S# and SC.C#=’001′and exists( Select * from SC as
SC_2 where SC_2.S#=SC.S# and SC_2.C#=’002′);

7、查询学过“叶平”老师所教的全体课的同窗的学号、姓名;
select S#,Sname
from Student
where S# in
(select S#
from SC ,Course ,Teacher
where SC.C#=Course.C# and Teacher.T#=Course.T# and
Teacher.Tname=’叶平’ group by S# having count(SC.C#)=(select
count(C#) from Course,Teacher where Teacher.T#=Course.T# and
Tname=’叶平’));

8、查询全部科目成绩小于60分的同窗的学号、姓名;
select S#,Sname
from Student
where S# not in (select Student.S# from Student,SC where S.S#=SC.S#
and score>60);

9、查询未有学全全数课的同窗的学号、姓名;
select Student.S#,Student.Sname
from Student,SC
where Student.S#=SC.S#
group by Student.S#,Student.Sname having count(C#) <(select
count(C#) from Course);

10、查询至少有一门课与学号为“1001”的同学所学一样的同窗的学号和姓名;
select S#,Sname
from Student,SC
where Student.S#=SC.S# and C# in (select C# from SC where
S#=’1001’);

11、删除学习“叶平”老师课的SC表记录;
Delect SC
from course ,Teacher
where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname=’叶平’;

12、查询各科成绩最高和最低的分:以如下情势显得:课程ID,最高分,最低分
SELECT L.C# 课程ID,L.score 最高分,R.score 最低分
FROM SC L ,SC R
WHERE L.C# = R.C#
and
L.score = (SELECT MAX(IL.score)
FROM SC IL,Student IM
WHERE IL.C# = L.C# and IM.S#=IL.S#
GROUP BY IL.C#)
and
R.Score = (SELECT MIN(IR.score)
FROM SC IR
WHERE IR.C# = R.C#
GROUP BY IR.C# );

13、查询学毕生均成绩及其排行
SELECT 1+(SELECT COUNT( distinct 平均战表)
FROM (SELECT S#,AVG(score) 平均战绩
FROM SC
GROUP BY S# ) T1
WHERE 平均成绩 > T2.平均成绩) 排名, S# 学生学号,平均战表
FROM (SELECT S#,AVG(score) 平均战绩 FROM SC GROUP BY S# ) T2
O路虎极光DEENCORE BY 平均战表 desc;

14、查询各科成绩前三名的记录:(不思虑成绩并列情形)
SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
FROM SC t1
WHERE score IN (SELECT TOP 3 score
FROM SC
WHERE t1.C#= C#
ORDER BY score DESC)
ORDER BY t1.C#;

15、查询每门功战表最棒的前两名
SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
FROM SC t1
WHERE score IN (SELECT TOP 2 score
FROM SC
WHERE t1.C#= C#
ORDER BY score DESC )

ORDER
BY t1.C#;

=

select Sname, CONVERT(char (11),DATEPART(year,Sage)) as age
from student
where CONVERT(char(11),DATEPART(year,Sage))=’1981′;

32、查询每门科指标平分战绩,结果按平均战表升序排列,平均成绩同样时,按学科号降序排列

复制代码 代码如下:

Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC
;

33、查询平均成绩超乎85的富有学生的学号、姓名和平均成绩

复制代码 代码如下:

select Sname,SC.S# ,avg(score)
from Student,SC
where Student.S#=SC.S# group by SC.S#,Sname having
avg(score)>85;

34、查询课程名叫“数据库”,且分数低于60的学生姓名和分数

复制代码 代码如下:

Select Sname,isnull(score,0)
from Student,SC,Course
where SC.S#=Student.S# and SC.C#=Course.C# and
Course.Cname=’数据库’and score <60;

35、查询全数学生的选课意况;

复制代码 代码如下:

SELECT SC.S#,SC.C#,Sname,Cname
FROM SC,Student,Course
where SC.S#=Student.S# and SC.C#=Course.C# ;

36、查询任何一门科目战表在70分以上的人名、课程名称和分数;

复制代码 代码如下:

SELECT distinct student.S#,student.Sname,SC.C#,SC.score
FROM student,Sc
WHERE SC.score>=70 AND SC.S#=student.S#;

37、查询不比格的科目,并按学科号从大到小排列

复制代码 代码如下:

select c# from sc where scor e <60 order by C# ;

38、查询课程编号为003且课程战绩在80分以上的学员的学号和人名;

复制代码 代码如下:

select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and
Score>80 and C#=’003′;

39、求选了课程的上学的小孩子人数

复制代码 代码如下:

select count(*) from sc;

40、查询选修“叶平”老师所授课程的学习者中,战表最高的学生姓名及其成绩

复制代码 代码如下:

select Student.Sname,score
from Student,SC,Course C,Teacher
where Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and
Teacher.Tname=’叶平’ and SC.score=(select max(score)from SC where
C#=C.C# );

41、查询各类科目及相应的选修人数

复制代码 代码如下:

select count(*) from sc group by C#;

42、查询差别学科成绩一样的学习者的学号、课程号、学生成绩

复制代码 代码如下:

select distinct A.S#,B.score from SC A ,SC B where A.Score=B.Score and
A.C# <>B.C# ;

43、查询每门功成绩最棒的前两名

复制代码 代码如下:

SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数
FROM SC t1
WHERE score IN (SELECT TOP 2 score
FROM SC
WHERE t1.C#= C#
ORDER BY score DESC
)
ORDER BY t1.C#;

44、总结每门课程的上学的儿童选修人数(当先10人的学科才总计)。供给输出课程号和选修人数,查询结果按人头降序排列,查询结果按人口降序排列,若人数一样,按学科号升序排列

复制代码 代码如下:

select C# as 课程号,count(*) as 人数
from sc
group by C#
order by count(*) desc,c#

45、检索至少选修两门课程的学习者学号

复制代码 代码如下:

select S#
from sc
group by s#
having count(*) > = 2

46、查询全数学员都选修的教程的课程号和课程名

复制代码 代码如下:

select C#,Cname
from Course
where C# in (select c# from sc group by c#)

47、查询没学过“叶平”老师教学的任一门课程的学员姓名

复制代码 代码如下:

select Sname from Student where S# not in (select S# from
Course,Teacher,SC where Course.T#=Teacher.T# and SC.C#=course.C# and
Tname=’叶平’);

48、查询两门以上不比格课程的同桌的学号及其平均战绩

复制代码 代码如下:

select S#,avg(isnull(score,0)) from SC where S# in (select S# from SC
where score <60 group by S# having count(*)>2)group by S#;

49、检索“004”课程分数小于60,按分数降序排列的同班学号

复制代码 代码如下:

select S# from SC where C#=’004’and score <60 order by score
desc;

50、删除“002”同学的“001”课程的实际业绩

复制代码 代码如下:

delete from Sc where S#=’001’and C#=’001′;

您恐怕感兴趣的篇章:

  • MySQL学习笔记3:表的基本操作介绍
  • 单个select语句实现MySQL查询总结次数
  • sql查询出各科成绩最佳的学生新闻
  • mysql查询后天 七日前 九月前些年前的数额
  • mysql查询后日、今日、近7天、近30天、前段时间、上十1月的SQL语句
  • MySql查询时间段的法子
  • MySQL查询和修改auto_increment的方法
  • 叁个优化MySQL查询操作的切切实实案例分析
  • MySQL查询尾数第二条记下完毕格局
  • SQL查询出表、存款和储蓄进程、触发器的创立时间和终极修改时间示例
  • 急剧优化MySQL查询品质的奇技淫巧
  • SQL大批量数目查询的优化及非用like不可时的拍卖方案
  • 如何运用MySQL查询有个别列中一样值的数目总括
  • SQL怎么着贯彻MYSQL的递归查询
  • 数码库表的询问操作(实验二)
  • 数码库表的查询操作推行练习(实验三)

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website