面试常问数据库问题汇总

1.如何创建一个虚拟表(创建虚拟表要用到什么关键字),并在什么情况下使用?

--创建临时表

CREATE TABLE #PageIndexForMarketStoreList
(
IndexID int IDENTITY (1, 1) NOT NULL,  --自增id
PostId int
)

--给临时表添加数据

INSERT INTO #PageIndexForMarketStoreList(PostId) EXEC(数据集合(例如:select *from 表))

关键字:#

 

2.查询优化,让查询效率更快(例如:查询一张报表,数据量可能会很大,要怎么样来做优化呢)

http://www.cnblogs.com/qqzy168/archive/2013/08/02/3233817.html 

 

3.触发器的使用?

 http://www.2cto.com/database/201501/371835.html

 

4.lefe join以及right join的区别(列如:假设a表为X b表为Y 如果用left join可以查出多少条数据,用right join能查出多少条数据?)

left join:查询出a表中有多少条数据就有多少条数据

right join:查询出b表中有多少条符合条件(b表为空的则查不出来)的数据 

inner join:查询出左右两张表都符合条件(a,b表都不为空)的数据

 

5.存储过程可以定义变量吗?

可以,DECLARE 名称 类型(INT,NVARCHAR(50)等)

6.存储过程事物,在增、删、改那个用的到?

开始事物:BEGIN TRANSACTION
提交事物:COMMIT TRANSACTION
回滚事务:ROLLBACK TRANSACTION

当操作出现异常时,只要是影响表的操作都可以进行事件回滚(进行事件回滚,发生错误将不会对表有任何影响,回滚到操作前),所以增、删、改都用的到。

 

7.视图的作用?什么情况下需要用到视图?

查询多个关联表的数据的时候需要用到视图更加方便,不用写那么多繁琐的子查询 查询的时候和查表是一样的

8.数据查重

select id,name from A where id in (select id from A group by id having count(1) >= 2)

②select id,name from A where name=(select name from A)

 

查重(查询数据库中重复的数据)
SELECT 表名.列名1,表名.列名2,表名.列名3
FROM 表名 RIGHT OUTER JOIN
          (SELECT 列名1, 列名2
         FROM 表名
         GROUP BY 列名1, 列名2
         HAVING COUNT(列名1) > 1 AND COUNT(列名2) > 1) T ON 
      表名.列名1 = T.列名1 AND 表名.列名2 = T.列名2

 


删重(将重复的数据只保留一条,其余删除)
delete 表名 where 列名3 not in(
SELECT MAX(列名3) AS 列名3 FROM 表名 GROUP BY 列名2,列名1)
select 列名3,列名2,列名1 from 表名 where 列名3 in(
SELECT MAX(列名3) AS 列名3 FROM 表名 GROUP BY 列名2,列名1)

例子:

select A.PostId,A.Title from productlist A right join(select title from productlist group by title having count(title)>1) B
on A.Title=B.Title

 

注:如列名中有ID,则应保证ID不能有重复

 

转载于:https://www.cnblogs.com/aizhonglin/p/6575266.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值