SQL练习题复习课程

合集下载

sql期末复习题

sql期末复习题

sql期末复习题SQL期末复习题SQL(Structured Query Language)是一种用于管理关系型数据库的编程语言。

在数据库管理系统中,SQL被广泛应用于数据的查询、插入、更新和删除等操作。

作为数据库管理和数据分析的重要工具,掌握SQL语言的基本知识对于计算机专业的学生来说至关重要。

下面将通过一些常见的SQL期末复习题,帮助大家回顾SQL的基本概念和操作技巧。

一、查询操作1. 查询学生表中所有学生的姓名和年龄。

```sqlSELECT Name, Age FROM Students;```2. 查询课程表中所有课程的名称和学分。

```sqlSELECT CourseName, Credit FROM Courses;```3. 查询选修了课程编号为001的学生的姓名和年龄。

```sqlSELECT Name, Age FROM Students WHERE CourseID = '001';```4. 查询选修了课程名称为“数据库”的学生的姓名和年龄。

```sqlSELECT Name, Age FROM Students WHERE CourseName = '数据库';```5. 查询选修了至少两门课程的学生的姓名和年龄。

```sqlSELECT Name, Age FROM Students GROUP BY Name, Age HAVINGCOUNT(CourseID) >= 2;```二、插入操作1. 向学生表中插入一条记录,学生编号为1001,姓名为“张三”,年龄为20。

```sqlINSERT INTO Students (StudentID, Name, Age) VALUES (1001, '张三', 20);```2. 向课程表中插入一条记录,课程编号为002,课程名称为“操作系统”,学分为4。

```sqlINSERT INTO Courses (CourseID, CourseName, Credit) VALUES (002, '操作系统', 4);```三、更新操作1. 将学生表中学生编号为1001的学生的年龄更新为21。

SQL经典习题及答案(新手必看)

SQL经典习题及答案(新手必看)

Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname,T#) 课程表SC(S#,C#,score) 成绩表Teacher(T#,Tname) 教师表问题:1、查询“001”课程比“002”课程成绩高的所有学生的学号;select a.S# from (select s#,score from SC where C#='001') a,(select s#,scorefrom SC where C#='002') bwhere a.score>b.score and a.s#=b.s#;2、查询平均成绩大于60分的同学的学号和平均成绩;select S#,avg(score)from scgroup 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#,Sname4、查询姓“李”的老师的个数;select count(distinct(Tname))from Teacherwhere Tname like '李%';5、查询没学过“叶平”老师课的同学的学号、姓名;select Student.S#,Student.Snamefrom Studentwhere S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平');6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;select S#,Snamefrom Studentwhere S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname='叶平'));8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 <score;9、查询所有课程成绩小于60分的同学的学号、姓名;select S#,Snamefrom Studentwhere S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);10、查询没有学全所有课的同学的学号、姓名;select Student.S#,Student.Snamefrom Student,SCwhere Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;select distinct SC.S#,Snamefrom Student,SCwhere Student.S#=SC.S# and C# in (select C# from SC where S#='001');13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;update SC set score=(select avg(SC_2.score)from SC SC_2where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='叶平');14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;select S# from SC where C# in (select C# from SC where S#='1002')group by S# having count(*)=(select count(*) from SC where S#='1002');15、删除学习“叶平”老师课的SC表记录;Delect SCfrom course ,Teacherwhere Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平';16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、号课的平均成绩;Insert SC select S#,'002',(Select avg(score)from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002');17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示:学生ID,,数据库,企业管理,英语,有效课程数,有效平均分SELECT S# as 学生ID,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 数据库,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企业管理,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英语,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均成绩FROM SC AS tGROUP BY S#ORDER BY avg(t.score)18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分SELECT L.C# As 课程ID,L.score AS 最高分,R.score AS 最低分FROM SC L ,SC AS RWHERE L.C# = R.C# andL.score = (SELECT MAX(IL.score)FROM SC AS IL,Student AS IMWHERE L.C# = IL.C# and IM.S#=IL.S#GROUP BY IL.C#)ANDR.Score = (SELECT MIN(IR.score)FROM SC AS IRWHERE R.C# = IR.C#GROUP BY IR.C#);19、按各科平均成绩从低到高和及格率的百分数从高到低顺序SELECT t.C# AS 课程号,max(ame)AS 课程名,isnull(AVG(score),0) AS 平均成绩,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数FROM SC T,Coursewhere t.C#=course.C#GROUP BY t.C#ORDER BY 100* SUM(CASE WHEN isnull(score,0)>=60THEN 1ELSE 0END)/COUNT(*) DESC20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004)SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分数,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分数,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 数据库及格百分数FROM SC21、查询不同老师所教不同课程平均分从高到低显示SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,MAX(ame) AS 课程名称,AVG(Score) AS 平均成绩FROM SC AS T,Course AS C ,Teacher AS Zwhere T.C#=C.C# and C.T#=Z.T#GROUP BY C.C#ORDER BY AVG(Score) DESC22、查询如下课程成绩第3名到第6名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004)[学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩SELECT DISTINCT top 3SC.S# As 学生学号,Student.Sname AS 学生姓名,T1.score AS 企业管理,T2.score AS 马克思,T3.score AS UML,T4.score AS 数据库,ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 总分FROM Student,SC LEFT JOIN SC AS T1ON SC.S# = T1.S# AND T1.C# = '001'LEFT JOIN SC AS T2ON SC.S# = T2.S# AND T2.C# = '002'LEFT JOIN SC AS T3ON SC.S# = T3.S# AND T3.C# = '003'LEFT JOIN SC AS T4ON SC.S# = T4.S# AND T4.C# = '004'WHERE student.S#=SC.S# andISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)NOT IN(SELECTDISTINCTTOP 15 WITH TIESISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) FROM scLEFT JOIN sc AS T1ON sc.S# = T1.S# AND T1.C# = 'k1'LEFT JOIN sc AS T2ON sc.S# = T2.S# AND T2.C# = 'k2'LEFT JOIN sc AS T3ON sc.S# = T3.S# AND T3.C# = 'k3'LEFT JOIN sc AS T4ON 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);23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]SELECT SC.C# as 课程ID, Cname as 课程名称,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85],SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70],SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60],SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -] FROM SC,Coursewhere SC.C#=Course.C#GROUP BY SC.C#,Cname;24、查询学生平均成绩及其名次SELECT 1+(SELECT COUNT( distinct 平均成绩)FROM (SELECT S#,AVG(score) AS 平均成绩FROM SCGROUP BY S#) AS T1WHERE 平均成绩> T2.平均成绩) as 名次,S# as 学生学号,平均成绩FROM (SELECT S#,AVG(score) 平均成绩FROM SCGROUP BY S#) AS T2ORDER BY 平均成绩desc;25、查询各科成绩前三名的记录:(不考虑成绩并列情况)SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数FROM SC t1WHERE score IN (SELECT TOP 3 scoreFROM SCWHERE t1.C#= C#ORDER BY score DESC)ORDER BY t1.C#;26、查询每门课程被选修的学生数select c#,count(S#) from sc group by C#;27、查询出只选修了一门课程的全部学生的学号和姓名select SC.S#,Student.Sname,count(C#) AS 选课数from SC ,Studentwhere SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1; 28、查询男生、女生人数Select count(Ssex) as 男生人数from Student group by Ssex having Ssex='男';Select count(Ssex) as 女生人数from Student group by Ssex having Ssex='女';29、查询姓“张”的学生名单SELECT Sname FROM Student WHERE Sname like '张%';30、查询同名同性学生名单,并统计同名人数select Sname,count(*) from Student group by Sname having count(*)>1;;31、1981年出生的学生名单(注:Student表中Sage列的类型是datetime)select Sname, CONVERT(char (11),DATEPART(year,Sage)) as agefrom studentwhere CONVERT(char(11),DATEPART(year,Sage))='1981';32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ;33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩select Sname,SC.S# ,avg(score)from Student,SCwhere Student.S#=SC.S# group by SC.S#,Sname having avg(score)>85;34、查询课程名称为“数据库”,且分数低于60的学生姓名和分数Select Sname,isnull(score,0)from Student,SC,Coursewhere SC.S#=Student.S# and SC.C#=Course.C# and ame='数据库'and score <60;35、查询所有学生的选课情况;SELECT SC.S#,SC.C#,Sname,CnameFROM SC,Student,Coursewhere SC.S#=Student.S# and SC.C#=Course.C# ;36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;SELECT distinct student.S#,student.Sname,SC.C#,SC.scoreFROM student,ScWHERE SC.score>=70 AND SC.S#=student.S#;37、查询不及格的课程,并按课程号从大到小排列select c# from sc where scor e <60 order by C# ;38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and Score>80and C#='003';39、求选了课程的学生人数select count(*) from sc;40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩select Student.Sname,scorefrom Student,SC,Course C,Teacherwhere Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and Teacher.Tname='叶平' and SC.score=(select max(score)from SC where C#=C.C# );41、查询各个课程及相应的选修人数select count(*) from sc group by C#;42、查询不同课程成绩相同的学生的学号、课程号、学生成绩select distinct A.S#,B.score from SC A ,SC B where A.Score=B.Score and A.C# <>B.C# ;43、查询每门功成绩最好的前两名SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数FROM SC t1WHERE score IN (SELECT TOP 2 scoreFROM SCWHERE t1.C#= C#ORDER BY score DESC)ORDER BY t1.C#;44、统计每门课程的学生选修人数(超过10人的课程才统计)。

sql复习试题(含答案)

sql复习试题(含答案)

一、单项选择题(本大题共10 小题,每小题 2 分,共20 分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。

错选、多选或未选均无分。

1、Northwind 是( B)。

A、系统数据库 B 、示例数据库 C 、数据库管理系统 D 、数据库操作系统2、数据库中不同记录之间之所以不同是根据( B)的不同加以区分的。

A、主键 B 、外键 C 、属性的定义 D 、名称3、下列是数据操纵语言的是( D)。

A、CREATE B 、 WHERE C、GROUP D 、DELETE4、GROUP BY语句用于( C)。

A、添加 B 、查询 C 、分组统计 D 、控制5、SQL中真正存储数据的对象是( A)。

A、表 B 、查询C、窗体 D 、报表6、RIGHT JION 语句的作用是( D)。

A、自然连接两个表 B 、用 WHERE语句定义连接条件C、左边的记录全显示D、右边的记录全显示7、假设姓名字段为文本,要想查到名字是两个字且姓王的职工,在准则中输入(答案错误)。

A、“ LIKE 王” B 、“ LIKE 王*” C 、“ LIKE 王%” D、LIKE 王*8、关于视图下列说法正确的是A 、视图是个虚表、试图可以存数据9、存储过程是( D )。

10、下列触发器说法正确的是(、填空题(本大题共 5小题,每小题 2分,共 10分)请在每小题的空格中填上正 确答案。

错填、不填均无分。

1、参照完整性是指 外键 ;2、ODBC 的中文意思是 开放式数据库连接 ;3、存储过程是 一组为完成特定功能的 SQL 语句集 ;4、在教学系统中,学生和课程之间是 一对多 关系 ;5、GRANT TO 语 句可以向 一个用户赋予访问权限 。

、名词解释(本大题共 5 小题,每小题 5分,共 15 分)1、 实体完整性主码非空且不能重复C 、视图不可以用语句查询、不能实现安全管理A 、函数B 、视图C 、表格D 、程序A 、函数B 、可以自动触发C 、不可以更改D 、都不是2、关系的种类①一对一②一对多③多对多3、第三范式数据库表中不包含已在其它表中已包含的非主关键字信息。

第3章关系数据库标准语言SQL(习题集)

第3章关系数据库标准语言SQL(习题集)

第3章关系数据库标准语言SQL(习题集)第三章习题集二、选择题1、SQL语言是(B )的语言,容易学习。

A.过程化B.非过程化C.格式化D.导航式2、在视图上不能完成的操作是(C )。

A.更新视图B.查询C.在视图上定义新的表D.在视图上定义新的视图3、SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,其中,CREATE、DROP、ALTER语句是实现哪种功能(C )。

A.数据查询B.数据操纵C.数据定义D.数据控制4、SQL语言中,删除一个表的命令是(B)。

A.DELETE B.DROP C.CLEAR D.REMOVE5、SQL语言中的视图VIEW是数据库的(A )A.外模式B.模式C.内模式D.存储模式6、若要在基本表S中增加一列CN(课程名),可用(C )。

A、ADD TABLE S(CN CHAR(8))B、ADD TABLE S ALTER(CN CHAR(8))C、ALTER TABLE S ADD(CN CHAR(8))D、ALTER TABLE S(ADD CN CHAR(8))7、SQL查询语言的一种典型是:select x1,x2,﹒﹒﹒,x nfrom A1,A2,﹒﹒﹒,A mwhere F其中x i (i=1,2,﹒﹒﹒,n)、A j(j=1,2,﹒﹒﹒,m)、F分别是(A )。

A、字段名、目标表名、逻辑表达式B、字段名、目标表名,数值表达式C、目标表名、字段名、逻辑表达式D、目标表名、字段名、数值表达式8、下面列出的关于“视图”的选项中,不正确的是( C )。

A、视图是外模式B、视图是虚表C、使用视图可以加快查询语句的执行速度D、使用视图可以简化查询语句的编写9、SQL是一种结构化查询语言,集( C )功能于一体。

A、数据定义、数据操作、数据安全B、数据完整性、数据安全、数据并发控制C、数据定义、数据操作、数据控制D、数据查询、数据更新、数据输入输出10 在SQL语言中,子查询是( D )。

【sql:练习题目1】查找课程01比课程02分数高的学生信息

【sql:练习题目1】查找课程01比课程02分数高的学生信息

【sql:练习题⽬1】查找课程01⽐课程02分数⾼的学⽣信息1、准备了50道练习sql的题⽬,今天就开始练习了:⾸先我们介绍所有表的结构,后⾯练习就已这些表开展学⽣ student 表:create table Student(id varchar(10),stdentname varchar(10),age datetime, sex varchar(10));课程表:create table student_course(id varchar(10),coursename nvarchar(10),teacherid varchar(10));教师表:create table Teacher(id varchar(10),teacher_name varchar(10));学⽣分数表:create table student_score(studentid varchar(10),courseid varchar(10),score decimal(18,1));第⼀题:查询课程01 ⽐课程 02分数⾼的学⽣信息分析:先查学⽣分数表得到结果再与学⽣信息表进⾏联合查询 join 这⾥要使⽤right join 关于right join 与 left join的区别上篇⽂章的已经写过sql:SELECT * FROM student RIGHT JOIN(SELECT t1.studentid, class1, class2 FROM( SELECT studentid, score AS class1 FROM student_score WHERE student_score.courseid = 01 ) AS t1,( SELECT studentid, score AS class2 FROM student_score WHERE student_score.courseid = 02 ) AS t2WHERE t1.studentid = t2.studentid AND t1.class1 > t2.class2)rON student.id = r.studentid分析:。

SQL语句学习与练习

SQL语句学习与练习

第4章SQL语句是此课程必须掌握的内容由于课本中所涉及的例子采用了4个表,且表里的内容不易理解,所以我们参考以下两个表进行学习(可在群里下载以下表进行下述练习或下载书本中对应的4个表按书本例题练习)XS(学号,姓名,性别,民族)CJ(学号,姓名,选修课,成绩)练习目的:SQL查询语句是考试中最常考的部分,虽然可以通过后面学习的SQL查询设计器快速完成,但首先我们需要先掌握SQL语句的使用规范及熟悉不同短语的使用。

掌握点1 简单查询1、从XS表中查找姓名字段信息知识点:简单查询语句的基本书写规范(SELECT 字段FROM 表)解析:SELECT 姓名FROM XS2、查找XS表中所有信息知识点:如果要查询所有字段可以用*号表示解析:SELECT * FROM XS3、查找出民族为汉族同学的信息知识点:查询语句若要限定条件查找需加WHERE语句。

解析:SELECT * FROM XS WHERE 民族=”汉”4、查找出民族为汉族并且姓张同学的信息知识点:如果有多个限定条件,需要同时满足的用and,只需满足其中一条件的用or)解析:SELECT * FROM XS WHERE 民族=”汉” AND 姓名=”张”5、查找班级里的同学来自哪些民族(去掉重复值)知识点:去掉字段重复值用的是DISTINCT语句解析:SELECT DISTINCT 民族FROM XS掌握点2 连接查询(查询需要用到两个或两个以上的表就需要建立表与表之间的连接)6、查找成绩大于80分同学的姓名及民族知识点:成绩表没有民族字段、而学生表没有成绩字段,所以需要用到两个表才能完成解析:select xs.姓名, 民族from xs,cj where xs.学号=cj.学号and 成绩>80附注:如果查找的信息需要多个表才能完成,就需要表与表之间通过相同字段两两连接,若查找的字段是多个表的共同字段,查找此字段时就要对此字段加以限定,用表名.字段加以指定即可(如xs.姓名),如不是相同的字段可以指定也可以不指定。

经典T_SQL复习课程

经典T_SQL复习课程

一、简单的语法知识1 先举个例子Codeuse myshopdeclare @ident intinsert into orders(customerid,orderdate)values(25,dateadd(day,-1,getdate()))--当前时间减去1天,就是昨天select @ident = @@identityinsert into details(orderid,productid,unitprice,quantity)values(@ident,1,50,25)select 'the orderid of the inserted row is' + convert(varchar(8),@ident)把数据插入定单表,得到新插入的记录的id然后插入定单明细表2 定义变量给变量赋值declare @myval int;set @myval = 10;set @myval1 = @myval2*12;--下面语句是在查询中赋值变量select @myval = max(id)+1 form mytable3 if和elseCodeuse xlandif not exists(select id from mytable)print '暂时没有数据'elseprint cast(@@rowcount as varchar)+'被检索到'上面语句执行结果是0行被检索到4 begin和end如果条件内部要跟代码块(多条语句)就要用到begin和end5 case语句第一种case语句Codeuse AdventureWorksselect SalesOrderID ,Position = Case SalesOrderID%10 when 1 then 'First'when 2 then 'Second'when 3 then 'third'else 'some thing else'endfrom Sales.SalesOrderHeader第二种case语句Codeuse AdventureWorksselect SalesOrderID ,Position = Casewhen SalesOrderID%10 = 1 then 'First'when SalesOrderID%10 = 2 then 'Second'when SalesOrderID%10 = 3 then 'third'else 'some thing else'endfrom Sales.SalesOrderHeader第一种CASE when子句中可以跟表达式第二种case when子句中表达式要返回true 或者false 当前面的条件和后面的条件同时满足时按前面的条件处理,不需要break语句6 循环语句while 1=1beginwaitfor time '01:00'update mytable set num = 12 where id = 13end上面语句是在每天凌晨1点执行指定的操作while允许break和continue的存在Codeuse xlandif not exists(select id from mytable)print '没?有?检?索?到?数?据?'elsebeginselect id from mytableprint cast(@@rowcount as varchar)+'行?被?检?索?到?' end上面语句执行结果是:2行被检索到二、简单的增删改查一:insert语句into 关键字是可选的values关键字前面的()是可选的,这里是要接收数据的列values后面,有两种方式提供值1:显式的给出值2:从select语句中导出值insert语句注意几点1:不要理标志列,系统会给你插入的2:给出实际的值,如果没有,那就null3:给出默认的值,default关键字,告诉数据库取默认值insert into ... select什么时候会这么用,当成批的数据来自1:数据库中的另一个表2:同一台服务器完全不同的数据库3:另一个SQLSERVER的数据库4:来自同一个表中的数据说实在的2和3我从来没用过好,看一个例子declare @mytable table(id int,sortid int);insert into @mytable (id,sortid) select id,classid from product; select * from @mytable;注意我定义了一个表的对象每一句之间是用分号隔开的(id,sortid) 是可以忽略的二:update语句看例子update e set e.flag = 'm' from employee e join contact ce on e.id = ce.employeeid where = 'jo'这里用到了join子句,当然是可以用的如果修改不止一列只要加一个逗号set num = num * 1.2当然可以写表达式三:delete语句delete from actors from actors a left join film f on a.filmid = f.filmid where f.filmid is null outer连接将在没有匹配的一端返回null,这里也就是film表没有匹配的行是null注意is null 的写法四: select语句这里还是不说了,还是多说说子句吧五:where子句1:= > < >= <= <> != !> !<其中<> 与!=都是不相等的意思!>与!<不怎么常见,但仔细想想也没什么用处2:and or not如果一个where子句中同时出现这三个操作符最先评估not 然后是and 然后是or3:between 例子between 1 and 5 这个就不多说了4:like 例子:like "xland%"%和_是通配符%代表零个或多个任意字符_表示单个任意字符把字符包括在方括号中[a-c]表示a b c都可行[ab]表示a或b^与not表示下一个字符将被排除掉5:in 例子in ( 1,2,3) 这个也不多说了六:order by子句order by由于比较常用我这里就不多说了1:order by username 是可以识别中文的(sql先把中文转换成拼音再进行排序)2:可以对查询到的表中的任何列进行排序无论该列是否包含在select列表中3:基于多个列的order by例如:order by addtime,id先按时间排序,再在这个基础上根据id排序,你也看到了,性能是有很大幅度的降低的七:distinct关键字select count(distinct column) from table检索某一列不重复的记录数八:group by 聚集函数和having子句先看例子:select orderid sum(orderMoney) from sales where orderid between 3 and 123 group by orderid 注意这里的orderid在表里是有可能重复的这个语句的作用是检索出orderid从3到123的记录,然后在这个记录集合上以orderid分组把orderid相同的数据分到一组(这一组就是最终结果的一条记录)然后通过sum函数把各组的orderMoney数据相加,结果是最终结果的第二个字段我发现用group by子句基本上都是和聚集函数一起用的举几个聚集函数的例子sum 求和avg求平均数min/max求最大和最小值count(表达式|*)获取一个查询中的行数只说说count吧:count(coloum)如果这一列有null,那么这些null的行将不会计算在内count(*)将得到表里的所有行的数目聚集函数不一定非和group by一起使用不可(另外avg基本上都是和group by一起使用的)having子句是在组上放置条件的看例子select orderid sum(orderMoney) from sales where orderid between 3 and 123 group by orderid having sum(orderMoney)>5group by得到了一个记录的集合然后通过having子句,再在这个集合上做筛选三、复杂一点的查询一:inner joininner join 是在做排除,如果任一行在两个表中不匹配,则注定将从最终的结果中排除掉例子1:select * from employee e inner join employee m on e.managerid = m.employeeid这是从一个表里查询了两次得到的一行记录将包括两个employee的信息前面的是经理后面的是打工的注意from哪个表哪个表的信息就在前面其中e和m分别是表的别名,这里的别名和列的别名不同,不用写as例子2 select e.employeeid, ce.firstname, m.employeeid as managerid, cm.firstname as managerfirstfrom employee e inner join employee m on e.managerid = m.employeeidinner join contact ce on e.contactid = ce.contactidinner join contact cm on m.contactid = cm.contactid第一个联接是把一个表与他自身进行连接这个叫自引用(注意表的别名)第二个连接得到经理的名字第三个连接得到雇员的名字看似很复杂的连接其实很简单最后说一点inner join 是默认的连接类型inner 关键字是可选的二:outer join先看例子select e.employeeid, m.employeeid as managerid from employee eleft outer join employee m on e.managerid = m.employeeid无论左侧表(e)中的行是否与右侧表中的行相匹配都要显示如果左侧表中的行在右侧表中找不到相匹配的数据, 那么右侧表的数据为nullright outer join 也类似outer是可以忽略的三:full join 与cross join这两个其实都不必多说full join 是left join 和right join 的结合full join将包含位于连接两侧的表的所有行不存在的行就用null补齐cross join 没有on操作符得到的是两测表中所有行的笛卡儿积就是把两册的行排列组合一下一般不会存在null的行这是相当罕见的用法只有科学家或者来搞样本数据的才会用到这个用法四:unionunion更像是从一个查询直接向另一个查询进行的数据追加(差别还是有的)join更像是水平的合并数据(添加更多的列),union是垂直的合并数据(添加更多的行)先看例子:select col2 from table1 union all select col4 from table21:select 列表中字段的数量必须相同2:字段的数据类型必须隐士兼容3:返回的结果集的标头取自第一个查询4:默认返回方式是distinct,union alll返回全部的集合五:子查询返回单个值先看例子:declare @hits intselect @hits = min(hitnum) from articlesselect distinct A.title from articles A join users U on A.uid = U.id where A.hitnum = @hits这是完全可行的,但是我们可以用另一种形式:select distinct A.title from articles A join users U on U.id = A.uid where A.hitnum = (select min(hitnum) from articles )这就是子查询六:子查询返回多个值接着看例子(子查询里返回多个值)use databaseselect A.title from articles A join users U on A.uid = U.id where A.id in (select id from articles where istop = 'true')再看一个例子(用子查询找出孤立的记录)select A.title from article A join users U on A.uid = U.id where A.id not in (select id from articles where istop = 'true')这个例子写的有点牵强但是这里注意not in 子查询得到的字段不能有null直存在,如果有那么整个句子将返回空细心的人大概看出来了,前面提到的两个子查询的例子几乎都可以用内联(join)的方式替换掉出于性能上的考虑,我们应该首先选择联结的解决方案而不是子查询七:any some 和allany与some功能上是相同的,推荐用someany与some一般都是和比较运算符一起使用的(>= <= <> !> 等)>some (1,2,3)意味着大于1 >some就是大于最小的一个值=some和in 起的作用是一样的not in (a,b,c)展开为<>a and <>b and <>c<>some (a,b,c)展开为<>a or <>b or <> c>all (1,2,3)意味着大于3八:where子句中的相关子查询(外部查询和内部查询)先看个例子Codeuse adventureworksdrop table #MinOrderdatesselect CustomerID, min(OrderDate)as orderdateinto #MinOrderdatesfrom Sales.SalesOrderHeadergroup by CustomerIDorder by CustomerIDselect o.CustomerID,o.SalesOrderID,o.OrderDatefrom Sales.SalesOrderHeader ojoin #MinOrderdates ton o.CustomerID = t.CustomerIDand o.OrderDate = t.orderdateorder by o.CustomerIDdrop table #MinOrderdates每个顾客在系统中的第一张定单的orderid 和orderdate用到了临时表,执行了两次查询看下面的例子Codeselect o1.CustomerID,o1.SalesOrderID,o1.OrderDatefrom Sales.SalesOrderHeader o1where o1.OrderDate =(select min(o2.OrderDate)from Sales.SalesOrderHeader o2where o2.CustomerID = o1.CustomerID)order by CustomerID执行了一次查询注意内部查询对外部查询有一个显示的引用o2.CustomerID = o1.CustomerID当然外部查询也可以引用内部查询中的列第二个例子Codeselect stName,(select min(OrderDate)from Sales.SalesOrderHeader owhere o.ContactID = c.ContactID) as orderdatefrom Person.Contact c九:派生表先看例子:订购过某种特定产品的顾客列表Codeuse AdventureWorks;select c.FirstName,stNamefrom Person.Contact As cjoin Sales.SalesOrderHeader as sohon c.ContactID = soh.ContactIDjoin Sales.SalesOrderDetail as sodon soh.SalesOrderID = sod.SalesOrderIDjoin Production.Product as pon sod.ProductID =p.ProductIDwhere = 'Minipump'查找顾客的名字以及首次订购的日期90行受影响现在我们想查找即订购过Minipump又订购过AWC Logo Cap的顾客如果最后是where = 'Minipump' or = 'AWC Logo Cap'2412行受影响这样做是错误的这样得到的结果是订购过Minipump和订购过AWC Logo Cap的顾客下面来看我们的解决方法Codeuse AdventureWorksselect distinct c.FirstName,stNamefrom Person.Contact As cjoin四、约束一:类型约束的类型一共分三种域约束:涉及一个或多个列,(限制某一列的数据大于0)实体约束:相同的值不能存在于其他的行中引用完整性约束:一个表中的一个列与某个表中的另一个列的值匹配二:命名约束是可以命名的一般这样命名:pk_customer_***pk代表主键customer代表主键所在的表后面是你自己定义的(要确保整个名称的唯一性)三:主键约束主键约束:一般就是id, 一个表中最多有一个主键例子1use accountingcreate table employee(id int identity not null,firstname varchar(20) not null)例子2use accountingalter table employeeadd constraint pk_employeeidprimary key (id)四:外键约束外键约束用在确保数据完整性和两个表之间的关系上先看例子create table orders(id int identity not null primary key,customerid int not null foreign key references customer(id),orderdate smalldatetime not null,eid int not null注意:这个表的外键必须是另一个表的主键!在现有表上添加外键alter table ordersadd constraint fk_employee_creator_orderforeign key (eid) references employee(employeeid)使用表自引用表内至少要有一行数据才可以这么做alter table employeeadd constraint fk_employee_has_managerforeign key (managerid) references employee(employeeid)创建表的时候做表自引用就可以忽略foreign key 语句表自引用的外键列必须允许为null 要不是不允许插入的(避免对最初行的需要)一个表与另一个表有约束,这个表是不能被删除的级联操作先看例子create table orderdetails(orderid int not null ,id int not null ,description varchar(123) not null,--设置主键constraint pkOrderdetails primary key (orderid,id),--设置外键,级联操作constraint fkOrderContainsDetailsforeign key (orderid)references orders(orderid)on update no actionon delete cacade)on delete cacade 当删除父记录时同时删除该记录也就是当删除orders表中的一条记录,与之相关的orderdetails表中的记录也将被删除级联的深度是没有限制的,但是每个外键都必须设置on delete cacadeno action是可选的五:unique约束unique约束与主键约束类似,同样也是要求指定的列有唯一的值但是一个表中可以有多个unique约束的列,同时这个列允许存在null值。

数据库原理及应用SQL习题集(含答案)教案

数据库原理及应用SQL习题集(含答案)教案

数据库原理及应⽤SQL习题集(含答案)教案《数据库原理及应⽤SQL》课程习题集⼀、单选题1. ER模型属于()A.概念模型B.层次模型C.⽹状模型D.关系模型2.数据库系统的三级模式结构中,定义索引的组织⽅式属于()A.概念模式B.外模式C.逻辑模式D.内模式3. SQL语⾔中,实现数据存取控制功能的语句是()A.CREATE和DROPB.INSERT和DELETEC.GRANT和REVOKE/doc/2bc3e11f0875f46527d3240c844769eae109a31b.html MIT和ROLLBACK4.物理结构的改变不影响整体逻辑结构的性质,称为数据库的()A.物理数据独⽴性B.逻辑数据独⽴性C.物理结构独⽴性D.逻辑结构独⽴性5.全局ER模型的设计,需要消除属性冲突、命名冲突和()A.结构冲突B.联系冲突C.类型冲突D.实体冲突6.⼀个供应商可供应多种零件,⽽⼀种零件可由多个供应商供应,则实体供应商与零件之间的联系是()A.⼀对⼀B.⼀对多C.多对⼀D.多对多7.表达式“AGE BETWEEN 18 AND 24”等价于()A.AGE>18 AND G<24B.AGE>=18 AND G<24C.AGE>18 AND G<=24D.AGE>=18 AND AGE<=248.在数据库设计中,独⽴于计算机的硬件和DBMS软件的设计阶段是()A.概念设计B.物理设计C.逻辑设计D.系统实施9.按照PX协议规定,⼀个事务要更新数据对象Q,必须先执⾏的操作是()A.READ(Q)B.WRITE(Q)C.LOCK S(Q)D.LOCK X(Q)10.下列聚集函数中不忽略空值(null)的是()A.SUM(列名)B.MAX(列名)C.COUNT(*)D.A VG(列名)11.数据库系统中,对⽤户使⽤的数据视图的描述称为()A.概念模式B.内模式C.存储模式D.外模式12.数据库的三级模式之间存在着两级映象,使数据库系统具有较⾼的数据()A.相容性B.独⽴性C.共享性D.⼀致性13.实体完整性规则是指关系中()A.不允许有空⾏B.主键不允许有空值C.不允许有空列D.外键不允许有空值14.实现关系代数投影运算的SQL⼦句是()A.SELECT B.ORDER BYC.FROM D.WHERE15. SQL语⾔中,⽤GRANT/REVOKE语句实现数据库的()A.并发控制B.完整性控制C.⼀致性控制D.安全性控制16.在事务依赖图中,若各个事务之间的依赖关系构成循环,则就会出现()A.死锁B.共享锁C.活锁D.排它锁17.以下关于事务调度和封锁的描述中,正确的是()A.遵守两段封锁协议的并发事务⼀定是可串⾏化的B.可串⾏化的并发事务⼀定遵守两段封锁协议C.遵守两段封锁协议的并发事务不⼀定是可串⾏化的D.遵守两段封锁协议的并发事务⼀定不会产⽣死锁18.数据库与⽂件系统的根本区别在于()A 提⾼了系统效率B ⽅便了⽤户使⽤C 数据的结构化D 节省了存储空间19.公司中有多个部门和多名职员,每个职员只能属于⼀个部门,⼀个部门可以有多名职员,从职员到部门的联系类型是( )。

SQL语言基础(复习提要)

SQL语言基础(复习提要)

1.1 SQL语言基础(复习)1.1.1SQL语言简介SQL是英文Structured Query Language的缩写,意思为结构化查询语言。

SQL语言的主要功能就是同各种数据库建立联系,进行沟通。

按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。

SQL 语句可以用来执行各种各样的操作,例如更新数据库中的数据,从数据库中提取数据等。

目前,绝大多数流行的关系型数据库管理系统,如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL语言标准。

虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括Select, Insert, Update, Delete, Create, 以及Drop在内的标准的SQL命令仍然可以被用来完成几乎所有的数据库操作。

下面,我们就来介绍一下SQL语言的基本知识。

一个典型的关系型数据库通常由一个或多个被称作表格的对象组成。

数据库中的所有数据或信息都被保存在这些数据库表格中。

数据库中的每一个表格都具有自己唯一的表格名称,都是由行和列组成,其中每一列包括了该列名称,数据类型,以及列的其它属性等信息,而行则具体包含某一列的记录或数据。

以下,是一个名为太平洋网络学院的数据库表格的实例。

该表格中“栏目”,“用户群”就是两个不同的列,而表格中的每一行则包含了具体的表格数据。

1.1.2创建表格SQL语言中的create table语句被用来建立新的数据库表格。

create table语句的使用格式如下:create table tablename(column1 data type [constraint],column2 data type [constraint],column3 data type [constraint]);举例如下:create table employee(firstname varchar(15),lastname varchar(20),age number(3),address varchar(30),city varchar(20));简单来说,创建新表格时,在关键词create table后面加入所要建立的表格的名称,然后在括号内顺次设定各列的名称,数据类型,以及可选的限制条件等。

SQL复习题(附部分答案)要点讲解学习

SQL复习题(附部分答案)要点讲解学习

SQL复习题(附部分答案)要点讲解学习一、单选题1.根据关系数据基于的数据模型——关系模型的特征判断下列正确的一项:(___)A.只存在一对多的实体关系,以图形方式来表示。

B.以二维表格结构来保存数据,在关系表中不允许有重复行存在。

C.能体现一对多、多对多的关系,但不能体现一对一的关系。

D.关系模型数据库是数据库发展的最初阶段。

答案[B]2、在“连接”组中有两种连接认证方式,其中在(___)方式下,需要客户端应用程序连接时提供登录时需要的用户标识和密码。

A、Windows身份验证B、SQL Server 身份验证C、以超级用户身份登录时D、其他方式登录时答案[B]3、关系数据库中,主键是(___),当运用Transact-SQL语句创建主键时,可以是(__)。

⑴ A、为标识表中唯一的实体 B、创建唯一的索引,允许空值C、只允许以表中第一字段建立D、允许有多个主键的⑵ A、create table table1(column1 char(13) not null primary key,column2 int not on primary key;B、alter table table1 with nocheck addconstraint [PK_table1] primary key nonclustered ( column1) on primary;C、alter table table1 column1 primary key ;答案[ A C]4、视图是一种常用的数据对象,可以简化数据库操作,当使用多个数据表来建立视图时,不允许在该语句中包括(___)等关键字。

A、ORDER BY,COMPUTEB、ORDER BY,COMPUTE,COMPUTR BYC、ORDER BY,COMPUTE BY,GROUP BYD、GROUP BY,COMPUTE BY答案[B ]5、在Transact-SQL语法中,SELECT语句的完整语法较复杂,但至少包括的部分(_1_),使用关键字(_2_)可以把重复行屏蔽,将多个查询结果返回一个结果集合的运算符是(_3__),如果在SELECT 语句中使用聚合函数时,可以在后面使用(_4_)。

SQL语句习题课

SQL语句习题课

语言简洁,易学易用
SQL功能极强,完成核心功能只用了9个动词。P106 单选题3,7 表 3.1 SQL 语言的动词
SQL 功 能 数 据 查 询 数 据 定 义 数 据 操 纵 数 据 控 制 动 词 SELECT CREATE, DROP, ALTER INSERT,UPDATE DELETE GRANT,REVOKE
带子查询的修改语句
[例] 将计算机科学系全体学生的成绩置零。 UPDATE SC SET Grade=0 WHERE 'CS'= (SELETE Sdept FROM Student WHERE Student.Sno = SC.Sno);
学生表:Student(Sno,Sname,Ssex,Sage,Sdept) 课程表:Course(Cno,Cname,Cpno,Ccredit) 学生选课表:SC(Sno,Cno,Grade)
SQL支持关系数据库三级模式结构
SQL
视图1
视图2
外模式
基本表1
基本表2
基本表3
基本表4
模式
存储文件1
存储文件2
内模式
SQL的基本Βιβλιοθήκη 念基本表 本身独立存在的表 SQL中一个关系就对应一个基本表 一个(或多个)基本表对应一个存储文件 一个表可以带若干索引
存储文件
逻辑结构组成了关系数据库的内模式 物理结构是任意的,对用户透明
谁 维护索引
DBMS自动完成
使用索引
DBMS自动选择是否使用索引以及使用哪些索引
学生-课程 数据库
学生-课程模式 S-T :
学生表:Student(Sno,Sname,Ssex,Sage,Sdept)

SQL复习例题

SQL复习例题

SQL复习例题1. 是长期存储在计算机内的有组织、可共享的数据集合。

2. SQL Server 2005的⽂件包括:主数据⽂件、次要数据⽂件和。

3. 有关存储过程参数的默认值,下列说法正确的是。

(A)输⼊参数必须有默认值(B)带默认值的输⼊参数,⽅便⽤户调⽤(C)带默认值的输⼊参数,⽤户不能再传⼊参数,只能使⽤默认值(D)输出参数可以带默认值4. 要查询Information表中姓“王”且单名的学⽣情况,可⽤命令。

5. 触发器的代码可替代原始的更新语句执⾏。

6. 下⾯关于唯⼀索引描述不正确的是。

(A)某列创建了唯⼀索引则这⼀列为主键(B)不允许插⼊重复的列值(C)某列创建主键则该列会⾃动创建唯⼀索引(D)表中可有多个唯⼀索引7. 以下关于视图的描述中,错误的是。

(A)视图不是真实存在的基础表,⽽是⼀张虚表(B)对通过视图看到的数据进⾏修改时,相应的基本表的数据也要发⽣变化(C)创建视图时,若其中某⽬标列是聚合函数时,必须指明视图的全部列名(D)在⼀个语句中,⼀次可以修改⼀个以上的视图对应的基表8. T-SQL中的全局变量以作前缀。

9. 数据库(DB)、数据库系统(DBS)、数据库管理系统(DBMS)三者的关系,10.⽬前,商品化的数据库管理系统以为主。

11. 某字段希望存放电话号码,该字段应选⽤数据类型。

12. 假设⼀位教师可以讲授多门课程,⼀门课程可由多位教师讲授,则教师与课程之间是。

13. 关于索引,下列说法不正确的是。

(A)⼀个数据表可以拥有多个聚集索引(B)聚集索引是⼀种数据表的物理顺序与索引顺序相同的索引(C)⾮聚集索引是⼀种数据表的物理顺序与索引顺序不相同的索引(D)唯⼀索引能够确保索引键不包含重复的值14.下列约束中,可⽤来实现数据表之间依赖关系的是。

(A)主键约束(B)CHECK约束(C)DEFAULT约束(D)主键约束和外键约束15. 要给局部变量赋值,如果数据来源于数据表,则应使⽤语句。

三、标准SQL语言复习概念及习题

三、标准SQL语言复习概念及习题

三、标准SQL语言复习概念及习题数据库原理课程复习材料之三标准SQL语言概念与习题一、选择题:,参考答案:C 、B、D、C、A、A、D、C、C、D ,1、在SQL语言中授权的操作是通过___ GRANT _____语句实现的。

A、CREATEB、REVOKEC、GRANTD、INSERT2、SQL语言的一体化特点是主要同(非关系模型的数据语言)相比较而言的。

A.操作系统命令B.非关系模型的数据语言C.高级语言D.关系模型语言3、在嵌入式SQL语言中使用游标的目的在于___处理多行记录_____。

A、区分SQL与宿主语言B、与数据库通信C、处理错误信息D、处理多行记录4、设有关系R=,A~B~C,。

与SQL语句SELECT DISTINCT A FROM R WHEREB=17等价的关系代数表达式是____?(σ(R)) ____。

AB=17A. ?(R)B. σ(R) AB=17C. ?(σ(R))D. σ(?(R)) AB=17B=17A5、两个子查询的结果(结构完全一致)时~可以执行并、交、差操作。

A. 结构完全一致B.结构完全不一致C. 结构部分一致 C.主键一致6、在SQL查询语句中~用于测试子查询是否为空的谓词是(Exists)。

A.ExistsB.UniqueC.SomeD.All 7、使用SQL语句进行查询操作时~若希望查询结果中不出现重复元组~应在Select子句中使用(Distinct)保留字。

A.UniqueB.AllC.ExceptD.Distinct8、在视图上不可能完成的操作是(在视图上定义新的基本表)A.更新视图B.查询C.在视图上定义新的基本表D.在视图上定义新视图9、SQL中涉及属性Age是否是空值的比较操作~写法(Age=Null)是错误的。

A. Age Is NullB. Not(Age Is Null)C. Age=NullD.Age Is Not Null10、假定学生关系是S(S#,Sname,Sex,Age)~课程关系是C(C#,CName,TEACHER)~学生选课关系是SC(S#,C#,Grade)。

SQL总复习题课案

SQL总复习题课案

2014-2015(2)SQL Server2005总复习题一、选择类1.下面(3 )是最常用的数据模型?A. 关系模型B. 线性模型C. 层次模型D. 网状模型2.数据库DB、数据库系统DBS、数据库管理系统DBMS之间的关系是(3)。

A. DB包含DBS和DBMSB. DBMS包含DB和DBSC. DBS包含DB和DBMSD. 没有任何关系3.在数据库管理系统提供的数据语言中,负责数据的查询及增、删、改等操作的是(4 )。

A. 数据定义语言B. 数据转换语言C. 数据控制语言D. 数据操控语言4. 下列数据库中,属于SQL Server 2005系统数据库的是(2)数据库。

A. NorthwindB. TempdbC. PubsD. Sysdb5. 下列关于主键的描述正确的是(3 )。

A.包含一列B.包含两列C.包含一列或多列D.以上都不正确6. E-R图属于的模型是(3 )。

A. 地理模型B. 逻辑模型C. 概念模型D. 以上都不正确7.关系的主键不能取空值,属于( 1 )。

A. 实体完整性约束B. 参照完整性约束C. 用户定义完整性约束D. 动态元组约束8.SQL语言中,删除一个表的命令是(1 )。

A. deleteB. dropC. clearD. remove9. 在E-R图中,用来表示实体的图形是( 1 )。

A.矩形B.椭圆形C.菱形D.三角形10. 下列四项中,不属于数据库特点的是(3)。

A. 数据冗余低B. 数据完整性C. 数据冗余很高D. 数据独立性高11. 在数据库管理系统提供的数据语言中,负责数据的查询及增、删、改等操作的是()。

A. 数据定义语言B. 数据转换语言C. 数据控制语言D. 数据操控语言12. 在SQL中,创建视图的命令是( 4 )。

A.create schemaB. create tableC. create indexD. create view13. 家庭住址最好采用(1)数据类型进行存储。

SQL知识点及终极练习题

SQL知识点及终极练习题

SQL初步知识点1、掌握SELECT命令基本格式SELECT [ALL|DISTINCT] [TOP n] *|<字段名列表>FROM <表名1>,[<表名2>…][WHERE <条件>][GROUP BY <分组字段名> [HAVING <分组条件>]][ORDER BY <排序字段名> [ASC|DESC]]2、了解CREATE、INSERT、UPDATE、DELETE命令格式(1)创建表CREATE:以下格式创建一个“学生档案”表①格式:CREATE TABLE 学生档案(学号 char(6) primary key,姓名 char(4),性别 char(1),出生日期 date,是否团员 yesno,入学成绩 single,照片 OLEobject,简历 memo)②功能:创建一个新表“学生档案”,包括了指定的字段及字段类型。

(2)修改字段ALTER:增加字段、删除字段、改变字段类型。

格式:ALTER TABLE <表名> [ADD COLUMN <字段名> <字段类型>][DROP COLUMN <字段名>][ALTER COLUMN <字段名> <字段类型>](3)插入记录INSERT:①格式:INSERT INTO <表名> [(字段1,字段2,……)]VALUES(常量1,常量2,……)②功能:在表的末尾插入一条记录,记录中的数据不完整时由“VALUES”后的常量给出,如果记录中的数据完整,可以省略前面的字段名,但给出常量的顺序和数据类型一定要与表中字段顺序和类型相一致。

(4)更新(修改)数据UPDATE:①格式:UPDATE <表名> SET <字段名>=<表达式> [WHERE <条件>]②功能:把满足条件记录的字段值用表达式的值来替换。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

例题1、写出一条Sql语句:取出表A中第31到第40记录(Mysql)select * from A limit 30, 10MS-SQLServer解1:select top 10 * from A where id not in (select top 30 id from A)解2:select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)解3:select * from (select *, Row_Number() OVER (ORDER BY id asc) rowid FROM A) as A where rowid between 31 and 40Oracleselect *from (select A.*,row_number() over (order by id asc) rankFROM A)where rank >=31 AND rank<=40;2、用一条SQL语句查询出每门课都大于80分的学生姓名name kecheng fenshu张三语文81张三数学75李四语文76李四数学90王五语文81王五数学100王五英语90A: select distinct name from table where name not in (select distinct name from tabl e where fenshu<=80)select name from table group by name having min(fenshu)>803、学生表如下:自动编号学号姓名课程编号课程名称分数12005001张三0001数学6922005002李四0001数学8932005001张三0001数学69删除除了自动编号不同,其他都相同的学生冗余信息A: delete tablename where自动编号not in(select min(自动编号) from tablename group by学号,姓名,课程编号,课程名称,分数)4、请用SQL语句实现:从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。

请注意:TestDB 中有很多科目,都有1 -12 月份的发生额。

AccID :科目代码,Occmonth :发生额月份,DebitOccur :发生额。

数据库名:JcyAudit ,数据集:Select * from TestDB答:select a.*from TestDB a,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' gro up by Occmonth) bwhere a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur5、一个叫team的表,里面只有一个字段name,一共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合.你先按你自己的想法做一下,看结果有我的这个简单吗?select , from team a, team bwhere < 6、面试题:怎么把这样一个表儿year month amount19911 1.119912 1.219913 1.319914 1.419921 2.119922 2.219923 2.319924 2.4查成这样一个结果year m1m2m3m41991 1.1 1.2 1.3 1.41992 2.1 2.2 2.3 2.4答案一、select year,(select amount from aaa m where month=1and m.year=aaa.year) as m1,(select amount from aaa m where month=2and m.year=aaa.year) as m2,(select amount from aaa m where month=3and m.year=aaa.year) as m3,(select amount from aaa m where month=4and m.year=aaa.year) as m4from aaa group by year7、说明:复制表(只复制结构,源表名:a新表名:b)SQL: select * into b from a where 1<>1(where1=1,拷贝表结构和数据内容)Oracle:create table bAsSelect * from a where 1=2[<>(不等于)(SQL Server Compact)比较两个表达式。

当使用此运算符比较非空表达式时,如果左操作数不等于右操作数,则结果为TRUE。

否则,结果为FALSE。

]8、说明:拷贝表(拷贝数据,源表名:a目标表名:b)SQL: insert into b(a, b, c) select d,e,f from a;9、说明:显示文章、提交人和最后回复时间SQL: select a.title,ername,b.adddate from table a,(select max(adddate) adddate fr om table where table.title=a.title) b10.说明:外连接查询(表名1:a表名2:b)SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUTER JOIN b ON a.a = b.cORACLE:select a.a, a.b, a.c, b.c, b.d, b.f from a ,bwhere a.a = b.c(+)11.说明:日程安排提前五分钟提醒SQL: select * from 日程安排 where datediff('minute',f 开始时间,getdate())>512.说明:两张关联表,删除主表中已经在副表中没有的信息SQL:Delete from info where not exists (select * from infobz where info.infid=infobz.infid )13.有两个表A和B,均有key和value两个字段,如果B的key在A中也有,就把B的value换为A中对应的value这道题的SQL 语句怎么写?update b set b.value=(select a.value from a where a.key=b.key) where b.id in(select b.id from b,a where b.key=a.key);高级sql面试题14.原表:courseid coursename score-------------------------------------1 Java 702 oracle 903 xml 404 jsp 305 servlet 80-------------------------------------为了便于阅读, 查询此表后的结果显式如下( 及格分数为60):courseid coursename score mark---------------------------------------------------1 Java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 pass---------------------------------------------------写出此查询语句select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark fro m course(SQL:select courseid, coursename ,score ,(case when score<60 then 'fail' else 'pas s' end) as mark from course )ORACLE : select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark from course(DECODE函数是ORACLE PL/SQL是功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数)完全正确SQL> desc course_vName Null? Type----------------------------------------- -------- ----------------------------COURSEID NUMBERCOURSENAME VARCHAR2(10)SCORE NUMBERSQL> select * from course_v;COURSEID COURSENAME SCORE---------- ---------- ----------1 java 702 oracle 903 xml 404 jsp 305 servlet 80SQL> select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as ma rk from course_v;COURSEID COURSENAME SCORE MARK---------- ---------- ---------- ----1 java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 pass15.SQL面试题(1)create table testtable1(id int IDENTITY,department varchar(12))select * from testtable1insert into testtable1 values('设计')insert into testtable1 values('市场')insert into testtable1 values('售后')/*结果id department1 设计2 市场3 售后*/create table testtable2(id int IDENTITY,dptID int,name varchar(12))insert into testtable2 values(1,'张三')insert into testtable2 values(1,'李四')insert into testtable2 values(2,'王五')insert into testtable2 values(3,'彭六')insert into testtable2 values(4,'陈七')/*用一条SQL语句,怎么显示如下结果id dptID department name1 1 设计张三2 1 设计李四3 2 市场王五4 3 售后彭六5 4 黑人陈七*/答案:SELECT testtable2.* , ISNULL(department,'黑人')FROM testtable1 right join testtable2 on testtable2.dptID = testtable1.ID也做出来了可比这方法稍复杂。

相关文档
最新文档