SQL笔试题

博客包含22道SQL笔试题,涉及索引使用、查询写法、表连接、NULL值判断等多方面知识,如哪种操作无法用索引提速、like查询的合适写法等,还包含一些SQL语句编写和程序转换的题目,有助于检验和提升SQL知识水平。

 

SQL笔试题

1.下面哪种操作一定无法使用索引提高运行速度?
A.插入
B.删除
C.修改
D.查询

2.查询中like%,下面哪种写法比较适合索引查询?
A.%abc
B.abc%
C.%a%bc
D.%ca%b

3.下面哪种索引不建议在OLTP中使用?
A.B*Tree索引
B.位图索引
C.函数索引
D.反转索引

4.查询记录超过百分之几,宜使用全表扫描?
A.15   B.30   C.40   D.50

5.一个SQL的嵌套层数最好不要超过()层?
A.3   B.4   C.5   D.6

6.一个SQL中表连接数量不宜超过()个?
A.3   B.4   C.5   D.6

7.下列哪种输入参数情况下,宜使用固化函数?
A.员工ID
B.身份证号
C.日期,币种1,币种2,金额
D.日期,币种1,币种2

8.在UTF8环境下,全角字符和半角字符的区别是?
A.全角字符位数较多
B.全角和半角字符相等,无区别
C.半角字符位数较多
D.全角字符无法存储

9.下面哪种表连接方式不是Oracle的表连接方式?
A.哈希连接
B.混合连接
C.嵌套循环连接
D.笛卡尔积连接

10.在前台翻页查询中要将函数提取到最外层,下列哪种说法是错的?
A.可以降低函数的执行次数
B.可以将函数的结果缓存到数据缓冲池
C.可以减少表关联
D.可以使代码易读易懂

11.在OLTP系统,员工信息表复合索引设计,下列哪种最合理?
A.性别,部门
B.员工ID,部门ID
C.员工ID,部门ID,性别,地址,上级领导ID,邮件地址
D.性别,年龄

12.下列对NULL值的判断,哪种情况为真?
A.NULL<>1
B.NULL IS NULL
C.NULL = NULL
D.NULL<>NULL

13.COUNT(*)相比COUNT(0),可能带来的后果是?
A.*会带来额外的共享池解析
B.*会带来额外的缓冲池解析
C.*会带来额外的JAVA池解析
D.*会带来额外的LAGRE POOL解析

14.包的大小过小过大容易导致下列哪种情况?
A.易导致数据库缓冲池命中率降低
B.导致排序区额外的损耗
C.操作系统易内存抖动
D.共享池内存溢出的风险加大

15.下列哪种日志记录方式最好?
A.insert into ref_product_def values('P123');
  commit;
  vi_insert_rows:=sql%rowcount;
  write_log('产品信息表插入条数:'||vi_insert_rows);

B.insert into ref_product_def values('P123');
  vi_insert_rows:=sql%rowcount;
  commit;
  write_log('产品信息表插入条数:'||vi_insert_rows);

C.insert into ref_product_def values('P123');
  commit;
  vi_insert_rows:=sql%rowcount;
  write_log('产品信息表插入条数:'||to_char(vi_insert_rows));

D.insert into ref_product_def values('P123');
  vi_insert_rows:=sql%rowcount;
  commit;
  write_log('产品信息表插入条数:'||to_char(vi_insert_rows));

16.在Oracle中,不属于游标属性的是()?
A.%NOTFOUND
B.%FOUND
C.%ISCLOSE
D.%ISOPEN

17.游标显示打开未显示关闭,会导致下面哪种错误?
A.超过游标打开数
B.游标未能成功打开
C.游标未能成功关闭
D.超出游标占用内存量

18.下面的程序哪种是不建议的写法(多选)?
   create table T1(trade date,product_id varchar2(10),data_date varchar2(8))
   以trade_date按日分区
   该表在product_id建立了分区索引
   Trunc函数:trunc(sysdate)为当日的零时零分
A.select count(0) from T1 where trunc(trade_date)=trunc(sysdate)
B.select * from T1 where trade_date = func('20140101')
C.select * from T1 where product_id = 1
D.select * from T1 where trade_date between sysdate and sysdate+1

19.前台翻页查询需要注意哪些事项?(多选)
A.事先提取固定值
B.函数调用放在最外层
C.尽量使用循环嵌套
D.表连接需尽量少

20.aa,bb表都有20个字段,且记录数量都很大,aa,bb表的X字段(非空)上有索引,请用SQL列出aa表里面存在的X在bb表中不存在的X的值,请写出最快的语句,并解释原因。

21.有个表a(x number(20))用最快速高效的SQL向该表插入从1开始的连续的1000万条记录。

22.写一个程序如下表:

STUCLASSSCORE
000850001180
000850001290
0008500013100
000850002150
000850002260
000850002370


转换成如下格式

STU第一门课程第二门课程第三门课程
000850001 8090100
000850002 506070

 

 

 

转载于:https://www.cnblogs.com/ixan/p/9533475.html

### SQL 笔试题目及答案解析 以下是基于提供的参考资料整理的经典 SQL 笔试题及其答案解析: #### 题目 21 **问题**: 查询部门编号为 1 的员工姓名和工资。 ```sql SELECT name, salary FROM employees WHERE department_id = 1; ``` 此查询通过 `WHERE` 子句筛选出部门编号为 1记录,并返回对应的员工姓名 (`name`) 和工资 (`salary`) 列[^1]。 --- #### 题目 22 **问题**: 统计每个部门的平均工资并按降序排列。 ```sql SELECT department_id, AVG(salary) AS avg_salary FROM employees GROUP BY department_id ORDER BY avg_salary DESC; ``` 该语句利用聚合函数 `AVG()` 计算各部门的平均工资,同时使用 `GROUP BY` 对数据分组,并通过 `ORDER BY` 实现降序排序。 --- #### 题目 23 **问题**: 查找工资高于所有员工平均工资的员工信息。 ```sql SELECT * FROM employees WHERE salary > (SELECT AVG(salary) FROM employees); ``` 子查询 `(SELECT AVG(salary) FROM employees)` 返回所有员工的平均工资,外层查询则筛选出工资大于该值的员工记录。 --- #### 题目 24 **问题**: 找到入职日期最早的员工姓名和入职时间。 ```sql SELECT name, hire_date FROM employees WHERE hire_date = (SELECT MIN(hire_date) FROM employees); ``` 这里使用了嵌套查询中的 `MIN()` 函数来获取最早入职的时间,并匹配相应的员工信息。 --- #### 题目 25 **问题**: 显示每个职位的总人数以及对应职位名称。 ```sql SELECT job_title, COUNT(*) AS total_employees FROM jobs j JOIN employees e ON j.job_id = e.job_id GROUP BY job_title; ``` 上述代码展示了如何通过连接 (`JOIN`) 格实现跨查询,最终统计每种职位的人数。 --- #### 题目 26 **问题**: 获取薪资最高的前五名员工的信息。 ```sql SELECT * FROM employees ORDER BY salary DESC LIMIT 5; ``` 这条命令按照薪水从高到底排序,并限制结果集只显示前五个条目。 --- #### 题目 27 **问题**: 删除没有分配任何项目的员工记录。 ```sql DELETE FROM employees WHERE employee_id NOT IN (SELECT DISTINCT(employee_id) FROM projects); ``` 这里的逻辑是先找出参与过项目的所有员工 ID ,再删除那些不在列里的员工记录。 --- #### 题目 28 **问题**: 更新某位特定员工的邮箱地址。 假设要更新的是员工ID为'101'的新邮件地址 'new.email@example.com' ```sql UPDATE employees SET email='new.email@example.com' WHERE employee_id=101; ``` 这是标准的数据修改操作语法。 --- #### 题目 29 **问题**: 插入一条新雇员的数据至数据库中。 假设有如下字段需填写:employee_id(唯一), name, salary, department_id. ```sql INSERT INTO employees (employee_id, name, salary, department_id) VALUES ('102', 'John Doe', 5000, 2); ``` 这是一次典型的插入动作示范。 --- #### 题目 30 **问题**: 将两个格的内容联合起来展示,即使某些键不存在于另一方也应呈现出来(全外联接 Full Outer Join)。 如果存在两张分别存储不同部分客户资料的A与B,则可以这样写: ```sql SELECT A.*, B.* FROM table_A A FULL OUTER JOIN table_B B ON A.key_column = B.key_column; ``` 注意并非所有的DBMS都支持FULL OUTER JOIN,在不兼容的情况下可能需要用UNION模拟. --- ### 总结 以上仅列举了一部分内容作为示例。更多深入练习可参照其他区间内的习题集合[^2]^[]^。对于准备技术面试或者提升SQL技能的人来说,这些案例非常有价值[^3]^[]^.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值