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