数据库笔试面试题目大全

数据库笔试题及答案I

第一套

选择题

1. 下面叙述正确的是C____

  A、算法的执行效率与数据的存储结构无关

  B、算法的空间复杂度是指算法程序中指令(或语句)的条数

  C、算法的有穷性是指算法必须能在执行有限个步骤之后终止

D、以上三种描述都不对

2. 以下数据结构中不属于线性数据结构的是C______

A、队列B、线性表C、二叉树D、栈

3. 在一棵二叉树上第5层的结点数最多是__B____

AB16 C32 D15

4. 下面描述中,符合结构化程序设计风格的是___A___

  A、使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑

  B、模块只有一个入口,可以有多个出口

  C、注重提高程序的执行效率 D、不使用goto语句

5. 下面概念中,不属于面向对象方法的是____D__

  A、对象 B、继承 C、类 D、过程调用

6. 在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是__B____

  A、可行性分析 B、需求分析 C、详细设计 D、程序编码

7. 在软件开发中,下面任务不属于设计阶段的是__D____

A、数据结构设计 B、给出系统模块结构 C、定义模块算法 

D、定义需求并建立系统模型

8. 数据库系统的核心是_B_____

  A、数据模型 B、数据库管理系统 C、软件工具 D、数据库

9. 下列叙述中正确的是___C___

  A、数据库是一个独立的系统,不需要操作系统的支持

  B、数据库设计是指设计数据库管理系统

  C、数据库技术的根本目标是要解决数据共享的问题

  D、数据库系统中,数据的物理结构必须与逻辑结构一致

10. 下列模式中,能够给出数据库物理存储结构与物理存取方法的是A______

  A、内模式 B、外模式 C、概念模式 D、逻辑模式

11. Visual FoxPro数据库文件是D______

  A、存放用户数据的文件 B、管理数据库对象的系统文件

  C、存放用户数据和系统的文件 D、前三种说法都对

12. SQL语句中修改表结构的命令是__C____

AMODIFY TABLE BMODIFY STRUCTURE CALTER TABLE 

DALTER STRUCTURE

13. 如果要创建一个数据组分组报表,第一个分组表达式是"部门",第二个分组表达式是"性别",第三个分组表达式是"基本工资",当前索引的索引表达式应当是__B____

  A、部门+性别+基本工资 B、部门+性别+STR(基本工资)

  CSTR(基本工资)+性别+部门 D、性别+部门+STR(基本工资)

14. 把一个项目编译成一个应用程序时,下面的叙述正确的是___A___

  A、所有的项目文件将组合为一个单一的应用程序文件

  B、所有项目的包含文件将组合为一个单一的应用程序文件

  C、所有项目排除的文件将组合为一个单一的应用程序文件

  D、由用户选定的项目文件将组合为一个单一的应用程序文件

15. 数据库DB、数据库系统DBS、数据库管理系统DBMS三者之间的关系是___A___

  ADBS包括DBDBMS BDBMS包括DBDBS

  CDB包括DBSDBMS DDBS就是DB,也就是DBMS

16. "选项"对话框的"文件位置"选项卡中可以设置__B____

  A、表单的默认大小 B、默认目录

  C、日期和时间的显示格式 D、程序代码的颜色

17. 要控制两个表中数据的完整性和一致性可以设置"参照完整性",要求这两个表___A___

  A、是同一个数据库中的两个表 B、不同数据库中的两个表

  C、两个自由表 D、一个是数据库表另一个是自由表

18. 定位第一条记录上的命令是__A____

  AGO TOP BGO BOTTOM CGO 6 DSKIP

19. 在关系模型中,实现"关系中不允许出现相同的元组"的约束是通过_B_____

  A、候选键 B、主键 C、外键 D、超键

20. 设当前数据库有10条记录(记录未进行任何索引),在下列三种情况下,当前记录号为1;EOF()为真时;BOF()为真时,命令?RECN()的结果分别是__A____

  A1,11,1 B1,10,1 C1,11,0 D1,10,0

21. 下列表达式中结果不是日期型的是C______

  ACTOD("2000/10/01") B{^99/10/01}+365 CVAL("2000/10/01") DDATE()

22. 只有满足联接条件的记录才包含在查询结果中,这种联接为___C___

  A、左联接 B、右联接 C内部联接 D、完全联接

23. 索引字段值不唯一,应该选择的索引类型为___B___

  A、主索引 B普通索引 C、候选索引 D、唯一索引

24. 执行SELECT 0选择工作区的结果是___B___

  A、选择了0号工作区 B、选择了空闲的最小号工作区

  C、关闭选择的工作区 D、选择已打开的工作区

25. 从数据库中删除表的命令是___A___

  ADROP TABLE BALTER TABLE CDELETE TABLE DUSE

26. DELETE FROM S WHERE 年龄>60语句的功能是__B____

A、从S表中彻底删除年龄大于60岁的记录 

BS表中年龄大于60岁的记录被加上删除标记

  C、删除S表 D、删除S表的年龄列

27. SELECT-SQL语句是___B__

  A、选择工作区语句 B、数据查询语句 C、选择标准语句 D、数据修改语句

28. SQL语言是__C____语言。

A、层次数据库 B、网络数据库 C关系数据库 D、非数据库

29. SQL中,删除视图用___C___

ADROP SCHEMA命令 BCREATE TABLE命令 

CDROP VIEW命令 DDROP INDEX命令

30. 以下属于非容器类控件的是____B__

AForm BLabel Cpage DContainer

31. 将查询结果放在数组中应使用__D____短语。

  AINTO CURSOR BTO ARRAY CINTO TABLE DINTO ARRAY

32. 在命令窗口执行SQL命令时,若命令要占用多行,续行符是__D____

  A、冒号(:) B、分号(;) C、逗号(,) D、连字符(-)

33. 设有图书管理数据库:

  图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))

  读者(借书证号C(4),单位C(8),姓名C(6),性别C(2),职称C(6),地址C(20))

  借阅(借书证号C(4),总编号C(6),借书日期D(8))

  对于图书管理数据库,查询0001号借书证的读者姓名和所借图书的书名。

SQL语句正确的是_A_____

SELECT 姓名,书名 FROM 借阅,图书,读者 WHERE;借阅.借书证号="0001" AND;______

______

  A、图书.总编号=借阅.总编号 AND; 读者.借书证号=借阅.借书证号

  B、图书.分类号=借阅.分类号 AND; 读者.借书证号=借阅.借书证号

  C、读者.总编号=借阅.总编号 AND; 读者.借书证号=借阅.借书证号

D、图书.总编号=借阅.总编号 AND;

34. 设有图书管理数据库:

  图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))

  读者(借书证号C(4),单位C(8),姓名C(6),性别C(2),职称C(6),地址C(20))

  借阅(借书证号C(4),总编号C(6),借书日期D(8))

对于图书管理数据库,分别求出各个单位当前借阅图书的读者人次。下面的SQL语句正确的是_____A_

SELECT 单位,______ FROM 借阅,读者 WHERE;借阅.借书证号=读者.借书证号 ______

ACOUNT(借阅.借书证号) GROUP BY 单位 

BSUM(借阅.借书证号) GROUP BY 单位

CCOUNT(借阅.借书证号) ORDER BY 单位 

DCOUNT(借阅.借书证号) HAVING 单位

35. 设有图书管理数据库:

  图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))

  读者(借书证号C(4),单位C(8),姓名C(6),性别C(2),职称C(6),地址C(20))

  借阅(借书证号C(4),总编号C(6),借书日期D(8))

  对于图书管理数据库,检索借阅了《现代网络技术基础》一书的借书证号。下面SQL语句正确的是___B___

  SELECT 借书证号 FROM 借阅 WHERE 总编号=;______

  A(SELECT 借书证号 FROM 图书 WHERE 书名="现代网络技术基础")

  B(SELECT 总编号 FROM 图书 WHERE 书名="现代网络技术基础")

  C(SELECT 借书证号 FROM 借阅 WHERE 书名="现代网络技术基础")

  D(SELECT 总编号 FROM 借阅 WHERE 书名="现代网络技术基础")

 

填空题

36. 算法的复杂度主要包括____时间__复杂度和空间复杂度。

37. 数据的逻辑结构在计算机存储空间中的存放形式称为数据的__模式或逻辑模式____

38. 若按功能划分,软件测试的方法通常分为白盒测试方法和_.黑盒_____测试方法。

39. 如果一个工人可管理多个设施,而一个设施只被一个工人管理,则实体"工人"与实体"设备"之间存在一对多 或 1对多 或 一对或 1或 1:n 或 1或 1:N 或 一对或 1或 1:m 或 1或 1:N 

______联系。

40. 关系数据库管理系统能实现的专门关系运算包括选择、连接和_投影_____

41. 命令?LEN("THIS IS MY BOOK")的结果是__15____

42.SQL SELECT语句为了将查询结果存放到临时表中应该使用_ Into cursor 或 Into cursor cursorname 

_____短语。

43. 多栏报表的栏目数可以通过_页面设置 或 列数_____来设置。

44. 在打开项目管理器之后再打开"应用程序生成器",可以通过按ALT+F2键,快捷菜单和"工具"菜单中的应用程序生成器______

45. 数据库系统的核心是_数据库管理系统 或 DBMS _____

46. 查询设计器中的"联接"选项卡,可以控制_联接类型 或 联接条件_____选择。

47. 设有图书管理数据库:

图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))

  读者(借书证号C(4),单位C(8),姓名C(6),性别C(2),职称C(6),地址C(20))

  借阅(借书证号C(4),总编号C(6),借书日期D(8))

  用SQLCREATE命令建立借阅表(字段顺序要相同),请对下面的SQL语句填空:

  CREATE TABLE 借阅 (借书证号 C(4),总编号 C(6),借书日期 D(8)) 或 CREA TABL 借阅 (借书证号 C(4),总编号 C(6),借书日期D(8)) 或 CREATE TABLE 借阅 (借书证号 C(4),总编号 C(6),借书日期 D) 或 CREA TABL 借阅 (借书证号 C(4),总编号 C(6),借书日期 D) 

______

48. 设有图书管理数据库:

  图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))

  读者(借书证号C(4),单位C(8),姓名C(6),性别C(2),职称C(6),地址C(20))

  借阅(借书证号C(4),总编号C(6),借书日期D(8))

  对图书管理数据库,查询由"清华大学出版社""电子工业出版社"出版,并且单价不超出20元的书名。请对下面的SQL语句填空:

SELECT 书名,出版单位,单价 FROM 图书;

WHERE_______ 

AND;_______

49. 设有图书管理数据库:

  图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))

  读者(借书证号C(4),单位C(8),姓名C(6),性别C(2),职称C(6),地址C(20))

  借阅(借书证号C(4),总编号C(6),借书日期D(8))

  对图书管理数据库,求共借出多少种图书。请对下面的SQL语句填空:

  SELECT __ COUNT(DISTINCT 总编号_____ FROM 借阅

 

48. 单价<=20 或 (出版单位="清华大学出版社" OR 出版单位="电子工业出版社") 或 (出版单位="电子工业出版社" OR 出版单位="清华大学出版社") 或 (出版单位='清华大学出版社' OR 出版单位='电子工业出版社') 与 (出版单位="清华大学出版社" OR 出版单位="电子工业出版社") 或 (出版单位='清华大学出版社‘

第二套题 

选择题

1. 以下数据结构中不属于线性数据结构的是__C____

  A、队列 B、线性表 C、二叉树 D、栈

2. 在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是___B___

A、可行性分析 B、需求分析 C、详细设计 D、程序编码

3. 结构化程序设计主要强调的是_B_____

  A、程序的规模 B、程序的易读性 C、程序的执行效率 D、程序的可移植性

4. 在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是____D__

  A、概要设计 B、详细设计 C、可行性分析 D、需求分析

5. 下列关于栈的叙述中正确的是__D____

A、在栈中只能插入数据 B、在栈中只能删除数据

  C、栈是先进先出的线性表 D、栈是先进后出的线性表

6. 下面不属于软件设计原则的是___C___

A、抽象 B、模块化 C、自底向上 D、信息隐蔽

7. 对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为__B____

  AN+1 BN C(N+1)/2 DN/2

8. 视图设计一般有3种设计次序,下列不属于视图设计的是_B_____

  A、自顶向下 B、由外向内 C、由内向外 D、自底向上

9. 下列有关数据库的描述,正确的是____C__

A、数据库是一个DBF文件 B、数据库是一个关系

  C、数据库是一个结构化的数据集合 D、数据库是一组文件

10. 下列说法中,不属于数据模型所描述的内容的是_C_____

  A、数据结构 B、数据操作 C、数据查询 D、数据约束

11. 在下面的Visual FoxPro表达式中,运算结果是逻辑真的是___D___

  AEMPTY(.NULL.) BLIKE('acd','ac?') CAT('a','123abc') DEMPTY(SPACE(2))

12. 表达式VAL(SUBS("奔腾586",5,1))*Len("visual foxpro")的结果是__D____

  A13.00 B14.00 C45.00 D65.00

13. 以下关于自由表的叙述,正确的是__C____

  A、全部是用以前版本的FOXPRO(FOXBASE)建立的表

  B、可以用Visual FoxPro建立,但是不能把它添加到数据库中

  C、自由表可以添加到数据库中,数据库表也可以从数据库中移出成为自由表

  D、自由表可以添加到数据库中,但数据库表不可从数据库中移出成为自由表

14. 下面关于数据环境和数据环境中两个表之间的关系的陈述中,C______是正确的。

  A、数据环境是对象,关系不是对象 B、数据环境不是对象,关系是对象

  C、数据环境是对象,关系是数据环境中的对象 D、数据环境和关系均不是对象

15. "报表设计器"中,可以使用的控件是__A____

  A、标签、域控件和线条 B、标签、域控件和列表框

  C、标签、文本框和列表框 D、布局和数据源

16.用二维表数据来表示实体及实体之间联系的数据模型称为__D____

  A、实体--联系模型 B、层次模型 C、网状模型 D、关系模型

17. 用来指明复选框的当前选中状态的属性是___C___

ASelected BCaption CValue DControlSource

18. 使用菜单操作方法打开一个在当前目录下已经存在的查询文件zgjk.qpr后,在命令窗口生成的命令是__B__

  AOPEN QUERY zgjk.qpr BMODIFY QUERY zgjk.qpr

  CDO QUERY zgjk.qpr DCREATE QUERY zgjk.qpr

19. 可以伴随着表的打开而自动打开的索引是_____C_

A、单一索引文件(IDX) B、复合索引文件(CDX)

C、结构化复合索引文件 D、非结构化复合索引文件

20. 在数据库设计器中,建立两个表之间的一对多联系是通过以下索引实现的___A___

  A"一方"表的主索引或候选索引,"多方"表的普通索引

  B"一方"表的主索引,"多方"表的普通索引或候选索引

  C"一方"表的普通索引,"多方"表的主索引或候选索引

  D"一方"表的普通索引,"多方"表的候选索引或普通索引

21. 下列函数中函数值为字符型的是__B____。 

ADATE() BTIME() CYEAR() DDATETIME()

22. 下面对控件的描述正确的是____B__

  A、用户可以在组合框中进行多重选择 B、用户可以在列表框中进行多重选择

C、用户可以在一个选项组中选中多个选项按钮 

D、用户对一个表单内的一组复选框只能选中其中一个

23. 确定列表框内的某个条目是否被选定应使用的属性是_D_____

  AValue BColumnCount CListCount DSelected

24. 设有关系R1R2,经过关系运算得到结果S,则S_A_____

  A、一个关系 B、一个表单 C、一个数据库 D、一个数组

25. DBAS指的是___C___

A、数据库管理系统B、数据库系统C、数据库应用系统 D、数据库服务系统

26. X="ABC"Y="ABCD",则下列表达式中值为.T.的是_C_____

AX=Y BX==Y CX$Y DAT(X,Y)=0

27. 在表结构中,逻辑型、日期型、备注型字段的宽度分别固定为_D_____

  A3810 B164 C18,任意 D184

28. 在标准SQL中,建立视图的命令是_C_____

ACREATE SCHEMA命令 BCREATE TABLE命令 

CCREATE VIEW命令 DCREATE INDEX命令

29. 有关SCAN循环结构,叙述正确的是___B___

ASCAN循环结构中的LOOP语句,可将程序流程直接指向循环开始语句SCAN,首先判断EOF()函数的真假

  B、在使用SCAN循环结构时,必须打开某一个数据库

  CSCAN循环结构的循环体中必须写有SKIP语句

DSCAN循环结构,如果省略了子句\FORWHILE条件子句,则直接退出循环

30. 设有图书管理数据库:

  图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))

  读者(借书证号C(4),单位C(8),姓名C(6),性别C(2),职称C(6),地址C(20))

  借阅(借书证号C(4),总编号C(6),借书日期D(8))

  对于图书管理数据库,要查询所藏图书中,各个出版社的图书最高单价、平均单价和册数,下面SQL语句正确的是D______

  SELECT 出版单位,______,______,______;

  FROM 图书管理!图书 ______ 出版单位

AMIN(单价) AVGAGE(单价) COUNT(*) GROUP BY 

BMAX(单价) AVG(单价) COUNT(*) ORDER BY

CMAX(单价) AVG(单价) SUM(*) ORDER BY 

DMAX(单价) AVG(单价) COUNT(*) GROUP BY

31. 设有图书管理数据库:

  图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))

  读者(借书证号C(4),单位C(8),姓名C(6),性别C(2),职称C(6),地址C(20))

  借阅(借书证号C(4),总编号C(6),借书日期D(8))

  对于图书管理数据库,求CIE单位借阅图书的读者的人数。

  下面SQL语句正确的是A______

  SELECT ______ FROM 借阅 WHERE;

  借书证号 _______

ACOUNT (DISTINCT 借书证号)

IN (SELECT 借书证号 FROM 读者 WHERE 单位="CIE")

  BCOUNT (DISTINCT 借书证号)

  IN (SELECT 借书证号 FROM 借阅 WHERE 单位="CIE")

  CSUM (DISTINCT 借书证号)

  IN (SELECT 借书证号 FROM 读者 WHERE 单位="CIE")

  DSUM (DISTINCT 借书证号)

  IN (SELECT 借书证号 FOR 借阅 WHERE 单位="CIE")

32. 查询订购单号(字符型,长度为4)尾字符是"1"的错误命令是__C____

  ASELECT * FROM 订单 WHERE SUBSTR(订购单号,4)="1"

  BSELECT * FROM 订单 WHERE SUBSTR(订购单号,4,1)="1"

  CSELECT * FROM 订单 WHERE "1"$订购单号

  DSELECT * FROM 订单 WHERE RIGHT(订购单号,1)="1"

33. 在关系模型中,为了实现"关系中不允许出现相同元组"的约束应使用_B_____

  A、临时关键字 B、主关键字 C、外部关键字 D、索引关键字

34. 根据"职工"项目文件生成emp_sys.exe应用程序的命令是___B___

  ABUILD EXE emp_sys FROM 职工 BBUILD APP emp_sys.exe FROM 职工

  CLIKE EXE emp_sys FROM 职工 DLIKE APP emp_sys.exe FROM 职工

35. 当前盘当前目录下有数据库:学院.dbc,其中有"教师"表和"学院"表。

  "教师"表:

  "学院"表:

  有SQL语句:

  SELECT DISTINCT 系号 FROM 教师 WHERE 工资>=;

  ALL (SELECT 工资 FROM 教师 WHERE 系号="02")

  与如上语句等价的SQL语句是_A_____

  ASELECT DISTINCT 系号 FROM 教师 WHERE工资>=;

  (SELECT MAX(工资) FROM 教师 WHERE 系号="02")

  BSELECT DISTINCT 系号 FROM 教师 WHERE 工资>=;

  (SELECT MIN(工资) FROM 教师 WHERE 系号="02")

  CSELECT DISTINCT 系号 FROM 教师 WHERE 工资>=;

  ANY(SELECT 工资 FROM 教师 WHERE 系号="02")

  DSELECT DISTINCT 系号 FROM 教师 WHERE 工资>=;

  SOME (SELECT 工资 FROM 教师 WHERE 系号="02")

填空题

36. 若按功能划分,软件测试的方法通常分为白盒测试方法和__黑盒____测试方法。

37. 数据库系统的三级模式分别为_.概念或概念级_____模式、内部级模式与外部级模式。

38. 在最坏情况下,冒泡排序的时间复杂度为_ n(n-1)/2_____

39. 在面向对象方法中,信息隐蔽是通过对象的__封装____性来实现的。

40. 关系模型的数据操纵即是建立在关系上的数据操纵,一般有__查询____、增加、删除和修改四种操作。

41.要把帮助文件设置为复制到硬盘上的Foxhelp.chm文件,需要在"选项"对话框的文件位置______选项卡上设置。

42. TIME( )的返回值的数据类型是_字符 或 C _____类型。

43. 在定义字段有效性规则中,在规则框中输入的表达式中类型是__.逻辑表达式

______

44. 设计报表通常包括两部分内容:_.数据源_____和布局。

45. __内部联接____是指只有满足联接条件的记录才包含在查询结果中。

46. 设有图书管理数据库:

  图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2))

  读者(借书证号C(4),单位C(8),姓名C(6),性别C(2),职称C(6),地址C(20))

  借阅(借书证号C(4),总编号C(6),借书日期D(8))

  检索书价在15元至25(15元和25)之间的图书的书名、作者、书价和分类号,结果按分类号升序排序。

  SELECT 书名,作者,单价,分类号 FROM 图书;

  WHERE______;

  ORDER BY______;

47. 设有如下关系表RST

  R(BH,XM,XB,DWH)

  S(SWH,DWM)

  T(BH,XM,XB,DWH)

  实现RTSQL语句是_______

48. 设有如下关系表R

  R(NO,NAME,SEX,AGE,CLASS)

  主关键字是NO

  其中NO为学号,NAME为姓名,SEX为性别,AGE为年龄,CLASS为班号。写出实现下列功能的SQL语句。

  插入"95031"班学号为30,姓名为"郑和"的学生记录;_______

49. 设有如下关系表R

  R(NO,NAME,SEX,AGE,CLASS)

  主关键字是NO

  其中NO为学号(数值型)NAME为姓名,SEX为性别,AGE为年龄,CLASS为班号。写出实现下列功能的SQL语句。

  删除学号为20的学生记录;______

填空题答案

  46. 单价 BETWEEN 15 AND 25 或 单价 BETW 15 AND 25 或 单价 BETWE 15 AND 25 或 单价>=15 and 单价<=25 或单价>=15 and 单价=<25 或单价=>15 and 单价<=25 或单价=>15 and 单价=<25 与 分类号 ASC 或分类号

  47. SELECT * FROM R UNION SELECT * FROM T 或 SELE * FROM R UNIO SELE * FROM T 或 SELECT * FROM R UNIO SELECT * FROM T 或 SELE * FROM R UNION SELE * FROM T

  48. INSERT INTO R(NO,NAME,CLASS) VALUES(30,"郑和","95031") 或 INSE INTO R(NO,NAME,CLASS) VALUES(30,"郑和","95031")

49. DELETE FROM R WHERE NO=20 或 DELE FROM R WHERE NO=20 或 DELE FROM R WHER NO=20 或 DELETE FROM R WHER NO=20

SQL经典面试题及答案

1.一道SQL语句面试题,关于group by表内容:

2005-05-09 

2005-05-09 

2005-05-09 

2005-05-09 

2005-05-10 

2005-05-10 

2005-05-10 

 

如果要生成下列结果该如何写sql语句?

 

            胜 负

2005-05-09 2 2

2005-05-10 1 2

------------------------------------------

1)select rq, sum(case when shengfu='' then 1 else 0 end)'',sum(case when shengfu='' then 1 else 0 end)'' from #tmp group by rq

2) select N.rq,N.,M.負 from (

select rq,=count(*) from #tmp where shengfu=''group by rq)N inner join

(select rq,=count(*) from #tmp where shengfu=''group by rq)M on N.rq=M.rq

3)select a.col001,a.a1 ,b.b1 负 from

(select col001,count(col001) a1 from temp1 where col002='' group by col001) a,

(select col001,count(col001) b1 from temp1 where col002='' group by col001) b

where a.col001=b.col001

2.请教一个面试中遇到的SQL语句的查询问题

表中有A B C三列,SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。

------------------------------------------

select (case when a>b then a else b end ),

(case when b>c then b esle c end)

from table_name

3.面试题:一个日期判断的sql语句?

请取出tb_send表中日期(SendTime字段)为当天的所有记录?(SendTime字段为datetime型,包含日期与时间)

------------------------------------------

select * from tb where datediff(dd,SendTime,getdate())=0

4.有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路):  

   大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。  

       显示格式:  

       语文              数学                英语  

       及格              优秀                不及格    

------------------------------------------

select

(case when 语文>=80 then '优秀'

        when 语文>=60 then '及格'

else '不及格') as 语文,

(case when 数学>=80 then '优秀'

        when 数学>=60 then '及格'

else '不及格') as 数学,

(case when 英语>=80 then '优秀'

        when 英语>=60 then '及格'

else '不及格') as 英语,

from table

 

SQL Server 2000 数据库有三种类型的文件:

 

主要数据文件

主要数据文件是数据库的起点,指向数据库中文件的其它部分。每个数据库都有一个主要数据文件。主要数据文件的推荐文件扩展名是 .mdf

 

次要数据文件

次要数据文件包含除主要数据文件外的所有数据文件。有些数据库可能没有次要数据文件,而有些数据库则有多个次要数据文件。次要数据文件的推荐文件扩展名是 .ndf

 

日志文件

日志文件包含恢复数据库所需的所有日志信息。每个数据库必须至少有一个日志文件,但可以不止一个。日志文件的推荐文件扩展名是 .ldf

7.请用一个sql语句得出结果

table1,table2中取出如table3所列格式数据,注意提供的数据及结果不准确,只是作为一个格式向大家请教。

如使用存储过程也可以。

 

table1

 

月份mon 部门dep 业绩yj

-------------------------------

一月份      01      10

一月份      02      10

一月份      03      5

二月份      02      8

二月份      04      9

三月份      03      8

 

table2

 

部门dep      部门名称dname

--------------------------------

      01      国内业务一部

      02      国内业务二部

      03      国内业务三部

      04      国际业务部

 

table3 result

 

部门dep 一月份      二月份      三月份

--------------------------------------

      01      10        null      null

      02      10         8        null

      03      null       5        8

      04      null      null      9

------------------------------------------

1)

select a.部门名称dname,b.业绩yj as '一月份',c.业绩yj as '二月份',d.业绩yj as '三月份'

from table1 a,table2 b,table2 c,table2 d

where a.部门dep = b.部门dep and b.月份mon = '一月份' and

a.部门dep = c.部门dep and c.月份mon = '二月份' and

a.部门dep = d.部门dep and d.月份mon = '三月份' and

2)

select a.dep,

sum(case when b.mon=1 then b.yj else 0 end) as '一月份',

sum(case when b.mon=2 then b.yj else 0 end) as '二月份',

sum(case when b.mon=3 then b.yj else 0 end) as '三月份',

sum(case when b.mon=4 then b.yj else 0 end) as '四月份',

sum(case when b.mon=5 then b.yj else 0 end) as '五月份',

sum(case when b.mon=6 then b.yj else 0 end) as '六月份',

sum(case when b.mon=7 then b.yj else 0 end) as '七月份',

sum(case when b.mon=8 then b.yj else 0 end) as '八月份',

sum(case when b.mon=9 then b.yj else 0 end) as '九月份',

sum(case when b.mon=10 then b.yj else 0 end) as '十月份',

sum(case when b.mon=11 then b.yj else 0 end) as '十一月份',

sum(case when b.mon=12 then b.yj else 0 end) as '十二月份',

from table2 a left join table1 b on a.dep=b.dep

 

Sql常见面试题

1.用一条SQL语句 查询出每门课都大于80分的学生姓名  

name   kecheng   fenshu 

张三     语文       81

张三     数学       75

李四     语文       76

李四     数学       90

王五     语文       81

王五     数学       100

王五     英语       90

A: select distinct name from table  where  name not in (select distinct name from table where fenshu<=80)

 

2.学生表 如下:

自动编号   学号   姓名 课程编号 课程名称 分数

1        2005001  张三  0001      数学    69

2        2005002  李四  0001      数学    89

3        2005001  张三  0001      数学    69

删除除了自动编号不同,其他都相同的学生冗余信息

 

A: delete tablename where 自动编号 not in(select min(自动编号) from tablename group by 学号,姓名,课程编号,课程名称,分数)

一个叫department的表,里面只有一个字段name,一共有4条纪录,分别是a,b,c,d,对应四个球对,现在四个球对进行比赛,用一条sql语句显示所有可能的比赛组合.

你先按你自己的想法做一下,看结果有我的这个简单吗?

答:select a.name, b.name 

from team a, team b 

 

常用数据库面试题

为管理岗位业务培训信息,建立3个表:

  S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄

  C (C#,CN ) C#,CN 分别代表课程编号、课程名称

  SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩

  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嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位

  --实现代码:

  Select S.SN,S.SD FROM S,SC

  Where S.[S#]=SC.[S#]

  AND SC.[C#]='C2'

 

  3. 使用标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位

  --实现代码:

  Select SN,SD FROM S

  Where [S#] NOT IN(

  Select [S#] FROM SC

  Where [C#]='C5')

 

  4. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位

http://www.ad0.cn/netfetch/

  --实现代码:

  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([S#]))

 

  5. 查询选修了课程的学员人数

  --实现代码:

  Select 学员人数=COUNT(DISTINCT [S#]) FROM SC

 

  6. 查询选修课程超过5门的学员学号和所属单位

  --实现代码:

  Select SN,SD FROM S

  Where [S#] IN(

  Select [S#] FROM SC

  GROUP BY [S#]

  HAVING COUNT(DISTINCT [C#])>5)

 

题目2

  问题描述:

  已知关系模式:

  S (SNO,SNAME) 学生关系。SNO 为学号,SNAME 为姓名

  C (CNO,CNAME,CTEACHER) 课程关系。CNO 为课程号,CNAME 为课程名,CTEACHER 为任课教师

  SC(SNO,CNO,SCGRADE) 选课关系。SCGRADE 为成绩

 

  1. 找出没有选修过“李明”老师讲授课程的所有学生姓名

  --实现代码:

  Select SNAME FROM S

  Where NOT EXISTS(

  Select * FROM SC,C

  Where SC.CNO=C.CNO

  AND CNAME='李明'

  AND SC.SNO=S.SNO)

 

  2. 列出有二门以上(含两门)不及格课程的学生姓名及其平均成绩

  --实现代码:

  Select S.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE)

  FROM S,SC,(

  Select SNO

  FROM SC

  Where SCGRADE<60

  GROUP BY SNO

  HAVING COUNT(DISTINCT CNO)>=2

  )A Where S.SNO=A.SNO AND SC.SNO=A.SNO

  GROUP BY S.SNO,S.SNAME

 

  3. 列出既学过“1”号课程,又学过“2”号课程的所有学生姓名

  --实现代码:

  Select S.SNO,S.SNAME

  FROM S,(

  Select SC.SNO

  FROM SC,C

  Where SC.CNO=C.CNO

  AND C.CNAME IN('1','2')

  GROUP BY SNO

  HAVING COUNT(DISTINCT CNO)=2

  )SC Where S.SNO=SC.SNO

 

  4. 列出“1”号课成绩比“2”号同学该门课成绩高的所有学生的学号

  --实现代码:

  Select S.SNO,S.SNAME

  FROM S,(

  Select SC1.SNO

  FROM SC SC1,C C1,SC SC2,C C2

  Where SC1.CNO=C1.CNO AND C1.NAME='1'

  AND SC2.CNO=C2.CNO AND C2.NAME='2'

  AND SC1.SCGRADE>SC2.SCGRADE

  )SC Where S.SNO=SC.SNO

 

  5. 列出“1”号课成绩比“2”号课成绩高的所有学生的学号及其“1”号课和“2”号课的成绩

  --实现代码:

  Select S.SNO,S.SNAME,SC.[1号课成绩],SC.[2号课成绩]

  FROM S,(

  Select SC1.SNO,[1号课成绩]=SC1.SCGRADE,[2号课成绩]=SC2.SCGRADE

  FROM SC SC1,C C1,SC SC2,C C2

  Where SC1.CNO=C1.CNO AND C1.NAME='1'

  AND SC2.CNO=C2.CNO AND C2.NAME='2'

  AND SC1.SCGRADE>SC2.SCGRADE

)SC Where S.SNO=SC.SNO

 

                    -------------------------------似水无痕O(_)O~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SQL基础

规律:数字不用单引号,字符用单引号

选择

1. 假设有一个名为email_table 的表,包含名字和地址两个字段,要得到Bill Gates 的e_mail地址,你可以使用下面的查询:

SELECT email from email_table WHERE name=’Bill Gates’

 

2. 前面说过,查询可以在查询条件中包含逻辑运算符。假如你想读取Bill Gates 或Clinton总统的所有email地址,你可以使用下面的查询语句:

SELECT  email  FROM  email_table  WHERE  name=Bill Gates’ OR name=president  Clinton

(select name,email,[add] from name  where name='zhd') 单词不完整时,默认加[ ]

 

3. 你可以在一个SELECT语句中一次取出多个字段,比如:

SELECT au_fname ,au_lname, phone FROM authors

在SELECT语句中,你需要列出多少个字段,你就可以列出多少。不要忘了把字段名用逗号隔开。你也可以用星号(*)从一个表中取出所有的字段。这里有一个使用星号的例子:

SELECT  *  FROM  authors

(SELECT  *  FROM  NAME,NAME1)

 

4. 你也可以用一个SELECT语句同时从多个表中取出数据,只需在SELECT语句的FROM从句中列出要从中取出数据的表名称即可:

SELECT  au_name,title FROM authors,titles,titleauthor

WHERE  authors.au_id=titleauthor.au_id

AND  titles.title_id=titleauthor.title_id

 

5. 要指明表titles和表publishers之间的关系,你只要让这两个表有一个公共的字段就可以了。在数据库pubs中,表titles和表publishers都有一个名为pub_id的字段。如果你想得到书名及其出版商的一个列表,你可以使用如下的语句:

SELECT  title,pub_name  FROM  titles,publishers

WHERE titles.pub_id=publishers.pub_id

 

6. 在SELECT语句中,你可以在缺省字段名后面仅跟一个新名字来取代它。例如,可以用一个更直观易读的名字Author Last Name来代替字段名au_lname:

SELECT au_lname ‘Author Last Name’ FROM authors

当这个SELECT语句执行时,来自字段au_lname的值会与“Author Last Name”相联系。查询结果可能是这样:

      Author Last Name 

      White

      Green

      Carson

      OLeary

      Straight 

注意字段标题不再是au_lname,而是被Author Last Name所取代。

 

7. 如果你想把表titles中的所有书的价格加倍,你可以使用下面的SELECT语句:

SELECT  price*2 FROM titles       

当这个查询执行时,每本书的价格从表中取出时都会加倍。但是,通过这种途径操作字段不会改变存储在表中的书价。对字段的运算只会影响SELECT语句的输出,而不会影响表中的数据。为了同时显示书的原始价格和涨价后的新价格,你可以使用下面的查询:

SELECT  price  "Original  price", price*2  "New price" FROM  titles

当数据从表titles中取出时,原始价格显示在标题Original price下面,加倍后的价格显示在标题New price下面。结果可能是这样:

      original  price         new  price

19.99 39.98

11.95                 23.90 

2.99 5.98

19.99 39.98

19.100 

8. 你可以使用大多数标准的数学运算符来操作字段值,如加(+),减(-),乘(*)和除(/)。你也可以一次对多个字段进行运算,例如:

SELECT  price*ytd_sales ‘total revenue’ FROM titles

在这个例子中,通过把价格与销售量相乘,计算出了每种书的总销售额。这个SELECT语句的结果将是这样的:

      total  revenue

      81,859,05

      46,318,20

      55,978,78

      81,859,05

      40,619,68

      

最后,你还可以使用连接运算符(它看起来像个加号)来连接两个字符型字段:

SELECT  au_fname+’ ’+au_lname’author name’ FROM authors

(Select au_fname+au_lnameauthor name from authors)

这个语句的执行结果将是这样的:

       author  names

       Johnson White

       Marjorie Green

       Cheryl  Carson

      Michael OLeary

      Dean Straight

      …

      (23 row(s)  affected)

 

排序

通过使用ORDER BY子句,你可以强制一个查询结果按升序排列,就像这样:

SELECT au_lname FROM  authors  ORDER  BY  au_lname

当这个SELECT语句执行时,作者名字的显示将按字母顺序排列。ORDER BY子句将作者名字按升序排列。

你也可以同时对多个列使用ORDER BY子句。例如,如果你想同时按升序显示字段au_lname和字段au_fname,你需要对两个字段都进行排序:

SELECT au_lname,au_fname FROM authors ORDER BY au_lname ,au_fname

这个查询首先把结果按au_lname字段进行排序,然后按字段au_fname排序。记录将按如下的顺序取出:

      au_lname                         au_fname

      …………………………………………………………………….

      Bennet                           Abraham

      Ringer                            Albert

      Ringer                            Anne

      Smith                             Meander

    

如果你想把查询结果按降序排列,你可以使用关键字DESC。

SELECT  au_lname,au_fname  FROM authors 

WHERE au_lname=Ringer’  ORDER BY  au_lname ,au_fname  DESC

这个查询从表authors中取出所有名字为Ringer的作者记录。ORDER BY子句根据作者的名字和姓,将查询结果按降序排列。结果是这样的:

      au_lname                          au_fname

      ……………………………………………………………………………………….

      Ringer                             Anne

      Ringer                             Albert

      (2 row(s)  affectec)

取出互不相同的值

一个表有可能在同一列中有重复的值。例如,数据库pubs的表authors中有两个作者的名字是Ringer。如果你从这个表中取出所有的名字,名字Ringer将会显示两次。

在特定情况下,你可能只有兴趣从一个表中取出互不相同的值。如果一个字段有重复的值,你也许希望每个值只被选取一次,你可以使用关键字DISTINCT来做到这一点:

SELCET  DISTINCT au_lname  FROM  authors   WHERE  au_lname=’Ringer’

 

警告:如同ORDER BY子句一样,强制服务器返回互不相同的值也会增加运行开销。不得不花费一些时间来完成这项工作。因此,不是必须的时候不要使用关键字DISTINCT。

 

创建表

在查询窗口中键入下面的SQL语句,单击执行查询按钮,执行这个语句:

CREATE  TABLE  guestbook (visitor VARCHAR(40),comments TEXT,entrydate DATETIME)

                                        

删除表和修改表

1. 要删除一个表,你可以使用SQL语句DROP TABLE。    

DROP TABLE mytable

添加 修改 删除数据

添加:向表中添加新记录

INSERT mytable (first_column,second_column,third_column)

Student(S#,Sname,Sage,Ssex) 学生表       S#:学号;Sname:学生姓名;Sage:学生年龄;Ssex:学生性别

Course(C#,Cname,T#) 课程表                    C#,课程编号;Cname:课程名字;T#:教师编号

SC(S#,C#,score) 成绩表                             S#:学号;C#,课程编号;score:成绩

Teacher(T#,Tname) 教师表                        T#:教师编号; Tname:教师名字

 

问题: 

1、查询“001”课程比“002”课程成绩高的所有学生的学号; 

  select a.S# from (select s#,score from SC where C#='001') a,(select s#,score 

  from SC where C#='002') b 

  where a.score>b.score and a.s#=b.s#; 

2、查询平均成绩大于60分的同学的学号和平均成绩; 

    select S#,avg(score) 

    from sc 

    group by S# having avg(score) >60; 

3、查询所有同学的学号、姓名、选课数、总成绩; 

  select Student.S#,Student.Sname,count(SC.C#),sum(score) 

  from Student left Outer join SC on Student.S#=SC.S# 

  group by Student.S#,Sname 

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

  select count(distinct(Tname)) 

  from Teacher 

  where Tname like '李%'; 

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

    select Student.S#,Student.Sname 

    from Student  

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

6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名; 

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

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

  select S#,Sname 

  from Student 

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

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

  Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2 

  from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 <score; 

9、查询所有课程成绩小于60分的同学的学号、姓名; 

  select S#,Sname 

  from Student 

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

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

    select Student.S#,Student.Sname 

    from Student,SC 

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

 

11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名; 

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

12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名; 

    select distinct SC.S#,Sname 

    from Student,SC 

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

13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩; 

    update SC set score=(select avg(SC_2.score) 

    from SC SC_2 

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

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

    select S# from SC where C# in (select C# from SC where S#='1002') 

    group by S# having count(*)=(select count(*) from SC where S#='1002'); 

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

    Delect SC 

    from course ,Teacher  

    where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平'; 

16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、 

    号课的平均成绩; 

    Insert SC select S#,'002',(Select avg(score) 

    from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002'); 

17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示: 学生ID,,数据库,企业管理,英语,有效课程数,有效平均分 

    SELECT S# as 学生ID 

        ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 数据库 

        ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企业管理 

        ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英语 

        ,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均成绩 

    FROM SC AS t 

    GROUP BY S# 

    ORDER BY avg(t.score)  

18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分 

    SELECT L.C# As 课程ID,L.score AS 最高分,R.score AS 最低分 

    FROM SC L ,SC AS R 

    WHERE L.C# = R.C# and 

        L.score = (SELECT MAX(IL.score) 

                      FROM SC AS IL,Student AS IM 

                      WHERE L.C# = IL.C# and IM.S#=IL.S# 

                      GROUP BY IL.C#) 

        AND 

        R.Score = (SELECT MIN(IR.score) 

                      FROM SC AS IR 

                      WHERE R.C# = IR.C# 

                  GROUP BY IR.C# 

                    ); 

19、按各科平均成绩从低到高和及格率的百分数从高到低顺序 

    SELECT t.C# AS 课程号,max(course.Cname)AS 课程名,isnull(AVG(score),0) AS 平均成绩 

        ,100 * SUM(CASE WHEN  isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数 

    FROM SC T,Course 

    where t.C#=course.C# 

    GROUP BY t.C# 

    ORDER BY 100 * SUM(CASE WHEN  isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC 

20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004) 

    SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分 

        ,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分数 

        ,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分 

        ,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数 

        ,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分 

        ,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分数 

        ,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分 

        ,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 数据库及格百分数 

  FROM SC 

21、查询不同老师所教不同课程平均分从高到低显示 

  SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,MAX(C.Cname) AS 课程名称,AVG(Score) AS 平均成绩 

    FROM SC AS T,Course AS C ,Teacher AS Z 

    where T.C#=C.C# and C.T#=Z.T# 

  GROUP BY C.C# 

  ORDER BY AVG(Score) DESC 

22、查询如下课程成绩第 3 名到第 6 名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004) 

    [学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩 

    SELECT  DISTINCT top 3 

      SC.S# As 学生学号, 

        Student.Sname AS 学生姓名 , 

      T1.score AS 企业管理, 

      T2.score AS 马克思, 

      T3.score AS UML, 

      T4.score AS 数据库, 

      ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 总分 

      FROM Student,SC  LEFT JOIN SC AS T1 

                      ON SC.S# = T1.S# AND T1.C# = '001' 

            LEFT JOIN SC AS T2 

                      ON SC.S# = T2.S# AND T2.C# = '002' 

            LEFT JOIN SC AS T3 

                      ON SC.S# = T3.S# AND T3.C# = '003' 

            LEFT JOIN SC AS T4 

                      ON SC.S# = T4.S# AND T4.C# = '004' 

      WHERE student.S#=SC.S# and 

      ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) 

      NOT IN 

      (SELECT 

            DISTINCT 

            TOP 15 WITH TIES 

            ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) 

      FROM sc 

            LEFT JOIN sc AS T1 

                      ON sc.S# = T1.S# AND T1.C# = 'k1' 

            LEFT JOIN sc AS T2 

                      ON sc.S# = T2.S# AND T2.C# = 'k2' 

            LEFT JOIN sc AS T3 

                      ON sc.S# = T3.S# AND T3.C# = 'k3' 

            LEFT JOIN sc AS T4 

                      ON sc.S# = T4.S# AND T4.C# = 'k4' 

      ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC); 

 

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

    SELECT SC.C# as 课程ID, Cname as 课程名称 

        ,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85] 

        ,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70] 

        ,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60] 

        ,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -] 

    FROM SC,Course 

    where SC.C#=Course.C# 

    GROUP BY SC.C#,Cname; 

 

24、查询学生平均成绩及其名次 

      SELECT 1+(SELECT COUNT( distinct 平均成绩) 

              FROM (SELECT S#,AVG(score) AS 平均成绩 

                      FROM SC 

                  GROUP BY S# 

                  ) AS T1 

            WHERE 平均成绩 > T2.平均成绩) as 名次, 

      S# as 学生学号,平均成绩 

    FROM (SELECT S#,AVG(score) 平均成绩 

            FROM SC 

        GROUP BY S# 

        ) AS T2 

    ORDER BY 平均成绩 desc; 

  

25、查询各科成绩前三名的记录:(不考虑成绩并列情况) 

      SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数 

      FROM SC t1 

      WHERE score IN (SELECT TOP 3 score 

              FROM SC 

              WHERE t1.C#= C# 

            ORDER BY score DESC 

              ) 

      ORDER BY t1.C#; 

26、查询每门课程被选修的学生数 

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

27、查询出只选修了一门课程的全部学生的学号和姓名 

  select SC.S#,Student.Sname,count(C#) AS 选课数 

  from SC ,Student 

  where SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1; 

28、查询男生、女生人数 

    Select count(Ssex) as 男生人数 from Student group by Ssex having Ssex='男'; 

    Select count(Ssex) as 女生人数 from Student group by Ssex having Ssex='女'; 

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

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

30、查询同名同性学生名单,并统计同名人数 

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

31、1981年出生的学生名单(注:Student表中Sage列的类型是datetime) 

    select Sname,  CONVERT(char (11),DATEPART(year,Sage)) as age 

    from student 

    where  CONVERT(char(11),DATEPART(year,Sage))='1981'; 

32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列 

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

33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩 

    select Sname,SC.S# ,avg(score) 

    from Student,SC 

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

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

    Select Sname,isnull(score,0) 

    from Student,SC,Course 

    where SC.S#=Student.S# and SC.C#=Course.C# and  Course.Cname='数据库'and score <60; 

35、查询所有学生的选课情况; 

    SELECT SC.S#,SC.C#,Sname,Cname 

    FROM SC,Student,Course 

    where SC.S#=Student.S# and SC.C#=Course.C# ; 

36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数; 

    SELECT  distinct student.S#,student.Sname,SC.C#,SC.score 

    FROM student,Sc 

    WHERE SC.score>=70 AND SC.S#=student.S#; 

37、查询不及格的课程,并按课程号从大到小排列 

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

38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名; 

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

39、求选了课程的学生人数 

    select count(*) from sc; 

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

    select Student.Sname,score 

    from Student,SC,Course C,Teacher 

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

41、查询各个课程及相应的选修人数 

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

42、查询不同课程成绩相同的学生的学号、课程号、学生成绩 

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

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

    SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数 

      FROM SC t1 

      WHERE score IN (SELECT TOP 2 score 

              FROM SC 

              WHERE t1.C#= C# 

            ORDER BY score DESC 

              ) 

      ORDER BY t1.C#; 

44、统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,查询结果按人数降序排列,若人数相同,按课程号升序排列  

    select  C# as 课程号,count(*) as 人数 

    from  sc  

    group  by  C# 

    order  by  count(*) desc,c#  

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

    select  S#  

    from  sc  

    group  by  s# 

    having  count(*)  >  =  2 

46、查询全部学生都选修的课程的课程号和课程名 

    select  C#,Cname  

    from  Course  

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

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

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

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

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

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

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

50、删除“002”同学的“001”课程的成绩 

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

       

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页