SQL面試題

1. 用一條SQL 語句 查詢出每門課都大于80 分的學(xué)生姓名

name kecheng fenshu?

張三 語文 81

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

李四 語文 76

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

王五 語文 81

王五 數(shù)學(xué) 100

王五 英語 90

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

? select name from table group by name having count(kecheng)>=3 and min(fenshu)>=80


2. 學(xué)生表 如下:

自動編號 學(xué)號 姓名 課程編號 課程名稱 分?jǐn)?shù)

1 2005001 張三 0001 數(shù)學(xué) 69

2 2005002 李四 0001 數(shù)學(xué) 89

3 2005001 張三 0001 數(shù)學(xué) 69

刪除除了自動編號不同, 其他都相同的學(xué)生冗余信息

A: delete tablename where 自動編號 not in(select min( 自動編號) from tablename group by 學(xué)號, 姓名, 課程編號, 課程名稱, 分?jǐn)?shù))

改:

delete from 刪冗余 where 自動編號 not in

(select a.自動編號 from

(select a.自動編號 from 刪冗余 a group by 學(xué)號, 姓名, 課程編號, 課程名稱, 分?jǐn)?shù))a)

#產(chǎn)生You can't specify target table '表名' for update in FROM clause錯誤

#解決辦法:講select出的結(jié)果在通過中間表select一遍净嘀,這樣就規(guī)避了錯誤

3. 面試題:怎么把這樣一個表兒

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

查成這樣一個結(jié)果

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


4. 說明:拷貝表( 拷貝數(shù)據(jù), 源表名:a 目標(biāo)表名:b)

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


5.有一張表浸颓,里面有3個字段:語文撬槽,數(shù)學(xué)几蜻,英語夫啊。其中有3條記錄分別表示語文70分瓜客,數(shù)學(xué)80分君纫,英語58分谷扣,請用一條sql語句查詢出這三條記錄并按以下條件顯示出來(并寫出您的思路):?

大于或等于80表示優(yōu)秀土全,大于或等于60表示及格,小于60分表示不及格会涎。?

顯示格式:?

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

及格 優(yōu)秀 不及格?

------------------------------------------

select

(case when 語文>=80 then '優(yōu)秀'

when 語文>=60 then '及格'

else '不及格') as 語文,

(case when 數(shù)學(xué)>=80 then '優(yōu)秀'

when 數(shù)學(xué)>=60 then '及格'

else '不及格') as 數(shù)學(xué),

(case when 英語>=80 then '優(yōu)秀'

when 英語>=60 then '及格'

else '不及格') as 英語,

from table


6裹匙、編寫SQL語句

1) 創(chuàng)建一張學(xué)生表,包含以下信息末秃,學(xué)號概页,姓名眯牧,年齡元旬,性別,家庭住址预茄,聯(lián)系電話

Create table stu (學(xué)號 int ,

姓名 varchar(8),

年齡 int,

性別 varchar(4),

家庭地址 varchar(50),

聯(lián)系電話 int

);


2) 修改學(xué)生表的結(jié)構(gòu)铃将,添加一列信息项鬼,學(xué)歷

Alter table stu add 學(xué)歷 varchar(6);


3) 修改學(xué)生表的結(jié)構(gòu),刪除一列信息麸塞,家庭住址

Alter table stu drop column 家庭地址


4) 向?qū)W生表添加如下信息:

學(xué)號 姓名年齡性別聯(lián)系電話學(xué)歷

1A22男123456小學(xué)

2B21男119中學(xué)

3C23男110高中

4D18女114大學(xué)

Insert into stu values(1,’A’,22,’男’,123456,’小學(xué)’)

Insert into stu values(2,’B’,21,’男’,119,’中學(xué)’)

Insert into stu values(3,’C’,23,’男’,110,’高中’)

Insert into stu values(4,’D’,18,’女’,114,’大學(xué)’)


5) 修改學(xué)生表的數(shù)據(jù)秃臣,將電話號碼以11開頭的學(xué)員的學(xué)歷改為“大專”

Update stu set 學(xué)歷=’大屇墓ぃ’ where 聯(lián)系電話 like ‘11%’


6) 刪除學(xué)生表的數(shù)據(jù)奥此,姓名以C開頭,性別為‘男’的記錄刪除

Delect from stu where 性別=’男’ and 姓名 like ‘c%’


7) 查詢學(xué)生表的數(shù)據(jù)雁比,將所有年齡小于22歲的稚虎,學(xué)歷為“大專”的偎捎,學(xué)生的姓名和學(xué)號示出來

Select 姓名,學(xué)號 from stu where 年齡<22 and 學(xué)歷=’大尨乐眨’


8) 查詢學(xué)生表的數(shù)據(jù),查詢所有信息茴她,列出前25%的記錄

Select top 25 percent * from stu


9) 查詢出所有學(xué)生的姓名寻拂,性別,年齡降序排列

Select 姓名,性別 from stu order by 年齡 desc


10) 按照性別分組查詢所有的平均年齡

Select avg(年齡) from stu group by 性別


7丈牢、查詢A(ID,Name)表中第31至40條記錄祭钉,ID作為主鍵可能是不是連續(xù)增長的列,完整的查詢語句如下:

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


8己沛、查詢表A中存在ID重復(fù)三次以上的記錄,完整的查詢語句如下:

select * from(select count(ID) as count from table group by ID)T where T.count>3


9距境、說出以下聚合數(shù)的含義:avg ,sum ,max ,min , count ,count(*)

AVG:求平均值

SUM:求和

MAX:求最大值

MIN:求最小值

COUNT(*):返回所有行數(shù)


*****************************************************************

事務(wù) Transaction 觸發(fā)器 TRIGGER 繼續(xù) continue 唯一 unqiue

主鍵 primary key 標(biāo)識列 identity 外鍵 foreign key 檢查 check

約束 constraint

*****************************************************************


10、說明:隨機(jī)取出10條數(shù)據(jù)

select top 10 * from tablename order by newid()


11垮卓、查詢平均成績大于60分的同學(xué)的學(xué)號和平均成績垫桂;

select?stuId,avg(score)

from?Scores

group?by?stuId?having?avg(score)?>60;


12、info表:

date ? ? ? ? ? ?????result

2005-05-09 ?????win

2005-05-09????? lose

2005-05-09 ?????lose

2005-05-09 ?????lose

2005-05-10 ?????win

2005-05-10????? lose

2005-05-10????? lose

如果要生成下列結(jié)果, 該如何寫sql語句?

date? ? ? ? win? lose

2005-05-09 ?1 ? 3

2005-05-10? 1? ?2

select date, sum(case when result = "win" then 1 else 0 end) as "win",

sum(case when result = "lose" then 1 else 0 end) as "lose"

from info group by date


select date,count(case when result='win' then 1 end)as win,

count(case when result='lose' then 1 end)as lose

from info group by date


select a.date,a.result as win,b.result as lose

from (select date,count(result) as result from info where result='win' group by date)as a

join (select date,count(result) as result from info where result='lose' group by date)as b

on a.date=b.date


13粟按、abc表:

表中有A B C三列,用SQL語句實(shí)現(xiàn):

當(dāng)A列大于B列時(shí)選擇A列否則選擇B列诬滩,當(dāng)B列大于C列時(shí)選擇B列否則選擇C列

select (case when a>b then a else b end),(case when b>c then b else c end) from abc


14、請取出tb_send表中日期(SendTime字段)為當(dāng)天的所有記錄灭将,(SendTime字段為datetime型碱呼,包含日期與時(shí)間)

select * from info where DATEDIFF(dd,SendTime,getdate())=0


15、查詢mytable表宗侦,要求按以下條件顯示

chinese? ? ? ? ?math? ? ? ? ? ?english

pass? ? ? ? ? ? excellent? ? ? fail

select (case when chinese>=80 then 'excellent' when chinese >= 60 then 'pass' else 'fail' end)as chinese,

(case when math >= 80 then 'excellent' when math >= 60 then 'pass' else 'fail' end)as math,

(case when english >= 80 then 'excellent' when english > 60 then 'pass' else 'fail' end)as english

from mytable


部分轉(zhuǎn)自?博客園-蠟筆曉鑫

鏈接原地址:http://www.cnblogs.com/zqm1/p/6559757.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市忆蚀,隨后出現(xiàn)的幾起案子矾利,更是在濱河造成了極大的恐慌,老刑警劉巖馋袜,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件男旗,死亡現(xiàn)場離奇詭異,居然都是意外死亡欣鳖,警方通過查閱死者的電腦和手機(jī)察皇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泽台,“玉大人什荣,你說我怎么就攤上這事』晨幔” “怎么了稻爬?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蜕依。 經(jīng)常有香客問我桅锄,道長,這世上最難降的妖魔是什么样眠? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任友瘤,我火速辦了婚禮,結(jié)果婚禮上檐束,老公的妹妹穿的比我還像新娘辫秧。我一直安慰自己,他們只是感情好厢塘,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布茶没。 她就那樣靜靜地躺著肌幽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抓半。 梳的紋絲不亂的頭發(fā)上喂急,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機(jī)與錄音笛求,去河邊找鬼廊移。 笑死,一個胖子當(dāng)著我的面吹牛探入,可吹牛的內(nèi)容都是我干的狡孔。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼蜂嗽,長吁一口氣:“原來是場噩夢啊……” “哼苗膝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起植旧,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤辱揭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后病附,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體问窃,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年完沪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了域庇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡覆积,死狀恐怖听皿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情技健,我是刑警寧澤写穴,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站雌贱,受9級特大地震影響啊送,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜欣孤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一馋没、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧降传,春花似錦篷朵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笔链。三九已至,卻和暖如春腮猖,著一層夾襖步出監(jiān)牢的瞬間鉴扫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工澈缺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坪创,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓姐赡,卻偏偏與公主長得像莱预,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子项滑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容