还剩11页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
sql数据库面试笔试题和答案
一、选择题(本题型共15题,每题1分,共15分)
1.SQL语言中,用于查询数据的命令是(D)A.INSERT B.UPDATEC.DELETE D.SELECT
2.以下哪个不是SQL的DDL(数据定义语言)命令(C)A.CREATE B.DROPC.SELECT D.ALTER
3.在SQL中,用于定义表中列的约束,确保列值唯一的关键字是(B)A.PRIMARY KEYB.UNIQUEC.FOREIGN KEYD.NOT NULL
4.以下哪个函数用于计算字符串长度(A)A.LENGTH B.COUNTC.SUM D.AVG
5.在MySQL数据库中,用于限制查询结果返回前5行数据的关键字是(A)A.LIMIT5B.TOP5C.ROWNUM5D.WHERE ROWNUM=
56.以下哪个数据类型在SQL中通常用于存储日期和时间信息(C)A.VARCHAR B.INTC.DATETIME D.FLOAT
7.SQL中,INNER JOIN的作用是(B)A.返回左表所有行,右表不匹配的行显示NULLB.返回左表和右表中匹配的行第1页共13页C.返回右表所有行,左表不匹配的行显示NULLD.返回左表和右表的所有行,不匹配的行显示NULL
8.关于NULL值,以下说法正确的是(A)A.NULL与任何值比较(包括NULL本身)结果都是UNKNOWNB.NULL在计算时会被当作0处理C.使用IS NULL判断NULL时,结果为FALSED.可以使用=NULL判断某个字段是否为NULL
9.SQL中,用于对查询结果进行分组统计的关键字是(C)A.ORDER BYB.WHEREC.GROUP BYD.HAVING
10.以下哪个函数用于获取当前系统日期(D)A.SYSDATE B.GETDATEC.CURRENT_DATE D.以上都是
11.SQL中,用于创建索引的命令是(B)A.CREATE TABLEB.CREATE INDEXC.ALTER TABLED.DROP INDEX
12.关于事务的ACID特性,以下哪项描述正确(B)A.A原子性指事务中的操作要么全部成功,要么全部失败B.C一致性指事务执行前后,数据库从一个一致状态到另一个一致状态C.I隔离性指多个事务并发执行时,一个事务的执行不受其他事务干扰D.D持久性指事务提交后,对数据库的修改会永久保存
12.在SQL中,用于修改表中数据的命令是(A)A.UPDATE B.INSERT第2页共13页C.DELETE D.MERGE
13.以下哪个查询会返回表中所有列和所有行(D)A.SELECT*FROM table_name WHERE1=0B.SELECT column1FROM table_nameC.SELECT*FROM table_name LIMIT10D.SELECT*FROM table_name
14.SQL中,LEFT JOIN的结果包含(C)A.仅右表匹配的行B.仅左表不匹配的行C.左表所有行,右表匹配的行,不匹配的行显示NULLD.左右表所有行,不匹配的行显示NULL
二、填空题(本题型共15题,每题1分,共15分)
1.SQL中,______用于向表中插入新数据,______用于从表中删除数据,______用于修改表中数据,______用于创建表结构
2.在SQL中,______关键字用于限制查询结果中重复的行,通常与DISTINCT一起使用,例如SELECT DISTINCTcolumn1FROMtable_name
3.SQL中的______函数用于将两个或多个字符串拼接成一个新字符串,例如在MySQL中使用CONCATstr,str
4.当需要对查询结果按某个字段升序排列时,使用关键字______,降序排列使用关键字______
5.在SQL中,______用于设置查询结果的起始行和行数,例如LIMIT5OFFSET10表示从第11行开始取5行数据
6.关于NULL值的比较,判断字段是否为NULL应使用______运算符,而不是=或!=,例如SELECT*FROM table_name WHEREcolumn1ISNULL第3页共13页
7.SQL中的______是一个临时表,用于存储查询结果,通常在需要多次使用相同查询结果时创建,使用后可以删除
8.在SQL中,______约束用于确保外键列的值必须在主表的主键列中存在,防止出现无效的关联数据
9.函数______用于计算表中某列的总和,______用于计算平均值,______用于计算最大值,______用于计算最小值
10.SQL中的______事务隔离级别可以防止脏读、不可重复读和幻读,是最高的隔离级别,但性能较低
11.在SQL中,______索引是最基本的索引类型,仅根据列值排序,不存储实际数据,用于加速查询
12.当需要对多个条件进行查询时,使用______关键字连接不同条件,例如SELECT*FROM table_name WHEREcolumn110AND column
22013.SQL中的______用于将一个查询的结果作为另一个查询的条件,例如SELECT*FROM table1WHERE id IN SELECTid FROM table
214.在SQL中,______关键字用于排除查询结果中不满足条件的行,例如SELECT*FROMtable_name WHEREcolumn1NOT IN1,2,
315.函数______用于将字符串转换为大写,______用于转换为小写,______用于去除字符串首尾空格
三、简答题(本题型共10题,每题2分,共20分)
1.简述SQL中DDL、DML、DQL、DCL分别代表什么,以及各自的常用命令
2.什么是索引索引有哪些作用使用索引时需要注意哪些问题
3.解释事务的ACID特性,并说明每个特性的含义第4页共13页
4.简述内连接(INNER JOIN)、左外连接(LEFT JOIN)、右外连接(RIGHT JOIN)和全外连接(FULL JOIN)的区别
5.什么是视图(VIEW)视图有哪些优缺点
6.解释NULL值在SQL中的特殊处理方式,以及IS NULL和=NULL的区别
7.简述SQL中的聚合函数(如SUM、AVG、COUNT、MAX、MIN)及其作用
8.什么是子查询子查询有哪些类型(如标量子查询、列子查询、行子查询、表子查询)
9.解释什么是脏读、不可重复读和幻读,以及不同的事务隔离级别如何解决这些问题
10.简述SQL中的约束类型(如主键约束、外键约束、唯一约束、非空约束、检查约束)及其作用
四、操作题(写SQL语句)(本题型共15题,每题2分,共30分)假设有以下表结构-学生表(students)student_id主键,name,age,gender,department_id外键,关联部门表departments-部门表(departments)department_id主键,department_name,location
1.查询所有学生的姓名和年龄,按年龄升序排列
2.查询所有不同性别的学生数量,按性别分组
3.查询年龄大于20岁且性别为男的学生姓名和部门ID
4.查询部门名称为计算机学院的学生姓名和年龄
5.查询学生表中年龄最大的3名学生的姓名和年龄第5页共13页
6.查询每个部门的学生数量,显示部门名称和对应的学生数量,按学生数量降序排列
7.查询所有学生姓名、年龄、部门名称和部门位置,使用INNER JOIN连接学生表和部门表,显示结果按部门名称升序排列
8.查询所有部门的名称及其所在位置,包括没有学生的部门(即右表不匹配时显示NULL),使用RIGHT JOIN实现
9.查询学生姓名、年龄、部门名称,使用LEFT JOIN连接学生表和部门表,包括没有部门的学生(即部门名称为NULL)
10.查询部门名称为电子工程学院且年龄在18-22岁之间的学生姓名和年龄
11.查询每个部门的平均年龄,显示部门名称和平均年龄,平均年龄保留1位小数
12.查询每个学生的选课数量(假设有选课表courses student_id,course_id,score),显示学生姓名和选课数量,按选课数量降序排列,只显示选课数量大于5的学生
13.查询所有学生的平均年龄,以及学生表中的最大年龄max_age和最小年龄min_age(使用聚合函数)
14.查询与学生表中student_id=101学生年龄相同的所有学生姓名和年龄(使用子查询)
15.查询部门名称为计算机学院或电子工程学院的学生姓名和部门ID,使用IN或OR实现
五、判断题(对的写“对”,错的写“错”)(本题型共15题,每题1分,共15分)
1.在SQL中,INSERT语句可以不指定列名,直接插入所有列的值()第6页共13页
2.SELECT*FROM students WHERE age20AND gender=男ORgender=女会返回所有年龄大于20的学生,无论性别()
3.使用UPDATE语句时,如果省略WHERE子句,会更新表中所有行()
4.在SQL中,NULL+1的结果是1()
5.INNER JOIN会返回左右表中所有匹配的行和不匹配的行()
6.COUNT和COUNTage在统计时结果可能不同,当age列有NULL值时,COUNTage会排除NULL值,COUNT会包括所有行()
7.视图是一个物理表,存储实际数据()
8.在SQL中,主键列可以为NULL值()
9.LIMIT5OFFSET10表示从第10行开始取5行数据(共11-15行)()
10.事务提交后,对数据库的修改会回滚()
11.在SQL中,UNION和UNION ALL都用于合并两个查询结果,且会自动去重()
12.外键约束可以确保数据的参照完整性()
13.索引可以提高查询性能,在所有表的所有列上都应该创建索引()
14.SELECT name FROM students WHERE nameLIKE张_会匹配姓名为张
三、张四等单字姓氏的学生()
15.在SQL Server中,可以使用TOP关键字限制返回行数,如SELECTTOP10*FROM students()
六、综合应用题(写SQL语句)(本题型共10题,每题3分,共30分)假设有以下三个表第7页共13页-订单表(orders)order_id主键,customer_id,order_date,total_amount,status-客户表(customers)customer_id主键,customer_name,email,phone,registration_date-订单详情表(order_items)order_item_id主键,order_id外键,product_id,quantity,unit_price
1.查询2025年所有订单的客户姓名、订单ID、订单日期和总金额,按订单日期降序排列,显示前20条结果
2.查询每个客户的订单总金额,显示客户ID、客户姓名和总订单金额(需计算每个客户的所有订单的total_amount之和),并按总订单金额降序排列,只显示总订单金额大于10000的客户
3.查询2025年每个月的订单数量和总销售额(需按order_date的月份分组,计算countorder_id as订单数量,sumtotal_amount as总销售额),显示月份和对应的订单数量、总销售额,按月份升序排列
4.查询客户姓名、客户邮箱、订单数量(每个客户的订单数),其中订单数量为0的客户也需要显示(即左连接客户表和订单表,订单表为NULL的客户订单数量为0),按订单数量降序排列
5.查询所有产品(通过order_items.product_id)及其销售数量(sumquantity),只显示销售数量大于100的产品ID和销售数量,按销售数量降序排列
6.查询客户姓名、客户注册日期、最近一次订单日期(即每个客户的最大order_date),显示客户姓名,注册日期,最近订单日期,按最近订单日期升序排列第8页共13页
7.查询状态为已完成的订单中,总金额最高的前5个订单的订单ID、客户姓名(通过客户ID关联客户表)、总金额,按总金额降序排列(假设客户姓名唯一)
8.查询客户姓名、客户注册日期、平均订单金额(每个客户的总订单金额/订单数量),显示客户姓名、平均订单金额保留两位小数,按平均订单金额升序排列
9.查询所有订单中,总金额大于该客户平均订单金额的订单详情,显示订单ID、客户ID、产品ID、quantity、unit_price,其中需先计算每个客户(通过客户ID)的平均订单金额(总金额/订单数量),再筛选总金额大于平均的订单
10.查询2025年1月1日之后注册的客户,且至少有一个订单的客户姓名、客户ID、订单数量,按订单数量降序排列答案汇总
一、选择题
1.D
2.C
3.B
4.A
5.A
6.A
7.B
8.A
9.C
10.D
11.B
12.B
13.A
14.D
15.C
二、填空题
1.INSERT;DELETE;UPDATE;CREATE TABLE
2.DISTINCT
3.CONCAT
4.ASC;DESC
5.LIMIT
6.IS NULL
7.视图(VIEW)
8.FOREIGN KEY第9页共13页
9.SUM;AVG;MAX;MIN
10.SERIALIZABLE(可串行化)
11.B树索引(或B-tree索引)
12.AND
13.子查询(或嵌套查询)
14.NOT IN
15.UPPER;LOWER;TRIM
三、简答题
1.DDL(数据定义语言)CREATE/DROP/ALTER(创建/删除/修改表结构);DML(数据操纵语言)INSERT/UPDATE/DELETE(插入/更新/删除数据);DQL(数据查询语言)SELECT(查询数据);DCL(数据控制语言)GRANT/REVOKE(授权/回收权限)
2.索引是对表中一列或多列的值进行排序的结构,作用加速查询、约束唯一值(主键/唯一索引);注意频繁插入/更新/删除时性能下降,避免过度创建索引
3.A(原子性)事务中的操作要么全部成功,要么全部失败;C(一致性)事务执行前后,数据库从一个一致状态到另一个一致状态;I(隔离性)多个事务并发执行时,一个事务的执行不受其他事务干扰;D(持久性)事务提交后,修改永久保存在数据库中
4.INNER JOIN仅返回左右表匹配的行;LEFT JOIN返回左表所有行,右表匹配行,不匹配行显示NULL;RIGHT JOIN返回右表所有行,左表匹配行,不匹配行显示NULL;FULL JOIN:返回左右表所有行,不匹配行显示NULL(部分数据库不支持,如MySQL)第10页共13页
5.视图是虚拟表,不存储实际数据,基于查询结果定义;优点简化查询、限制访问权限;缺点无法直接修改(需通过视图更新基表),性能可能不如直接查询
6.NULL表示未知值,与任何值比较结果为UNKNOWN;IS NULL用于判断字段是否NULL,结果为TRUE/FALSE;=NULL返回UNKNOWN,无法判断NULL
7.SUM求和;AVG求平均;COUNT计数(COUNT*统计所有行,COUNT列排除NULL);MAX/MIN求最大/最小值
8.子查询是嵌套在其他查询中的查询;类型标量子查询(返回单个值)、列子查询(返回单列多行)、行子查询(返回单行多列)、表子查询(返回多行多列)
9.脏读读取未提交的修改;不可重复读同一事务内两次查询同一数据结果不同;幻读同一事务内两次查询同一范围结果行数不同;隔离级别读未提交(解决脏读)、读已提交(解决脏读)、可重复读(解决不可重复读)、可串行化(解决所有),MySQL默认可重复读
10.主键约束唯一标识一行,不允许NULL;外键约束确保关联数据有效;唯一约束列值唯一,允许NULL;非空约束列值必须存在;检查约束CHECK限制列值范围,不同数据库支持程度不同
四、操作题(写SQL语句)
1.SELECT name,age FROMstudents ORDERBY ageASC;
2.SELECT gender,COUNT*AS student_count FROMstudentsGROUP BYgender;
3.SELECT name,department_id FROMstudents WHEREage20ANDgender=男;第11页共13页
4.SELECT s.name,s.age FROMstudents s INNER JOIN departmentsd ONs.department_id=d.department_id WHEREd.department_name=计算机学院;
5.SELECT name,age FROMstudents ORDERBY ageDESC LIMIT3;
6.SELECT d.department_name,COUNTs.student_id ASstudent_count FROMdepartments d LEFT JOIN students s ONd.department_id=s.department_id GROUPBY d.department_nameORDER BYstudent_count DESC;
7.SELECT s.name,s.age,d.department_name,d.location FROMstudents sINNERJOIN departmentsd ONs.department_id=d.department_id ORDERBY d.department_name ASC;
8.SELECT d.department_name,d.location FROMdepartments dRIGHTJOIN studentss ONd.department_id=s.department_idGROUP BY d.department_name,d.location;
9.SELECT s.name,s.age,d.department_nameFROMstudents sLEFTJOINdepartmentsd ONs.department_id=d.department_idWHERE d.department_name ISNULL;
10.SELECT s.name,s.age FROMstudentssINNER JOINdepartmentsd ONs.department_id=d.department_id WHEREd.department_name=电子工程学院AND s.age BETWEEN18AND22;
11.SELECT d.department_name,ROUNDAVGs.age,1AS avg_ageFROM departmentsdLEFTJOINstudentssONd.department_id=s.department_id GROUPBYd.department_name;第12页共13页
12.SELECT c.name,COUNTci.course_id AScourse_count FROMcustomersc LEFTJOIN coursesci ONc.customer_id=ci.student_id GROUPBY c.name HAVINGcourse_count5ORDER BYcourse_count DESC;
13.SELECT AVGageAS avg_age,MAXage ASmax_age,MINageAS min_age FROMstudents;
14.SELECT name,age FROMstudentsWHEREage=SELECT ageFROMstudentsWHEREstudent_id=101;
15.SELECT name,department_id FROMstudents WHEREdepartment_idINSELECT department_id FROMdepartments WHEREdepartment_name IN计算机学院,电子工程学院;
五、判断题
1.√
2.×
3.√
4.×
5.×
6.√
7.×
8.×
9.√
10.×
11.×
12.√第13页共13页。
个人认证
优秀文档
获得点赞 0