数据库面试题总结

一、通过 SQL,您如何从 "Persons" 表中选取 "FirstName" 列的值等于"Peter" 的所有记录?C

  1) SELECT [all] FROM Persons WHERE FirstName='Peter' ;

  2) SELECT * FROM Persons WHERE FirstName LIKE 'Peter';

  3) SELECT * FROM Persons WHERE FirstName='Peter';

  4) SELECT [all] FROM Persons WHERE FirstName LIKE 'Peter';

 

二、通过 SQL,您如何从 "Persons" 表中选取 "FirstName" 列的值以 "a" 开头的所有记录?D

  1) SELECT * FROM Persons WHERE FirstName='a';

  2) SELECT * FROM Persons WHERE FirstName LIKE '%a';

  3) SELECT * FROM Persons WHERE FirstName='%a%';

  4) SELECT * FROM Persons WHERE FirstName LIKE 'a%';

 

三、通过 SQL,您如何按字母顺序选取 Persons 表中 LastName 介于 Adams 和 Carter 的所有记录?B

  1) SELECT * FROM Persons WHERE LastName>'Adams' AND LastName<'Carter';

  2) SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter';

  3) SELECT LastName>'Adams' AND LastName<'Carter' FROM Persons;

 

四、哪条 SQL 语句可返回唯一不同的值?A

  1) SELECT DISTINCT

  2) SELECT DIFFERENT

  3) SELECT UNIQUE

 

五、哪条 SQL 语句用于在数据库中插入新的数据?B

  1) INSERT NEW

  2) INSERT INTO

  3) ADD RECORD

  4) ADD NEW

 

六、通过 SQL,您如何从 "Persons" 表中选取 "FirstName" 列?C

  1) SELECT Persons.FirstName;

  2) EXTRACT FirstName FROM Persons;

  3) SELECT FirstName FROM Persons;

 

七、通过 SQL,您如何从 "Persons" 表中选取所有的列?B

  1) SELECT [all] FROM Persons;

  2) SELECT * FROM Persons;

  3) SELECT Persons;

  4) SELECT *.Persons;

 

八、通过 SQL,您如何从 "Persons" 表中选取 "FirstName" 列的值等于"Peter" 的所有记录?B

  1) SELECT [all] FROM Persons WHERE FirstName='Peter';

  2) SELECT * FROM Persons WHERE FirstName='Peter';

  3) SELECT * FROM Persons WHERE FirstName LIKE 'Peter';

  4) SELECT [all] FROM Persons WHERE FirstName LIKE 'Peter';

 

trnlst 交易清单

trn

name

4519

抵债资产损失核销登记

2115

储蓄存款转存       

1101

客户基本信息维护

2161

储蓄活期一本通开户

1122

储蓄活期一本通开户

 

entry 交易分录表

trn

no

entry

cr

acct

4519

1

借:呆账准备金                          

129100

4519

2

贷:其它呆帐贷款损失                     

128400

4519

3

收:已核销呆帐                          

108000

2115

1

借:存款帐户                            

     

2115

2

贷:转入存款账户                        

     


 

dict_act 科目字典表

attr

account

ctrlcode

name

cr

资产

1291    

129100

呆账准备                               

资产

12911   

129110

贷款损失专项准备                       

负债

2011

201100

活期存款

负债

2051

205100

定期存款

负债

20511

205110

一年以下定期存款

 

 

  1. 从 dict_act 表中选取字段 name 的2个汉字为“账”或 “款” 或 “年” 的科目

select * from dict_act where

(name like'%%' and name like'%%') or

(name like'%%' and name like'%%') or

(name like'%%' and name like'%%');

 

  1. 从 dict_act 表中选取字段 name 不以“贷” 和 “活” 开头的科目

 

select * from dict_act where name not like '贷%'and name not like‘活%’

 

3. 列出使用了 acct 科目的交易分录表记录,并同时列出科目的名称(写出SQL语句和结果集)

 

SELECT a.* ,b.name

from entry a left JOIN trnlst b   on a.trn = b.trn

where a.acct <> ''

 

4. 列出所有的交易分录记录和使用的科目名称 (如果有的话),写出SQL语句和结果集

 

SELECT a.*,b.name

from entry a left join dict_act b on a.acct = b.ctrlcode

where a.acct <> ''

 

5. 列出所有的科目字典,和使用的交易分录 (如果有的话) ,写出SQL语句和结果集

SELECT a.*,b.*

from dict_act a left join entry b on a.ctrlcode = b.acct

where a.ctrlcode <> ''

                                           

6. 列出交易清单中所有交易,和使用的科目名称 (如果有的话) ,写出SQL语句和结果集

 

SELECT a.*,c.name

from trnlst a

LEFT JOIN entry b

on a.trn = b.trn

left join dict_act c

on b.acct = c.ctrlcode

 

比较经典的面试题:

用一条SQL语句查询出prd表中每个产品都大于800亿的银行名称

 

bank

product

balance

苏州银行

活期储蓄

801

苏州银行

农户短期贷款

750

汉口银行

活期储蓄

760

汉口银行

银团贷款

900

兰州银行

活期储蓄

812

兰州银行

银团贷款

1006

兰州银行

住房按揭贷款

905

 

Select bank

from pro

group by bank

having min(balance)>800

第二题  

 

账户表 如下:

编号

账号

姓名

科目

科目名称

余额

1

7061001

强西

201101

活期存款

690

2

7061002

天天

201101

活期存款

890

3

7061001

强西

201101

活期存款

690

 

删除除了编号不同其他都相同的账户冗余信息

Oracle中的处理方法:

 delete from account where id not in(select max(id) from account group by count,name,kemu,kemumc,balance)

mysql中的方法

create table tmp as select min(id) as col1 from account group by count,name,kemu,kemumc,balance;

delete from account where id not in (select col1 from tmp);

drop table tmp;

第三题

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

select a.name, b.name  from bank a, bank b  where a.name < b.name

### MySQL 数据库面试题总结 以下是常见的 MySQL 数据库面试问题及其解析,这些问题涵盖了基础、进阶以及实际应用中的常见场景: #### 1. 子查询的应用 子查询是 MySQL 中非常重要的特性之一。通过将一个查询嵌套在另一个查询中,可以实现复杂的数据筛选和操作。例如: ```sql SELECT column1, column2 FROM table1 WHERE column1 IN (SELECT column1 FROM table2); ``` 子查询可以用于 `SELECT`、`INSERT`、`UPDATE` 和 `DELETE` 语句中[^3]。 #### 2. 使用 LIKE 关键字进行通配符查询 `LIKE` 是 MySQL 中用于模糊匹配的关键字。它可以与 `%` 和 `_` 通配符结合使用。例如: - `%` 表示任意长度的字符。 - `_` 表示单个字符。 以下是一个简单的例子: ```sql SELECT * FROM users WHERE username LIKE 'j%'; ``` 这将返回所有以 "j" 开头的用户名记录[^3]。 #### 3. 索引的作用及优化 索引是提高数据库查询性能的重要工具。常见的索引类型包括主键索引、唯一索引、普通索引和全文索引。创建索引时需要注意避免过度使用,因为索引会增加写入操作的开销[^1]。 #### 4. 联合查询(UNION 和 UNION ALL) 联合查询用于合并两个或多个 `SELECT` 语句的结果集。`UNION` 会自动去重,而 `UNION ALL` 则保留所有重复项。例如: ```sql SELECT column1 FROM table1 UNION SELECT column1 FROM table2; ``` #### 5. 分组查询与聚合函数 `GROUP BY` 语句通常与聚合函数(如 `COUNT()`、`SUM()`、`AVG()` 等)一起使用,用于对数据进行分组统计。例如: ```sql SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department; ``` #### 6. JOIN 的类型及应用场景 MySQL 支持多种 JOIN 类型,包括 `INNER JOIN`、`LEFT JOIN`、`RIGHT JOIN` 和 `FULL OUTER JOIN`(需通过模拟实现)。例如: ```sql SELECT e.name, d.department_name FROM employees e LEFT JOIN departments d ON e.department_id = d.id; ``` #### 7. 事务管理 事务是一组 SQL 操作,要么全部执行成功,要么全部失败回滚。常用的事务控制命令包括 `BEGIN`、`COMMIT` 和 `ROLLBACK`[^2]。 #### 8. 视图(View)的作用 视图是一种虚拟表,基于 SQL 查询结果定义。它可以帮助简化复杂的查询逻辑,并提供额外的安全性。例如: ```sql CREATE VIEW employee_view AS SELECT name, salary FROM employees WHERE department = 'HR'; ``` #### 9. 数据库备份与恢复 数据库备份可以通过 `mysqldump` 工具实现,而恢复则可以通过导入 SQL 文件完成。例如: ```bash mysqldump -u username -p database_name > backup.sql mysql -u username -p database_name < backup.sql ``` #### 10. 性能调优技巧 性能调优涉及多个方面,包括索引优化、查询重写、硬件升级等。建议定期分析慢查询日志并使用 `EXPLAIN` 查看查询计划。 --- ### 示例代码:复杂查询 以下是一个综合了 JOIN、子查询和聚合函数的复杂查询示例: ```sql SELECT d.department_name, COUNT(e.id) AS employee_count FROM departments d LEFT JOIN employees e ON d.id = e.department_id WHERE e.salary > (SELECT AVG(salary) FROM employees) GROUP BY d.department_name HAVING employee_count > 5; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值