日韩欧美另类久久久精品_亚洲大色堂人在线无码_国产三级aⅴ在线播放_在线无码aⅴ精品动漫_国产精品精品国产专区

我要投稿 投訴建議

最新數(shù)據(jù)庫面試題

時(shí)間:2022-11-05 03:10:51 面試試題 我要投稿
  • 相關(guān)推薦

2016年最新數(shù)據(jù)庫面試題

  下面是CN人才網(wǎng)提供的2016年最新數(shù)據(jù)庫面試題,歡迎閱讀。

2016年最新數(shù)據(jù)庫面試題

  sql面試題

  1,寫出一條Sql語句:取出表A中第31到第40記錄(SQLServer,以自動(dòng)增長(zhǎng)的ID作為主鍵,注意:ID可能不是連續(xù)的。

  答:

  → 解1: select top 10 * from A where id not in (select top 30 id from A)

  演變步驟:

  1)select top 30 id from T_FilterWords–取前條

  2)select * from T_FilterWords where id not in (select top 30 id from T_FilterWords)–取id不等于前三十條的–也就是把前條排除在外

  3)select top 10 * from T_FilterWords where id not in (select top 30 id from T_FilterWords)

  –取把前條排除在外的前條,也就是-40條

  → 解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)

  → 解3:用ROW_NUMBER實(shí)現(xiàn)

  /———————————————–+———————————————–\

  下面的SQL題是?碱}中的?碱},必須重視!!!!!!!!

  2,橫表、縱表轉(zhuǎn)換(常考!!!)

  1)縱表結(jié)構(gòu) TableA

  Name Course Grade

  張三 語文 75

  張三 數(shù)學(xué) 80

  張三 英語 90

  李四 語文 95

  李四 數(shù)學(xué) 55

  橫表結(jié)構(gòu) TableB

  Name 語文 數(shù)學(xué) 英語

  張三 75 80 90

  李四 95 55 0

  先理解:

  select Name,

  (case Course when ‘語文‘ then Grade else 0 end) as 語文,

  (case Course when ‘數(shù)學(xué)‘ then Grade else 0 end) as 數(shù)學(xué),

  (case Course when ‘英語‘ then Grade else 0 end) as 英語

  from TableA

  然后理解標(biāo)準(zhǔn)答案:

  select Name,

  sum(case Course when ‘語文‘ then Grade else 0 end) as 語文,

  sum(case Course when ‘數(shù)學(xué)‘ then Grade else 0 end) as 數(shù)學(xué),

  sum(case Course when ‘英語‘ then Grade else 0 end) as 英語

  from TableA

  group by Name

  2)、橫表轉(zhuǎn)縱表的”SQL”示例

  橫表結(jié)構(gòu): TEST_H2Z

  ID 姓名 語文 數(shù)學(xué) 英語

  1 張三 80 90 70

  2 李四 90 85 95

  3 王五 88 75 90

  轉(zhuǎn)換后的表結(jié)構(gòu):

  ID 姓名 科目 成績(jī)

  1 張三 語文 80

  2 張三 數(shù)學(xué) 90

  3 張三 英語 70

  4 李四 語文 90

  5 李四 數(shù)學(xué) 80

  6 李四 英語 99

  7 王五 語文 85

  8 王五 數(shù)學(xué) 96

  9 王五 英語 88

  橫表轉(zhuǎn)縱表SQL示例:

  SELECT 姓名,’語文’ AS 科目,語文 AS 成績(jī) FROM TEST_H2Z UNION ALL

  SELECT 姓名,’數(shù)學(xué)’ AS 科目,數(shù)學(xué) AS 成績(jī) FROM TEST_H2Z UNION ALL

  SELECT 姓名,’英語’ AS 科目,英語 AS 成績(jī) FROM TEST_H2Z

  ORDER BY 姓名,科目 DESC;

  3,刪除姓名、年齡重復(fù)的記錄(只保留Id最大的一條)(?!!!)

  Id name age salary

  1 yzk 80 1000

  2 yzk 80 2000

  3 tom 20 20000

  4 tom 20 20000

  5 im 20 20000

  //取得不重復(fù)的數(shù)據(jù)

  select * from Persons

  where Id in

  (

  SELECT MAX(Id) AS Expr1

  FROM Persons

  GROUP BY Name, Age

  )

  → 根據(jù)姓名、年齡分組,取出每組的Id最大值,然后將Id最大值之外的排除。

  刪除重復(fù)的數(shù)據(jù):

  delete from Persons

  where Id not in

  (

  SELECT MAX(Id) AS Expr1

  FROM Persons

  GROUP BY Name, Age

  )

  4,下面是一個(gè)由*號(hào)組成的4行倒三角形圖案。

  → 要求:1、輸入倒三角形的行數(shù),行數(shù)的取值3-21之間,對(duì)于非法的行數(shù),要求拋出提示“非法行數(shù)!”;2、在屏幕上打印這個(gè)指定了行數(shù)的倒三角形。

  *******

  *****

  ***

  *

  5,一個(gè)文本文件含有如下內(nèi)容:

  4580616022644994|3000|趙濤

  4580616022645017|6000|張屹

  4580616022645090|3200|鄭欣夏

  → 上述文件每行為一個(gè)轉(zhuǎn)賬記錄,第一列表示帳號(hào),第二列表示金額,第三列表示開戶人姓名。

  創(chuàng)建一張數(shù)據(jù)庫表(MS SQLServer數(shù)據(jù)庫,表名和字段名自擬),請(qǐng)將上述文件逐條插入此表中。

  6、一個(gè)文本文件含有如下內(nèi)容,分別表示姓名和成績(jī):

  張三 90

  李四 96

  王五 78

  趙六 82

  → 提供用戶一個(gè)控制臺(tái)界面,允許用戶輸入要查詢的姓名,輸入姓名并且按回車以后,打印出此人的成績(jī),如果不輸入姓名直接按回車則顯示所有人的姓名以及成績(jī)。(注意:不能使用數(shù)據(jù)庫)

  7,表A字段Id為numberic(18,0),哪個(gè)SQL語句是錯(cuò)誤的:

  select * from A where id=”;

  select * from A where id=’13′;

  select * from A where id=null;

  select * from A where id=’ 13′;

  8,在SQLServer中求當(dāng)前時(shí)間與2012-01-01 0:0:0相差的秒數(shù)?

  9,做一個(gè)表格,三行三列,第一列,前兩行合一;第二行,后兩列合一。

  10,

  表一:student_info

  學(xué)號(hào) 姓名 性別 出生年月 家庭住址 備注

  0001 張三 男 1981-8-9 北京 NULL

  表二:curriculum

  課程編號(hào) 課程名稱 學(xué)分

  0001 計(jì)算機(jī)基礎(chǔ) 2

  0002 C語言 2

  表三:grade

  學(xué)號(hào) 課程編號(hào) 分?jǐn)?shù)

  0001 0001 80

  0001 0002 90

  題目:

  → 條件查詢:

  在GRADE表中查找80-90份的學(xué)生學(xué)號(hào)和分?jǐn)?shù)

  select 學(xué)號(hào),分?jǐn)?shù) from grade where 分?jǐn)?shù) between 80 and 90

  在GRADE 表中查找課程編號(hào)為003學(xué)生的平均分

  select avg(分?jǐn)?shù)) from grade where 課程編號(hào)=’003′

  在GRADE 表中查詢學(xué)習(xí)各門課程的人數(shù)

  Select課程編號(hào),count(學(xué)號(hào)) as 人數(shù)from grade group by 課程編號(hào)

  查詢所有姓張的學(xué)生的學(xué)號(hào)和姓名

  select 姓名,學(xué)號(hào) from student_info where 姓名 like ‘張%’

  → 嵌套查詢:

  1,查詢和學(xué)號(hào)’0001’的這位同學(xué)性別相同的所有同學(xué)的姓名和出生年月

  select 姓名,出生年月 from student_info where 性別 in(select 性別 from student_info where sno=’0001′)

  2,查詢所有選修課程編號(hào)為0002 和0003的學(xué)生的學(xué)號(hào)、姓名和性別

  select 學(xué)號(hào),姓名,性別 from student_info where 學(xué)號(hào) in(select 學(xué)號(hào) from grade where 課程編號(hào)=’0002′ and 學(xué)號(hào) in(select 學(xué)號(hào) from grade where 課程編號(hào)=’0001′))

  3,查詢出學(xué)號(hào)為0001的學(xué)生的分?jǐn)?shù)比0002號(hào)學(xué)生最低分高的課程編號(hào)的課程編號(hào)和分?jǐn)?shù)

  select 課程編號(hào), 分?jǐn)?shù) from grade where 學(xué)號(hào)=’0001′ and 分?jǐn)?shù)>(select min(分?jǐn)?shù)) from grade where 學(xué)號(hào)=’0002′)

  → 多表查詢:

  1,查詢分?jǐn)?shù)在80-90分的學(xué)生的學(xué)號(hào)、姓名、分?jǐn)?shù)

  select student_info.學(xué)號(hào),student_info.姓名,grade.分?jǐn)?shù) from student_info,grade where grade.分?jǐn)?shù) between 80 and 90

  2,查詢學(xué)習(xí)了’C語言’課程的學(xué)生學(xué)號(hào)、姓名和分?jǐn)?shù)

  select student_info.學(xué)號(hào),student_info.姓名,grade.成績(jī)from student_info,grade,curriculum where student_info.學(xué)號(hào)=grade.學(xué)號(hào)and grade.課程號(hào)=curriculum.課程號(hào)and curriculum.課程名=’C語言’

  3,查詢所有學(xué)生的總成績(jī),要求列出學(xué)號(hào)、姓名、總成績(jī),沒有選課的學(xué)生總成績(jī)?yōu)榭铡?/p>

  select grade.學(xué)號(hào),student_info.姓名,sum(grade.成績(jī)) as 總成績(jī)from student_info,grade where grade.學(xué)號(hào)=student_info.學(xué)號(hào)group by grade.學(xué)號(hào),student_info.姓名

  11,題目、活期存款中,“儲(chǔ)戶”通過“存取款單”和“儲(chǔ)蓄所”發(fā)生聯(lián)系。假定儲(chǔ)戶包括:賬號(hào),姓名,電話,地址,存款額;“儲(chǔ)蓄所”包括:儲(chǔ)蓄所編號(hào),名稱,電話,地址(假定一個(gè)儲(chǔ)戶可以在不同得儲(chǔ)蓄所存取款)

  1、寫出設(shè)計(jì)以上表格的語句(4分)

  2、創(chuàng)建一個(gè)觸發(fā)器TR1完成下面內(nèi)容:

  → 當(dāng)向“存取款單”表中插入數(shù)據(jù)時(shí),如果存取標(biāo)志=1則應(yīng)該更改儲(chǔ)戶表讓存款額加上存取金額,如果存取標(biāo)志=0則應(yīng)該更改儲(chǔ)戶表讓存款額減去存取金額,如果余額不足顯示余額不足錯(cuò)誤。

  CREATE TABLE CREATE TRIGGER tr1 on qukuan after insert

  AS

  BEGIN

  declare @sid nvarchar(50)

  declare @type int

  declare @qian int

  declare @yuer int

  select @sid=sid,@type=[type],@m=m from inserted

  select @yuer=yuer from cunkuan

  if(@type=1)

  begin

  update cunkuan set yuer=yuer+@qian

  end

  else

  begin

  if(@yuer<@qian)

  begin

  print ‘余額不足’

  end

  else

  begin

  update cunkuan set yuer=yuer-@qian

  end

  end

  END

  GO

  12,本題用到下面三個(gè)關(guān)系表:

  CARD 借書卡: (CNO 卡號(hào),NAME 姓名,CLASS 班級(jí))

  BOOKS 圖書: (BNO 書號(hào),BNAME 書名,AUTHOR 作者,PRICE 單價(jià),QUANTITY 庫存冊(cè)數(shù) )

  BORROW 借書記錄: (CNO 借書卡號(hào),BNO 書號(hào),RDATE 還書日期

  → 備注:限定每人每種書只能借一本;庫存冊(cè)數(shù)隨借書、還書而改變。

  → 要求實(shí)現(xiàn)如下處理:

  1),寫出自定義函數(shù),要求輸入借書卡號(hào)能得到該卡號(hào)所借書金額的總和

  CREATE FUNCTION getSUM

  (

  @CNO int

  )

  RETURNS int

  AS

  BEGIN

  declare @sum int

  select @sum=sum(price) from BOOKS where bno in (select bno from BORROW where cno=@CNO)

  return @sum

  END

  GO

  2),找出借書超過5本的讀者,輸出借書卡號(hào)及所借圖書冊(cè)數(shù)。

  select CNO,count(BNO) as 借書數(shù)量from BORROW group by CNO having count(BNO)>3

  3),查詢借閱了”水滸”一書的讀者,輸出姓名及班級(jí)。

  select name,class from card where cno in( select cno from borrow where bno in(

  select bno from BOOKS where bname=’水滸’))

  4),查詢過期未還圖書,輸出借閱者(卡號(hào))、書號(hào)及還書日期。

  select CNO,BNO,RDATE from borrow where getdate()>RDATE

  5),查詢書名包括”網(wǎng)絡(luò)”關(guān)鍵詞的圖書,輸出書號(hào)、書名、作者。

  select bno,bname,author from books where bname like ‘網(wǎng)絡(luò)%’

  6),查詢現(xiàn)有圖書中價(jià)格最高的圖書,輸出書名及作者。

  select bname,author from books where price in(select max(price) from books )

  7),查詢當(dāng)前借了”計(jì)算方法”但沒有借”計(jì)算方法習(xí)題集”的讀者,輸出其借書卡號(hào),并按卡號(hào)降序排序輸出。

  select cno from borrow where bno in (select bno from books where bname=’計(jì)算方法’) and cno not in ( select cno from borrow where bno in(select bno from books where bname=’計(jì)算方法習(xí)題集’)) order by cno desc

  或

  SELECT a.CNO

  FROM BORROW a,BOOKS b

  WHERE a.BNO=b.BNO AND b.BNAME=N’計(jì)算方法’

  AND NOT EXISTS(

  SELECT * FROM BORROW aa,BOOKS bb

  WHERE aa.BNO=bb.BNO

  AND bb.BNAME=N’計(jì)算方法習(xí)題集’

  AND aa.CNO=a.CNO)

  ORDER BY a.CNO DESC

  8),將”C01″班同學(xué)所借圖書的還期都延長(zhǎng)一周。

  update borrow set rdate=dateadd(day,7,rdate) from BORROW where cno in(select cno from card where class=’一班’)

  9),從BOOKS表中刪除當(dāng)前無人借閱的圖書記錄。

  DELETE A FROM BOOKS a WHERE NOT EXISTS( SELECT * FROM BORROW WHERE BNO=a.BNO)

  10),如果經(jīng)常按書名查詢圖書信息,請(qǐng)建立合適的索引。(這個(gè)不確定對(duì)不 90%應(yīng)該是對(duì)的 自己看了下書寫的)

  CREATE CLUSTERED INDEX IDX_BOOKS_BNAME ON BOOKS(BNAME)

  11),在BORROW表上建立一個(gè)觸發(fā)器,完成如下功能:如果讀者借閱的書名是”數(shù)據(jù)庫技術(shù)及應(yīng)用”,就將該讀者的借閱記錄保存在BORROW_SAVE表中(注ORROW_SAVE表結(jié)構(gòu)同BORROW表)。

  CREATE TRIGGER TR_SAVE ON BORROW FOR INSERT,UPDATE AS IF @@ROWCOUNT>0 INSERT BORROW_SAVE SELECT i.* FROM INSERTED i,BOOKS b

  WHERE i.BNO=b.BNO AND b.BNAME=N’數(shù)據(jù)庫技術(shù)及應(yīng)用’

  12),建立一個(gè)視圖,顯示”力01″班學(xué)生的借書信息(只要求顯示姓名和書名)。

  CREATE VIEW V_VIEW AS select name,bname from books,card,borrow where borrow.cno=card.cno and borrow.bno=books.bno and class=’一班’

  13).查詢當(dāng)前同時(shí)借有”計(jì)算方法”和”組合數(shù)學(xué)”兩本書的讀者,輸出其借書卡號(hào),并按卡號(hào)升序排序輸出。

  select a.cno from borrow a,borrow b where a.cno=b.cno and a.bno in(select bno from books where bname=’計(jì)算方法’) and b.bno in(select bno from books where bname=’組合數(shù)學(xué)’) order by a.cno desc

  或

  SELECT a.CNO FROM BORROW a,BOOKS b WHERE a.BNO=b.BNO AND b.BNAME IN(‘計(jì)算方法’,’組合數(shù)學(xué)’) GROUP BY a.CNO HAVING COUNT(*)=2 ORDER BY a.CNO DESC

  14),用事務(wù)實(shí)現(xiàn)如下功能:一個(gè)借書卡號(hào)借走某書號(hào)的書,則該書的庫存量減少1,當(dāng)某書的庫存量不夠1本的時(shí)候,該卡號(hào)不能借該書

  alter PROCEDURE pro_jieshu

  @cno int,

  @bno int,

  @date datetime

  AS

  BEGIN

  begin tran

  declare @quantity int

  select @quantity=quantity from books where bno=@bno

  insert into borrow values(@cno,@bno,@date)

  update books set quantity=@quantity-1 where bno=@bno

  if(@quantity>0)

  begin

  commit tran

  end

  else

  begin

  print ‘已無庫存’

  rollback

  end

  END

  GO

  15),用游標(biāo)實(shí)現(xiàn)將書號(hào)為‘A001’的書本的價(jià)格提高10元

  declare @bno int

  declare @bname nvarchar(50)

  declare @author nvarchar(50)

  declare @price int

  declare @quantity int

  declare mycursor cursor for select * from books

  open mycursor

  fetch next from mycursor into @bno,@bname,@author,@price,@quantity

  while(@@fetch_status=0)

  begin

  if(@bno=2)

  begin

  update books set price=@price+10 where current of mycursor

  end

  fetch next from mycursor into @bno,@bname,@author,@price,@quantity

  end

  close mycursor

  deallocate mycursor

【最新數(shù)據(jù)庫面試題】相關(guān)文章:

Oracle數(shù)據(jù)庫DBA經(jīng)典面試題02-02

數(shù)據(jù)庫常見面試題07-28

麥當(dāng)勞最新面試題目02-22

2014最新中興面試題08-10

最新關(guān)于精選php面試題及答案07-18

最新文秘面試題目及答案07-20

最新結(jié)構(gòu)化面試題目09-26

最新2015北京幼升小面試題08-03

最新騰訊微信產(chǎn)品經(jīng)理面試題07-27

2016結(jié)構(gòu)化面試題庫(最新)02-17