澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站数据库及SQL,数据库基本知

2019-04-26 作者:数据库网络   |   浏览(167)

数据库也是计量机类笔试面试中不可制止会遇上的考试场点,尤其是银行和一些守旧软件类集团。那里依据整理的资料,对数据库的相干知识也做个总括吧。希望学过数据库但长日子不用的同室依据这个知识能够回想和重拾,没学过的同学能左右一些数据库的基础知识。

数据库也是持筹握算机类笔试面试中不可防止会遇见的考试场点,尤其是银行和一部分古板软件类公司。那里依据整理的质感,对数据库的连锁文化也做个总括吧。希望学过数据库但长日子不用的同校依据这一个文化能够回想和重10,没学过的同室能调控一些数据库的基础知识。

(一)

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

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

第一节

第一节

 

复制代码 代码如下:

问题:
一、查询“00一”课程比“00二”课程战表高的富有学员的学号;
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、查询平均战表超越65分的同班的学号和平均战绩;
select S#,avg(score)
from sc
group by S# having avg(score) >60;
三、查询全体同学的学号、姓名、选课数、总战表;
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
四、查询姓“李”的老师的个数;
select count(distinct(Tname))
from Teacher
where Tname like '李%';
伍、查询没学过“叶平”老师课的同校的学号、姓名;
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='叶平');
陆、查询学过“00一”并且也学过数码“00二”课程的同班的学号、姓名;
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');
柒、查询学过“叶平”老师所教的全数课的同室的学号、姓名;
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='叶平'));
捌、查询课程编号“00二”的成就比课程编号“00一”课程低的有着同学的学号、姓名;
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;
玖、查询全数课程成绩小于伍18分的校友的学号、姓名;
select S#,Sname
from Student
where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);
十、查询未有学全全体课的同学的学号、姓名;
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、查询至少有1门课与学号为“100一”的同桌所学一样的同桌的学号和人名;
select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';
12、查询至少学过学号为“001”同学所有1门课的别的同学学号和人名;
select distinct SC.S#,Sname
from Student,SC
where Student.S#=SC.S# and C# in (select C# from SC where S#='001');
一三、把“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='叶平');
1四、查询和“十0二”号的校友学习的教程完全同样的其余同学学号和姓名;
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”课程的同校学号、二、
号课的平分成绩;
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');
1七、按平均成绩从高到低展现全数学员的“数据库”、“公司管理”、“塞尔维亚(Република Србија)语”三门的课程成绩,按如下方式展现: 学生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#='00壹') 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)
1八、查询各科战绩最高和压低的分:以如下格局显得:课程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、查询如下课程平均成绩和及格率的比例(用"一行"展现): 集团管理(00一),马克思(00二),OO&UML (00三),数据库(00四)
SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '00壹' THEN 壹 ELSE 0 END) AS 公司管理平均分
,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '00一' THEN 1 ELSE 0 END) AS 集团管理及格百分数
,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '00二' THEN 壹 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# = '00叁' THEN 一 ELSE 0 END) AS UML及格百分数
,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 一 ELSE 0 END) AS 数据库平均分
,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '00四' THEN 一 ELSE 0 END) AS 数据库及格百分数
FROM SC
二一、查询区别老师所教分化学科平均分从高到低展现
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
2贰、查询如下课程战表第 三 名到第 6名的学习者战绩单:集团管理(00一),马克思(00二),UML (003),数据库(004)
[学生ID],[学生姓名],公司处理,Marx,UML,数据库,平均成绩
SELECT DISTINCT top 3
SC.S# As 学生学号,
Student.Sname AS 学生姓名 ,
T一.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);

 一、相关概念    

  一. Data:数据,是数据库中仓库储存的基本对象,是讲述事物的符号记录。

       二. Database:数据库,是久久积累在Computer内、有团体的、可共享的大气数码的相会

       三. DBMS:数据库管理种类,是位于用户与操作系统之间的一层数量管理软件,用于科学地协会、存款和储蓄和治本数据、高效地收获和维护数据。

       四. DBS:数据库系统,指在管理器连串中引入数据库后的系列,一般由数据库、数据库管理种类、应用系统、数据库管理员(DBA)构成。

       五. 数据模型:是用来抽象、表示和管理具体世界中的数据和音信的工具,是对切实世界的模拟,是数据库系统的焦点和底蕴;其构成要素有数据结构、数据操作和完整性约束

       陆. 概念模型:也称音讯模型,是按用户的理念来对数码和音信建立模型,主要用以数据库设计。

       7. 逻辑模型:是按计算机连串的见解对数据建立模型,用于DBMS实现。

       八. 大要模型:是对数据最底部的肤浅,描述数据在系统内部的象征方法和存取方法,在磁盘或磁带上的积攒格局和存取方法,是面向计算机种类的。

       九. 实体和性质:客观存在并可相互区分的东西称为实体。实体所怀有的某一表征称为属性。

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

       1壹.关联情势:从用户意见看,关系形式是由1组关系结合,每种关系的数据结构是一张标准化的贰维表。

       1贰.型/值:型是对某一类数据的构造和质量的求证;值是型的3个切实赋值,是型的实例。

       一三.数据库情势:是对数据库中整整数据的逻辑结构(数据项的名字、类型、取值范围等)和特点(数据里面的牵连以及数占领关的安全性、完整性需求)的讲述。

       1四.数据库的三级系统结构:外格局、方式和内格局

       15.数据库内方式:又叫做积累情势,是对数据库物理结议和积累情势的叙说,是数据在数据库内部的象征方法。3个数据库唯有三个内格局

       1陆.数据库外形式:又称为子方式或用户情势,它是数据库用户能够看见和使用的部分数据的逻辑结构和特点的讲述,是数据库用户的数码视图。平日是格局的子集。三个数据库可有三个外格局

       一七.数据库的二级影像:外方式/方式影像、形式/内格局影像。

      一、相关概念

1.写出一条Sql语句:收取表A中第31到第60笔录(SQLServer, 以活动增加的ID作为主键,  注意:ID可能不是几次三番的。)
select top 10 * from A where id not in (select top 30 id from A)
解2: select top 10 * from A where id > (selectmax(id) from (select top 30 id from A )as A)

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#;

贰三、总结列印各科成绩,各分数段人数:课程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对多和多对多两种档案的次序。

       肆. 宽广的数据模型包涵:涉及、等级次序、网状、面向对象、对象关系映射等几种。

       5. 涉及模型的完整性约束包含:实体完整性、参照完整性和用户定义完整性。

      陆. 解说数据库三级格局、二级映象的意思及作用。

        数据库三级情势反映的是数码的八个抽象等级次序: 格局是对数据库中全方位数据的逻辑结商谈特征的叙述内形式又叫做存储方式,是对数据库物理结商谈仓库储存方式的叙说。外情势又称为子形式或用户格局,是对特定数据库用户相关的壹对数据的逻辑结议和特色的描述

        数据库三级形式通过二级映象在 DBMS 内部贯彻那多少个抽象等级次序的维系和改换。外格局面向应用程序, 通过外方式/形式映象与逻辑形式建立联系, 完成数据的逻辑独立性。 格局/内形式映象建立格局与内情势里面包车型大巴壹对一映射, 实现数据的概况独立性

       1. Data:数据,是数据库中存款和储蓄的主干目的,是描述事物的号子记录。
       二. Database:数据库,是旷日持久储存在Computer内、有团体的、可共享的大度多少的集结。
       叁. DBMS:数据库管理连串,是坐落用户与操作系统以内的1层数据管理软件,用于科学地公司、存款和储蓄和管理数据、高效地获得和护卫数据。
       四. DBS:数据库系统,指在微型Computer系列中引进数据库后的连串,一般由数据库、数据库管理体系、应用系统、数据库管理员(DBA)构成。
       5. 数据模型:是用来抽象、表示和管理具体世界中的数据和新闻的工具,是对切实世界的上行下效,是数据库系统的大旨和基础;其构成要素有数据结构、数据操作和完整性约束。
       陆. 概念模型:也称新闻模型,是按用户的观念来对数码和消息建立模型,首要用来数据库设计。
       7. 逻辑模型:是按计算机体系的见解对数据建模,用于DBMS落成。
       八. 物理模型:是对数据最尾巴部分的悬空,描述数据在系统里面包车型地铁象征方法和存取方法,在磁盘或磁带上的仓库储存格局和存取方法,是面向Computer体系的。
       九. 实体和总体性:客观存在并可相互区分的东西称为实体。实体所持有的某一特色称为属性。
       十.E-大切诺基图:即实体-关系图,用于描述现实世界的事物及其互相关系,是数据库概念模型设计的首要性工具。
       1一.涉嫌情势:从用户意见看,关系情势是由壹组关系结合,各个关系的数据结构是一张标准化的贰维表。
       1贰.型/值:型是对某壹类数据的构造和属性的验证;值是型的一个切实可行赋值,是型的实例。
       1三.数据库方式:是对数据库中整整数据的逻辑结构(数据项的名字、类型、取值范围等)和个性(数据里面包车型客车维系以及数占领关的安全性、完整性供给)的叙说。
       1肆.数据库的三级系统结构:外形式、方式和内情势。
       15.数据库内形式:又称之为存储形式,是对数据库物理构造和存款和储蓄情势的讲述,是数量在数据库内部的代表方法。3个数据库唯有多个内情势。
       16.数据库外方式:又称为子情势或用户形式,它是数据库用户能够看见和行使的一部分数据的逻辑结议和性情的讲述,是数据库用户的数量视图。常常是格局的子集。三个数据库可有几个外形式。
       壹柒.数据库的二级印象:外方式/格局印象、形式/内形式影像。

 

2、查询平均战绩当先伍十几分的校友的学号和平均战绩;

二肆、查询学一生均成绩及其排行
SELECT 1 (SELECT COUNT( distinct 平均战表)
FROM (SELECT S#,AVG(score) AS 平均成绩
FROM SC
GROUP BY S#
) AS T1
WHERE 平均战绩 > T二.平分战绩) as 排名,
S# as 学生学号,平均成绩
FROM (SELECT S#,AVG(score) 平均成绩
FROM SC
GROUP BY S#
) AS T2
OEscortDE帕杰罗 BY 平均成绩 desc;

第二节

     

2. 写sql语句落成下列查询
(表)t
a b(列)
1 2
1 3
1 4
2 1
2 2
3 1
4 1
5 3
5 2
查询结果须求
a b
1 2
2 1
3 1
4 1
5 2

复制代码 代码如下:

二5、查询各科成绩前三名的记录:(不思量战绩并列意况)
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#;
2陆、查询每门科目被选修的学童数
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='女';
2玖、查询姓“张”的学生名单
SELECT Sname FROM Student WHERE Sname like '张%';
30、查询同名同性学生名单,并计算同有名的人数
select Sname,count(*) from Student group by Sname having count(*)>1;;
3一、1玖8肆年出生的学生名单(注:Student表中Sage列的档期的顺序是datetime)
select Sname, CONVERT(char (11),DATEPART(year,Sage)) as age
from student
where CONVERT(char(11),DATEPART(year,Sage))='1981';
3二、查询每门科目标平均战表,结果按平均成绩升序排列,平均成绩一样时,按学科号降序排列
Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ;
3三、查询平均战绩超乎捌伍的富有学员的学号、姓名和平均成绩
select Sname,SC.S# ,avg(score)
from Student,SC
where Student.S#=SC.S# group by SC.S#,Sname having    avg(score)>85;
3四、查询课程名字为“数据库”,且分数低于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# ;
3陆、查询任何1门科目战表在6捌分以上的全名、课程名称和分数;
SELECT distinct student.S#,student.Sname,SC.C#,SC.score
FROM student,Sc
WHERE SC.score>=70 AND SC.S#=student.S#;
三7、查询比不上格的学科,并按学科号从大到小排列
select c# from sc where scor e <60 order by C# ;
38、查询课程编号为003且课程战绩在76分以上的学员的学号和人名;
select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and Score>80 and C#='003';
3玖、求选了学科的学生人数
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# );
4一、查询各类科目及相应的选修人数
select count(*) from sc group by C#;
4二、查询分裂学科成绩同样的学习者的学号、课程号、学生成绩
select distinct A.S#,B.score from SC A ,SC B where A.Score=B.Score and A.C# <>B.C# ;
4三、查询每门功战绩最棒的前两名
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、总括每门课程的学习者选修人数(当先十一个人的教程才总计)。要求输出课程号和选修人数,查询结果按人口降序排列,查询结果按人口降序排列,若人数同样,按学科号升序排列
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#)
四7、查询没学过“叶平”老师授课的任一门课程的学童姓名
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='叶平');
4八、查询两门以上不比格课程的同桌的学号及其平均战表
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、检索“00四”课程分数小于60,按分数降序排列的同窗学号
select S# from SC where C#='004'and score <60 order by score desc;
50、删除“00二”同学的“00壹”课程的成绩
delete from Sc where S#='001'and C#='001';

一、相关概念

       一. 主键: 能够唯一地方统一规范识三个元组的性质或属性组称为关系的键或候选键。 若一个提到有五个候选键则可选其一作为主键(Primary key)。

       二. 外键:固然七个涉嫌的四个或一组属性引用(参照)了另多个提到的主键,则称这一个或这组属性为外码或外键(Foreign key)。

       叁. 关周密据库: 依据关系模型建立的数据库称为关周全据库。 它是在某些应用领域的具有涉及的集纳

       4. 事关情势: 轻巧地说,关系格局就是对关系的型的定义, 包涵涉嫌的性质构成、各属性的数据类型、 属性间的重视、 元组语义及完整性约束等。 关系是关系情势在某一时半刻时的意况或内容, 关系模型是型, 关系是值, 关系模型是静态的、 稳固的, 而关系是动态的、随时间不断变化的,因为波及操作在相连地换代着数据库中的数据

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

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

       7. 用户定义的完整性:就是对准某一具体应用的数码必须满足的语义约束。包含非空、 唯1和布尔条件约束二种状态。

 二、注重知识点

 

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

 

二、首要知识点

      一. 关全面据库语言分为波及代数、关系演算和结构化查询语言3大类。

      二. 关系的四种基本操作是选用、投影、并、差、笛Carl积

      3.关联方式是对事关的叙说,5元组格局化表示为:卡宴(U,D,DOM,F),当中

            R —— 关系名

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

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

            DOM —— 属性向域的画面集合

            F —— 属性间的数目信赖关系集结

      4.笛Carl乘积,选取和影子运算如下

澳门新萄京官方网站 1

       壹. 数据库系统由数据库、数据库管理连串、应用连串数据库管理员构成。

三.一组通话记录(总共500万条):
ID 主叫号码 被叫号码 通话伊始时间   通话甘休时间           通话时间长度
1  98290000 0215466546656 2007-02-01 09:49:53.000 2007-02-01 09:50:16.00023
2  98290000 021546654666  2007-02-01 09:50:29.000 2007-02-0109:50:41.000 12
3  98290000 021546654666  2007-02-01 09:50:58.000 2007-02-0109:51:12.000 14
4  68290900 0755133329866 2007-02-01 10:04:31.000 2007-02-01 10:07:13.000162
5  78290000 0755255708638 2007-02-01 10:48:26.000 2007-02-01 10:49:23.00057
6  78290000 0755821119109 2007-02-01 10:49:39.000 2007-02-01 10:52:55.000196
7  78290000 035730928370  2007-02-01 11:30:45.000 2007-02-0111:31:58.000 73
8  78290000 0871138889904 2007-02-01 11:33:47.000 2007-02-01 11:35:00.00073
9  68290000 035730928379  2007-02-01 11:52:20.000 2007-02-0111:54:56.000 156
10 68290000 0298521811199 2007-02-01 12:44:45.000 2007-02-01 12:45:04.000 19
求当中同三个数码的四回打电话之间间距大于拾秒的通话记录ID
譬如说:陆,7,八,玖,拾条记下均符合。

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

(转 )

第三节

       二. 数据模型的③结合要素是:数据结构、数据操作、完整性约束原则

 

复制代码 代码如下:

壹、相关概念

       1. SQL:结构化查询语言的简称, 是关全面据库的行业内部语言。SQL 是壹种通用的、 功能极强的关周密据库语言, 是对关周密据存取的标准接口, 也是例外数据库系统之间互操作的基础。集数据查询、数据操作、数据定义、和数码调整机能于一体。

       二. 数目定义:数据定义成效包含形式定义、表定义、视图和目录的概念。

       三. 嵌套查询:指将1个查询块嵌套在另八个查询块的 WHERE 子句或 HAVING 短语的准绳中的查询。

       3. 实体型之间的关联分为一对一、一对多多对多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

2、主要知识点

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

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

       三. BMWX伍DBMS 中索引一般选取 B 树或 HASH 来实现

       四. 索引能够分为唯一索引、非唯一索引和聚簇索引3连串型。

澳门新萄京官方网站 2

  陆.SQL 创立表语句的相似格式为

              CREATE TABLE <表名>

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

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

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

里头<数据类型>能够是数据库系统帮助的各个数据类型,包蕴长度和精度。 

    列级完整性约束为针对单个列(本列)的完整性约束, 包蕴 P路虎极光IMA奥迪Q三Y KEY、 REFERENCES表名(列名)、UNIQUE、NOT NULL 等。 

    表级完整性约束能够是凭仗表中多列的自律,包蕴 PTucsonIMAPAJEROY KEY ( 列名列表) 、FOREIGN KEY REFERENCES 表名(列名) 等。

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

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

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

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

      CLUSTE大切诺基:表示创设聚簇索引,缺省为非聚簇索引;

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

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

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

              [ WHERE <条件表达式 一> ]

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

              [ OHavalDE逍客 BY <属性列表 二> [ ASC|DESC ] ] ;

其中

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

       算术表达式列表:三个或多少个逗号分隔的算术表达式,表明式由常量(蕴涵数字和字符串)、列名、函数和算术运算符构成。每个表达式后还可跟别称。也可用 *表示查询表中的全部列。

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

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

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

      <属性列表 一>:3个或逗号分隔的七个列名。

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

       四. 广泛的数据模型包涵:波及、等级次序、网状、面向对象、对象关联映射等几种。

 

四、查询姓“李”的军长的个数;

第四节

       伍. 涉嫌模型的完整性约束包涵:实业完整性、参照完整性和用户定义完整性

(二)

复制代码 代码如下:

1、相关概念和学识

       1.触发器是用户定义在基本表上的壹类由事件驱动的卓殊进程。由服务器自动激活, 能实践特别复杂的自己研究和操作,具备更加小巧和更结实大的数据调节工夫。使用 CREATE T福睿斯IGGEHaval 命令建立触发器。

       二.管理器系列存在技能安全、管理安全和宗旨法规三类安全性难题。

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

       4. 常用存取调整方法包罗独立存取调节(DAC)和强制存取调节(MAC)两种。

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

澳门新萄京官方网站 3

       陆. 常见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 ;

         三) 把对 SC 表的插入权限授予 U伍 用户,并允许他传播该权限。

              GRANT INSERT ON TABLE SC TO U5 WITH GRANT OPTION ;

         四) 把用户 U五 对 SC 表的 INSERT 权限收回,同时撤除被他传播出去的授权。

              REVOKE INSERT ON TABLE SC FROM U5 CASCADE ;

         伍) 创设叁个剧中人物 库罗德一,并使其对 Student 表具有数据查询和更新权限。

              CREATE ROLE R1;

              GRANT SELECT,UPDATE ON TABLE Student TO R1;

         六) 对修改 Student 表结构的操作举办审计。

              AUDIT ALTER ON Student ;

      陆. 阐述数据库三级方式、二级映象的含义及效率。
        数据库三级形式反映的是数量的七个抽象档次: 情势是对数据库中任何数据的逻辑结谈判本性的讲述。内形式又称作存款和储蓄格局,是对数据库物理构造和累积格局的叙述。外格局又称为子格局或用户情势,是对一定数据库用户相关的有的数据的逻辑结会谈性格的描述。

 

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

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

        数据库三级形式通过二级映象在 DBMS 内部贯彻那八个抽象等级次序的关联和转变。外格局面向应用程序, 通过外方式/情势映象与逻辑情势建立联系, 达成数量的逻辑独立性。 情势/内方式映象建立格局与内情势里面包车型大巴壹对一映射, 实现数据的情理独立性。

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

伍、查询没学过“叶平”老师课的同桌的学号、姓名;

 一、相关概念和知识点

       1.数据依赖:反映贰个关乎里面属性与特性之间的约束关系,是现实性世界属性间相互关联的抽象,属于数据内在的质量和语义的展现。

       二. 标准化理论:是用来安插突出的关联方式的主题绪论。它经过分解关系形式来扫除个中不稳妥的数量重视,以减轻插入格外、删除相当、更新万分和数码冗余难点。

       三. 函数重视:轻便地说,对于涉及格局的七个属性格集X和Y,若X的任一取值能唯一鲜明Y的值,则称Y函数注重于X,记作X→Y。

       四. 非常常函数重视:对于涉及方式的三个属天性集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完全函数注重。

       六. 范式:指符合某1种等第的涉嫌形式的集中。在希图关周密据库时,依照满足注重关系须求的比不上定义为不一样的范式。

       七. 标准化:指将3个低超级范式的涉嫌方式,通过形式分解转换为多少个高一流范式的关系情势的成团的进度。

       八. 一NF:若关系格局的兼具属性都以不可分的骨干数据项,则该关系情势属于一NF。

       玖. 贰NF:1NF涉及情势一旦还要知足每1个非主属性完全函数依赖于码,则该关系形式属于二NF。

       十. 叁NF:若关系形式的每3个非主属性既不有的重视于码也不传递信赖于码,则该关系情势属于叁NF。

       1一. BCNF:若二个关系方式的每多少个决定因素都包括码,则该关系格局属于BCNF。

       12. 数据库设计:是指对于三个加以的应用情状,构造优化的数据库逻辑形式和物理结构,并由此建立数据库及其应用种类,使之力所能及使得地囤积和保管数据,知足各个用户的应用要求,包蕴新闻保管要求和多少操作须要。

       一三. 数据库设计的四个主导步骤:需要分析,概念结构划设想计,逻辑结构划设想计,物理结构划设想计,数据库施行,数据库运维和保卫安全。

       1肆. 定义结构划设想计:指将需要分析得到的用户必要抽象为音讯结构即概念模型的进度。相当于通过对用户须求进行综合、总结与虚无,变成3个单身于具体DBMS的概念模型。

       1伍. 逻辑结构划设想计:将概念结构模型(基本E-LX570图)调换为某些DBMS产品所支撑的数据模型相契合的逻辑结构,并对其举办优化。

       1六. 物理结构划设想计:指为2个加以的逻辑数据模型选用一个最适合应用情状的物理结构的进程。包涵设计数据库的积攒结构与存取方法。

       一七. 空洞:指对实际的人、物、事和概念举行人工管理,抽出所关怀的三只天性,忽略非本质的底细,并把那一个特征用各样概念准确地加以描述,这个概念组成了某种模型。       1八. 数据库设计必须遵照结构划设想计和作为设计相结合的规格。       1九. 数量字典重要归纳数据项、数据结构、数据流、数据存款和储蓄和管理过程多个部分。

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

       贰1. 有的 E-汉兰达图之间的争辨首要呈今后质量争辨、命名争论和结构争持七个地点。       2二. 数据库常用的存取方法包罗索引方法、聚簇方法和 HASH方法二种。

       二3. 规定数据存放地方和积累结构要求思虑的因素至关心注重要有: 存取时间、 存款和储蓄空间利用率和护卫代价等。

第二节

 

复制代码 代码如下:

二、细说数据库3范式

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

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

       同一列中无法有多少个值

       即实业中的某些属性不可能有多少个值也许不可能有再次的习性

       简单的讲,第1范式就是无重复的列。

       在别的四个关周详据库中,第1范式(壹NF)是对涉嫌格局的骨干要求,不满意第贰范式(一NF)的数据库就不是关周到据库

  

  二.二 第3范式(2NF)属性完全依赖于主键[免去部分子函数依赖]     

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

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

  为贯彻区分平常供给为表加上二个列,以存款和储蓄各样实例的旷世标记。 

  第二范式(2NF)须要实体的天性完全依靠于主关键字。所谓完全注重是指无法存在仅依靠主关键字1部分的品质,假使存在,那么那几个天性和主关键字的那1有些应该分离出来变成3个新的实业,新实体与原实体之间是1对多的涉及。为促成区分常常必要为表加上一个列,以存款和储蓄各种实例的旷世标志。一句话来讲,第二范式正是性质完全注重于主键。

  2.叁 第壹范式(叁NF)属性不信赖于任何非主属性[化解传递注重]

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

       一句话来讲,第1范式(3NF)供给2个数据库表中不包罗已在此外表中已包括的非主关键字新闻。

       举个例子,存在三个机构音信表,个中各类单位有单位编号(dept_id)、部门名称、部门简要介绍等新闻。那么在的职员和工人音讯表中列出机关编号后就不能够再将单位名称、部门简单介绍等与部门有关的消息再参与职员和工人新闻表中。借使不存在机构新闻表,则遵照第二范式(3NF)也理应创设它,不然就会有大批量的多少冗余。一言以蔽之,第1范式就是性质不信赖于任何非主属性。

  

  二.四具体实例分析

  上面列举一个学府的上学的小孩子系统的实例,以示多少个范式的行使。

  在规划数据库表结构此前,我们先明确一下要设计的始末包含这么些。学号、学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话等音讯。为了简单大家目前只思量那几个字段消息。大家对此这么些音讯,说关怀的难题有如下多少个方面。

       1)学生有那多少个基本消息 
       二)学生选了那些课,战绩是什么样 
       三)各种课的学分是多少 
       四)学生属于十分系,系的主导消息是如何。

       首先第二范式(1NF):数据库表中的字段都以单壹属性的,不可再分。这一个单一属性由主旨项目构成,包涵整型、实数、字符型、逻辑型、日期型等。在近期的其余关周详据库管理体系(DBMS)中,差异意你把数量库表的一列再分为二列或多列,由此做出的都是契合第一范式的数据库。 

       大家再思量第贰范式,把具备这几个音信放到一个表中(学号,学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话)下边存在如下的注重关系。 
       一)(学号)→ (姓名, 年龄,性别,系别,系办地址、系办电话) 
       2) (课程名称) → (学分) 
       三)(学号,课程)→ (学科战表)

  依据依赖关系大家得以把选课关系表SelectCourse改为如下七个表: 

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

       事实上,对照第1范式的供给,那就是满意第贰范式的数额库表,若不满意第一范式,会时有产生如下难点:
  (一)数据冗余: 同1门课程由n个学生选修,"学分"就再也n-二遍;同3个学生选修了m门课程,姓名和年龄就再次了m-3次。

  (二)更新非凡:壹)若调解了某门课程的学分,数据表中全部行的"学分"值都要翻新,不然会并发同样门课程学分分化的事态。 
                 二)如若要设立一门新的科目,临时还尚无人选修。那样,由于还一贯不"学号"关键字,课程名称和学分也无力回天记录入数据库。

  (三)删除非常 : 借使一堆学生早已造成课程的选修,这几个选修记录就相应从数据库表中删除。不过,与此同时,课程名称和学分新闻也被删除了。很鲜明,这也会招致插入极度。

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

      (学号)→ (姓名, 年龄,性别,系别,系办地址、系办电话) 
  然则还留存上边包车型大巴支配涉及 
       (学号) → (所在高校)→(高校地方, 高校电话) 
        即存在非关键字段"高校地方"、"大学电话"对主要字段"学号"的传递函数依赖。 
       它也会存在多少冗余、更新非常、插入分外和删除非凡的情况(那里就不具体分析了,参照第一范式中的分析)。遵照第三范式把学生关系表分为如下八个表就足以满意第三范式了:

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

SQL语句总括

1、相关概念

问题:
一、查询“00壹”课程比“00二”课程战绩高的具有学生的学号;
  select a.S# from (select s#,score from SC where C#='001') a,(selects#,score
  from SC where C#='002') b
  where a.score>b.score and a.s#=b.s#;
二、查询平均战绩当先五十几分的同学的学号和平均成绩;
    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
肆、查询姓“李”的导师的个数;
  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#) fromSC,Course,Teacher where  SC.C#=Course.C# and Teacher.T#=Course.T# andTeacher.Tname='叶平');
陆、查询学过“00壹”并且也学过数码“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# andSC_2.C#='002');
七、查询学过“叶平”老师所教的全部课的同桌的学号、姓名;
  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='叶平' groupby S# having count(SC.C#)=(select count(C#) from Course,Teacher  whereTeacher.T#=Course.T# and Tname='叶平'));
八、查询课程编号“002”的成就比课程编号“00一”课程低的有着同学的学号、姓名;
  Select S#,Sname from (select Student.S#,Student.Sname,score ,(selectscore 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;
九、查询全体科目战表小于伍20分的同校的学号、姓名;
  select S#,Sname
  from Student
  where S# not in (select Student.S# from Student,SC where S.S#=SC.S# andscore>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);
1一、查询至少有1门课与学号为“100一”的同室所学同样的同学的学号和人名;
    select S#,Sname from Student,SC where Student.S#=SC.S# andC# in select C# from SC where S#='1001';
1二、查询至少学过学号为“00一”同学全部1门课的别的同学学号和人名;
    select distinct SC.S#,Sname
    from Student,SC
    where Student.S#=SC.S# and C# in (select C# from SC whereS#='001');
一3、把“SC”表中“叶平”老师教的课的大海得拉巴改成为此课程的平分战表;
    update SC set score=(select avg(SC_2.score)
    from SC SC_2
    where SC_2.C#=SC.C# ) from Course,Teacher whereCourse.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='叶平');
1肆、查询和“100二”号的同窗学习的学科完全一样的其余同学学号和人名;
    select S# from SC where C# in (select C# from SC whereS#='1002')
    group by S# having count(*)=(select count(*) from SC whereS#='1002');
一伍、删除学习“叶平”老师课的SC表记录;
    Delect SC
    from course ,Teacher 
    where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平';
1陆、向SC表中插入一些记下,那个记录须要符合以下原则:未有上过编号“00三”课程的校友学号、二、
    号课的平分成绩;
    Insert SC select S#,'002',(Select avg(score)
    from SC where C#='002') from Student where S# not in (SelectS# from SC where C#='002');
一7、按平均战表从高到低显示全体学生的“数据库”、“公司管理”、“保加利亚语”三门的教程战绩,按如下情势显得: 学生ID,,数据库,公司管理,越南语,有效课程数,有效平均分
    SELECT S# as 学生ID
        ,(SELECT score FROM SC WHERESC.S#=t.S# AND C#='004') AS 数据库
        ,(SELECT score FROM SC WHERESC.S#=t.S# AND C#='00一') 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) 
1八、查询各科战表最高和最低的分:以如下格局展现:课程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#
                   );
1九、按各科平均战表从低到高和及格率的比重从高到低依次
    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)>=60THEN 1 ELSE 0 END)/COUNT(*) DESC
20、查询如下课程平均战绩和及格率的百分比(用"1行"呈现): 集团管理(001),马克思(002),OO&UML (003),数据库(004)
    SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0END)/SUM(CASE C# WHEN '00一' THEN 一 ELSE 0 END) AS 企管平均分
        ,100 * SUM(CASE WHEN C# = '001' ANDscore >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 一 ELSE 0 END)AS 公司管理及格百分数
        ,SUM(CASE WHEN C# = '002' THEN scoreELSE 0 END)/SUM(CASE C# WHEN '00二' THEN 一 ELSE 0 END) AS 马克思平均分
        ,100 * SUM(CASE WHEN C# = '002' ANDscore >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '00二' THEN 一 ELSE 0 END)AS 马克思及格百分数
        ,SUM(CASE WHEN C# = '003' THEN scoreELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分
        ,100 * SUM(CASE WHEN C# = '003' ANDscore >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '00三' THEN 1 ELSE 0 END)AS UML及格百分数
        ,SUM(CASE WHEN C# = '004' THEN scoreELSE 0 END)/SUM(CASE C# WHEN '00四' THEN 一 ELSE 0 END) AS 数据库平均分
        ,100 * SUM(CASE WHEN C# = '004' ANDscore >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '00四' THEN 1 ELSE 0 END)AS 数据库及格百分数
  FROM SC

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)。

 

陆、查询学过“001”并且也学过数码“002”课程的同室的学号、姓名;

1)SELECT

将资料从数据库中的表格内选出,七个根本字:从 (FROM) 数据库中的表格内选出 (SELECT)。语法为
SELECT "栏位名" FROM "表格名"。

       2. 外键:如果三个涉及的三个或1组属性引用(参照)了另二个关系的主键,则称这几个或那组属性为外码或外键(Foreign key)。

2一、查询不相同老师所教不相同科目平均分从高到低展现
  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
2二、查询如下课程成绩第 三 名到第 6名的学生成绩单:公司管理(00一),马克思(00二),UML (003),数据库(00四)
    [学生ID],[学员姓名],集团管理,马克思,UML,数据库,平均成绩
    SELECT  DISTINCT top 3
      SC.S# As 学生学号,
        Student.Sname AS 学生姓名 ,
      T一.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 SCAS T2
                     ON SC.S# = T2.S# AND T2.C# = '002'
            LEFT JOIN SCAS T3
                     ON SC.S# = T3.S# AND T3.C# = '003'
            LEFT JOIN SCAS 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 WITHTIES
           ISNULL(T1.score,0) ISNULL(T2.score,0) ISNULL(T3.score,0) ISNULL(T4.score,0)
      FROM sc
            LEFT JOIN scAS T1
                     ON sc.S# = T1.S# AND T1.C# = 'k1'
            LEFT JOIN scAS T2
                     ON sc.S# = T2.S# AND T2.C# = 'k2'
            LEFT JOIN scAS T3
                     ON sc.S# = T3.S# AND T3.C# = 'k3'
            LEFT JOIN scAS 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);

复制代码 代码如下:

2)DISTINCT

在上述 SELECT 关键词后增加多少个 DISTINCT 就能够去除选抽取来的栏位中的重复,从而做到求得那个表格/栏位内有怎样差异的值的效果。语法为
SELECT DISTINCT "栏位名" FROM "表格名"。

       三. 关全面据库: 根据关系模型建立的数据库称为关周密据库。 它是在某些应用领域的具备关乎的群集。

 

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. 涉嫌情势: 轻易地说,关系格局就是对关联的型的概念, 包罗涉及的品质构成、各属性的数据类型、 属性间的依据、 元组语义及完整性约束等。 关系是涉嫌形式在某1随时的气象或内容, 关系模型是型, 关系是值, 关系模型是静态的、 牢固的, 而关系是动态的、随时间不断变动的,因为涉及操作在持续地翻新着数据库中的数据。

二3、总括列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]
    SELECT SC.C# as 课程ID, Cname as 课程名称
        ,SUM(CASE WHEN score BETWEEN 85 AND100 THEN 1 ELSE 0 END) AS [100 - 85]
        ,SUM(CASE WHEN score BETWEEN 70 AND85 THEN 1 ELSE 0 END) AS [85

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

4)AND OR

上例中的 WHERE 指令能够被用来由表格中有规范地选拔资料。那么些规则大概是轻巧的 (像上1页的事例),也或然是犬牙相制的。复杂条件是由二或多个大致规范经过 AND 或是 O本田CR-V 的连日而成。语法为:
SELECT "栏位名"  FROM "表格名"  WHERE "轻松规范"  {[AND|OR] "轻便规范"}

       5. . 实体完整性:用于标记实体的唯1性。它需要着力关系必供给有二个可知标记元组唯一性的主键,主键不可能为空,也不得取重复值

  • 70]
            ,SUM(CASE WHEN score BETWEEN 60 AND70 THEN 1 ELSE 0 END) AS [70
  • 60]
            ,SUM(CASE WHEN score < 60 THEN 1ELSE 0 END) AS [60 -]
        FROM SC,Course
        where SC.C#=Course.C#
        GROUP BY SC.C#,Cname;  

复制代码 代码如下:

5)IN

在 SQL 中,在七个情景下会用到 IN  那一个命令;那1页将介绍当中之1:与 WHERE 有关的那多少个气象。在这些用法下,大家先行已清楚至少3个咱们要求的值,而大家将这么些知道的值都放入 IN  那一个子句。语法为:
SELECT "栏位名"  FROM "表格名"  WHERE "栏位名" IN ('值一', '值二', ...)  

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

二四、查询学平生均战绩及其排行
      SELECT 一 (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奥迪Q伍DE中华V BY 平均成绩 desc;
二伍、查询各科战绩前3名的记录:(不酌量战表并列意况)
      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 BYscore DESC
             )
      ORDER BY t1.C#;
2六、查询每门科目被选修的学生数
  select c#,count(S#) from sc group by C#;
贰七、查询出只选修了壹门科目的方方面面学员的学号和姓名
  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捌、查询男子、女人人数
    Select count(Ssex) as 男子人数 fromStudent group by Ssex having Ssex='男';
    Select count(Ssex) as 女子人数 fromStudent 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;;
3一、一9八三年落地的学生名单(注:Student表中Sage列的门类是datetime)
    select Sname,  CONVERT(char (11),DATEPART(year,Sage))as age
    from student
    where  CONVERT(char(11),DATEPART(year,Sage))='1981';
3二、查询每门课程的平分战绩,结果按平均战绩升序排列,平均成绩一样时,按学科号降序排列
    Select C#,Avg(score) from SC group by C# order byAvg(score),C# DESC ;
33、查询平均成绩超乎85的具备学员的学号、姓名和平均成绩
    select Sname,SC.S# ,avg(score)
    from Student,SC
    where Student.S#=SC.S# group by SC.S#,Snamehaving    avg(score)>85;
3四、查询课程名为“数据库”,且分数低于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;
3伍、查询全部学生的选课情形;
    SELECT SC.S#,SC.C#,Sname,Cname
    FROM SC,Student,Course
    where SC.S#=Student.S# and SC.C#=Course.C# ;
36、查询别的一门科目成绩在陆20分以上的全名、课程名称和分数;
    SELECT  distinctstudent.S#,student.Sname,SC.C#,SC.score
    FROM student,Sc
    WHERE SC.score>=70 AND SC.S#=student.S#;
三七、查询比不上格的科目,并按学科号从大到小排列
    select c# from sc where scor e <60 order by C# ;
3八、查询课程编号为00叁且课程成绩在柒拾陆分以上的上学的小孩子的学号和人名;
    select SC.S#,Student.Sname from SC,Student whereSC.S#=Student.S# and Score>80 and C#='003';
3九、求选了学科的学习者人数
    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=(selectmax(score)from SC where C#=C.C# );
四一、查询各样科目及相应的选修人数
    select count(*) from sc group by C#;
4二、查询不相同科目成绩一样的学生的学号、课程号、学生战表
  select distinct  A.S#,B.score from SC A  ,SC B whereA.Score=B.Score and A.C# <>B.C# ;
四叁、查询每门功战绩最佳的前两名
    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 BYscore DESC
             )
      ORDER BY t1.C#;
4四、总计每门课程的学员选修人数(超过十二人的科目才总计)。供给输出课程号和选修人数,查询结果按人口降序排列,查询结果按人头降序排列,若人数同样,按学科号升序排列 
    select  C# as 课程号,count(*) as 人数
    from  sc 
    group  by  C#
    order  by  count(*) desc,c# 
四伍、检索至少选修两门科目标学员学号
    select  S# 
    from  sc 
    group  by  s#
    having  count(*)  >  =  2
肆陆、查询全体学员都选修的科目标课程号和课程名
    select  C#,Cname 
    from  Course 
    where  C#  in  (select  c# from  sc group  by  c#) 
4七、查询没学过“叶平”老师助教的任一门学科的学员姓名
    select Sname from Student where S# not in (select S# fromCourse,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 (selectS# from SC where score <60 group by S# having count(*)>2)group by S#;
4玖、检索“00四”课程分数小于60,按分数降序排列的同窗学号
    select S# from SC where C#='004'and score <60 order byscore desc;
50、删除“00二”同学的“00一”课程的战绩
delete from Sc where S#='001'and C#='001';

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 '值二' 

       七. 用户定义的完整性:就是针对性某壹实际行使的多少必须满意的语义约束。包括非空、 唯1和布尔条件约束二种情状。

 

八、查询课程编号“00二”的战绩比课程编号“00一”课程低的兼具同学的学号、姓名;

7)LIKE

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

      2、紧要知识点

(三)

复制代码 代码如下:

8)ORDER BY

大家平时须求能够将抓出的素材做五个有类别的来得。这大概是由小往大 (ascending)  或是由大往小(descending)。在那种状态下,大家就能够运用 O安德拉DE帕杰罗 BY 那些命令来落成我们的目的。语法为:
SELECT "栏位名"  FROM "表格名 [WHERE "条件"] ORDER BY "栏位名" [ASC, DESC] 

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

 

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积。

问题讲述:
大旨用到上面八个关系表:
CARD     借书卡。   CNO 卡号,NAME  姓名,CLASS 班级
BOOKS    图书。     BNO书号,BNAME 书名,AUTHO索罗德 小编,P兰德酷路泽ICE 单价,QUANTITY 仓库储存册数
BOKoleosROW   借书记录。 CNO 借书卡号,BNO 书号,猎豹CS陆DATE 还书日期
备考:限定每人各种书只可以借一本;仓库储存册数随借书、还书而更改。
务求兑现如下1八个管理:
  一. 写出建立BO汉兰达ROW表的SQL语句,要求定义主码完整性约束和引用完整性约束。
  2. 搜索借书超过五本的读者,输出借书卡号及所借图书册数。
  叁. 查询借阅了"水浒"1书的读者,输出姓名及班级。
  四. 查询过期未还图书,输出借阅者(卡号)、书号及还书日期。
  5. 询问书名包蕴"网络"关键词的书本,输出书号、书名、笔者。
  六. 查询现成图书中价位最高的书籍,输出书名及笔者。
  7. 询问当前借了"总结方式"但尚未借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出。
  八. 将"C0一"班同学所借图书的还期都延长226日。
  9. 从BOOKS表中删去当前无人借阅的书本记录。
  拾.假若常常按书名查询图书音讯,请建立合适的目录。
  1一.在BO景逸SUVROW表上树立1个触发器,完结如下效果:如若读者借阅的书名是"数据库工夫及使用",就将该读者的借阅记录保留在BO安德拉ROW_SAVE表中(注ORROW_SAVE表结构同BOCR-VROW表)。
  12.起家三个视图,显示"力01"班学员的借书音讯(只供给出示姓名和书名)。
  一3.查询当前还要借有"总计方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出。
  1四.假定在建BOOKS表时未有概念主码,写出为BOOKS表追加定义主码的讲话。
  1伍.对CAWranglerD表做如下修改:
    a. 将NAME最大列宽扩展到拾1个字符(假定原为四个字符)。
    b. 为该表扩展1列NAME(系名),可变长,最大1几个字符。

9、查询全数课程成绩小于伍15分的同校的学号、姓名;

10)COUNT

以此首要词能够帮本人大家总计有多少笔资料被选出来,语法为:
SELECT COUNT("栏位名") FROM "表格名"

      3.关联情势是对涉及的叙述,伍元组格局化表示为:Lacrosse(U,D,DOM,F),在那之中

 

复制代码 代码如下:

11)GROUP BY

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

            R —— 关系名

  1. 写出建立BOOdysseyROW表的SQL语句,必要定义主码完整性约束和引用完整性约束
    --达成代码:
    CREATE TABLE BORROW(
        CNO int FOREIGN KEY REFERENCES CARD(CNO),
        BNO int FOREIGN KEY REFERENCES BOOKS(BNO),
        RDATE datetime,
        PRIMARY KEY(CNO,BNO))

     

  2. 寻觅借书抢先5本的读者,输出借书卡号及所借图书册数
    --落成代码:
    SELECT CNO,借图书册数=COUNT(*)
    FROM BORROW
    GROUP BY CNO
    HAVING COUNT(*)>5

     

  3. 询问借阅了"水浒"1书的读者,输出姓名及班级
    --达成代码:
    SELECT * FROM CARD c
    WHERE EXISTS(
        SELECT * FROM BORROW a,BOOKS b
        WHERE a.BNO=b.BNO
            AND b.BNAME=N'水浒'
            AND a.CNO=c.CNO)

     

  4. 询问过期未还图书,输出借阅者(卡号)、书号及还书日期
    --落成代码:
    SELECT * FROM BORROW
    WHERE RDATE<GETDATE()

     

  5. 询问书名包涵"网络"关键词的图书,输出书号、书名、作者
    --达成代码:
    SELECT BNO,BNAME,AUTHOR FROM BOOKS
    WHERE BNAME LIKE N'%网络%'

     

  6. 询问现成图书中价位最高的图书,输出书名及作者
    --达成代码:
    SELECT BNO,BNAME,AUTHOR FROM BOOKS
    WHERE PRICE=(
        SELECT MAX(PRICE) FROM BOOKS)

     

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 "栏位一", SUM("栏位贰")  FROM "表格名"  GROUP BY "栏位一"  HAVING (函数条件)  

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

7. 查询当前借了"总括方式"但未有借"计算方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出
--实当代码:
SELECT a.CNO
FROM BORROW a,BOOKS b
WHERE a.BNO=b.BNO AND b.BNAME=N'总计办法'
    AND NOT EXISTS(
        SELECT * FROM BORROW aa,BOOKS bb
        WHERE aa.BNO=bb.BNO
            ANDbb.BNAME=N'总计办法习题集'
            ANDaa.CNO=a.CNO)
ORDER BY a.CNO DESC

十、查询未有学全全部课的同校的学号、姓名;

13)ALIAS

小编们可以由此ALIAS为列名称和表名称内定别称,语法为:
SELECT "表格别称"."栏位一" "栏位小名"  FROM "表格名" "表格别名"  

  • *

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

 

复制代码 代码如下:

问题:

壹、查询“00壹”课程比“00贰”课程成绩高的有着学员的学号;
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#;

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

三、查询全数同学的学号、姓名、选课数、总成绩;
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

四、查询姓“李”的司令员的个数;
select count(distinct(Tname))
from Teacher
where Tname like ‘李%’;

伍、查询没学过“叶平”老师课的同校的学号、姓名;
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、查询学过“00一”并且也学过数码“00②”课程的校友的学号、姓名;
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=’叶平’));

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

九、查询未有学全全数课的同班的学号、姓名;
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);

十、查询至少有1门课与学号为“拾0一”的同学所学相同的同学的学号和人名;
select S#,Sname
from Student,SC
where Student.S#=SC.S# and C# in (select C# from SC where S#='1001');

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

1二、查询各科战绩最高和压低的分:以如下方式突显:课程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# );

1③、查询学平生均战绩及其排名
SELECT 一 (SELECT COUNT( distinct 平均成绩)
FROM (SELECT S#,AVG(score) 平均成绩
FROM SC
GROUP BY S# ) T1
WHERE 平均战表 > T贰.平均战表) 排名, S# 学生学号,平均战表
FROM (SELECT S#,AVG(score) 平均战绩 FROM SC GROUP BY S# ) T2
OTiguanDER BY 平均成绩 desc;

1四、查询各科战表前三名的记录:(不缅想成绩并列意况)
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#;

一伍、查询每门功成绩最棒的前两名
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 —— 属性向域的画面群集

  1. 将"C0一"班同学所借图书的还期都延长一周
    --完毕代码:
    UPDATE b SET RDATE=DATEADD(Day,7,b.RDATE)
    FROM CARD a,BORROW b
    WHERE a.CNO=b.CNO
        AND a.CLASS=N'C01'

     

  2. 从BOOKS表中删除当前无人借阅的图书记录
    --落成代码:
    DELETE A FROM BOOKS a
    WHERE NOT EXISTS(
        SELECT * FROM BORROW
        WHERE BNO=a.BNO)

     

  3. 设若平常按书名查询图书音信,请建立适宜的目录
    --落成代码:
    CREATE CLUSTERED INDEX IDX_BOOKS_BNAME ON BOOKS(BNAME)

     

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 —— 属性间的多寡信赖关系集合

1一. 在BO安德拉ROW表上树立一个触发器,落成如下效果:假诺读者借阅的书名是"数据库本领及运用",就将该读者的借阅记录保留在BOHummerH二ROW_SAVE表中(注ORROW_SAVE表结构同BO凯雷德ROW表)
--完毕代码:
CREATE TRIGGER TR_SAVE ON BORROW
FOR INSERT,UPDATE
AS
IF @@ROWCOUNT>0
INSERT BORROW_SAVE SELECT i.*
FROM INSERTED i,BOOKS b
WHERE i.BNO=b.BNO
    AND b.BNAME=N'数据库手艺及应用'

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

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

 

复制代码 代码如下:

澳门新萄京官方网站 4

  1. 建立3个视图,突显"力0一"班学员的借书音讯(只必要出示姓名和书名)
    --完成代码:
    CREATE VIEW V_VIEW
    AS
    SELECT a.NAME,b.BNAME
    FROM BORROW ab,CARD a,BOOKS b
    WHERE ab.CNO=a.CNO
        AND ab.BNO=b.BNO
        AND a.CLASS=N'力01' 

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

第三节

一三. 询问当前还要借有"总计方法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出
--完毕代码:
SELECT a.CNO
FROM BORROW a,BOOKS b
WHERE a.BNO=b.BNO
    AND b.BNAME IN(N'总括方法',N'组合数学')
GROUP BY a.CNO
HAVING COUNT(*)=2
ORDER BY a.CNO DESC

1二、查询至少学过学号为“00壹”同学全体一门课的别的同学学号和人名;

1、相关概念

 

复制代码 代码如下:

       1. SQL:结构化查询语言的简称, 是关周全据库的正规化语言。SQL 是1种通用的、 功效极强的关周详据库语言, 是对关周全据存取的标准接口, 也是不一致数据库系统里头互操作的底子。集数据查询、数据操作、数据定义、和多少调节效果于一体。

  1. 一旦在建BOOKS表时未有概念主码,写出为BOOKS表追加定义主码的说话
    --达成代码:
    ALTER TABLE BOOKS ADD PRIMARY KEY(BNO) 

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

       二. 数额定义:数据定义作用包含形式定义、表定义、视图和目录的定义。

15.一 将NAME最大列宽扩张到10个字符(假定原为伍个字符)
--落成代码:
ALTER TABLE CARD ALTER COLUMN NAME varchar(10)

1叁、把“SC”表中“叶平”老师教的课的战绩都改造为此课程的平均成绩;

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

 

复制代码 代码如下:

      贰、首要知识点

15.二 为该表扩展一列NAME(系名),可变长,最大二十个字符
--完毕代码:
ALTER TABLE CARD ADD 系名 varchar(20)

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='叶平');

       一. SQL 数据定义语句的操作对象有:格局、表、视图和目录。
       2. SQL 数据定义语句的一声令下动词是:CREATE、DROP 和 ALTE中华V。
       叁. 普拉多DBMS 中索引一般选用 B 树或 HASH 来贯彻。
       四. 索引能够分为唯一索引、非唯一索引和聚簇索引三体系型。

 

1四、查询和“100二”号的校友学习的学科完全一样的别的同学学号和人名;

澳门新萄京官方网站 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 <表名>

(四)

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

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

 

复制代码 代码如下:

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

标题讲述:
为治本岗位业务培养和磨炼新闻,建立一个表:
S (S#,SN,SD,SA)   S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄
C (C#,CN )       C#,CN       分别代表课程编号、课程名称
SC ( S#,C#,G )    S#,C#,G     分别表示学号、所选修的科目编号、学习成绩

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

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

 

16、向SC表中插入一些笔录,那么些记录需求符合以下原则:未有上过编号“00三”课程的同班学号、二、
号课的平分成绩;

其中<数据类型>能够是数据库系统支持的种种数据类型,包含长度和精度。 

供给达成如下几个管理:
  1. 选拔专门的工作SQL嵌套语句询问选修课程名称叫’税收基础’的学员学号和人名
  二. 采取专门的学问SQL嵌套语句询问选修课程编号为’C二’的上学的儿童姓名和所属单位
  3. 用到专门的工作SQL嵌套语句询问不选修课程编号为’C伍’的学生姓名和所属单位
  肆. 施用专门的职业SQL嵌套语句询问选修全体课程的学生姓名和所属单位
  5. 询问选修了学科的学生人数
  六. 询问选修课程超越5门的学生学号和所属单位

复制代码 代码如下:

    列级完整性约束为针对单个列(本列)的完整性约束, 包涵 PPAJEROIMA逍客Y 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');

    表级完整性约束可以是基于表中多列的羁绊,包含 PLANDIMA哈弗Y KEY ( 列名列表) 、FOREIGN KEY REFERENCES 表名(列名) 等。

  1. 行使正规SQL嵌套语句询问选修课程名称叫’税收基础’的学生学号和姓名
    --完成代码:
    SELECT SN,SD FROM S
    WHERE [S#] IN(
        SELECT [S#] FROM C,SC
        WHERE C.[C#]=SC.[C#]
            AND CN=N'税收基础')

     

  2. 使用正规SQL嵌套语句询问选修课程编号为’C二’的上学的小孩子姓名和所属单位
    --完成代码:
    SELECT S.SN,S.SD FROM S,SC
    WHERE S.[S#]=SC.[S#]
        AND SC.[C#]='C2'

     

  3. 采纳标准SQL嵌套语句询问不选修课程编号为’C伍’的学员姓名和所属单位
    --完结代码:
    SELECT SN,SD FROM S
    WHERE [S#] NOT IN(
        SELECT [S#] FROM SC
        WHERE [C#]='C5')

     

  4. 选择正规SQL嵌套语句询问选修全部科目标学生姓名和所属单位
    --落成代码:
    SELECT SN,SD FROM S
    WHERE [S#] IN(
        SELECT [S#] FROM SC
            RIGHT JOIN C ON SC.[C#]=C.[C#]
        GROUP BY [S#]
        HAVING COUNT(*)=COUNT(DISTINCT [S#]))

     

  5. 询问选修了课程的上学的小孩子人数
    --落成代码:
    SELECT 学员人数=COUNT(DISTINCT [S#]) FROM SC

     

  6. 询问选修课程超越伍门的上学的儿童学号和所属单位
    --完成代码:
    SELECT SN,SD FROM S
    WHERE [S#] IN(
        SELECT [S#] FROM SC
        GROUP BY [S#]
        HAVING COUNT(DISTINCT [C#])>5)

     

一柒、按平均成绩从高到低展现全数学生的“数据库”、“集团处理”、“葡萄牙语”三门的教程战绩,按如下方式显得: 学生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#='00一') 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 <表名> (<列名列表> ) ;

1 SQLSE凯雷德VE途达管理有的

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

其中UNIQUE:表示成立唯一索引,缺省为非唯一索引;

 

复制代码 代码如下:

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

一请讲出身份验证格局与登入帐号的关联及怎么着用各个帐号进行登入,并画出暗示图
二 请讲出登陆帐号、数据库用户及数据库角色里面的涉嫌,并画出暗示图
三请讲出数据库用户、数据库剧中人物与数据库对象时期的涉及,并画出直接对用户授权与间接对用户授权(系统权限与对象权限)的格局
四请讲出服务器角色、数据库角色、标准剧中人物与应用程序剧中人物的差距与认证其权力的措施
伍 请讲出数据库还原模型对数据库的震慑
六 有四个实行器重职责的数据库,请设计一个数据库备份战略
7 请使用文件与公事组苏醒的措施恢复数据库
八 请使用职业日志恢复生机数据库到二个岁月点
九 请设计作业进展周期性的备份数据库
10 怎么着监督数据库的隔阂,并促成数据库的死锁测试
1一 怎么样监督数据库的运动,并能使用索引优化向导生成索引
12 掌握数据库框图的机能并得以设计表与表之间的涉嫌

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,表示升/降序,缺省为升序。多列时则按为浩如烟海排序。

 

1⑨、按各科平均成绩从低到高和及格率的比例从高到低依次

        捌. SQL 查询语句的一般格式为

一 有订单表,供给达成它的数码,格式如下:20001十三千1……二零零零2203999九等

复制代码 代码如下:

              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> ]

二有表T一,T2,现成1业务,在向表T1添扩充少时,同时也不可能不向T二也拉长数据,怎么样促成该工作

20、查询如下课程平均成绩和及格率的比重(用"一行"呈现): 集团管理(00一),Marx(00二),OO&UML (003),数据库(004)

              [ GROUP BY <属性列表 一> [ HAVING <条件表明式 二 > ] ]

 

复制代码 代码如下:

              [ O奥迪Q3DE中华V BY <属性列表 二> [ ASC|DESC ] ] ;

3怎样向T第11中学的编号字段(codevarchar(20))增多两万条记下,不充许重复,规则如下:编号的数据必须从小写的a-z之间取值

SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '00壹' THEN 一 ELSE 0 END) AS 公司管理平均分
,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '00一' THEN 1 ELSE 0 END) AS 集团管理及格百分数
,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '00贰' THEN 1 ELSE 0 END) AS 马克思平均分
,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '00贰' THEN 壹 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# = '00三' THEN 一 ELSE 0 END) AS UML及格百分数
,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '00四' THEN 1 ELSE 0 END) AS 数据库平均分
,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '00四' THEN 一 ELSE 0 END) AS 数据库及格百分数
FROM SC

其中

 

二一、查询不一致老师所教不相同科目平均分从高到低展现

      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

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

五 怎么样求表中相邻的两条记下的某字段的值之差

2二、查询如下课程战表第 三 名到第 陆名的学生战绩单:公司管理(00一),马克思(00贰),UML (00叁),数据库(00四)
[学生ID],[学员姓名],企管,马克思,UML,数据库,平均成绩

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

 

复制代码 代码如下:

      规格发挥式 **2**:包罗关系或逻辑运算符的表达式,代表分组条件。

6 哪些总计数据库中负有用户表的多寡,显示格式如下:

SELECT DISTINCT top 3
SC.S# As 学生学号,
Student.Sname AS 学生姓名 ,
T一.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>:二个或逗号分隔的四个列名。

 

贰三、总计列印各科战表,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]

      <属性列表 二>: 叁个或逗号分隔的四个列名, 每一个列名后可跟 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;

第四节

  sales      23

二四、查询学一生均成绩及其排行

一、相关概念和知识

 

复制代码 代码如下:

       一.触发器是用户定义在基本表上的一类由事件驱动的万分进度。由服务器自动激活, 能施行特别复杂的自己切磋和操作,具备越来越小巧和更有力的数码调节才干。使用 CREATE T翼虎IGGEXC90 命令建立触发器。

7 怎样删除数据库中的全数用户表(表与表之间有外键关系)

SELECT 壹 (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
OHavalDE奇骏 BY 平均成绩 desc;

       二.管理器种类设有本领安全、管理安全和安插法律3类安全性难点。

 

二5、查询各科成绩前3名的笔录:(不考虑战绩并列情状)

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

8 表A editor_id lb2_id
123 000
123 003
123 003
456 007
456 006
表B lb2_id lb2_name
000 a
003 b
006 c
007 d
显示 a 共1条 (表A内lb2_id为000的条数)
b 共2条(表A内lb2_id为003的条数)

复制代码 代码如下:

       四. 常用存取调控方法包罗自己作主存取调整(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#;

       伍. 自己作主存取调节(DAC)的 SQL 语句包含 GRANT 和 REVOKE 七个。 用户权限由数据对象和操作类型两局地构成。

9职员景况表(employee):里面有一字段学问程度(wh):包含多样意况(本科以上,职专,高级中学,初级中学以下),以后本人要基于年龄字段查询总计出:表中文化程度为本科以上,大专,高级中学,初级中学以下,各有几人,占总人数多少。

澳门新萄京官方网站数据库及SQL,数据库基本知识。贰陆、查询每门科目被选修的学员数

澳门新萄京官方网站 6

 

复制代码 代码如下:

       陆. 常见SQL 自主权力决定命令和例子。
         一) 把对 Student 和 Course 表的一切权力授予全体用户。
              GRANT ALL PRIVILIGES ON TABLE Student,Course TO PUBLIC ;
         二) 把对 Student 表的查询权和人名修改权授予用户 U四。
              GRANT SELECT,UPDATE(Sname) ON TABLE Student TO U4 ;
         三) 把对 SC 表的插入权限授予 U伍 用户,并同意他传播该权限。
              GRANT INSERT ON TABLE SC TO U5 WITH GRANT OPTION ;
         四) 把用户 U5 对 SC 表的 INSERT 权限收回,同时裁撤被他传播出去的授权。
              REVOKE INSERT ON TABLE SC FROM U5 CASCADE ;
         伍) 创制3个剧中人物 酷威一,并使其对 Student 表具备数据查询和立异权限。
              CREATE ROLE R1;
              GRANT SELECT,UPDATE ON TABLE Student TO R1;
         陆) 对修改 Student 表结构的操作实行审计。
              AUDIT ALTER ON Student ;

SELECT wh AS 学历,age as 年龄, Count(*) AS 人数,

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

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

 

二七、查询出只选修了1门课程的满贯上学的儿童的学号和人名

数据库知识总计(二)范式

 1、相关概念和知识点

       一.数额正视:反映1个涉及之中属性与性子之间的封锁关系,是切实世界属性间相互交换的肤浅,属于数据内在的属性和语义的反映。
       二. 典型化理论:是用来设计优秀的涉嫌情势的中坚理论。它通过分解关系情势来解除其中不适合的多寡正视,以消除插入极度、删除卓殊、更新相当和数据冗余难题。
       三. 函数重视:轻便地说,对于涉嫌方式的三个属性子集X和Y,若X的任一取值能唯一明确Y的值,则称Y函数注重于X,记作X→Y。
       4. 非通常函数依赖:对于涉嫌情势的多个属特性集X和Y,假若X→Y,但Y!⊆X,则称X→Y为非日常函数依赖;假设X→Y,但Y⊆X,则称X→Y为非通常函数正视。
       伍. 一心函数依赖:对于涉嫌格局的四个属脾气集X和Y,借使X→Y,并且对于X的别的一个真子集X',都不曾X'→Y,则称Y对X完全函数重视。
       陆. 范式:指符合某一种级其他关联方式的聚众。在设计关周全据库时,依据满意正视关系必要的两样定义为差别的范式。
       柒. 规范化:指将贰个低一级范式的关系形式,通过方式分解转换为多少个高顶尖范式的涉嫌格局的联谊的长河。
       捌. 1NF:若关系格局的具备属性皆以不可分的中坚数据项,则该关系格局属于一NF。
       玖. 二NF:一NF事关格局1旦还要满意每3个非主属性完全函数依赖于码,则该关系情势属于二NF。
       十. 3NF:若关系形式的每三个非主属性既不有的借助于码也不传递注重于码,则该关系情势属于3NF。
       11. BCNF:若三个提到形式的每三个决定因素都包罗码,则该关系情势属于BCNF。
       1二. 数据库设计:是指对于三个加以的应用情况,构造优化的数据库逻辑形式和情理结构,并就此建立数据库及其应用种类,使之能够行得通地囤积和管理数据,满意种种用户的利用需要,包涵音讯保管供给和多少操作供给。
       一三. 数据库设计的多少个着力步骤:须要分析,概念结构划设想计,逻辑结构划设想计,物理结构设计,数据库推行,数据库运转和保卫安全。
       1四. 定义结构划设想计:指将供给分析获得的用户需求抽象为音信结构即概念模型的历程。也正是透过对用户必要进行汇总、归咎与画饼充饥,产生3个独自于实际DBMS的概念模型。
       15. 逻辑结构划设想计:将定义结构模型(基本E-奇骏图)转变为有个别DBMS产品所帮忙的数据模型相契合的逻辑结构,并对其开始展览优化。
       1陆. 概略结构划设想计:指为三个加以的逻辑数据模型接纳三个最适合应用情况的物理构造的进程。包蕴安顿数据库的蕴藏结构与存取方法。
       壹柒. 空洞:指对实际的人、物、事和定义举行人工管理,抽取所关切的协同性格,忽略非本质的底细,并把那几个特点用各类概念正确地加以描述,这么些概念组成了某种模型。

       1捌. 数据库设计必须依据结构划设想计和行为设计相结合的条件。

       19. 数目字典首要回顾数据项、数据结构、数据流、数据存款和储蓄和管理进程七个部分。
       20. 二种常用抽象方法是分类、聚集和包蕴。
       二一. 部分 E-Odyssey 图之间的争辩首要呈未来性质争论、命名争执和结构争持八个方面。

       2二. 数据库常用的存取方法包罗索引方法、聚簇方法和 HASH方法二种。
       2三. 显明数据存放地点和存款和储蓄结构亟待思考的因素至关心重视要有: 存取时间、 存款和储蓄空间利用率和维护代价等。

二、细说数据库三范式

2.一 第三范式(一NF)无重复的列

       第一范式(一NF)中数据库表的每壹列都以不可分割的基本数据项
       同一列中不能有多个值
       即实体中的某些属性不可能有八个值可能不能够有双重的品质。
       简单来讲,第三范式就是无重复的列。

       在别的四个关周详据库中,第二范式(一NF)是对涉及方式的基本供给,不满足第二范式(一NF)的数据库就不是关全面据库。

2.二 第1范式(2NF)属性完全正视于主键[破除部分子函数依赖]

      满意第一范式(贰NF)必须先满足第贰范式(一NF)。

      第3范式(二NF)须要数据库表中的每一种实例或行必须可以被惟一地分别。

      为促成区分平时须要为表加上四个列,以存款和储蓄各样实例的绝世标记。 
      第3范式(二NF)要求实体的习性完全信赖于主关键字。所谓完全依附是指无法存在仅依附主关键字壹部分的质量,即使存在,那么这些本性和主关键字的那1有的应该分离出来产生二个新的实业,新实体与原实体之间是一对多的涉嫌。为落成区分日常供给为表加上叁个列,以存款和储蓄各类实例的惟一标志。简单来说,第贰范式正是性质完全凭仗于主键。
2.叁 第3范式(三NF)属性不注重于别的非主属性[扫除传递依赖]

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

      一句话来说,第三范式(3NF)须求三个数据库表中不分包已在别的表中已包括的非主关键字音讯。

      举个例子,存在三个部门新闻表,在那之中每个机关有机关编号(dept_id)、部门名称、部门简要介绍等音讯。那么在的职员和工人音信表中列出机关编号后就不能再将机构名称、部门简单介绍等与单位关于的消息再投入职员和工人消息表中。假设不存在机构消息表,则基于第一范式(3NF)也应有塑造它,不然就会有恢宏的数量冗余。一言以蔽之,第二范式正是性质不信赖于别的非主属性。

②.4具体实例分析

      下边列举三个学院和学校的学习者系统的实例,以示多少个范式的使用。

       在计划数据库表结构在此以前,大家先鲜明一下要统一希图的剧情包含那贰个。学号、学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话等音讯。为了轻易大家权且只考虑那几个字段消息。大家对此这个音讯,说关怀的主题素材有如下多少个地点。

       一)学生有那多少个基本音信 
       2)学生选了那3个课,战绩是怎么样 
       3)每一种课的学分是有点 
       四)学生属于分外系,系的为主音讯是如何。

       先是第二范式(一NF):数据库表中的字段都以单壹属性的,不可再分。这几个单1属性由中央类型构成,包括整型、实数、字符型、逻辑型、日期型等。在目前的其余关全面据库管理体系(DBMS)中,不一样意你把数量库表的壹列再分为二列或多列,因而做出的都以吻合第1范式的数据库。 

       大家再思量第3范式,把全体这个新闻放到二个表中(学号,学生姓名、年龄、性别、课程、课程学分、系别、学科成绩,系办地址、系办电话)上边存在如下的重视关系。 
       一)(学号)→ (姓名, 年龄,性别,系别,系办地址、系办电话) 
       贰) (课程名称) → (学分) 
       三)(学号,课程)→ (学科战表)

依靠依赖关系大家能够把选课关系表SelectCourse改为如下八个表: 

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

       事实上,对照第3范式的渴求,那便是满意第1范式的数码库表,若不知足第3范式,会产生如下难题 
数据冗余: 同一门课程由n个学生选修,"学分"就再次n-三回;同多少个学员选修了m门课程,姓名和年龄就重新了m-三回。

更新万分: 壹)若调度了某门课程的学分,数据表中全部行的"学分"值都要更新,不然会并发同样门科目学分不相同的气象。 
                 2)若是要设置一门新的课程,临时还尚无人选修。那样,由于还平素不"学号"关键字,课程名称和学分也无力回天记录入数据库。

删除格外 : 若是一群学员已经到位课程的选修,那一个选修记录就应该从数据库表中删除。可是,与此同时,课程名称和学分音讯也被剔除了。很明朗,这也会促成插入万分。

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

      (学号)→ (姓名, 年龄,性别,系别,系办地址、系办电话) 
只是还设有下边包车型大巴垄断(monopoly)涉及 
       (学号) → (所在高校)→(高校地点, 学院电话) 
        即存在非关键字段"高校地点"、"高校电话"对重点字段"学号"的传递函数信赖。 
       它也会存在数据冗余、更新万分、插入极度和删除格外的事态(这里就不具体分析了,参照第3范式中的分析)。依照第1范式把学生关系表分为如下三个表就能够满意第贰范式了:

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

SQL语句计算

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

      Count(*) * 100 /(SELECT Count(*) FROMemployee) AS 百分比

复制代码 代码如下:

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 "表格名"。

FROM employee GROUP BY wh,age

2八、查询男人、女孩子人数

3)WHERE

本条关键词能够匡助大家选取性地抓资料,而不是全抽取来。语法为
SELECT "栏位名" FROM "表格名" WHERE "条件" 

 

复制代码 代码如下:

4)AND OR

上例中的 WHERE 指令可以被用来由表格中有标准化地选用资料。那一个规格恐怕是简单的 (像上壹页的事例),也恐怕是错综复杂的。复杂条件是由2或多少个大致标准经过 AND 或是 ORAV4 的三番五次而成。语法为:
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  那么些命令;那1页将介绍当中之一:与 WHERE 有关的那些意况。在这几个用法下,大家事先已知晓至少2个我们供给的值,而小编辈将那几个知道的值都放入 IN  那几个子句。语法为:
SELECT "栏位名"  FROM "表格名"  WHERE "栏位名" IN ('值一', '值二', ...)  

 

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

6)BETWEEN

IN 那些命令能够让大家遵照一或数个不接二连三(discrete)的值的界定之内抓出资料库中的值,而 BETWEEN 则是让我们得以行使2个限制 (range)  内抓出资料库中的值,语法为:
SELECT "栏位名"  FROM "表格名" WHERE "栏位名" BETWEEN '值一' AND '值二' 

本科以上  20     3四          1肆

复制代码 代码如下:

7)LIKE

LIKE 是另贰个在 WHERE  子句中会用到的指令。基本上, LIKE  能让我们依照三个方式(pattern) 来找寻我们要的材料。语法为:
SELECT "栏位名"  FROM "表格名"  WHERE "栏位名" LIKE {模式} 

 

SELECT Sname FROM Student WHERE Sname like '张%';

8)ORDER BY

咱俩平日索要能够将抓出的素材做三个有系统的显示。这大概是由小往大 (ascending)  或是由大往小(descending)。在这种气象下,大家就足以选拔O瑞虎DEXC60 BY 这些命令来达成我们的目标。语法为:
SELECT "栏位名"  FROM "表格名 [WHERE "条件"] ORDER BY "栏位名" [ASC, DESC] 

大专      20     33          13

30、查询同名同性学生名单,并计算同名家数

9)函数

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

 

复制代码 代码如下:

10)COUNT

本条主要词能够帮本身大家总结有稍许笔资料被选出来,语法为:
SELECT COUNT("栏位名") FROM "表格名"

高中      20     33          13

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

11)GROUP BY

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

 

3壹、1983年降生的学生名单(注:Student表中Sage列的门类是datetime)

12)HAVING

该重大词可以支持大家对函数爆发的值来设定条件。语法为:
SELECT "栏位1", SUM("栏位2")  FROM "表格名"  GROUP BY "栏位1"  HAVING (函数条件)  

初中以下  20     拾0        40

复制代码 代码如下:

13)ALIAS

咱俩得以由此ALIAS为列名称和表名称钦赐别称,语法为:
SELECT "表格别称"."栏位壹" "栏位别称"  FROM "表格名" "表格别称"  

上面为三个例子,通过它大家相应能很好地操纵以上首要词的应用方法。

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

问题:
一、查询“00壹”课程比“00二”课程战表高的全数学生的学号;
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、查询平均成绩超越五拾八分的同桌的学号和平均成绩;
select S#,avg(score)
from sc
group by S# having avg(score) >60;

三、查询全体同学的学号、姓名、选课数、总成绩;
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

四、查询姓“李”的良师的个数;
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=’叶平’);

陆、查询学过“00壹”并且也学过数码“00二”课程的同校的学号、姓名;
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=’叶平’));

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

玖、查询未有学全全部课的同班的学号、姓名;
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、查询至少有一门课与学号为“100一”的同室所学相同的同学的学号和人名;
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='叶平';

1二、查询各科战绩最高和最低的分:以如下方式呈现:课程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# );

一三、查询学一生均战绩及其排行
SELECT 一 (SELECT COUNT( distinct 平均成绩)
FROM (SELECT S#,AVG(score) 平均战表
FROM SC
GROUP BY S# ) T1
WHERE 平均战表 > T二.平均战绩) 排名, S# 学生学号,平均战绩
FROM (SELECT S#,AVG(score) 平均成绩 FROM SC GROUP BY S# ) T2
O中华VDER BY 平均成绩 desc;

1肆、查询各科战绩前三名的笔录:(不考虑战绩并列情形)
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#;

一五、查询每门功战表最棒的前两名
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';

本科以上  贰1      50         20

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

 

复制代码 代码如下:

10 现在有七个表student:(FID 学生号,FName  姓名),

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

 

33、查询平均成绩超过八伍的具备学生的学号、姓名和平均成绩

subject:(FSubID  课程号,FSubName 课程名), 

复制代码 代码如下:

 

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

Score(FScoreId  成绩记录号,FSubID   课程号,FStdID    学生号,FScore    战表)

3四、查询课程名称叫“数据库”,且分数低于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# ;

张萨  78    67   89    76

3陆、查询其余一门学科战绩在七十5分以上的全名、课程名称和分数;

 

复制代码 代码如下:

王强  89    67   84    96 

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

 

3七、查询比不上格的学科,并按学科号从大到小排列

SELECT a.FName AS 姓名,

复制代码 代码如下:

 

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

      英语 = SUM(CASEb.FSubName WHEN '英语' THEN c.FScore END),

38、查询课程编号为00三且课程战绩在八十几分以上的上学的儿童的学号和姓名;

 

复制代码 代码如下:

      数学 = SUM(CASEb.FSubName WHEN '数学' THEN c.FScore END),

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

 

3玖、求选了课程的学生人数

      语文 = SUM(CASEb.FSubName WHEN '语文' THEN c.FScore END),

复制代码 代码如下:

 

select count(*) from sc;

      历史 = SUM(CASEb.FSubName WHEN '历史' THEN c.FScore END)

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

 

复制代码 代码如下:

FROM Student a, Subject b, Score c

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# );

 

四1、查询各种科目及相应的选修人数

WHERE a.FID = c.FStdId AND b.FSubID = c.FsubID GROUP BY a.FName

复制代码 代码如下:

 

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

11 原始表的多少如下:

4贰、查询不相同学科成绩一样的学员的学号、课程号、学生战绩

 

复制代码 代码如下:

PID PTime    PNo

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

 

4三、查询每门功成绩最佳的前两名

111111    2003-01-2804:30:09     

复制代码 代码如下:

 

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#;

111111    2003-01-28 18:30:00

4四、总括每门课程的学习者选修人数(超越拾壹位的学科才总结)。必要输出课程号和选修人数,查询结果按人口降序排列,查询结果按人头降序排列,若人数同样,按学科号升序排列

 

复制代码 代码如下:

222222    2003-01-2804:31:09     

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

 

4伍、检索至少选修两门学科的学童学号

333333    2003-01-2804:32:09     

复制代码 代码如下:

 

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

111111    2003-02-0903:35:25     

四陆、查询全数上学的小孩子都选修的课程的课程号和学科名

 

复制代码 代码如下:

222222    2003-02-0903:36:25     

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

 

47、查询没学过“叶平”老师助教的任1门科目的上学的小孩子姓名

333333    2003-02-0903:37:25     

复制代码 代码如下:

 

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='叶平');

询问生成表

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

 

复制代码 代码如下:

PDate       111111        222222   333333      ......

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#;

 

4九、检索“00肆”课程分数小于60,按分数降序排列的同桌学号

2003-01-28   04:30:09    04:31:09      04:32:09   ......

复制代码 代码如下:

 

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

2003-01-28   18:30:00

50、删除“00贰”同学的“00一”课程的成就

 

复制代码 代码如下:

2003-02-09   03:35:25    03:36:25     03:37:25    ......

delete from Sc where S#='001'and C#='001';

 

您或者感兴趣的作品:

  • MySQL学习笔记三:表的基本操作介绍
  • 单个select语句落成MySQL查询总结次数
  • sql查询出各科战表最棒的学员音信
  • mysql查询昨日 十三日前 十七月前几年前的数量
  • mysql查询明天、今日、近七天、近30天、下个月、上四月的SQL语句
  • MySql查询时间段的不二法门
  • MySQL查询和修改auto_increment的方法
  • 3个优化MySQL查询操作的实际案例剖析
  • MySQL查询尾数第三条记下完毕格局
  • SQL查询出表、存款和储蓄进度、触发器的创始时间和最后修改时间示例
  • 小幅度优化MySQL查询品质的奇技淫巧
  • SQL大批量数目查询的优化及非用like不可时的拍卖方案
  • 什么采纳MySQL查询某些列中一样值的数码总计
  • SQL如何促成MYSQL的递归查询
  • 数量库表的询问操作(实验二)
  • 数码库表的查询操作实施练习(实验3)

12  表一(AAA)

 

商品名称mc  商品总的数量sl

 

  A        100

 

  B        120

 

表二(BBB)

 

商品名称mc  出库数量sl

 

  A        10

 

  A        20

 

  B        10

 

  B        20

 

  B        30

 

用一条SQL语句算出商品A,B近日还剩多少?

 

 

declare @AAA table (商品名称  varchar(10), 商品总的数量  int)

 

insert into @AAA values('A',100)

 

insert into @AAA values('B',120)

 

declare @BBB table (商品名称 varchar(拾), 出库数量 int)

 

insert into @BBB values('A', 10)

 

insert into @BBB values('A', 20)

 

insert into @BBB values('B', 10)

 

insert into @BBB values('B', 20)

 

insert into @BBB values('B', 30)

 

select TA.商品名称,A-B AS 剩余数量 FROM

 

(select 商品名称,sum(商品总数) AS A

 

from @AAA

 

group by 商品名称)TA,

 

(select 商品名称,sum(出库数量) AS B

 

from @BBB

 

group by 商品名称)TB

 

where TA.商品名称=TB.商品名称

 

 

select 商品名称,sum(商品总的数量)剩余数量 from (select * from @aaa union all select 商品名称,-出库数量 from @bbb) a group by 商品名称

 

1叁 优化那句SQL语句

 

UPDATE tblExlTempYear

 

SET tblExlTempYear.GDQC = tblExlTempMonth.GDQC

 

FROM tblExlTempYear,tblExlTempMonth

 

where tblExlTempMonth.GDXM=tblExlTempYear.GDXM andtblExlTempMonth.TXDZ=tblExlTempYear.TXDZ

 

(1)、加索引:

 

tblExlTempYear(GDXM,TXDZ)

 

tblExlTempMonth (GDXM,TXDZ)

 

(2)、删除无用数据

 

(3)、转移过时数据

 

(肆)、加服务器内部存款和储蓄器,晋级服务器

 

(五)、晋级网络种类

 

UPDATE tblExlTempYear

 

SET tblExlTempYear.GDQC = tblExlTempMonth.GDQC

 

FROM tblExlTempYear (index indexY),tblExlTempMonth (index indexM)

 

where tblExlTempMonth.GDXM=tblExlTempYear.GDXM andtblExlTempMonth.TXDZ=tblExlTempYear.TXDZ

 

14 品种    日期    数量

 

P0001  2002-1-10 10

 

P0001  2002-1-10 11

 

P0001  2002-1-10 50

 

P0001  2002-1-12  9

 

P0001  2002-1-12  8

 

P0001  2002-1-12  7

 

P0002  2002-10-10 5

 

P0002  2002-10-10 7

 

P0002  2002-10-12 0.5

 

P0003  2002-10-10 5

 

P0003  2002-10-12 7

 

P0003  2002-10-12 9

 

结果要先依据项目汇总,再根据日期汇总,结果如下:

 

P0001  2002-1-10   71

 

P0001    2002-1-12 24

 

P0002    2002-10-10 12

 

P0002    2002-10-12 0.5

 

P0003    2002-10-10 5

 

P0003    2002-10-12 16

 

SQL SETiguanVE途达能做出如此的聚焦吗…

 

15 在分組查循中with{cube|rollup}的區別是何等?

 

如:

 

  use pangu

 

  select firm_id,p_id,sum(o_price_quantity)as sum_values

 

  from orders

 

  group by firm_id,p_id

 

  with cube

 

  與

 

  use pangu

 

  select firm_id,p_id,sum(o_price_quantity)as sum_values

 

  from orders

 

  group by firm_id,p_id

 

  with rollup

 

  的區別是怎么着?

 

CUBE 和 ROLLUP 之间的分化在于:

 

CUBE 生成的结果集体现了所选列中值的持有组成的集合。

 

ROLLUP 生成的结果集体现了所选列中值的某1层次结构的联谊。

 

例如,简单表 Inventory 中包含:

 

Item               Color               Quantity                 

 

 

Table               Blue               124                       

 

Table               Red                 223                       

 

Chair               Blue               101                       

 

Chair               Red                 210 

 

下列查询将扭转小计报表:

 

SELECT CASE WHEN (GROUPING(Item) = 1) THEN 'ALL'

 

           ELSE ISNULL(Item, 'UNKNOWN')

 

      END AS Item,

 

      CASE WHEN (GROUPING(Color) = 1) THEN'ALL'

 

           ELSE ISNULL(Color, 'UNKNOWN')

 

      END AS Color,

 

      SUM(Quantity) AS QtySum

 

FROM Inventory

 

GROUP BY Item, Color WITH ROLLUP

 

Item               Color               QtySum                   

 

 

Chair               Blue               101.00                   

 

Chair               Red                 210.00                   

 

Chair               ALL                 311.00                   

 

Table               Blue               124.00                   

 

Table               Red                 223.00                   

 

Table               ALL                 347.00                   

 

ALL                 ALL                 658.00                   

 

(7 row(s) affected)

 

万壹查询中的 ROLLUP 关键字改成为 CUBE,那么 CUBE 结果集与上述结果1致,只是在结果集的最终还会回来下列两行:

 

ALL                 Blue               225.00                   

 

ALL                 Red                 433.00                   

 

CUBE 操作为 Item 和Color 中值的可能组合生成行。例如,CUBE 不仅报告与Item 值 Chair 相组合的 Color 值的具有大概构成(Red、Blue 和 Red Blue),而且告诉与 Color 值 Red 相组合的 Item 值的有着也许构成(Chair、Table 和 Chair Table)。对于 GROUP BY 子句中右侧的列中的每个值,ROLLUP 操作并不告知右边一列(或左侧各列)中值的全数异常的大可能率构成。举个例子,ROLLUP 并不对种种 Color 值报告 Item 值的富有十分大可能率构成。ROLLUP 操作的结果集全体类似于 COMPUTE BY 所重临结果集的效益;不过,

 

ROLLUP 具备下列优点: ROLLUP 再次回到单个结果集;COMPUTE BY 重临八个结果集,而多少个结实集会扩展应用程序代码的复杂。ROLLUP可以在服务器游标中央银行使;COMPUTE BY 不可能。有时,查询优化器为 ROLLUP 生成的实行陈设比为 COMPUTE BY 生成的更高效。

 

1陆 即使我有多少个表
表一(电话号码,是或不是存在)
表二(电话号码,是不是拨打)
想搜寻表第11中学的电话号码是还是不是在表第22中学设有,假使存在就立异表1中的是还是不是留存字段为一。
    UPDATE 表1 SET 是还是不是留存=一
WHERE EXISTS(SELECT * FROM 表2 WHERE 表2.电话号码 = 表1.电话号码)

 

一七 用存款和储蓄进度调用外部程序.
不过要做成com控件
用sp_OACreate存款和储蓄进度)
DECLARE @object int
DECLARE @hr int
DECLARE @src varchar(255), @desc varchar(255)
EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @object OUT
IF @hr <> 0
BEGIN
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END

 

(六)

 

壹、在MS SQL Server中,用来展现数据库新闻的系统存款和储蓄进度是( )
A sp_ dbhelp
B sp_ db
C sp_ help
D sp_ helpdb

 

2、SQL语言中,删除1个表的指令是( )
A DELETE
B DROP
C CLEAR
D REMORE

 

3、关全面据库中,主键是(__)
A、为标志表中绝无仅有的实业
B、成立唯一的目录,允许空值
C、只允许以表中首先字段建立
D、允许有三个主键的

 

4、在Transact-SQL语法中,SELECT语句的完整语法较复杂,但最少包罗的有的(1___),使用首要字(二___)能够把重复行屏 蔽,将多少个查询结果重返四个结果集结的运算符是(3___),假使在SELECT语句中采纳聚合函数时,一定在前边使用(肆___)。
    ⑴ A、SELECT,INTO             B、SELECT,FROM
      C、SELECT,GROUP           D、仅SELECT
  ⑵ A、DISTINCT                         B、UNION
        C、ALL                                 C、TOP
  ⑶ A、JOIN                               B、UNION
        C、INTO                             C、LIKE
  ⑷ A、GROUPBY                     B、COMPUTE BY
        C、HAVING                         D、COMPUTE

 

伍、语句DBCC SH景逸SUVINKDATABASE (萨姆ple, 25)中的二伍代表的情趣是
A、25M
B、剩余占全部空间的1/4
C、已用空间占全体空间的二5%
D、以上都不对

 

6、你是2个管教集团的数据库开垦职员,公司的保险单音信囤积在SQL Server 三千数据库中,你利用以下脚本建立了多少个名字为Policy的表:
CREATE TABLE Policy
(
PolicyNumber int NOT NULL DEFAULT (0),
InsuredLastName char (30) NOT NULL,
InsuredFirstName char (20) NOT NULL,
InsuredBirthDate datetime NOT NULL,
PolicyDate datetime NOT NULL,
FaceAmount money NOT NULL,
CONSTRAINT PK_Policy PRIMARY KEY (PolicyNumber)
)
历次公司发卖出一份保险单,Policy表中就扩大一条记下,并赋予其一个新的保险单号,你将如何做?

 

a.建立八个INSTEAD OF INSERT触发器来发生三个新的保险单号,并将以此保险单号插入数据表中。
b.建立四个INSTEAD OF UPDATE触发器来发出2个新的保单号,并将那一个保险单号插入数据表中。
c.建立2个AFTER UPDATE触发器来发出1个新的保险单号,并将以此保险单号插入数据表中。
d.用AFTER UPDATE触发器代替DEFAULT约束原则发出一个新的保险单号,并将以此保险单号插入数据表中。

 

7、在SQL语言中,假诺要成立二个薪金表包涵职工号,姓名,职务任职资格。薪俸等字段。若要保证报酬字段的取值不低于800元,最合适的落到实处格局是:
A。在创制薪资表时为”薪酬“字段建立缺省
B。在开创薪给表时为”工资“字段建立检查约束
C。在报酬表建立三个触发器
D。为薪水表数据输入编写二个先后开始展览调整

 

8、Select 语句中用来连接字符串的记号是______.
A. “ ” B. “&” C.“||” D.“|”

 

9、你是一个问世集团的数据库开采人士,对一定的书名的每日的贩卖情状建立了之类的积累进程:
CREATE PROCEDURE get_sales_for_title
title varchar(80), @ytd_sales int OUTPUT
AS
SELECT @ytd_sales = ytd_sales
FROM titles
WHERE title = @title
IF @@ROWCOUNT = 0
RETURN(-1)
ELSE
RETURN(0)
别的建立了1个剧本实施这几个蕴藏进程,倘诺实践成功,将回到对应于书名的每一日的发卖场地包车型客车报表,倘若进行破产,将赶回“NoSales Found”,怎么着建立那一个剧本?

 

A. DECLARE @retval int
DECLARE @ytd int
EXEC get_sales_for_title ‘Net Etiquette’, @ytd
IF @retval < 0
PRINT ‘No sales found’
ELSE
PRINT ‘Year to date sales: ’ STR (@ytd)
GO

 

B. DECLARE @retval int
DECLARE @ytd int
EXEC get_sales_for_title ‘Net Etiquette’, @ytd OUTPUT
IF @retval < 0
PRINT ‘No sales found’
ELSE
PRINT ‘Year to date sales: ’ STR (@ytd)
GO

 

C. DECLARE @retval int
DECLARE @ytd int
EXEC get_sales_for_title ‘Net Etiquette’,@retval OUTPUT
IF @retval < 0
PRINT ‘No sales found’
ELSE
PRINT ‘Year to date sales: ’ STR (@ytd)
GO

 

D. DECLARE @retval int
DECLARE @ytd int
EXEC @retval = get_sales_for_title ‘Net Etiquette’, @ytd OUTPUT
IF @retval < 0
PRINT ‘No sales found’
ELSE
PRINT ‘Year to date sales: ’ STR (@ytd)
GO

 

10、You are a database developer for a container manufacturing company.The containers produced by your company are a number of different sizes andshapes. The tables that store the container information are shown in the Size,Container, and Shape Tables exhibit:
Size
SizeID
SizeName
Height
Container
ContainerID
ShapeID
SizeID
Shape
ShapeID
ShapeName
Measurements

 

A sample of the data stored in the tables is shown below:
Size Table
SizeID       SizeName        Height
1           Small          40
2           Medium          60
3           Large          80
4           Jumbo          100
Shape Table
澳门新萄京官方网站,ShapeID  ShapeName  Measurement
1       Triangle        10
2       Triangle        20
3       Triangle        30
4       Square          20
5       Square          30
6       Square          40
7       Circle          15
8       Circle          25
9       Circle          35
Periodically, the dimensions of the containers change. Frequently, the databaseusers require the volume of a container. The volume of a container iscalculated based on information in the shape and size tables.
You need to hide the details of the calculation so that the volume can beeasily accessed in a SELECT query with the rest of the container information.What should you do?
A.    Create a user-defined function that requires ContainerIDas an argument and returns the volume of the container.
B.    Create a stored procedure that requires ContainerID as anargument and returns the volume of the container.
C.    Add a column named volume to the container table. Create atrigger that calculates and stores volume in this column when a new containeris inserted into the table.
D.    Add a computed column to the container table thatcalculates the volume of the container.

 

填空题(1空1分共20分)
1、 即便设计的表不吻合第一范式,只怕会导致_______,________,_______。
2、 SQL是由_______语言,________语言,_______言语结合。
三、 SQL Server在七个安全级上印证用户,分别是______________,_____________________。
四、 自定义函数由___________函数,_______________函数,___________________函数组成。
伍、 备份计谋的三种档案的次序是__________备份,_______________备份,___________________备份组成。
六、 运行二个显式事务的言辞为__________,提交业务的话语为__________,回滚事务的口舌为__________
7、 表的每1行在表中是绝无仅有的实体属于__________完整性,使列的输入有效属于__________完整性,三个表的主关键字和外关键字的多寡应该相应一致属于__________完整性。
简答题(共20分)
一、 在扶助中[ ,...n ] 意思是何等?(4分)
二、 请简述一下次之范式(4分)
三、 现存一贩卖表,它们组织如下:(4分)
idint                     (标识号)
codnochar(7)             (商品编码)
codname varchar(30)        (商品名称)
specvarchar(20)                       (商品规格)
pricenumeric(10,2)           (价格)
sellnumint                         (出卖数目)
deptnochar(三)                   (售出分店编码)
selldatedatetime                   (出售时间)
须求:写出查询贩卖时间段在二零零零-二-1二二十六日到二〇〇三-四-29里边,分店编码是01的具备记录。
4、写一个储存进程,需要传入1个表名,重临该表的记录数(借使传入的表在数据库中都存在)(4分)
5、请简述UPDATE 触发器如何是好事原理。(4分)
简答题:(共40分)
一、(5分)使用一条SQL语句找到重复的值及重复的次数:有壹多少表ZD_ks,个中有字段BM,MC,。。。,请查询出在ZD_ks中BM有双重的值及重复的次数,未有的不要列出。如下表:
BM DUPCOUNT
001 3
002 2

 

2、描述(5分)
表一 student 学生消息表
ID    int      学生编号
Name  varchar  学生姓名
Sex    bit      性别(男0女1)
Class int      班级编号

 

表二 schedule 课程新闻表
ID    int      课程编号
Name  varchar  课程名称

 

表3 Grade  成绩消息表
ID    int      自动编号
UID    int      学生编号
SID    int      课程编号
Num    int      考试战表

 

(a)求各班的总人数(1分)
(b)求一班女子和男人的平均成绩(2分)
(c)各班"数据结构"(课程名称)不比格的总人口(2分)

 

3、难题讲述:(二十七分)
主旨用到上面八个涉及表:
CARD    借书卡。  CNO 卡号,NAME 姓名,CLASS 班级
BOOKS    图书。    BNO 书号,BNAME 书名,AUTHO悍马H贰 小编,P奥迪Q7ICE单价,QUANTITY 仓库储存册数
BOPRADOROW  借书记录。 CNO 借书卡号,BNO书号,LX570DATE 还书日期
备考:限定每人每个书只可以借壹本;仓库储存册数随借书、还书而改变。
渴求落到实处如下1三个管理:
  一.寻找借书超过5本的读者,输出借书卡号及所借图书册数。(二分)
二.查询借阅了"水浒"一书的读者,输出姓名及班级。(三分)
叁.查询过期未还图书,输出借阅者(卡号)、书号及还书日期。(三分)
四.询问书名蕴涵"网络"关键词的书本,输出书号、书名、小编。(2分)
5.查询现存图书中价格最高的书籍,输出书名及我。(贰分)
陆.查询当前借了"总计方法"但尚无借"总计办法习题集"的读者,输出其借书卡号,并按卡号降序排序输出。(四分)
柒.将"C0一"班同学所借图书的还期都延长七日。(二分)
八.从BOOKS表中去除当前无人借阅的书籍记录。(二分)
9.在BO猎豹CS6ROW表上建立2个触发器,完结如下效果:假诺读者借阅的书名是"数据库才具及接纳",就将该读者的借阅记录保留在BO哈弗ROW_SAVE表中(注ORROW_SAVE表结构同BOOdysseyROW表)。(六分)
拾.手无寸铁1个视图,呈现"力0壹"班学员的借书新闻(只需要出示姓名和书名)。(三分)
1一.查询当前同时借有"总结办法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出。(三分)

 

 

 

(七)

 

一、难题讲述:
已知关系格局:
S (SNO,SNAME)                     学生关系。SNO 为学号,SNAME 为现名
C (CNO,CNAME,CTEACHE卡宴)  课程关系。CNO 为课程号,CNAME 为课程名,CTEACHE奥迪Q7为任课教授
SC(SNO,CNO,SCGRADE)        选课关系。SCGRADE 为成绩
务求落到实处如下6个管理:
  一. 寻觅从未选修过“李明”老师讲课课程的持有学员姓名
  二. 列出有二门上述(含两门)不如格课程的学习者姓名及其平均战绩
  三. 列出既学过“1”号课程,又学过“二”号课程的保有学员姓名
  肆. 列出“一”号课成绩比“二”号同学该门课战表高的有着学生的学号
  伍. 列出“一”号课成绩比“二”号课战绩高的持有学员的学号及其“一”号课和“二”号课的大成

 

二、难点讲述:
为治本岗位业务培训消息,建立三个表:
S (S#,SN,SD,SA)  S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄
C (C#,CN )       C#,CN      分别表示课程编号、课程名称
SC ( S#,C#,G )    S#,C#,G    分别代表学号、所选修的课程编号、学习战表

 

供给贯彻如下多少个管理:
  一. 使用正规SQL嵌套语句询问选修课程名为’税收基础’的学习者学号和人名
  二. 使用专门的工作SQL嵌套语句询问选修课程编号为’C贰’的学习者姓名和所属单位
  3. 使用标准SQL嵌套语句询问不选修课程编号为’C五’的学生姓名和所属单位
  四. 用到正式SQL嵌套语句询问选修全体科目标学生姓名和所属单位
  伍. 询问选修了学科的学生人数
  陆. 询问选修课程当先五门的学习者学号和所属单位

 

 

 

(八)

 

Student(S#,Sname,Sage,Ssex) 学生表   
Course(C#,Cname,T#) 课程表   
SC(S#,C#,score) 成绩表   
Teacher(T#,Tname) 教师表   
问题:   
一、查询“001”课程比“00二”课程战表高的具有学员的学号;   
  select a.S# from (select s#,score from SC where C#='001') a,(selects#,score   
  from SC where C#='002') b   
  where a.score>b.score and a.s#=b.s#;   
2、查询平均成绩抢先五十四分的同窗的学号和平均战绩;   
    select S#,avg(score)   
    from sc   
    group by S# having avg(score) >60;   
3、查询全部同学的学号、姓名、选课数、总战表;   
  selectStudent.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 '李%';   
伍、查询没学过“叶平”老师课的同窗的学号、姓名;   
    select Student.S#,Student.Sname   
    from Student    
    where S# not in (select distinct( SC.S#) fromSC,Course,Teacher where  SC.C#=Course.C# and Teacher.T#=Course.T# andTeacher.Tname='叶平');   
陆、查询学过“00一”并且也学过数码“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# andSC_2.C#='002');   
柒、查询学过“叶平”老师所教的全体课的校友的学号、姓名;   
  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='叶平' groupby S# having count(SC.C#)=(select count(C#) from Course,Teacher  whereTeacher.T#=Course.T# and Tname='叶平'));   
八、查询课程编号“00二”的实绩比课程编号“001”课程低的具有同学的学号、姓名;   
  Select S#,Sname from (select Student.S#,Student.Sname,score ,(selectscore 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;   
九、查询全数课程战表小于陆1九分的校友的学号、姓名;   
  select S#,Sname   
  from Student   
  where S# not in (select Student.S# from Student,SC where S.S#=SC.S# andscore>60);   
拾、查询未有学全全数课的同学的学号、姓名;   
    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#) fromCourse);   
1一、查询至少有一门课与学号为“拾0一”的同桌所学一样的同桌的学号和人名;   
    select S#,Sname from Student,SC where Student.S#=SC.S# andC# in select C# from SC where S#='1001';   
12、查询至少学过学号为“00壹”同学全部1门课的其余同学学号和姓名;   
    select distinct SC.S#,Sname   
    from Student,SC   
    where Student.S#=SC.S# and C# in (select C# from SC whereS#='001');   
一三、把“SC”表中“叶平”老师教的课的战绩都改成为此课程的平均战表;   
    update SC set score=(selectavg(SC_2.score)   
    from SC SC_2   
    where SC_2.C#=SC.C# ) from Course,Teacher whereCourse.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='叶平');   
1四、查询和“十02”号的同校学习的科目完全同样的别的同学学号和人名;   
    select S# from SC where C# in (select C# from SC whereS#='1002')   
    group by S# having count(*)=(select count(*) from SC whereS#='1002');   
壹5、删除学习“叶平”老师课的SC表记录;   
    Delect SC   
    from course ,Teacher    
    where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平';   
1陆、向SC表中插入一些记录,这一个记录供给符合以下原则:未有上过编号“00三”课程的同桌学号、二、   
    号课的平均成绩;   
    Insert SC select S#,'002',(Selectavg(score)   
    from SC where C#='002') from Student where S# not in (SelectS# from SC where C#='002');   
一7、按平均成绩从高到低展现全体学生的“数据库”、“集团管理”、“土耳其共和国(Türkiye Cumhuriyeti)语”三门的科目成绩,按如下方式显得: 学生ID,,数据库,公司处理,立陶宛共和国(Republic of Lithuania)语,有效课程数,有效平均分   
    SELECT S# as 学生ID   
        ,(SELECT score FROM SC WHERESC.S#=t.S# AND C#='004') AS 数据库   
        ,(SELECT score FROM SC WHERESC.S#=t.S# AND C#='00一') AS 集团处理   
        ,(SELECT score FROM SC WHERESC.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)    
1八、查询各科战绩最高和最低的分:以如下形式展示:课程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 = (SELECTMAX(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 = (SELECTMIN(IR.score)   
                     FROM SC AS IR   
                     WHERE R.C# = IR.C#   
                 GROUP BY IR.C#   
                   );   
1玖、按各科平均成绩从低到高和及格率的比重从高到低依次   
    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)>=60THEN 1 ELSE 0 END)/COUNT(*) DESC   
20、查询如下课程平均战表和及格率的百分比(用"1行"展现): 集团管理(00一),马克思(00二),OO&UML (00三),数据库(00肆)   
    SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0END)/SUM(CASE C# WHEN '00壹' THEN 1 ELSE 0 END) AS 企管平均分   
        ,100 * SUM(CASE WHEN C# = '001' ANDscore >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '00壹' THEN 一 ELSE 0 END)AS 公司管理及格百分数   
        ,SUM(CASE WHEN C# = '002' THEN scoreELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分   
        ,100 * SUM(CASE WHEN C# = '002' ANDscore >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 一 ELSE 0 END)AS 马克思及格百分数   
        ,SUM(CASE WHEN C# = '003' THEN scoreELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分   
        ,100 * SUM(CASE WHEN C# = '003' ANDscore >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '00叁' THEN 壹 ELSE 0 END)AS UML及格百分数   
        ,SUM(CASE WHEN C# = '004' THEN scoreELSE 0 END)/SUM(CASE C# WHEN '00四' THEN 一 ELSE 0 END) AS 数据库平均分   
        ,100 * SUM(CASE WHEN C# = '004' ANDscore >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '00四' THEN 一 ELSE 0 END)AS 数据库及格百分数   
  FROM SC   
二一、查询分歧老师所教分化学科平均分从高到低展现   
  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   
2贰、查询如下课程战表第 三 名到第 6名的学生战表单:集团管理(00一),马克思(002),UML (00三),数据库(00四)   
    [学生ID],[学员姓名],公司管理,马克思,UML,数据库,平均战绩   
    SELECT  DISTINCT top 3   
      SC.S# As 学生学号,   
        Student.Sname AS 学生姓名 ,   
      T一.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 AST1   
                     ON SC.S# = T1.S# AND T1.C# = '001'   
            LEFT JOIN SCAS T2   
                     ON SC.S# = T2.S# AND T2.C# = '002'   
            LEFT JOIN SCAS T3   
                     ON SC.S# = T3.S# AND T3.C# = '003'   
            LEFT JOIN SCAS 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 WITHTIES   
           ISNULL(T1.score,0) ISNULL(T2.score,0) ISNULL(T3.score,0)

  • ISNULL(T4.score,0)   
          FROM sc   
                LEFT JOIN scAS T1   
                         ON sc.S# = T1.S# AND T1.C# = 'k1'   
                LEFT JOIN scAS T2   
                         ON sc.S# = T2.S# AND T2.C# = 'k2'   
                LEFT JOIN scAS T3   
                         ON sc.S# = T3.S# AND T3.C# = 'k3'   
                LEFT JOIN scAS 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);   
    贰叁、总括列印各科战表,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[<60]   
        SELECT SC.C# as 课程ID, Cname as 课程名称   
            ,SUM(CASE WHEN score BETWEEN 85 AND100 THEN 1 ELSE 0 END) AS [100 - 85]   
            ,SUM(CASE WHEN score BETWEEN 70 AND85 THEN 1 ELSE 0 END) AS [85
  • 70]   
            ,SUM(CASE WHEN score BETWEEN 60 AND70 THEN 1 ELSE 0 END) AS [70
  • 60]   
            ,SUM(CASE WHEN score < 60 THEN 1ELSE 0 END) AS [60 -]   
        FROM SC,Course   
        where SC.C#=Course.C#   
        GROUP BY SC.C#,Cname;   
    二四、查询学毕生均成绩及其名次   
          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) 平均战表   
                FROMSC   
            GROUP BY S#   
            ) AS T2   
        O陆风X八DE帕杰罗 BY 平均成绩desc;   
    25、查询各科成绩前3名的笔录:(不思考战表并列景况)   
          SELECT t1.S# as 学生ID,t1.C#as 课程ID,Score as 分数   
          FROM SC t1   
          WHERE score IN (SELECT TOP 3score   
                 FROM SC   
                 WHERE t1.C#= C#   
                ORDER BYscore DESC   
                 )   
          ORDER BY t1.C#;   
    二陆、查询每门科目被选修的学员数   
      select c#,count(S#) from sc group by C#;   
    贰7、查询出只选修了一门科目标整个上学的小孩子的学号和人名   
      select SC.S#,Student.Sname,count(C#) AS 选课数   
      from SC ,Student   
      where SC.S#=Student.S# group by SC.S# ,Student.Sname havingcount(C#)=1;   
    28、查询男生、女子人数   
        Select count(Ssex) as 男人人数 fromStudent group by Ssex having Ssex='男';   
        Select count(Ssex) as 女人人数 fromStudent group by Ssex having Ssex='女';   
    2九、查询姓“张”的学生名单   
        SELECT Sname FROM Student WHERE Sname like '张%';   
    30、查询同名同性学生名单,并计算同名家数   
      select Sname,count(*) from Student group by Sname having count(*)>1;;   
    3一、一9八四年出生的学生名单(注:Student表中Sage列的门类是datetime)   
        select Sname,  CONVERT(char (11),DATEPART(year,Sage))as age   
        from student   
        where CONVERT(char(11),DATEPART(year,Sage))='1981';   
    3二、查询每门课程的平分战表,结果按平均战绩升序排列,平均战表相同时,按学科号降序排列   
        Select C#,Avg(score) from SC group by C# order byAvg(score),C# DESC ;   
    3三、查询平均成绩超过85的有着学生的学号、姓名和平均成绩   
        select Sname,SC.S# ,avg(score)   
        from Student,SC   
        where Student.S#=SC.S# group by SC.S#,Snamehaving    avg(score)>85;   
    3四、查询课程名叫“数据库”,且分数低于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#;   
    3陆、查询任何1门学科成绩在陆拾伍分以上的姓名、课程名称和分数;   
        SELECT  distinctstudent.S#,student.Sname,SC.C#,SC.score   
        FROM student,Sc   
        WHERE SC.score>=70 ANDSC.S#=student.S#;   
    3七、查询比不上格的教程,并按学科号从大到小排列   
        select c# from sc where scor e <60 order by C#;   
    3八、查询课程编号为00三且课程成绩在7十五分以上的学习者的学号和人名;   
        select SC.S#,Student.Sname from SC,Student whereSC.S#=Student.S# and Score>80 and C#='003';   
    3玖、求选了学科的学员人数   
        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=(selectmax(score)from SC where C#=C.C# );   
    四一、查询种种科目及相应的选修人数   
        select count(*) from sc group by C#;   
    4二、查询不相同科目成绩一样的学生的学号、课程号、学生战绩   
      select distinct  A.S#,B.score from SC A  ,SC B whereA.Score=B.Score and A.C# <>B.C# ;   
    四三、查询每门功成绩最棒的前两名   
        SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数   
          FROM SC t1   
          WHERE score IN (SELECT TOP 2score   
                 FROM SC   
                 WHERE t1.C#= C#   
                ORDER BYscore DESC   
                 )   
          ORDER BY t1.C#;   
    44、总结每门课程的学员选修人数(当先十一个人的课程才总结)。必要输出课程号和选修人数,查询结果按人头降序排列,查询结果按人口降序排列,若人数同样,按学科号升序排列    
        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   
    肆陆、查询任何学员都选修的课程的课程号和科目名   
        select  C#,Cname    
        from  Course    
        where  C#  in  (select  c# from  sc group  by  c#)    
    4七、查询没学过“叶平”老师疏解的任一门课程的学习者姓名   
        select Sname from Student where S# not in (select S# fromCourse,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 (selectS# from SC where score <60 group by S# having count(*)>2)group byS#;   
    49、检索“00四”课程分数小于60,按分数降序排列的同窗学号   
        select S# from SC where C#='004'and score <60 order byscore desc;   
    50、删除“00二”同学的“00壹”课程的成就   
    delete from Sc where S#='001'and C#='001';   
    标题讲述:  
    宗旨用到上边多个关系表:  
    CARD     借书卡。   CNO 卡号,NAME  姓名,CLASS 班级  
    BOOKS    图书。     BNO书号,BNAME 书名,AUTHO宝马X3 小编,P酷路泽ICE 单价,QUANTITY 仓库储存册数   
    BO猎豹CS6ROW   借书记录。 CNO 借书卡号,BNO 书号,QashqaiDATE 还书日期  
    备考:限定每人每一个书只可以借1本;仓库储存册数随借书、还书而退换。  
    渴求达成如下壹多少个管理:  
      一. 写出建立BO凯雷德ROW表的SQL语句,须求定义主码完整性约束和引用完整性约束。  
      二. 找寻借书超越五本的读者,输出借书卡号及所借图书册数。  
      三. 查询借阅了"水浒"一书的读者,输出姓名及班级。  
      4. 询问过期未还图书,输出借阅者(卡号)、书号及还书日期。  
      五. 询问书名包含"网络"关键词的书本,输出书号、书名、小编。  
      陆. 询问现成图书中价位最高的书籍,输出书名及笔者。  
      七. 询问当前借了"总结办法"但尚未借"总括方法习题集"的读者,输出其借书卡号,并按卡号降序排序输出。  
      八. 将"C01"班同学所借图书的还期都延长2三十五日。  
      玖. 从BOOKS表中去除当前无人借阅的图书记录。  
      拾.借使常常按书名查询图书新闻,请建立合适的目录。  
      1一.在BORubiconROW表上建立1个触发器,达成如下效果:假诺读者借阅的书名是"数据库手艺及使用",就将该读者的借阅记录保留在BO中华VROW_SAVE表中(注ORROW_SAVE表结构同BOOdysseyROW表)。  
      12.确立一个视图,展现"力01"班学生的借书音讯(只必要出示姓名和书名)。  
      一叁.询问当前同时借有"总结办法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出。  
      14.假定在建BOOKS表时未有概念主码,写出为BOOKS表追加定义主码的口舌。  
      15.对CACR-VD表做如下修改:  
        a. 将NAME最大列宽扩张到拾一个字符(假定原为四个字符)。  
        b. 为该表扩展一列NAME(系名),可变长,最大十多少个字符。  
  1. 写出建立BO揽胜ROW表的SQL语句,必要定义主码完整性约束和引用完整性约束  
    --完成代码:  
    CREATE TABLE BORROW(  
        CNO int FOREIGN KEY REFERENCES CARD(CNO),  
        BNO int FOREIGN KEY REFERENCES BOOKS(BNO),  
        RDATE datetime,  
        PRIMARY KEY(CNO,BNO))   
  2. 寻找借书超越伍本的读者,输出借书卡号及所借图书册数  
    --达成代码:  
    SELECT CNO,借图书册数=COUNT(*)  
    FROM BORROW  
    GROUP BY CNO  
    HAVING COUNT(*)>5 
  3. 询问借阅了"水浒"一书的读者,输出姓名及班级  
    --完结代码:  
    SELECT * FROM CARD c  
    WHERE EXISTS(  
        SELECT * FROM BORROW a,BOOKS b   
        WHERE a.BNO=b.BNO  
            AND b.BNAME=N'水浒' 
            AND a.CNO=c.CNO)   
  4. 查询过期未还图书,输出借阅者(卡号)、书号及还书日期  
    --完成代码:  
    SELECT * FROM BORROW   
    WHERE RDATE<GETDATE()   
  5. 询问书名包含"互连网"关键词的书本,输出书号、书名、笔者  
    --落成代码:  
    SELECT BNO,BNAME,AUTHOR FROM BOOKS  
    WHERE BNAME LIKE N'%网络%'   
  6. 询问现存图书中标价最高的书本,输出书名及作者  
    --落成代码:  
    SELECT BNO,BNAME,AUTHOR FROM BOOKS  
    WHERE PRICE=(  
        SELECT MAX(PRICE) FROM BOOKS)   
    7. 查询当前借了"总结办法"但并没有借"计算格局习题集"的读者,输出其借书卡号,并按卡号降序排序输出  
    --达成代码:  
    SELECT a.CNO  
    FROM BORROW a,BOOKS b  
    WHERE a.BNO=b.BNO AND b.BNAME=N'总括方法' 
        AND NOT EXISTS(  
            SELECT * FROM BORROW aa,BOOKSbb  
            WHERE aa.BNO=bb.BNO  
                ANDbb.BNAME=N'总计方法习题集' 
                ANDaa.CNO=a.CNO)  
    ORDER BY a.CNO DESC   
  7. 将"C01"班同学所借图书的还期都延长七日  
    --实当代码:  
    UPDATE b SET RDATE=DATEADD(Day,7,b.RDATE)  
    FROM CARD a,BORROW b  
    WHERE a.CNO=b.CNO  
        AND a.CLASS=N'C01'   
  8. 从BOOKS表中删除当前无人借阅的书籍记录  
    --达成代码:  
    DELETE A FROM BOOKS a  
    WHERE NOT EXISTS(  
        SELECT * FROM BORROW  
        WHERE BNO=a.BNO)   
  9. 1旦常常按书名查询图书音信,请建立适用的目录  
    --达成代码:  
    CREATE CLUSTERED INDEX IDX_BOOKS_BNAME ON BOOKS(BNAME)  
    1一. 在BORAV4ROW表上树立二个触发器,完毕如下效果:要是读者借阅的书名是"数据库本领及利用",就将该读者的借阅记录保留在BO汉兰达ROW_SAVE表中(注ORROW_SAVE表结构同BOCRUISERROW表)  
    --实现代码:  
    CREATE TRIGGER TR_SAVE ON BORROW  
    FOR INSERT,UPDATE  
    AS  
    IF @@ROWCOUNT>0 
    INSERT BORROW_SAVE SELECT i.*  
    FROM INSERTED i,BOOKS b  
    WHERE i.BNO=b.BNO  
        AND b.BNAME=N'数据库技巧及使用'   
  10. 确立三个视图,展现"力0壹"班学生的借书音信(只供给出示姓名和书名)  
    --完结代码:  
    CREATE VIEW V_VIEW  
    AS  
    SELECT a.NAME,b.BNAME  
    FROM BORROW ab,CARD a,BOOKS b  
    WHERE ab.CNO=a.CNO  
        AND ab.BNO=b.BNO  
        AND a.CLASS=N'力01' 
    一三. 查询当前同时借有"总计办法"和"组合数学"两本书的读者,输出其借书卡号,并按卡号升序排序输出  
    --完成代码:  
    SELECT a.CNO  
    FROM BORROW a,BOOKS b  
    WHERE a.BNO=b.BNO  
        AND b.BNAME IN(N'总括方法',N'组合数学')  
    GROUP BY a.CNO  
    HAVING COUNT(*)=2 
    ORDER BY a.CNO DESC   
  11. 假设在建BOOKS表时未有概念主码,写出为BOOKS表追加定义主码的话语  
    --落成代码:  
    ALTER TABLE BOOKS ADD PRIMARY KEY(BNO)   
    15.一 将NAME最大列宽扩张到11个字符(假定原为伍个字符)  
    --完结代码:  
    ALTER TABLE CARD ALTER COLUMN NAME varchar(10)   
    一五.二 为该表扩展1列NAME(系名),可变长,最大十八个字符  
    --达成代码:  
    ALTER TABLE CARD ADD 系名 varchar(20)  
    主题素材讲述:  
    为治本岗位业务培养和练习音信,建立1个表:  
    S (S#,SN,SD,SA)   S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄  
    C (C#,CN )       C#,CN       分别表示课程编号、课程名称  
    SC ( S#,C#,G )    S#,C#,G     分别表示学号、所选修的课程编号、学习成绩  
    渴求兑现如下四个管理:  
      一. 用到专门的工作SQL嵌套语句询问选修课程名叫’税收基础’的上学的小孩子学号和人名  
      二. 施用专门的学业SQL嵌套语句询问选修课程编号为’C2’的学生姓名和所属单位  
      3. 应用正规SQL嵌套语句询问不选修课程编号为’C伍’的学习者姓名和所属单位  
      四. 利用正规SQL嵌套语句询问选修全部科目标学员姓名和所属单位  
      伍. 询问选修了学科的学生人数  
      陆. 询问选修课程超越5门的上学的儿童学号和所属单位  
  12. 运用标准SQL嵌套语句询问选修课程名为’税收基础’的学习者学号和人名   
    --完结代码:  
    SELECT SN,SD FROM S  
    WHERE [S#] IN(  
        SELECT [S#] FROM C,SC  
        WHERE C.[C#]=SC.[C#]  
            AND CN=N'税收基础')  
  13. 运用正规SQL嵌套语句询问选修课程编号为’C贰’的学习者姓名和所属单位  
    --完结代码:  
    SELECT S.SN,S.SD FROM S,SC  
    WHERE S.[S#]=SC.[S#]  
        AND SC.[C#]='C2' 
  14. 行使标准SQL嵌套语句询问不选修课程编号为’C伍’的学童姓名和所属单位  
    --落成代码:  
    SELECT SN,SD FROM S  
    WHERE [S#] NOT IN(  
        SELECT [S#] FROM SC   
        WHERE [C#]='C5')  
  15. 运用正规SQL嵌套语句询问选修全部科目的学员姓名和所属单位  
    --达成代码:  
    SELECT SN,SD FROM S  
    WHERE [S#] IN(  
        SELECT [S#] FROM SC   
            RIGHT JOIN C ONSC.[C#]=C.[C#]  
        GROUP BY [S#]  
        HAVING COUNT(*)=COUNT(DISTINCT [S#]))  
  16. 查询选修了课程的学习者人数  
    --达成代码:  
    SELECT 学员人数=COUNT(DISTINCT [S#]) FROM SC  
  17. 询问选修课程超过五门的上学的小孩子学号和所属单位  
    --完结代码:  
    SELECT SN,SD FROM S  
    WHERE [S#] IN(  
        SELECT [S#] FROM SC   
        GROUP BY [S#]  
        HAVING COUNT(DISTINCT [C#])>5)  
    if not object_id('cj')is null   
       drop table cj  
    go  
    create table cj(stuName nvarchar(10),KCM nvarchar(10),cjnumeric(5,2))   
    insert into cj select '张三','语文',98   
    union select '李四','语文',89   
    union select '王五','语文',67   
    union select '周攻','语文',56   
    union select '张三','数学',89 
    union select '李四','数学',78   
    union select '王五','数学',90   
    union select '周攻','数学',87   
    方法一:  
    select stuname from  
        (select stuName,kcm,(select count(*) from cj wherestuname!=a.stuname and kcm=a.kcm and cj>a.cj) cnt from cj a) x  
        group by stuname having max(cnt)<=1 
    go  
    方法二:  
    SELECT stuname FROM cj1 a    
    where cj IN(SELECT TOP 2 cj FROM cj1 WHERE kcm=a.kcm ORDER BY cj desc)  
    GROUP BY stuname HAVING(count(1)>1)  
    方法三:  
    select distinct stuname from cj a  
        where not exists(select kcm from cj b wherea.stuname=stuname  
                   and (select count(*) from cj where kcm=b.kcm and stuname!=a.stuname andcj>b.cj)>1)

本文由澳门新萄京官方网站发布于数据库网络,转载请注明出处:澳门新萄京官方网站数据库及SQL,数据库基本知

关键词:

  • 上一篇:没有了
  • 下一篇:没有了
数据库网络推荐