1. 程式人生 > >SQL查詢面試題

SQL查詢面試題

  1. 用一條SQL 語句 查詢出每門課都大於80 分的學生姓名
    name kecheng fenshu
    張三 語文 81
    張三 數學 75
    李四 語文 76
    李四 數學 90
    王五 語文 81
    王五 數學 100
    王五 英語 90

A: select distinct name from table where name not in (select distinct name from table where fenshu<=80)
select name from table group by name having min(fenshu)>80

  1. 學生表 如下:
    自動編號 學號 姓名 課程編號 課程名稱 分數
    1 2005001 張三 0001 數學 69
    2 2005002 李四 0001 數學 89
    3 2005001 張三 0001 數學 69
    刪除除了自動編號不同, 其他都相同的學生冗餘資訊

A: delete tablename where 自動編號 not in(select min( 自動編號) from tablename group by 學號, 姓名, 課程編號, 課程名稱, 分數)
3. 一個叫 team 的表,裡面只有一個欄位name, 一共有4 條紀錄,分別是a,b,c,d, 對應四個球對,現在四個球對進行比賽,用一條sql 語句顯示所有可能的比賽組合.
你先按你自己的想法做一下,看結果有我的這個簡單嗎?
答:select a.name, b.name
from team a, team b
where a.name < b.name
4. 請用SQL 語句實現:從TestDB 資料表中查詢出所有月份的發生額都比101 科目相應月份的發生額高的科目。請注意:TestDB 中有很多科目,都有1 -12 月份的發生額。
AccID :科目程式碼,Occmonth :發生額月份,DebitOccur :發生額。
資料庫名:JcyAudit ,資料集:Select * from TestDB
答:select a.*
from TestDB a
,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID=’101’ group by Occmonth) b
where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur

  1. 面試題:怎麼把這樣一個表兒
    year month amount
    1991 1 1.1
    1991 2 1.2
    1991 3 1.3
    1991 4 1.4
    1992 1 2.1
    1992 2 2.2
    1992 3 2.3
    1992 4 2.4
    查成這樣一個結果
    year m1 m2 m3 m4
    1991 1.1 1.2 1.3 1.4
    1992 2.1 2.2 2.3 2.4

答案一、
select year,
(select amount from aaa m where month=1 and m.year=aaa.year) as m1,
(select amount from aaa m where month=2 and m.year=aaa.year) as m2,
(select amount from aaa m where month=3 and m.year=aaa.year) as m3,
(select amount from aaa m where month=4 and m.year=aaa.year) as m4
from aaa group by year

  1. 說明:複製表( 只複製結構, 源表名:a 新表名:b)

SQL: select * into b from a where 1<>1 (where1=1,拷貝表結構和資料內容)
ORACLE:create table b
As
Select * from a where 1=2

[<>(不等於)(SQL Server Compact)

比較兩個表示式。 當使用此運算子比較非空表示式時,如果左運算元不等於右運算元,則結果為 TRUE。 否則,結果為 FALSE。]

  1. 說明:拷貝表( 拷貝資料, 源表名:a 目標表名:b)

SQL: insert into b(a, b, c) select d,e,f from a;

  1. 說明:顯示文章、提交人和最後回覆時間
    SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

  2. 說明:外連線查詢( 表名1 :a 表名2 :b)

SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUTER JOIN b ON a.a = b.c
ORACLE :select a.a, a.b, a.c, b.c, b.d, b.f from a ,b
where a.a = b.c(+)

  1. 說明:日程安排提前五分鐘提醒
    SQL: select * from 日程安排 where datediff(‘minute’,f 開始時間,getdate())>5

  2. 說明:兩張關聯表,刪除主表中已經在副表中沒有的資訊

SQL:
Delete from info where not exists (select * from infobz where info.infid=infobz.infid )

  1. 有兩個表A 和B ,均有key 和value 兩個欄位,如果B 的key 在A 中也有,就把B 的value 換為A 中對應的value
    這道題的SQL 語句怎麼寫?
    update b set b.value=(select a.value from a where a.key=b.key) where b.id in(select b.id from b,a where b.key=a.key);

  2. 高階sql 面試題
    原表:

courseid coursename score

1 java 70
2 oracle 90
3 xml 40
4 jsp 30

5 servlet 80

為了便於閱讀, 查詢此表後的結果顯式如下( 及格分數為60):

courseid coursename score mark

1 java 70 pass
2 oracle 90 pass
3 xml 40 fail
4 jsp 30 fail

5 servlet 80 pass

寫出此查詢語句

select courseid, coursename ,score ,decode (sign(score-60),-1,’fail’,’pass’) as mark from course
完全正確

SQL> desc course_v
Name Null? Type

COURSEID NUMBER
COURSENAME VARCHAR2(10)
SCORE NUMBER

SQL> select * from course_v;

COURSEID COURSENAME SCORE

1 java 70
2 oracle 90
3 xml 40
4 jsp 30
5 servlet 80

SQL> select courseid, coursename ,score ,decode(sign(score-60),-1,’fail’,’pass’) as mark from course_v;

COURSEID COURSENAME SCORE MARK

1 java 70 pass
2 oracle 90 pass
3 xml 40 fail
4 jsp 30 fail
5 servlet 80 pass

SQL面試題(1)

create table testtable1
(
id int IDENTITY,
department varchar(12)
)

select * from testtable1
insert into testtable1 values(‘設計’)
insert into testtable1 values(‘市場’)
insert into testtable1 values(‘售後’)
/*
結果
id department
1 設計
2 市場
3 售後
*/
create table testtable2
(
id int IDENTITY,
dptID int,
name varchar(12)
)
insert into testtable2 values(1,’張三’)
insert into testtable2 values(1,’李四’)
insert into testtable2 values(2,’王五’)
insert into testtable2 values(3,’彭六’)
insert into testtable2 values(4,’陳七’)
/*
用一條SQL語句,怎麼顯示如下結果
id dptID department name
1 1 設計 張三
2 1 設計 李四
3 2 市場 王五
4 3 售後 彭六
5 4 黑人 陳七
*/

答案:

SELECT testtable2.* , ISNULL(department,’黑人’)
FROM testtable1 right join testtable2 on testtable2.dptID = testtable1.ID

也做出來了可比這方法稍複雜。

sql面試題(2)

有表A,結構如下:
A: p_ID p_Num s_id
1 10 01
1 12 02
2 8 01
3 11 01
3 8 03
其中:p_ID為產品ID,p_Num為產品庫存量,s_id為倉庫ID。請用SQL語句實現將上表中的資料合併,合併後的資料為:
p_ID s1_id s2_id s3_id
1 10 12 0
2 8 0 0
3 11 0 8
其中:s1_id為倉庫1的庫存量,s2_id為倉庫2的庫存量,s3_id為倉庫3的庫存量。如果該產品在某倉庫中無庫存量,那麼就是0代替。

結果:

select p_id ,
sum(case when s_id=1 then p_num else 0 end) as s1_id
,sum(case when s_id=2 then p_num else 0 end) as s2_id
,sum(case when s_id=3 then p_num else 0 end) as s3_id
from myPro group by p_id

SQL面試題(3)

1 .觸發器的作用?
答:觸發器是一中特殊的儲存過程,主要是通過事件來觸發而被執行的。它可以強化約束,來維護資料的完整性和一致性,可以跟蹤資料庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。如,某表上的觸發器上包含對另一個表的資料操作,而該操作又會導致該表觸發器被觸發。
2 。什麼是儲存過程?用什麼來呼叫?
答:儲存過程是一個預編譯的 SQL 語句,優點是允許模組化的設計,就是說只需建立一次,以後在該程式中就可以呼叫多次。如果某次操作需要執行多次 SQL ,使用儲存過程比單純 SQL 語句執行要快。可以用一個命令物件來呼叫儲存過程。
3 。索引的作用?和它的優點缺點是什麼?
答:索引就一種特殊的查詢表,資料庫的搜尋引擎可以利用它加速對資料的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書內容就可以找到想要的資料。索引可以是唯一的,建立索引允許指定單個列或者是多個列。缺點是它減慢了資料錄入的速度,同時也增加了資料庫的尺寸大小。
3 。什麼是記憶體洩漏?
答:一般我們所說的記憶體洩漏指的是堆記憶體的洩漏。堆記憶體是程式從堆中為其分配的,大小任意的,使用完後要顯示釋放記憶體。當應用程式用關鍵字 new 等建立物件時,就從堆中為它分配一塊記憶體,使用完後程序呼叫 free 或者 delete 釋放該記憶體,否則就說該記憶體就不能被使用,我們就說該記憶體被洩漏了。
4 。維護資料庫的完整性和一致性,你喜歡用觸發器還是自寫業務邏輯?為什麼?
答:我是這樣做的,儘可能使用約束,如 check, 主鍵,外來鍵,非空欄位等來約束,這樣做效率最高,也最方便。其次是使用觸發器,這種方法可以保證,無論什麼業務系統訪問資料庫都可以保證資料的完整新和一致性。最後考慮的是自寫業務邏輯,但這樣做麻煩,程式設計複雜,效率低下。
5 。什麼是事務?什麼是鎖?
答:事務就是被繫結在一起作為一個邏輯工作單元的 SQL 語句分組,如果任何一個語句操作失敗那麼整個操作就被失敗,以後操作就會回滾到操作前狀態,或者是上有個節點。為了確保要麼執行,要麼不執行,就可以使用事務。要將有組語句作為事務考慮,就需要通過 ACID 測試,即原子性,一致性,隔離性和永續性。
鎖:在所以的 DBMS 中,鎖是實現事務的關鍵,鎖可以保證事務的完整性和併發性。與現實生活中鎖一樣,它可以使某些資料的擁有者,在某段時間內不能使用某些資料或資料結構。當然鎖還分級別的。
6 。什麼叫檢視?遊標是什麼?
答:檢視是一種虛擬的表,具有和物理表相同的功能。可以對檢視進行增,改,查,操作,試圖通常是有一個表或者多個表的行或列的子集。對檢視的修改不影響基本表。它使得我們獲取資料更容易,相比多表查詢。
遊標:是對查詢出來的結果集作為一個單元來有效的處理。遊標可以定在該單元中的特定行,從結果集的當前行檢索一行或多行。可以對結果集當前行做修改。一般不使用遊標,但是需要逐條處理資料的時候,遊標顯得十分重要。
7。為管理業務培訓資訊,建立3個表:
S(S#,SN,SD,SA)S#,SN,SD,SA分別代表學號,學員姓名,所屬單位,學員年齡
C(C#,CN)C#,CN分別代表課程編號,課程名稱
SC(S#,C#,G) S#,C#,G分別代表學號,所選的課程編號,學習成績
(1)使用標準SQL巢狀語句查詢選修課程名稱為’稅收基礎’的學員學號和姓名?
答案:select s# ,sn from s where S# in(select S# from c,sc where c.c#=sc.c# and cn=’稅收基礎’)
(2) 使用標準SQL巢狀語句查詢選修課程編號為’C2’的學員姓名和所屬單位?
答:select sn,sd from s,sc where s.s#=sc.s# and sc.c#=’c2’
(3) 使用標準SQL巢狀語句查詢不選修課程編號為’C5’的學員姓名和所屬單位?
答:select sn,sd from s where s# not in(select s# from sc where c#=’c5’)
(4)查詢選修了課程的學員人數
答:select 學員人數=count(distinct s#) from sc
(5) 查詢選修課程超過5門的學員學號和所屬單位?
答:select sn,sd from s where s# in(select s# from sc group by s# having count(distinct c#)>5)
SQL面試題(4)

1.查詢A(ID,Name)表中第31至40條記錄,ID作為主鍵可能是不是連續增長的列,完整的查詢語句如下:

select top 10 * from A where ID >(select max(ID) from (select top 30 ID from A order by A ) T) order by A

2.查詢表A中存在ID重複三次以上的記錄,完整的查詢語句如下:
select * from(select count(ID) as count from table group by ID)T where T.count>3

SQL面試題(5)

在面試應聘的SQL Server資料庫開發人員時,我運用了一套標準的基準技術問題。下面這些問題是我覺得能夠真正有助於淘汰不合格應聘者的問題。它們按照從易到難的順序排列。當你問到關於主鍵和外來鍵的問題時,後面的問題都十分有難度,因為答案可能會更難解釋和說明,尤其是在面試的情形下。

你能向我簡要敘述一下SQL Server 2000中使用的一些資料庫物件嗎?

你希望聽到的答案包括這樣一些物件:表格、檢視、使用者定義的函式,以及儲存過程;如果他們還能夠提到像觸發器這樣的物件就更好了。如果應聘者不能回答這個基本的問題,那麼這不是一個好兆頭。

NULL是什麼意思?

NULL(空)這個值是資料庫世界裡一個非常難纏的東西,所以有不少應聘者會在這個問題上跌跟頭您也不要覺得意外。

NULL這個值表示UNKNOWN(未知):它不表示“”(空字串)。假設您的SQL Server資料庫裡有ANSI_NULLS,當然在預設情況下會有,對NULL這個值的任何比較都會生產一個NULL值。您不能把任何值與一個 UNKNOWN值進行比較,並在邏輯上希望獲得一個答案。您必須使用IS NULL操作符。

什麼是索引?SQL Server 2000裡有什麼型別的索引?

任何有經驗的資料庫開發人員都應該能夠很輕易地回答這個問題。一些經驗不太多的開發人員能夠回答這個問題,但是有些地方會說不清楚。

簡單地說,索引是一個數據結構,用來快速訪問資料庫表格或者視圖裡的資料。在SQL Server裡,它們有兩種形式:聚集索引和非聚集索引。聚集索引在索引的葉級儲存資料。這意味著不論聚集索引裡有表格的哪個(或哪些)欄位,這些欄位都會按順序被儲存在表格。由於存在這種排序,所以每個表格只會有一個聚集索引。非聚集索引在索引的葉級有一個行識別符號。這個行識別符號是一個指向磁碟上資料的指標。它允許每個表格有多個非聚集索引。

什麼是主鍵?什麼是外來鍵?

主鍵是表格裡的(一個或多個)欄位,只用來定義表格裡的行;主鍵裡的值總是唯一的。外來鍵是一個用來建立兩個表格之間關係的約束。這種關係一般都涉及一個表格裡的主鍵欄位與另外一個表格(儘管可能是同一個表格)裡的一系列相連的欄位。那麼這些相連的欄位就是外來鍵。

什麼是觸發器?SQL Server 2000有什麼不同型別的觸發器?

讓未來的資料庫開發人員知道可用的觸發器型別以及如何實現它們是非常有益的。

觸發器是一種專用型別的儲存過程,它被捆綁到SQL Server 2000的表格或者檢視上。在SQL Server 2000裡,有INSTEAD-OF和AFTER兩種觸發器。INSTEAD-OF觸發器是替代資料操控語言(Data Manipulation Language,DML)語句對錶格執行語句的儲存過程。例如,如果我有一個用於TableA的INSTEAD-OF-UPDATE觸發器,同時對這個表格執行一個更新語句,那麼INSTEAD-OF-UPDATE觸發器裡的程式碼會執行,而不是我執行的更新語句則不會執行操作。

AFTER觸發器要在DML語句在資料庫裡使用之後才執行。這些型別的觸發器對於監視發生在資料庫表格裡的資料變化十分好用。

您如何確一個帶有名為Fld1欄位的TableB表格裡只具有Fld1欄位裡的那些值,而這些值同時在名為TableA的表格的Fld1欄位裡?

這個與關係相關的問題有兩個可能的答案。第一個答案(而且是您希望聽到的答案)是使用外來鍵限制。外來鍵限制用來維護引用的完整性。它被用來確保表格裡的欄位只儲存有已經在不同的(或者相同的)表格裡的另一個欄位裡定義了的值。這個欄位就是候選鍵(通常是另外一個表格的主鍵)。

另外一種答案是觸發器。觸發器可以被用來保證以另外一種方式實現與限制相同的作用,但是它非常難設定與維護,而且效能一般都很糟糕。由於這個原因,微軟建議開發人員使用外來鍵限制而不是觸發器來維護引用的完整性。

對一個投入使用的線上事務處理表格有過多索引需要有什麼樣的效能考慮?

你正在尋找進行與資料操控有關的應聘人員。對一個表格的索引越多,資料庫引擎用來更新、插入或者刪除資料所需要的時間就越多,因為在資料操控發生的時候索引也必須要維護。

你可以用什麼來確保表格裡的欄位只接受特定範圍裡的值?

這個問題可以用多種方式來回答,但是隻有一個答案是“好”答案。您希望聽到的回答是Check限制,它在資料庫表格裡被定義,用來限制輸入該列的值。

觸發器也可以被用來限制資料庫表格裡的欄位能夠接受的值,但是這種辦法要求觸發器在表格裡被定義,這可能會在某些情況下影響到效能。因此,微軟建議使用Check限制而不是其他的方式來限制域的完整性。

如果應聘者能夠正確地回答這個問題,那麼他的機會就非常大了,因為這表明他們具有使用儲存過程的經驗。

返回引數總是由儲存過程返回,它用來表示儲存過程是成功還是失敗。返回引數總是INT資料型別。

OUTPUT引數明確要求由開發人員來指定,它可以返回其他型別的資料,例如字元型和數值型的值。(可以用作輸出引數的資料型別是有一些限制的。)您可以在一個儲存過程裡使用多個OUTPUT引數,而您只能夠使用一個返回引數。

什麼是相關子查詢?如何使用這些查詢?

經驗更加豐富的開發人員將能夠準確地描述這種型別的查詢。

相關子查詢是一種包含子查詢的特殊型別的查詢。查詢裡包含的子查詢會真正請求外部查詢的值,從而形成一個類似於迴圈的狀況。

SQL面試題(6)

原表:

courseid coursename score

1 java 70
2 oracle 90
3 xml 40
4 jsp 30

5 servlet 80

為了便於閱讀,查詢此表後的結果顯式如下(及格分數為60):

courseid coursename score mark

1 java 70 pass
2 oracle 90 pass
3 xml 40 fail
4 jsp 30 fail

5 servlet 80 pass

寫出此查詢語句

ORACLE : select courseid, coursename ,score ,decode(sign(score-60),-1,’fail’,’pass’) as mark from course

(DECODE函式是ORACLE PL/SQL是功能強大的函式之一,目前還只有ORACLE公司的SQL提供了此函式)

(SQL: select courseid, coursename ,score ,(case when score<60 then ‘fail’ else ‘pass’ end) as mark from course )

相關推薦

SQL查詢試題

用一條SQL 語句 查詢出每門課都大於80 分的學生姓名 name kecheng fenshu 張三 語文 81 張三 數學 75 李四 語文 76 李四 數學

SQL經典試題集錦

create var nod size int 創建 mark art nbsp 1、問題背景 (1)學生表(學號,姓名,年齡,性別) student(S#,Sname,Sage,Ssex) (2)課程表(課程編號,課程名稱,教師

【筆試/面試】SQL 經典試題

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

SQL練習,試題

SQL練習 drop table if exists `books`; create table `books` ( `id` int(11) not null auto_increment, `name` varchar(50) default null, `autho

關於面試總結6-SQL經典試題

前言 用一條SQL 語句查詢xuesheng表每門課都大於80 分的學生姓名,這個是面試考sql的一個非常經典的面試題 having和not in 查詢 xuesheng表每門課都大於80 分的學生姓名 name kecheng score

SQL一些試題

1. 用一條SQL 語句 查詢出每門課都大於80 分的學生姓名 name kecheng fenshu 張三 語文 81 張三 數學 75 李四 語文 76 李四 數學 90 王五 語文 81 王五 數學 100 王五 英語 90 A: select distinct na

Sql經典試題

第一題: 為管理業務培訓資訊,建立3個表: S(S#,SN,SD,SA)S#,SN,SD,SA分別代表學號,學員姓名,所屬單位,學員年齡 C(C#,CN)C#,CN分別代表課程編號,課程名稱 SC(S#,C#,G) S#,C#,G分別代表學號,所選的課程編號,學

一道SQL語句試題,關於group by的

一道SQL語句面試題,關於group by 表內容: 2015-05-09 勝 2015-05-09 勝 2015-05-09 負 2015-05-09 負 2015-05-10 勝 2015-05-10 負 2015-05-10 負 如果要生成下列結果, 該如何寫sql語

資料庫sql簡單試題

題目如下圖 備註:由於User在資料庫中是關鍵字,不可用於表名,此處更名為Users. 話不多說,直接上答案: (1).select uno, uname, uage from users where uage not between 20 and 30 and usex = 0; (2).

經典的SQL語句試題

Student(S#,Sname,Sage,Ssex) 學生表Course(C#,Cname,T#) 課程表SC(S#,C#,score) 成績表Teacher(T#,Tname) 教師表 問題:1、查詢“001”課程比“002”課程成績高的所有學生的學號;select a

[引用]SQL經典試題及答案

------------------------------------------ 1) select a.部門名稱dname,b.業績yj as '一月份',c.業績yj as '二月份',d.業績yj as '三月份' from table1 a,table2 b,table2 c,table2 d w

SQL經典試題---group by 和 case when 的使用

1.一道SQL語句面試題,關於group by 表內容: 2005-05-09 勝 2005-05-09 勝 2005-05-09 負 2005-05-09 負 2005-05-10 勝 2005-05-10 負 2005-05-10 負 如果要生成下列結果, 該如何寫sql語句?            

sql server 試題

查詢兩張表相同的資料 --01 select * from #tb1 intersect select * from #tb2 查詢兩張表不同的資料 select * from #tb1 except select * from #tb2 2

經典MySQL的sql語句試題

一、取得平均薪水最高的部門的部門編號第一步:求出部門的平均薪水select  e.deptno, avg(e.sal) as avgsal  from emp e  group by e.deptno;deptnoavgsal102916.666667202715.00000

sql 2005 試題

1.用一條SQL語句 查詢出每門課都大於80分的學生姓名  name   kecheng   fenshu 張三     語文       81張三     數學       75李四     語文       76李四     數學       90王五     語文  

一條SQL語句試題:求選修所有課程的學生

前幾天求職面試,有一道SQL題:給出三個表:學生、課程、成績,求選修了所有課程的學生。一道看似很簡單的問題,把我難住了,我改了又改,塗塗畫畫,抓耳撓腮,因為試卷沒有多少空白位置了,最後只好放棄。心情大受影響,儘管最後還是獲得offer。但是心中有愧呀!於是在機器上試了試:先建

SQL試題 三(單表、多表查詢

一、給定一張學生成績表tb_grade:學號,姓名,科目號,科目名,分數。(如下表) (select * from tb_grade order by Sno,Cno;)+------+-------+-----+-------+-------+ | Sno  | Sna

一道試題:請寫sql查詢出,成績小於60的同學的姓名和平均分,並按平均分排序

給出如下3張表,stu表、sc表和course表: /* Navicat MySQL Data Transfer Source Server         : db_fightLandlor Source Server Version : 50520 Source Ho

試題:用一條sql語句查詢出“每門”課程都大於80分的學生姓名

分析:要查詢出每門課程都大於80分的學生姓名,因為一個學生有多門課程,可能所有課程都大於80分,可能有些課程大於80分,另外一些課程少於80分,也可能所有課程都小於80分,那麼我們要查找出所有大於80分的課程的學生姓名,我們可以反向思考,找出課程小於80分(可以找出有一些課

sql 試題

試題 null cheng sel rom 姓名 缺少 學生 sid s:學生表 學生ID姓名k:課程表課程ID課程名稱 c:成績表成績ID學生ID課程ID成績1、查 各門課程中缺少考試成績的學生select a.sname,a.kname from (select *