数据库常见笔试面试题

1、sql语句执行顺序

SQL Select 语句完整的执行顺序: 

1)from 子句组装来自不同数据源的数据; 

2)where 子句基于指定的条件对记录行进行筛选; 

3)group by 子句将数据划分为多个分组; 

4)使用聚集函数进行计算; 

5)使用 having 子句筛选分组; 

6)计算所有的表达式

from --where-- group by-- having --select-- order by

2、having与where的区别

having 和where 都是用来筛选用的,having 是筛选组  而where是筛选记录

select 部门编号,count(*) from 员工信息表 where 工资>=2000 group by 部门编号 having count(*)>1

3、mysql的数据库引擎以及他们的区别

mysql常见的数据库引擎有MYISAM、INNODB

在数据库中查看引擎使用sql命令

show engines;

数据库常见笔试面试题_第1张图片

MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。

MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据

InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含where条件时,两种表的操作是一样的

MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大

MyISAM适合:

(1)做很多count 的计算;

(2)插入不频繁,查询非常频繁;

(3)没有事务。

InnoDB适合:

(1)可靠性要求比较高,或者要求事务;

(2)表更新和查询都相当的频繁,并且表锁定的机会比较大的情况指定数据引擎的创建


4、LIMIT

select * from table limit m,n

其中m是指记录开始的index,从0开始,表示第一条记录

n是指从第m+1条开始,取n条。

select * from tablename limit 2,4

即取出第3条至第6条,4条记录

mysql> select id,account from lc_user limit 2,2;
+----+------------+
| id | account    |
+----+------------+
|  3 | hongchen   |
|  4 | wangweiwei |
+----+------------+
2 rows in set

5、索引与模糊查询

like keyword% 索引有效

like %keyword% 索引失效,也无法使用

解决方案

使用翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全扫描。有效降低消耗值,io值,cpu值这三个指标,尤其是io值的降低

http://www.dewen.org/q/397

6、 数据库三范式

第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。

第三范式(3NF)必须先满足第二范式(2NF)。第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

7、存储过程与函数

存储过程和函数目的是为了 可重复地 执行操作数据库的sql语句的集合。区别是写法和调用上。

写法上:存储过程的参数列表可以有输入参数、输出参数、可输入输出的参数;

            函数的参数列表只有输入参数,并且有return <返回值类型,无长度说明>。

返回值上:

    存储过程的返回值,可以有多个值,

              函数的返回值,只有一个值。

存储进程                              自定义函数     

功能强大,限制少                 诸多限制,有许多语句不能使用,许多功能不能实现     

不能直接引用返回值              可以直接引用返回值     

用select语句返回记录集        用表变量返回记录集     

create procedure 存储过程名字()   
(   
  [in|out|inout] 参数 datatype   
)   
begin   
MySQL 语句;   
end;


你可能感兴趣的:(sql,数据库,面试,笔试)