SQL编程练习题
- 格式:doc
- 大小:54.50 KB
- 文档页数:8
sql 五十题以下是一些SQL练习题,共50题:1. 什么是SQL?2. 什么是关系型数据库?3. 什么是主键?4. 什么是外键?5. 什么是索引?6. 什么是查询?7. 什么是插入操作?8. 什么是更新操作?9. 什么是删除操作?10. 什么是聚合函数?11. 什么是分组操作?12. 什么是排序操作?13. 什么是联接操作?14. 什么是子查询?15. 什么是视图?16. 什么是存储过程?17. 什么是触发器?18. 如何使用WHERE子句进行过滤?19. 如何使用ORDER BY子句进行排序?20. 如何使用GROUP BY子句进行分组?21. 如何使用HAVING子句进行分组过滤?22. 如何使用JOIN操作联接表?23. 如何使用聚合函数SUM、AVG、MIN、MAX?24. 如何使用聚合函数COUNT、COUNT()和COUNT(列名)的区别?25. 如何使用子查询嵌套查询?26. 如何创建视图并查询视图数据?27. 如何创建存储过程并调用存储过程?28. 如何创建触发器并触发触发器?29. 如何使用INSERT INTO语句插入数据?30. 如何使用UPDATE语句更新数据?31. 如何使用DELETE语句删除数据?32. 如何使用TRUNCATE TABLE语句清空表数据?33. 如何使用UNION操作符合并多个查询结果?34. 如何使用UNION ALL操作符合并多个查询结果(包括重复行)?35. 如何使用IN操作符筛选符合条件的多个值?36. 如何使用LIKE操作符进行模糊查询?37. 如何使用NOT操作符进行否定筛选?38. 如何使用BETWEEN操作符筛选范围值?39. 如何使用EXISTS操作符检查子查询结果是否存在?40. 如何使用NOT EXISTS操作符检查子查询结果是否存在(否定筛选)?41. 如何使用CASE语句进行条件判断和值转换?42. 如何使用DISTINCT关键字去除查询结果的重复行?43. 如何使用LIMIT关键字限制查询结果的行数?44. 如何使用JOIN操作连接多个表并筛选数据?45. 如何使用INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN的区别和用法?46. 如何使用视图提高查询效率和维护数据安全性?47. 如何使用存储过程存储复杂的业务逻辑和重复使用的查询语句?48. 如何使用触发器自动执行特定事件或数据修改操作?49. 如何优化SQL查询性能,提高数据库的响应速度?50. 如何安全地管理和维护数据库,确保数据的完整性和可靠性?。
SQL基础知识题库100道及答案(完整版)1. 在SQL 中,用于创建表的语句是()A. CREATE TABLEB. INSERT INTOC. UPDATED. DELETE答案:A2. 以下哪个关键字用于在SQL 中添加数据()A. ADDB. INSERTC. APPENDD. PUT答案:B3. 在SQL 中,用于从表中检索数据的语句是()A. SELECTB. GETC. FETCHD. REQUEST答案:A4. 以下哪个关键字用于在SQL 中更新数据()A. MODIFYB. CHANGEC. UPDATED. REPLACE答案:C5. 要从表中删除数据,应使用的SQL 语句是()A. DROPB. DELETEC. REMOVED. CLEAR答案:B6. SQL 中用于创建索引的关键字是()A. CREATE INDEXB. MAKE INDEXC. BUILD INDEXD. ESTABLISH INDEX答案:A7. 以下哪种数据类型用于存储整数()A. INTB. FLOATC. VARCHARD. DATE答案:A8. 用于存储字符串的常见数据类型是()A. CHARB. INTC. DECIMALD. DOUBLE答案:A9. 在SQL 中,用于对结果集进行排序的关键字是()A. SORTB. ORDER BYC. ARRANGED. ALIGN答案:B10. 以下哪个运算符用于等于比较()A. =B. ==C. <>D. >答案:A11. 用于不等于比较的运算符是()A.!=B. < >C. NOT EQUALSD. DIFFERENT答案:B12. 以下哪个运算符用于大于比较()A. >B. >=C. <D. <=答案:A13. 用于小于比较的运算符是()A. <B. <=C. >D. >=答案:A14. 以下哪个关键字用于在SQL 中进行分组操作()A. GROUP BYB. SORT BYC. CLASSIFY BYD. CATEGORIZE BY答案:A15. 聚合函数SUM 用于()A. 计算总和B. 计算平均值C. 计算数量D. 计算最小值答案:A16. 聚合函数AVG 用于()A. 计算总和B. 计算平均值C. 计算数量D. 计算最大值答案:B17. COUNT 函数用于()A. 计算总和B. 计算平均值C. 计算数量D. 计算最小值答案:C18. MAX 函数用于()A. 计算总和B. 计算平均值C. 计算最大值D. 计算最小值答案:C19. MIN 函数用于()A. 计算总和B. 计算平均值C. 计算最大值D. 计算最小值答案:D20. 在SQL 中,用于连接两个表的关键字是()A. JOINB. CONNECTC. LINKD. BIND答案:A21. 内连接使用的关键字是()A. INNER JOINB. LEFT JOINC. RIGHT JOIND. FULL JOIN答案:A22. 左连接使用的关键字是()A. INNER JOINB. LEFT JOINC. RIGHT JOIND. FULL JOIN答案:B23. 右连接使用的关键字是()A. INNER JOINB. LEFT JOINC. RIGHT JOIND. FULL JOIN答案:C24. 全连接使用的关键字是()A. INNER JOINB. LEFT JOINC. RIGHT JOIND. FULL JOIN答案:D25. 在SQL 中,用于限制结果集行数的关键字是()A. LIMITB. RESTRICTC. BOUNDD. CONSTRAINT答案:A26. 以下哪个子句用于在SQL 中进行条件筛选()A. WHEREB. HAVINGC. FROMD. GROUP BY答案:A27. HAVING 子句通常与()一起使用A. GROUP BYB. ORDER BYC. WHERED. FROM答案:A28. 在SQL 中,用于创建视图的语句是()A. CREATE VIEWB. MAKE VIEWC. BUILD VIEWD. ESTABLISH VIEW 答案:A29. 以下哪个关键字用于删除视图()A. DROP VIEWB. DELETE VIEWC. REMOVE VIEWD. CLEAR VIEW 答案:A30. 要在SQL 中添加注释,可以使用()A. //B. /* */C. #D. --答案:D31. 在SQL 中,以下哪种数据类型用于存储日期和时间()A. DATEB. TIMEC. DATETIMED. TIMESTAMP答案:C32. 用于提取日期部分的函数是()A. DATEPART()B. DAY()C. MONTH()D. YEAR()答案:A33. 以下哪个函数用于计算字符串的长度()A. LENGTH()B. SIZE()C. COUNT()D. LEN()答案:A34. 在SQL 中,用于将字符串转换为大写的函数是()A. UPPER()B. TO_UPPER()C. CAPITALIZE()D. BIGCASE()答案:A35. 用于将字符串转换为小写的函数是()A. LOWER()B. TO_LOWER()C. SMALLCASE()D. DECAPITALIZE()答案:A36. 以下哪个函数用于去除字符串两端的空格()A. TRIM()B. CLEAN()C. REMOVE_SPACES()D. STRIP()答案:A37. 在SQL 中,用于执行事务的语句是()A. BEGIN TRANSACTIONB. START TRANSACTIONC. OPEN TRANSACTIOND. INITIATE TRANSACTION答案:A38. 提交事务使用的语句是()A. COMMITB. SUBMITC. CONFIRMD. VALIDATE答案:A39. 回滚事务使用的语句是()A. ROLLBACKB. REVERTC. CANCELD. ABORT答案:A40. 以下哪个关键字用于在SQL 中创建存储过程()A. CREATE PROCEDUREB. MAKE PROCEDUREC. BUILD PROCEDURED. ESTABLISH PROCEDURE答案:A41. 调用存储过程使用的语句是()A. EXECUTEB. CALLC. INVOKED. RUN答案:B42. 在SQL 中,用于删除存储过程的语句是()A. DROP PROCEDUREB. DELETE PROCEDUREC. REMOVE PROCEDURED. CLEAR PROCEDURE答案:A43. 以下哪个关键字用于在SQL 中创建触发器()A. CREATE TRIGGERB. MAKE TRIGGERC. BUILD TRIGGERD. ESTABLISH TRIGGER44. 删除触发器使用的语句是()A. DROP TRIGGERB. DELETE TRIGGERC. REMOVE TRIGGERD. CLEAR TRIGGER答案:A45. 在SQL 中,用于授予权限的语句是()A. GRANTB. ALLOWC. PERMITD. AUTHORIZE答案:A46. 收回权限使用的语句是()A. REVOKEB. DENYC. REFUSED. FORBID答案:A47. 以下哪个关键字用于在SQL 中创建索引的唯一性约束()A. UNIQUEB. PRIMARY KEYC. FOREIGN KEYD. CHECK答案:A48. 用于定义主键约束的关键字是()A. PRIMARY KEYB. UNIQUE KEYC. FOREIGN KEYD. INDEX KEY答案:A49. 外键约束使用的关键字是()A. FOREIGN KEYB. OUTER KEYC. RELATED KEYD. REFERENCED KEY答案:A50. 以下哪个约束用于检查数据的有效性()A. CHECKB. VALIDATEC. INSPECTD. VERIFY答案:A51. 在SQL 中,以下哪个语句用于创建数据库()A. CREATE DATABASEB. MAKE DATABASEC. BUILD DATABASED. ESTABLISH DATABASE 答案:A52. 要删除数据库,应使用的语句是()A. DROP DATABASEB. DELETE DATABASEC. REMOVE DATABASED. CLEAR DATABASE 答案:A53. 以下哪个关键字用于在SQL 中切换数据库()A. USEB. SELECT DBC. CHANGE DBD. SWITCH DB答案:A54. 在SQL 中,以下哪种操作可以对多个表同时进行()A. 联合查询B. 子查询C. 交叉连接D. 内连接55. 子查询可以在以下哪个子句中使用()A. SELECTB. FROMC. WHERED. 以上都可以答案:D56. 以下哪个语句用于在SQL 中创建用户()A. CREATE USERB. MAKE USERC. BUILD USERD. ESTABLISH USER答案:A57. 删除用户使用的语句是()A. DROP USERB. DELETE USERC. REMOVE USERD. CLEAR USER答案:A58. 在SQL 中,用于修改表结构的语句是()A. ALTER TABLEB. MODIFY TABLEC. CHANGE TABLED. UPDATE TABLE答案:A59. 以下哪个操作可以添加列到表中()A. ADD COLUMNB. INSERT COLUMNC. APPEND COLUMND. PUT COLUMN答案:A60. 要删除表中的列,应使用()A. DROP COLUMNB. DELETE COLUMNC. REMOVE COLUMND. CLEAR COLUMN答案:A61. 在SQL 中,以下哪个关键字用于对结果集进行分页()A. PAGEB. PAGINGC. OFFSETD. LIMIT答案:D62. 以下哪个函数用于返回当前日期()A. CURDATE()B. NOW()C. CURRENT_DATE()D. TODAY()答案:C63. 用于返回当前时间的函数是()A. CURTIME()B. NOW()C. CURRENT_TIME()D. THIS_TIME()答案:C64. 在SQL 中,以下哪个关键字用于为表中的列设置默认值()A. DEFAULTB. INITIALC. BASED. START答案:A65. 以下哪个语句用于在SQL 中重命名表()A. RENAME TABLEB. MODIFY TABLE NAMEC. CHANGE TABLE NAMED. UPDATE TABLE答案:A66. 要获取表的结构信息,可以使用以下哪个语句()A. DESCRIBE TABLEB. SHOW TABLE STRUCTUREC. EXPLAIN TABLED. GET TABLE DETAILS答案:A67. 在SQL 中,以下哪个关键字用于在查询结果中去除重复行()A. DISTINCTB. UNIQUEC. SINGLED. ONLY答案:A68. 以下哪个函数用于对字符串进行拼接()A. CONCAT()B. JOIN()C. MERGE()D. COMBINE()答案:A69. 在SQL 中,用于创建临时表的关键字是()A. TEMPORARY TABLEB. TEMP TABLEC. TRANSIENT TABLED. SHORT_LIVED TABLE答案:A70. 以下哪个语句用于在SQL 中为列添加注释()A. COMMENT ON COLUMNB. NOTE ON COLUMNC. REMARK ON COLUMND. EXPLAIN COLUMN答案:A71. 在SQL 中,以下哪个关键字用于在子查询中引用外部查询的结果()A. CORRELATEDB. RELATEDC. CONNECTEDD. LINKED答案:A72. 以下哪个操作符用于在SQL 中进行范围查询()A. BETWEENB. INC. LIKED. EXISTS答案:A73. 用于模糊匹配的操作符是()A. LIKEB. SIMILARC. MATCHD. CLOSE_TO答案:A74. 在SQL 中,以下哪个关键字用于对查询结果进行排序时按照多个列进行()A. ORDER BY MULTIPLEB. SORT BY SEVERALC. ORDER BY MORE THAN ONED. ORDER BY MULTIPLE COLUMNS答案:D75. 以下哪个函数用于返回字符串的子串()A. SUBSTRING()B. PART()C. SEGMENT()D. SLICE()答案:A76. 在SQL 中,以下哪个关键字用于在存储过程中定义输入参数()A. INB. OUTC. INOUTD. PARAMETER答案:A77. 用于定义输出参数的关键字是()A. INB. OUTC. INOUTD. PARAMETER答案:B78. 以下哪个关键字用于在存储过程中定义既可以输入又可以输出的参数()A. INB. OUTC. INOUTD. PARAMETER答案:C79. 在SQL 中,以下哪个关键字用于在创建表时指定自增列()A. AUTO_INCREMENTB. SELF_INCREMENTC. AUTO_GROWD. SELF_GROW答案:A80. 以下哪个语句用于在SQL 中创建序列()A. CREATE SEQUENCEB. MAKE SEQUENCEC. BUILD SEQUENCED. ESTABLISH SEQUENCE 答案:A81. 要获取序列的下一个值,可以使用以下哪个函数()A. NEXTVAL()B. GET_NEXT()C. NEXT_VALUE()D. FOLLOWING_VALUE()答案:A82. 在SQL 中,以下哪个关键字用于锁定表()A. LOCKB. HOLDC. FREEZED. BLOCK答案:A83. 以下哪种锁类型用于防止其他事务读取或修改数据()A. 共享锁B. 排他锁C. 意向共享锁D. 意向排他锁答案:B84. 共享锁允许其他事务()A. 读取数据B. 修改数据C. 删除数据D. 以上都不行答案:A85. 在SQL 中,以下哪个关键字用于解锁表()A. UNLOCKB. RELEASEC. FREED. UNBIND答案:A86. 以下哪个函数用于计算两个日期之间的天数差()A. DATEDIFF()B. DATE_DIFFERENCE()C. DAY_DIFFERENCE()D. TIME_DIFFERENCE()答案:A87. 在SQL 中,以下哪个关键字用于在查询中使用别名()A. ASB. LIKEC. SAME ASD. EQUALS答案:A88. 以下哪个语句用于在SQL 中创建索引的唯一约束()A. UNIQUE INDEXB. PRIMARY INDEXC. FOREIGN INDEXD. CHECK INDEX答案:A89. 要在SQL 中创建全文索引,应使用()A. FULLTEXT INDEXB. COMPLETE TEXT INDEXC. ALL_TEXT INDEXD. WHOLE_TEXT INDEX 答案:A90. 在SQL 中,以下哪个关键字用于在存储过程中声明变量()A. DECLAREB. DEFINEC. STATED. ANNOUNCE答案:A91. 以下哪个语句用于在SQL 中为变量赋值()A. SETB. ASSIGNC. GIVED. PUT答案:A92. 在SQL 中,以下哪个关键字用于在存储过程中进行条件判断()A. IFB. WHENC. CASED. CHECK答案:A93. 以下哪种语句用于在SQL 中进行循环操作()A. FORB. WHILEC. LOOPD. 以上都是答案:D94. 在SQL 中,用于退出循环的语句是()A. BREAKB. EXITC. STOPD. END答案:A95. 以下哪个函数用于将数字转换为字符串()A. CAST()B. CONVERT()C. TO_STRING()D. NUM_TO_STR()答案:B96. 在SQL 中,用于获取当前会话的用户名称的函数是()A. CURRENT_USERB. SYSTEM_USERC. LOGGED_IN_USERD. SESSION_USER答案:A97. 以下哪个关键字用于在SQL 中创建存储函数()A. CREATE FUNCTIONB. MAKE FUNCTIONC. BUILD FUNCTIOND. ESTABLISH FUNCTION 答案:A98. 要删除存储函数,应使用的语句是()A. DROP FUNCTIONB. DELETE FUNCTIONC. REMOVE FUNCTIOND. CLEAR FUNCTION答案:A99. 在SQL 中,用于获取数据库版本信息的函数是()A. VERSION()B. DB_VERSION()C. DATABASE_VERSION()D. SYSTEM_VERSION()答案:A100. 以下哪个操作可以在SQL 中对表进行重命名()A. RENAME TABLEB. MODIFY TABLE NAMEC. CHANGE TABLE NAMED. UPDATE TABLE NAME答案:A。
sql50经典题SQL(Structured Query Language)是用于管理关系数据库的标准编程语言。
以下是一些经典的 SQL 题目,可以帮助你提高 SQL 编程技能:1. 选择题:* 什么是 SQL?* SQL 中哪些关键字可以用于选择所有行?* SQL 中哪些关键字可以用于过滤数据?2. 查询题:* 请编写一个 SQL 查询,从 `employees` 表中选取所有员工的姓名和工资。
* 请编写一个 SQL 查询,从 `orders` 表中选取所有订单的编号、客户姓名和订单日期。
3. 插入题:* 请编写一个 SQL 插入语句,将一条新员工记录插入到 `employees` 表中。
* 请编写一个 SQL 插入语句,将一条新订单记录插入到 `orders` 表中。
4. 更新题:* 请编写一个 SQL 更新语句,将 `employees` 表中某个员工的工资增加 10%。
* 请编写一个 SQL 更新语句,将 `orders` 表中某个订单的状态更新为"Shipped"。
5. 删除题:* 请编写一个 SQL 删除语句,从 `employees` 表中删除某个员工的记录。
* 请编写一个 SQL 删除语句,从 `orders` 表中删除某个订单的记录。
6. 排序和聚合题:* 请编写一个 SQL 查询,按工资从高到低排列 `employees` 表中的员工记录。
* 请编写一个 SQL 查询,计算 `employees` 表中的平均工资。
7. 联接题:* 请编写一个 SQL 查询,联接 `orders` 表和 `customers` 表,选取所有订单的编号、客户姓名和订单日期。
* 请编写一个 SQL 查询,联接 `orders` 表和 `employees` 表,选取所有订单的编号、员工姓名和订单日期。
8. 子查询和内连接题:* 请编写一个 SQL 子查询,找出平均工资最高的员工姓名。
sql 编程练习题SQL编程练习题1. 问题描述:某公司有两张表格:员工表(Employee)和工资表(Salary)。
员工表包含以下字段:员工ID(EmployeeID)、员工姓名(EmployeeName)、所在部门ID(DepartmentID)。
工资表包含以下字段:员工ID(EmployeeID)、工资(SalaryAmount)。
请你编写SQL查询语句,找出每个部门的平均工资,并按照部门ID升序排列。
2. 解决方案:首先,我们需要根据员工ID将员工表和工资表进行连接,以便能够获取到每个员工所在部门的信息和对应的工资。
```sqlSELECT Employee.DepartmentID, AVG(Salary.SalaryAmount) AS AverageSalaryFROM EmployeeJOIN Salary ON Employee.EmployeeID = Salary.EmployeeIDGROUP BY Employee.DepartmentIDORDER BY Employee.DepartmentID ASC;```上述SQL语句中,我们使用了两个表的连接(JOIN),通过连接条件(Employee.EmployeeID = Salary.EmployeeID)将两个表格中的数据关联起来。
然后使用GROUP BY语句按照部门ID进行分组,并计算每个部门的平均工资(AVG(Salary.SalaryAmount))。
最后使用ORDER BY语句按照部门ID升序排列结果。
以上是针对给定的问题进行的解决方案,该方案基于题目描述的表格结构和要求,通过SQL语句实现了查询每个部门的平均工资,并按照部门ID升序排列的功能。
3. 总结:本文针对SQL编程练习题给出了相应的解决方案。
在解决问题时,我们使用了连接(JOIN)操作将两个表关联起来,再通过GROUP BY语句进行分组,最后使用ORDER BY语句对结果进行排序。
SQL编程练习题练习题1、分别创建存储过程和函数实现两个数相除并且显示结果如果第二个数是0 则显示消息“not to DIVIDE BY ZERO ” 不为0则显示结果。
2、分别编写存储过程和函数计算1到100的累加和。
3、分别创建存储过程和函数显示EMP表中工资最高及工资最低的员工的姓名、编号并在之后标出“工资最高”或“工资最低”字样。
4、创建一个函数Emp_Avg 根据员工号返回员工所在部门的平均工资。
5、创建表jobday 表结构如下 DayID nvarchar (50) 主键日期格式yyyyMMdd Week nvarchar (1) NOT NULL 星期几中文表示IsJobDay int NOT NULL 是否是周六或周日 0表示不是 1表示是编写存储过程实现根据参数值传入的年份向jobday表中写入该年对应的每一天的日期及各日期所对应的是星期几并在isjobday列中使用0 或1进行标识。
6、编写存储过程根据参数值传入的年份统计该年份以后被雇佣的各项工作每年的雇佣人数。
显示效果如下job_id 1995 1996 1997 1998 1999 2000---------- ----------- ----------- ----------- ----------- ----------- -----------AC_ACCOUNT 0 0 0 0 0 0AC_MGR 0 0 0 0 0 0AD_ASST 0 0 0 0 0 0AD_PRES 0 0 0 0 0 0AD_VP 0 0 0 0 0 0FI_ACCOUNT 0 0 2 1 10FI_MGR 0 0 0 0 0 0HR_REP 0 0 0 0 0 0IT_PROG 0 0 1 1 1 0MK_MAN 0 1 0 0 0 0MK_REP 0 0 1 0 0 0.。
程序设计题假设在factory数据库中已创建了如下3个表,(1)职工表worker,其结构为:职工号:int,姓名:char(8),性别:char(2),出生日期:datetime,党员否:bit,参加工作:datetime,部门号:int。
S Q L语言一、选择题1.S Q L语言是()的语言,容易学习。
A.过程化B.非过程化C.格式化D.导航式2. S Q L语言的数据操纵语句包括S E L E C T、I N S E R T、U P D A T E、D E L E T E等。
其中最重要的,也是使用最频繁的语句是()。
A.S E L E C TB.I N S E R TC.U P D A T ED.D E L E T E3.在视图上不能完成的操作是()。
A.更新视图B.查询C.在视图上定义新的表D.在视图上定义新的视图4.S Q L语言集数据查询、数据操纵、数据定义和数据控制功能于一体,其中,C R E A T E、D R O P、A L T E R语句是实现哪种功能()。
A.数据查询B.数据操纵C.数据定义D.数据控制5.S Q L语言中,删除一个视图的命令是()。
A.D E L E T EB.D R O PC.C L E A RD.R E M O V E6.在S Q L语言中的视图V I E W是数据库的()。
A.外模式B.模式C.内模式D.存储模式7.下列的S Q L语句中,()不是数据定义语句。
A.C R E A T E T A B L EB.D R O P V I E WC.C R E A T E V I E WD.G R A N T8.若要撤销数据库中已经存在的表S,可用()。
A.D E L E T E T A B L E SB.D E L E T E SC.D R O P T A B L E SD.D R O P S9.若要在基本表S中增加一列C N(课程名),可用()。
A.A D D T A B L E S(C N C H A R(8))B.A D D T A B L E S A L T E R(C N C H A R(8))C.A L T E R T A B L E S A D D(C N C H A R(8))D.A L T E R T A B L E S(A D D C N C H A R(8))10.学生关系模式S(S#,S n a m e,S e x,A g e),S的属性分别表示学生的学号、姓名、性别、年龄。
-索引练习一用循环实现计算求!Declare @sum1 int, @I intSelect @sum1=1, @I=1While @I<11BeginSet @sum1=@sum1*@ISet @I=@I +1EndPrint'10的阶乘结果为:'Print @sum1--附加练习文件夹中的“student.mdf”数据库文件--1.1) A为“学生”表的“学号”这一列创建一个唯一性的聚集索引,该列为降序,索引名为ix_xh--B 用sp_helpindex查看该索引信息create unique clustered index ix_xh on computer.学生(学号desc)Exec sp_helpindex computer.学生--2.A为“课程”表的“课程代号”这一列创建一个唯一性的非聚集索引ix_kh,该列为降序,将学分和工号字段设置为包含性列,填充因子为,create unique index ix_kh on课程(课程代号desc)include(学分,工号)withfillfactor=50--3.为“成绩”表的“学号”+“课号”这两列创建一个唯一性的非聚集索引,--学号为降序,课号为升序,将成绩字段设置为包含性列,--填充因子为,索引名为ix_xhkhcreate unique index ix_xhkh on computer.成绩(学号desc,课程代号asc) include(成绩)withfillfactor=50--4.将索引ix_xhkh重新生成,将索引ix_kh 重新组织,将索引ix_xh设为禁用。
Alter index ix_xhkh on computer.成绩rebuildAlter index ix_kh on课程reorganize Alter index ix_xh on computer.成绩disable--综合编程题--1.借书管理功能,要求如下:--借书操作需要提供借书证号、总编号--1.判断借书证号、总编号数据是否合法有效--2.判断该读者借书量是否到达--3.判断该书是否在馆--4.向借阅表格添加一条借阅信息,同时将借出去的书状态改为“不在馆”declare @jszh nvarchar(10)declare @zbh nvarchar(10)declare @yj int,@nj int,@zfint,@error1 int,@error2 intset @jszh='113'set @zbh='113388'select*from读者where借书证号=@jszhif@@rowcount=0beginraiserror('不存在借书证号为%s的读者信息',16,1,@jszh)returnendset @yj=(select count(*)from借阅where借书证号=@jszh)set @nj=(select借书数量from读者where借书证号=@jszh)if @yj=@njbeginraiserror('借书证号为%s的读者,您的借书数量已到达',16,1,@jszh)returnendselect*from图书where总编号=@zbhif@@rowcount=0beginraiserror('不存在总编号为%s的图书',16,1,@zbh)returnendset @zf=(select是否在馆from图书where总编号=@zbh)if @zf=0beginraiserror('总编号为%s的图书不在馆',16,1,@zbh)returnendbegin transactioninsert into借阅(借书证号,总编号,借阅日期)values(@jszh,@zbh,getdate())set @error1=@@errorupdate图书set是否在馆=0where总编号=@zbhset @error2=@@errorif @error1=@error2begincommit transactionprint'借书成功'endelsebeginrollback transactionprint'借书失败'end--2.还书管理功能,要求如下:--还书要提供书的总编号,由书的总编号在借阅表中可以查出相应的读者借书证号,然后在读者表中可以查询借该书读者的借阅期限。
创建表及插⼊数据学⽣表Studentcreate table SC(SId varchar(10),CId varchar(10),score decimal(18,1));insert into SC values('01' , '01' , 80);insert into SC values('01' , '02' , 90);insert into SC values('01' , '03' , 99);insert into SC values('02' , '01' , 70);insert into SC values('02' , '02' , 60);insert into SC values('02' , '03' , 80);insert into SC values('03' , '01' , 80);insert into SC values('03' , '02' , 80);insert into SC values('03' , '03' , 80);insert into SC values('04' , '01' , 50);insert into SC values('04' , '02' , 30);insert into SC values('04' , '03' , 20);insert into SC values('05' , '01' , 76);insert into SC values('05' , '02' , 87);insert into SC values('06' , '01' , 31);insert into SC values('06' , '03' , 34);insert into SC values('07' , '02' , 89);insert into SC values('07' , '03' , 98);练习题⽬1. 查询" 01 "课程⽐" 02 "课程成绩⾼的学⽣的信息及课程分数1.1 查询同时存在" 01 "课程和" 02 "课程的情况1.2 查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显⽰为 null )1.3 查询不存在" 01 "课程但存在" 02 "课程的情况2. 查询平均成绩⼤于等于 60 分的同学的学⽣编号和学⽣姓名和平均成绩3. 查询在 SC 表存在成绩的学⽣信息4. 查询所有同学的学⽣编号、学⽣姓名、选课总数、所有课程的总成绩(没成绩的显⽰为 null )4.1 查有成绩的学⽣信息5. 查询「李」姓⽼师的数量6. 查询学过「张三」⽼师授课的同学的信息7. 查询没有学全所有课程的同学的信息8. 查询⾄少有⼀门课与学号为" 01 "的同学所学相同的同学的信息9. 查询和" 01 "号的同学学习的课程 完全相同的其他同学的信息10. 查询没学过"张三"⽼师讲授的任⼀门课程的学⽣姓名11. 查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩12. 检索" 01 "课程分数⼩于 60,按分数降序排列的学⽣信息13. 按平均成绩从⾼到低显⽰所有学⽣的所有课程的成绩以及平均成绩14. 查询各科成绩最⾼分、最低分和平均分:以如下形式显⽰:课程 ID,课程 name,最⾼分,最低分,平均分,及格率,中等率,优良率,优秀率及格为>=60,中等为:70-80,优良为:80-90,优秀为:>=90要求输出课程号和选修⼈数,查询结果按⼈数降序排列,若⼈数相同,按课程号升序排列15. 按各科成绩进⾏排序,并显⽰排名, Score 重复时保留名次空缺15. 按各科成绩进⾏排序,并显⽰排名, Score 重复时保留名次空缺15.1 按各科成绩进⾏排序,并显⽰排名, Score 重复时合并名次16. 查询学⽣的总成绩,并进⾏排名,总分重复时保留名次空缺16.1 查询学⽣的总成绩,并进⾏排名,总分重复时不保留名次空缺17. 统计各科成绩各分数段⼈数:课程编号,课程名称,[100-85],[85-70],[70-60],[60-0] 及所占百分⽐18. 查询各科成绩前三名的记录19. 查询每门课程被选修的学⽣数20. 查询出只选修两门课程的学⽣学号和姓名21. 查询男⽣、⼥⽣⼈数22. 查询名字中含有「风」字的学⽣信息23. 查询同名同性学⽣名单,并统计同名⼈数24. 查询 1990 年出⽣的学⽣名单25. 查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列26. 查询平均成绩⼤于等于 85 的所有学⽣的学号、姓名和平均成绩27. 查询课程名称为「数学」,且分数低于 60 的学⽣姓名和分数28. 查询所有学⽣的课程及分数情况(存在学⽣没成绩,没选课的情况)29. 查询任何⼀门课程成绩在 70 分以上的姓名、课程名称和分数30. 查询不及格的课程31. 查询课程编号为 01 且课程成绩在 80 分以上的学⽣的学号和姓名32. 求每门课程的学⽣⼈数33. 成绩不重复,查询选修「张三」⽼师所授课程的学⽣中,成绩最⾼的学⽣信息及其成绩34. 成绩有重复的情况下,查询选修「张三」⽼师所授课程的学⽣中,成绩最⾼的学⽣信息及其成 绩35. 查询不同课程成绩相同的学⽣的学⽣编号、课程编号、学⽣成绩36. 查询每门功成绩最好的前两名37. 统计每门课程的学⽣选修⼈数(超过 5 ⼈的课程才统计)。
数据库的sql语句练习题1. 练习题一:查询语句基础在学生表(students)中,包含以下字段:学号(id)、姓名(name)、年龄(age)、性别(gender)、班级(class)、成绩(score)。
请编写SQL语句实现以下需求:a) 查询学生表中所有学生的信息。
b) 查询学生表中的男性学生信息。
c) 查询学生表中年龄为18岁的学生信息。
d) 查询学生表中成绩大于等于90分的学生信息。
e) 查询学生表中姓“张”的学生信息。
2. 练习题二:修改语句练习在学生表(students)中,某个学生的学号为1001,需要将该学生的年龄修改为20岁,请编写相应的SQL语句实现此操作。
3. 练习题三:插入语句练习在学生表(students)中添加一条新纪录,学号为1002,姓名为李明,年龄为19岁,性别为男,班级为三年级,成绩为87分,请编写相应的SQL语句实现此操作。
4. 练习题四:删除语句练习在学生表(students)中,某个学生的学号为1003,需要将该学生的信息从表中删除,请编写相应的SQL语句实现此操作。
5. 练习题五:使用多表查询存在两张表,学生表(students)和课程表(courses)。
学生表包含字段:学号(id)、姓名(name)、班级(class);课程表包含字段:课程编号(course_id)、课程名称(course_name)。
已知约德尔学院中,学号为1001的学生参加了编号为1的课程,请编写SQL语句查询学号为1001的学生所选的课程及课程名称。
6. 练习题六:排序查询练习在学生表(students)中,查询所有学生的信息,并按照成绩从高到低进行排序。
以上是数据库的SQL语句练习题,请按照上述要求编写相应的SQL语句进行解答。
祝你练习愉快,取得好成绩!。
sql语言练习题(打印版)# SQL语言练习题## 一、基础查询1. 查询员工表中所有员工的姓名和工资。
```sqlSELECT name, salary FROM employees;```2. 查询销售表中所有销售记录的日期和销售金额。
```sqlSELECT date, amount FROM sales;```3. 查询订单表中所有订单的订单编号和客户ID。
```sqlSELECT order_id, customer_id FROM orders;```## 二、条件查询1. 查询工资高于5000的员工姓名和工资。
```sqlSELECT name, salary FROM employees WHERE salary > 5000; ```2. 查询销售日期在2023年1月1日之后的销售记录。
```sqlSELECT * FROM sales WHERE date > '2023-01-01';```3. 查询客户ID为123的订单详情。
```sqlSELECT * FROM orders WHERE customer_id = 123;```## 三、排序查询1. 查询所有员工的姓名和工资,并按工资降序排列。
```sqlSELECT name, salary FROM employees ORDER BY salary DESC; ```2. 查询所有销售记录,并按销售日期升序排列。
```sqlSELECT * FROM sales ORDER BY date ASC;```3. 查询所有订单,并按订单金额降序排列。
```sqlSELECT * FROM orders ORDER BY amount DESC;```## 四、聚合查询1. 查询所有员工的平均工资。
```sqlSELECT AVG(salary) FROM employees;2. 查询销售金额最高的销售记录。
练习题1、分别创建存储过程和函数 实现两个数相除并且显示结果 如果第二个数是0 则显示消息“not to DIVIDE BY ZERO ” 不为0则显示结果。
2、分别编写存储过程和函数 计算1到100的累加和。
3、分别创建存储过程和函数 显示EMP表中工资最高及工资最低的员工的姓名、编号 并在之后标出“工资最高”或“工资最低”字样。
4、创建一个函数Emp_Avg 根据员工号 返回员工所在部门的平均工资。
5、创建表jobday 表结构如下 DayID nvarchar (50) 主键 日期格式yyyyMMdd Week nvarchar (1) NOT NULL 星期几 中文表示 IsJobDay int NOT NULL 是否是周六或周日 0表示不是 1表示是 编写存储过程实现根据参数值传入的年份 向jobday表中写入该年对应的每一天的日期 及各日期所对应的是星期几 并在isjobday列中使用0 或1进行标识。
6、编写存储过程 根据参数值传入的年份 统计该年份以后被雇佣的各项工作每年的雇佣人数。
显示效果如下job_id 1995 1996 1997 1998 1999 2000---------- ----------- ----------- ----------- ----------- ----------- -----------AC_ACCOUNT 0 0 0 0 0 0AC_MGR 0 0 0 0 0 0AD_ASST 0 0 0 0 0 0AD_PRES 0 0 0 0 0 0AD_VP 0 0 0 0 0 0FI_ACCOUNT 0 0 2 1 10FI_MGR 0 0 0 0 0 0HR_REP 0 0 0 0 0 0IT_PROG 0 0 1 1 1 0MK_MAN 0 1 0 0 0 0MK_REP 0 0 1 0 0 0.。
程序设计题假设在factory数据库中已创建了如下3个表,(1)职工表worker,其结构为:职工号:int,姓名:char(8),性别:char(2),出生日期:datetime,党员否:bit,参加工作:datetime,部门号:int。
(2)部门表depart,其结构为:部门号:int,部门名:char(10)。
(3)职工工资表salary,其结构为:职工号:int,姓名:char(8),日期:datetime,工资:decimal(6,1)。
1.使用Transact-SQL语句完成如下各题:(1).显示所有职工的年龄。
(2).求出各部门的党员人数。
(3).显示所有职工的姓名和2004年1月份工资数。
(4).显示所有职工的职工号、姓名和平均工资。
(5).显示所有职工的职工号、姓名、部门名和2004年2月份工资,并按部门名顺序排列。
(6).显示各部门名和该部门的所有职工平均工资。
(7).显示所有平均工资高于1200的部门名和对应的平均工资。
(8).显示所有职工的职工号、姓名和部门类型,其中财务处和人事处属管理部门,市场部属市场部门。
答案:(1).SELECT 姓名,YEAR(GETDATE())-YEAR(出生日期) AS ‘年龄’FROM worker (2).SELECT depart.部门名,count(*) AS ‘党员人数’FROM worker,departWHERE worker.党员否=1 AND worker.部门号=depart.部门号GROUP BY depart.部门名(3).SELECT worker.姓名,salary.工资FROM worker,salaryWHERE worker.职工号= salary.职工号 AND YEAR(salary.日期)=2004 AND MONTH(salary.日期)=1(4). SELECT 职工号,,AVG(工资) AS ‘平均工资’FROM salaryGROUP BY 职工号(5). SELECT worker.职工号,worker.姓名, depart.部门名, salary.工资 AS ‘2004年2月工资’FROM worker,depart,salaryWHERE worker.部门号=depart.部门号AND worker.职工号= salary.职工号 AND YEAR(salary.日期)=2004 AND MONTH(salary.日期)=2ORDER BY worker.部门号(6).SELECT depart.部门名, AVG(salary.工资) AS ‘平均工资’FROM worker,depart,salaryWHERE worker.部门号=depart.部门号 AND worker.职工号= salary.职工号GROUP BY depart.部门名(7).SELECT depart.部门名, AVG(salary.工资) AS ‘平均工资’FROM worker,depart,salaryWHERE worker.部门号=depart.部门号 AND worker.职工号= salary.职工号GROUP BY depart.部门名HAVING AVG(salary.工资)>1200(8). USE factoryGOSELECT worker.职工号,worker.姓名CASE depart.部门名WHEN ‘财务处’ THEN ‘管理部门’WHEN ‘人事处’ THEN ‘管理部门’WHEN ‘市场部’ THEN ‘市场部门’END AS ‘部门类型’FROM worker,departWHERE worker.部门号=depart.部门号GO2.在前面建立的factory数据库上,用Transact-SQL语句完成下列各题:(1)在worker表中的“部门号”列上创建一个非聚集索引,若该索引已存在,则删除后重建。
(2)在salary表的“职工号”和“日期”列创建聚集索引,并且强制惟一性。
答案:(1)SET NOCOUNT OFFUSE factoryIF EXISTS(SELECT name FROM sysindexes WHERE name=’depno’DROP INDEX worker.depnoGOCREATE INDEX depno ON worker(部门号)GO(2) SET NOCOUNT OFFUSE factoryIF EXISTS(SELECT name FROM sysindexes WHERE name=’no_date’DROP INDEX salary.no_dateGOCREATE UNIQUE CLUSTERED INDEX no_date ON salary(职工号,日期)GO3.在前面建立的factory数据库上,用Transact-SQL语句完成下列各题:(1)建立视图View1,查询所有职工的职工号、姓名、部门名和2004年2月份工资,并按部门名顺序排列。
(2)建立视图View2,查询所有职工的职工号、姓名和平均工资。
(3)建立视图View3,查询各部门名和该部门所有职工平均工资。
(4)显示视图View3的定义(1)USE factoryGOIF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWSWHERE TABLE_NAME=’View1’)DROP VIEW View1GOCREATE VIEW View1AS SELECT TOP 15 worker.职工号,worker.姓名,depart.部门名,salary.工资 AS ‘2004年2月工资’FROM worker,depart,salaryWHERE worker.部门号=depart.部门号 AND worker.职工号=salary.职工号AND YEAR(salary.日期)=2004 AND MONTH(salary.日期)=2ORDER BY worker.部门号GOSELECT * FROM View1GO(2)USE factoryGOIF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWSWHERE TABLE_NAME=’View2’)DROP VIEW View2GOCREATE VIEW View2AS SELECT worker.职工号,worker.姓名,AVG(salary.工资) AS ‘平均工资’ FROM worker,salaryWHERE worker.职工号=salary.职工号GROUP BY worker.职工号,worker.姓名GOSELECT * FROM View2GO(3)USE factoryGOIF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWSWHERE TABLE_NAME=’View3’)DROP VIEW View3GOCREATE VIEW View3AS SELECT depart.部门名, AVG(salary.工资) AS ‘平均工资’FROM worker,depart,salaryWHERE worker.部门号=depart.部门号 AND worker.职工号=salary.职工号GROUP BY depart.部门名GOSELECT * FROM View3(4)USE factoryGOEXEC sp_helptext ‘View3’GO4.在前面建立的factory数据库上,用Transact-SQL语句完成下列各题:(1) 实施worker表的“性别”字段默认值为“男”的约束。
(2) 实施salary表的“工资”字段值限定在0~9999的约束。
(3) 实施depart表的“部门号”字段值惟一的非聚集索引的约束。
(4) 为worker表建立外键“部门号”,参考表depart的“部门号”列。
(5) 建立一个规则sex:@性别='男' OR @性别='女',将其绑定到worker表的“性别”列上。
(6) 删除(1)小题所建立的约束。
(7) 解除(5)小题所建立的绑定并删除规则sex。
答案:(1)ALTER TABLE workerADD CONSTRAINT default_sex DEFAULT ‘男’ FOR 性别(2)ALTER TABLE salaryADD CONSTRAINT check_salary CHECK(工资>0 AND 工资<9999)(3)ALTER TABLE departADD CONSTRAINT unique_depart UNIQUE NONCLUSTERED(部门号)(4)ALTER TABLE workerADD CONSTRAINT FK_worker_no FOREIGN KEY (部门号) REFERENCES depart(部门号) (5)CREATE RULE sex AS @性别='男' OR @性别='女'EXEC sp_bindrule ‘sex’,’worker.性别’(6) ALTER TABLE workerDROP CONSTRAINT default_sex(7)EXEC sp_unbindrule ’worker.性别’DROP RULE sex5.在前面建立的factory数据库上,用Transact-SQL语句完成下列各题:(1) 创建一个为worker表添加职工记录的存储过程Addworker。