数据库方面面试题

1.数据库三大范式:

  答:1.每个字段不可再分;

    2.每个表中都有主字段;

    2.关联关系的表中不能存在所关联的表的非主键的字段。

2.存储过程:

  答:通常我们操作sql语句是先编译存后执行,储过程就是将一些对sql的特殊操作编译后放入存储过程中,通过调用存储过程名来执行这些sql语句;

     优点:

    1.灵活性,增强了sql功能,可以用流控制语句编写。

    2.组件性,可以多次调用。

          3.实现执行速度快

          4.安全,可通过权限设置访问存储过程。

            格式:

delimtter         //分割符,表示接下来是存储过程
create procedure proc1(out/in student int)  //创建一个名为proc1的存储过程,括号内表示传入或返回的int型的变量student';
begin      //表示开始写存储过程
...          //存储过程
end       //存储过程结束
delimtter
        

  条件语句: if 条件 then  执行代码 else  执行代码

  循环语句:  loop 执行代码 end loop;

 

3.表连接:

  创建表:

create table student(
	sid INT PRIMARY key,
	sname VARCHAR(60) not null,
	sage int not null
)

create TABLE s_info(
	iid int PRIMARY key,
  sphone varchar(15),
  semail VARCHAR(20),
  sid int not null
)

数据:

Student:

sid     sname   sage
1 小文姐 18 2 孙擦啊 18 3 万套 18 

s_info:

siid     sphone            semail               sid
1	13032894563	1148233614@qq.com	1
2	16632894563	1148344314@qq.com	2
3	1852894563	114321114@qq.com        3

内连接:匹配两边相同的字段,有相同的显示,无相同的两边都不显示。join 连接的表 on 条件 

显示内连接:join

SELECT * from student s join s_info si on s.sid=si.sid ;

隐式内连接:没有join on'
SELECT * from student s, s_info si where s.sid=si.sid;

外链接:外联接可以是左向外联接、右向外联接或完整外部联接。  

左连接:会显示左边的表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。 left  join on

SELECT * from student s left join s_info si on s.sid=si.sid ;      

右链接:会显示右边的表的所有行,而不仅仅是联接列所匹配的行。如果右表的某行在左表中没有匹配行,则在相关联的结果集行中左表的所有选择列表列均为空值。right  join on       

SELECT * from student s right join s_info si on s.sid=si.sid ;

完整外部联接:完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。 full join on

SELECT * from student s full join s_info si on s.sid=si.sid ;

交叉连接:交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。    
FROM 子句中的表或视图可通过内联接或完整外部联接按任意顺序指定;但是,用左或右向外联接指定表或视图时,表或视图的顺序很重要。有关使用左或右向外联接排列表的更多信息,请参见使用外联接。     

隐式:没有cross join,直接用where语句;

SELECT * from student s,s_info si where s.sid=1 ;

显示:cross join  on

SELECT * from student s CROSS JOIN s_info si on s.sid=1 ;

4.常用函数:

sum():求和

max():最大值

min():最小值

avg():平均值

frist():返回查询的第一条记录

last():返回查询的最后一条记录

group by 字段名:返回分组统计,去重统计。

5.常用

  distinct  字段名 :根据指定去重,distinct必须放在开头

  select DISTINCT s.sname from student s;

 

 count(*):统计个数,括号内为字段名;

  select count(DISTINCT s.sname) '不同的姓名个数' from student;

   6.视图

  

posted @ 2016-11-09 16:20  夏文杰  阅读(274)  评论(0编辑  收藏  举报