關(guān)系型數(shù)據(jù)庫-sql語句練習(xí)

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

張三 語文 81

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

李四 語文 76

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

王五 語文 81

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

王五 英語 90

答案1:select distinct name from table where name not in (select distinct name from table where fenshu<=80);
答案2:select name from table group by name having min(fenshu)>80;
答案3:? select name from table group by name having count(kecheng)>=3 and min(fenshu)>=80;

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

自動編號 學(xué)號 姓名 課程編號 課程名稱 分數(shù)

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

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

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

答案1:delete from tablename where 自動編號 not in(select min(tmp.自動編號) as 自動編號 from tablename group by 學(xué)號, 姓名, 課程編號, 課程名稱, 分數(shù));

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 目標表名: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

B(MYSQL)):

select

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

when 語文>=60 then ‘及格’

else ‘不及格’ end) as 語文,

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

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

else ‘不及格’?end) as 數(shù)學(xué),

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

when 英語>=60 then ‘及格’

else ‘不及格’?end) as 英語

from table

6星岗、編寫SQL語句

1) 創(chuàng)建一張學(xué)生表,包含以下信息戒洼,學(xué)號俏橘,姓名,年齡圈浇,性別寥掐,家庭住址,聯(lián)系電話

Create table stu (學(xué)號 int not null primary key,

姓名 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%的記錄

A(ANSI SQL)): Select top 25 percent * from stu;

B(MYSQL)): select * from stu limit 25;//前25條記錄,非25%


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

?B(MYSQL)): SELECT * FROM A LIMIT 31,10;


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

select * from(select count(ID) as count from table group by ID)T where T.count>3//個人覺得有誤。

SELECT * FROM A WHERE ID IN(SELECT ID FROM A GROUP BY ID HAVING COUNT(ID)>3);//正確版本?


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

AVG:求平均值

SUM:求和

MAX:求最大值

MIN:求最小值

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

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

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

主鍵 primary key 標識列 identity 外鍵 foreign key 檢查 check

約束 constraint

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


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

select top 10 * from tablename order by newid()

?B(MYSQL)): select * from tablename order by rand() limit 10;


11、查詢平均成績大于60分的同學(xué)的學(xué)號和平均成績歇僧;

select?stuId,avg(score)

from?Scores

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

12图张、?一個叫?team?的表,里面只有一個字段name,?一共有4?條紀錄诈悍,分別是a,b,c,d,?對應(yīng)四個球?qū)雎郑F(xiàn)在四個球?qū)M行比賽,用一條sql?語句顯示所有可能的比賽組合.

你先按你自己的想法做一下侥钳,看結(jié)果有我的這個簡單嗎适袜?

答:select a.name, b.name?from team a, team b?where a.name < b.name;

13舷夺、請用SQL?語句實現(xiàn):從TestDB?數(shù)據(jù)表中查詢出所有月份的發(fā)生額都比101?科目相應(yīng)月份的發(fā)生額高的科目苦酱。請注意:TestDB?中有很多科目,都有1?-12?月份的發(fā)生額冕房。

AccID?:科目代碼躏啰,Occmonth?:發(fā)生額月份,DebitOccur?:發(fā)生額耙册。

數(shù)據(jù)庫名:JcyAudit?给僵,數(shù)據(jù)集: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;

14详拙、說明:復(fù)制表(?只復(fù)制結(jié)構(gòu),?源表名:a?新表名:b)?

SQL: select * into b from a where 1<>1帝际; ? (where1=1,拷貝表結(jié)構(gòu)和數(shù)據(jù)內(nèi)容)

MYSQL: CREATE TABLE b AS ?SELECT * FROM a WHERE ?1<>1饶辙; (where1=1蹲诀,拷貝表結(jié)構(gòu)和數(shù)據(jù)內(nèi)容)

ORACLE:create table b?As?Select * from a where 1=2;

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

比較兩個表達式弃揽。 當使用此運算符比較非空表達式時脯爪,如果左操作數(shù)不等于右操作數(shù),則結(jié)果為 TRUE矿微。 否則痕慢,結(jié)果為 FALSE。]

15涌矢、說明:拷貝表(?拷貝數(shù)據(jù),?源表名:a?目標表名:b)

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

16掖举、 說明:顯示文章、提交人和最后回復(fù)時間

SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

17娜庇、說明:外連接查詢(?表名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 或

select a.a,a.b,a.c,b.d,b.f from a,b where 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(+)

18塔次、?說明:日程安排提前五分鐘提醒

SQL: select * from?日程安排?where datediff(‘minute’,f?開始時間,getdate())>5

19方篮、說明:兩張關(guān)聯(lián)表,刪除主表中已經(jīng)在副表中沒有的信息

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

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

20励负、?有兩個表A?和B?藕溅,均有key?和value?兩個字段,如果B?的key?在A?中也有熄守,就把B?的value?換為A?中對應(yīng)的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);

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

高級sql?面試題

原表:

courseid coursename score

————————————-

1 java 70

2 oracle 90

3 xml 40

4 jsp 30

5 servlet 80

————————————-

為了便于閱讀,?查詢此表后的結(jié)果顯式如下(?及格分數(shù)為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(‘設(shè)計’)

insert into testtable1 values(‘市場’)

insert into testtable1 values(‘售后’)

/*

結(jié)果

id department

1?? 設(shè)計

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語句,怎么顯示如下結(jié)果

id dptID department name

1?? 1????? 設(shè)計??????? 張三

2?? 1????? 設(shè)計??????? 李四

3?? 2????? 市場??????? 王五

4?? 3????? 售后??????? 彭六

5?? 4????? 黑人??????? 陳七

*/

答案:

SELECT testtable2.* , ISNULL(department,’黑人’)

FROM testtable1 right join testtable2 on testtable2.dptID = testtable1.ID

也做出來了可比這方法稍復(fù)雜裕照。

sql面試題(2)

有表A攒发,結(jié)構(gòu)如下:

A: p_ID p_Num s_id

1 10 01

1 12 02

2 8 01

3 11 01

3 8 03

其中:p_ID為產(chǎn)品ID,p_Num為產(chǎn)品庫存量晋南,s_id為倉庫ID惠猿。請用SQL語句實現(xiàn)將上表中的數(shù)據(jù)合并,合并后的數(shù)據(jù)為:

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的庫存量。如果該產(chǎn)品在某倉庫中無庫存量政溃,那么就是0代替趾访。

結(jié)果:

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?.觸發(fā)器的作用?

???答:觸發(fā)器是一中特殊的存儲過程董虱,主要是通過事件來觸發(fā)而被執(zhí)行的扼鞋。它可以強化約束,來維護數(shù)據(jù)的完整性和一致性愤诱,可以跟蹤數(shù)據(jù)庫內(nèi)的操作從而不允許未經(jīng)許可的更新和變化云头。可以聯(lián)級運算淫半。如溃槐,某表上的觸發(fā)器上包含對另一個表的數(shù)據(jù)操作,而該操作又會導(dǎo)致該表觸發(fā)器被觸發(fā)科吭。

2?昏滴。什么是存儲過程?用什么來調(diào)用对人?

答:存儲過程是一個預(yù)編譯的?SQL?語句影涉,優(yōu)點是允許模塊化的設(shè)計,就是說只需創(chuàng)建一次规伐,以后在該程序中就可以調(diào)用多次。如果某次操作需要執(zhí)行多次?SQL?匣缘,使用存儲過程比單純?SQL?語句執(zhí)行要快猖闪∠侍模可以用一個命令對象來調(diào)用存儲過程。

3?培慌。索引的作用豁陆?和它的優(yōu)點缺點是什么?

答:索引就一種特殊的查詢表吵护,數(shù)據(jù)庫的搜索引擎可以利用它加速對數(shù)據(jù)的檢索盒音。它很類似與現(xiàn)實生活中書的目錄,不需要查詢整本書內(nèi)容就可以找到想要的數(shù)據(jù)馅而。索引可以是唯一的祥诽,創(chuàng)建索引允許指定單個列或者是多個列。缺點是它減慢了數(shù)據(jù)錄入的速度瓮恭,同時也增加了數(shù)據(jù)庫的尺寸大小雄坪。

3?。什么是內(nèi)存泄漏屯蹦?

答:一般我們所說的內(nèi)存泄漏指的是堆內(nèi)存的泄漏维哈。堆內(nèi)存是程序從堆中為其分配的,大小任意的登澜,使用完后要顯示釋放內(nèi)存阔挠。當應(yīng)用程序用關(guān)鍵字?new?等創(chuàng)建對象時,就從堆中為它分配一塊內(nèi)存脑蠕,使用完后程序調(diào)用?free?或者?delete?釋放該內(nèi)存购撼,否則就說該內(nèi)存就不能被使用,我們就說該內(nèi)存被泄漏了空郊。

4?份招。維護數(shù)據(jù)庫的完整性和一致性,你喜歡用觸發(fā)器還是自寫業(yè)務(wù)邏輯狞甚?為什么锁摔?

答:我是這樣做的,盡可能使用約束哼审,如?check,?主鍵谐腰,外鍵,非空字段等來約束涩盾,這樣做效率最高十气,也最方便。其次是使用觸發(fā)器春霍,這種方法可以保證砸西,無論什么業(yè)務(wù)系統(tǒng)訪問數(shù)據(jù)庫都可以保證數(shù)據(jù)的完整新和一致性。最后考慮的是自寫業(yè)務(wù)邏輯,但這樣做麻煩芹枷,編程復(fù)雜衅疙,效率低下。

5?鸳慈。什么是事務(wù)饱溢?什么是鎖?

答:事務(wù)就是被綁定在一起作為一個邏輯工作單元的?SQL?語句分組走芋,如果任何一個語句操作失敗那么整個操作就被失敗绩郎,以后操作就會回滾到操作前狀態(tài),或者是上有個節(jié)點翁逞。為了確保要么執(zhí)行肋杖,要么不執(zhí)行,就可以使用事務(wù)熄攘。要將有組語句作為事務(wù)考慮兽愤,就需要通過?ACID?測試,即原子性挪圾,一致性浅萧,隔離性和持久性。

???鎖:在所以的?DBMS?中哲思,鎖是實現(xiàn)事務(wù)的關(guān)鍵洼畅,鎖可以保證事務(wù)的完整性和并發(fā)性。與現(xiàn)實生活中鎖一樣棚赔,它可以使某些數(shù)據(jù)的擁有者帝簇,在某段時間內(nèi)不能使用某些數(shù)據(jù)或數(shù)據(jù)結(jié)構(gòu)。當然鎖還分級別的靠益。

6?丧肴。什么叫視圖?游標是什么胧后?

答:視圖是一種虛擬的表芋浮,具有和物理表相同的功能】强欤可以對視圖進行增纸巷,改,查眶痰,操作瘤旨,試圖通常是有一個表或者多個表的行或列的子集。對視圖的修改不影響基本表竖伯。它使得我們獲取數(shù)據(jù)更容易存哲,相比多表查詢因宇。

???游標:是對查詢出來的結(jié)果集作為一個單元來有效的處理。游標可以定在該單元中的特定行宏胯,從結(jié)果集的當前行檢索一行或多行羽嫡。可以對結(jié)果集當前行做修改肩袍。一般不使用游標,但是需要逐條處理數(shù)據(jù)的時候婚惫,游標顯得十分重要氛赐。

7。為管理業(yè)務(wù)培訓(xùn)信息先舷,建立3個表:

???? S(S#,SN,SD,SA)S#,SN,SD,SA分別代表學(xué)號艰管,學(xué)員姓名,所屬單位蒋川,學(xué)員年齡

???? C(C#,CN)C#,CN分別代表課程編號牲芋,課程名稱

????? SC(S#,C#,G) S#,C#,G分別代表學(xué)號,所選的課程編號捺球,學(xué)習(xí)成績

??? (1)使用標準SQL嵌套語句查詢選修課程名稱為’稅收基礎(chǔ)’的學(xué)員學(xué)號和姓名?

????????? 答案:select s# ,sn from s where S# in(select S# from c,sc where c.c#=sc.c# and cn=’稅收基礎(chǔ)’)

????? (2) 使用標準SQL嵌套語句查詢選修課程編號為’C2’的學(xué)員姓名和所屬單位?

答:select sn,sd from s,sc where s.s#=sc.s# and sc.c#=’c2’

????? (3) 使用標準SQL嵌套語句查詢不選修課程編號為’C5’的學(xué)員姓名和所屬單位?

答:select sn,sd from s where s# not in(select s# from sc where c#=’c5’)

?????? (4)查詢選修了課程的學(xué)員人數(shù)

答:select 學(xué)員人數(shù)=count(distinct s#) from sc

?????? (5) 查詢選修課程超過5門的學(xué)員學(xué)號和所屬單位?

答: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作為主鍵可能是不是連續(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

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

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

SQL面試題(5)

在面試應(yīng)聘的SQL Server數(shù)據(jù)庫開發(fā)人員時氮兵,我運用了一套標準的基準技術(shù)問題裂逐。下面這些問題是我覺得能夠真正有助于淘汰不合格應(yīng)聘者的問題。它們按照從易到難的順序排列泣栈。當你問到關(guān)于主鍵和外鍵的問題時卜高,后面的問題都十分有難度,因為答案可能會更難解釋和說明南片,尤其是在面試的情形下掺涛。

你能向我簡要敘述一下SQL Server 2000中使用的一些數(shù)據(jù)庫對象嗎?

你希望聽到的答案包括這樣一些對象:表格、視圖疼进、用戶定義的函數(shù)薪缆,以及存儲過程;如果他們還能夠提到像觸發(fā)器這樣的對象就更好了。如果應(yīng)聘者不能回答這個基本的問題颠悬,那么這不是一個好兆頭矮燎。

NULL是什么意思?

NULL(空)這個值是數(shù)據(jù)庫世界里一個非常難纏的東西,所以有不少應(yīng)聘者會在這個問題上跌跟頭您也不要覺得意外赔癌。

NULL這個值表示UNKNOWN(未知):它不表示“”(空字符串)诞外。假設(shè)您的SQL Server數(shù)據(jù)庫里有ANSI_NULLS,當然在默認情況下會有灾票,對NULL這個值的任何比較都會生產(chǎn)一個NULL值峡谊。您不能把任何值與一個 UNKNOWN值進行比較,并在邏輯上希望獲得一個答案。您必須使用IS NULL操作符既们。

什么是索引?SQL Server 2000里有什么類型的索引?

任何有經(jīng)驗的數(shù)據(jù)庫開發(fā)人員都應(yīng)該能夠很輕易地回答這個問題濒析。一些經(jīng)驗不太多的開發(fā)人員能夠回答這個問題,但是有些地方會說不清楚啥纸。

簡單地說号杏,索引是一個數(shù)據(jù)結(jié)構(gòu),用來快速訪問數(shù)據(jù)庫表格或者視圖里的數(shù)據(jù)斯棒。在SQL Server里盾致,它們有兩種形式:聚集索引和非聚集索引。聚集索引在索引的葉級保存數(shù)據(jù)荣暮。這意味著不論聚集索引里有表格的哪個(或哪些)字段庭惜,這些字段都會按順序被保存在表格。由于存在這種排序穗酥,所以每個表格只會有一個聚集索引护赊。非聚集索引在索引的葉級有一個行標識符。這個行標識符是一個指向磁盤上數(shù)據(jù)的指針砾跃。它允許每個表格有多個非聚集索引骏啰。

什么是主鍵?什么是外鍵?

主鍵是表格里的(一個或多個)字段,只用來定義表格里的行;主鍵里的值總是唯一的蜓席。外鍵是一個用來建立兩個表格之間關(guān)系的約束器一。這種關(guān)系一般都涉及一個表格里的主鍵字段與另外一個表格(盡管可能是同一個表格)里的一系列相連的字段。那么這些相連的字段就是外鍵厨内。

什么是觸發(fā)器?SQL Server 2000有什么不同類型的觸發(fā)器?

讓未來的數(shù)據(jù)庫開發(fā)人員知道可用的觸發(fā)器類型以及如何實現(xiàn)它們是非常有益的祈秕。

觸發(fā)器是一種專用類型的存儲過程,它被捆綁到SQL Server 2000的表格或者視圖上雏胃。在SQL Server 2000里请毛,有INSTEAD-OF和AFTER兩種觸發(fā)器。INSTEAD-OF觸發(fā)器是替代數(shù)據(jù)操控語言(Data Manipulation Language瞭亮,DML)語句對表格執(zhí)行語句的存儲過程方仿。例如,如果我有一個用于TableA的INSTEAD-OF-UPDATE觸發(fā)器统翩,同時對這個表格執(zhí)行一個更新語句仙蚜,那么INSTEAD-OF-UPDATE觸發(fā)器里的代碼會執(zhí)行,而不是我執(zhí)行的更新語句則不會執(zhí)行操作厂汗。

AFTER觸發(fā)器要在DML語句在數(shù)據(jù)庫里使用之后才執(zhí)行委粉。這些類型的觸發(fā)器對于監(jiān)視發(fā)生在數(shù)據(jù)庫表格里的數(shù)據(jù)變化十分好用。

您如何確一個帶有名為Fld1字段的TableB表格里只具有Fld1字段里的那些值娶桦,而這些值同時在名為TableA的表格的Fld1字段里?

這個與關(guān)系相關(guān)的問題有兩個可能的答案贾节。第一個答案(而且是您希望聽到的答案)是使用外鍵限制汁汗。外鍵限制用來維護引用的完整性。它被用來確保表格里的字段只保存有已經(jīng)在不同的(或者相同的)表格里的另一個字段里定義了的值栗涂。這個字段就是候選鍵(通常是另外一個表格的主鍵)知牌。

另外一種答案是觸發(fā)器。觸發(fā)器可以被用來保證以另外一種方式實現(xiàn)與限制相同的作用斤程,但是它非常難設(shè)置與維護角寸,而且性能一般都很糟糕。由于這個原因忿墅,微軟建議開發(fā)人員使用外鍵限制而不是觸發(fā)器來維護引用的完整性袭厂。

對一個投入使用的在線事務(wù)處理表格有過多索引需要有什么樣的性能考慮?

你正在尋找進行與數(shù)據(jù)操控有關(guān)的應(yīng)聘人員。對一個表格的索引越多球匕,數(shù)據(jù)庫引擎用來更新、插入或者刪除數(shù)據(jù)所需要的時間就越多帖烘,因為在數(shù)據(jù)操控發(fā)生的時候索引也必須要維護亮曹。

你可以用什么來確保表格里的字段只接受特定范圍里的值?

這個問題可以用多種方式來回答,但是只有一個答案是“好”答案秘症。您希望聽到的回答是Check限制照卦,它在數(shù)據(jù)庫表格里被定義,用來限制輸入該列的值乡摹。

觸發(fā)器也可以被用來限制數(shù)據(jù)庫表格里的字段能夠接受的值役耕,但是這種辦法要求觸發(fā)器在表格里被定義,這可能會在某些情況下影響到性能聪廉。因此瞬痘,微軟建議使用Check限制而不是其他的方式來限制域的完整性。

如果應(yīng)聘者能夠正確地回答這個問題板熊,那么他的機會就非常大了框全,因為這表明他們具有使用存儲過程的經(jīng)驗。

返回參數(shù)總是由存儲過程返回干签,它用來表示存儲過程是成功還是失敗津辩。返回參數(shù)總是INT數(shù)據(jù)類型。

OUTPUT參數(shù)明確要求由開發(fā)人員來指定容劳,它可以返回其他類型的數(shù)據(jù)喘沿,例如字符型和數(shù)值型的值。(可以用作輸出參數(shù)的數(shù)據(jù)類型是有一些限制的竭贩。)您可以在一個存儲過程里使用多個OUTPUT參數(shù)蚜印,而您只能夠使用一個返回參數(shù)。

什么是相關(guān)子查詢?如何使用這些查詢?

經(jīng)驗更加豐富的開發(fā)人員將能夠準確地描述這種類型的查詢娶视。

相關(guān)子查詢是一種包含子查詢的特殊類型的查詢晒哄。查詢里包含的子查詢會真正請求外部查詢的值睁宰,從而形成一個類似于循環(huán)的狀況。

SQL面試題(6)

原表:

courseid coursename score

————————————-

1 java 70

2 oracle 90

3 xml 40

4 jsp 30

5 servlet 80

————————————-

為了便于閱讀,查詢此表后的結(jié)果顯式如下(及格分數(shù)為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函數(shù)是ORACLE PL/SQL是功能強大的函數(shù)之一寝凌,目前還只有ORACLE公司的SQL提供了此函數(shù))

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

面試題中的一道sql題柒傻,比較考察對sql函數(shù)的掌握程度,記錄一下较木,方便學(xué)習(xí)红符。

需求:

????? ? 一張客戶表 tb_cust 如下:

CUST_IDvarchar(30)

客戶編號(primary key)

CERTIFICATE_NO

varchar(18)

身份證號(not null)


一張訂單表tb_oreder 如下:

CUST_IDvarchar(30)客戶編號

APPLY_IDvarchar(50)訂單編號(primary key)

AMOUNTdouble訂單金額

根據(jù)上面兩張表提供的信息,寫出如下效果圖所示的sql語句伐债。

注意:

1.年齡信息沒有具體提供松忍。

2.不能使用 union 等連接字符。

答案如下:

select

casewhenk.flag =1then'30歲以下'whenk.flag =2then'30-50歲之間'whenk.flag =3then'50歲以上'else'總計'endas'年齡區(qū)間',

COUNT(DISTINCT(a.CUST_ID))as'客戶數(shù)量',COUNT(flag)as'訂單數(shù)量',SUM(AMOUNT)as'訂單總額'

fromtb_order a

leftjoin

(selectc.CUST_ID,

IF(c.age<30,1,IF(c.age<50,2,3))asflag

from

(selectCUST_ID,

FLOOR(PERIOD_DIFF(EXTRACT(YEAR_MONTHfromNOW()),substring(CERTIFICATE_NOFROM7FOR6))/12)asage

fromtb_cust) c) k

ona.CUST_ID = k.CUST_ID

GROUPBYk.flagWITHROLLUP

1

知識點整理:

1.Mysql中的with rollup是用來在分組統(tǒng)計數(shù)據(jù)的基礎(chǔ)上再進行統(tǒng)計匯總履怯,即用來得到group by的匯總信息坑填。

2.if函數(shù):if(a > b ? true : false)效果等同于java中的三目運算符。

3.PERIOD_DIFF(P1,P2):計算周期P1和P2之間的月數(shù)虹蒋。 P1和P2格式為YYMM或YYYYMM糜芳。注意周期參數(shù) P1 和 P2 都不是日期值

4.mysql的 substring(str from pos for len) 起點從1開始。例如:當str為身份證號:37152719990101034時魄衅,substring(str from 7 for 6)的值為:199101

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末峭竣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子晃虫,更是在濱河造成了極大的恐慌皆撩,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哲银,死亡現(xiàn)場離奇詭異扛吞,居然都是意外死亡,警方通過查閱死者的電腦和手機盘榨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門喻粹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人草巡,你說我怎么就攤上這事守呜。” “怎么了山憨?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵查乒,是天一觀的道長。 經(jīng)常有香客問我郁竟,道長玛迄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任棚亩,我火速辦了婚禮蓖议,結(jié)果婚禮上虏杰,老公的妹妹穿的比我還像新娘。我一直安慰自己勒虾,他們只是感情好纺阔,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著修然,像睡著了一般笛钝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上愕宋,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天玻靡,我揣著相機與錄音,去河邊找鬼中贝。 笑死囤捻,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的邻寿。 我是一名探鬼主播最蕾,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼老厌!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起黎炉,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤枝秤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后慷嗜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淀弹,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年庆械,在試婚紗的時候發(fā)現(xiàn)自己被綠了薇溃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡缭乘,死狀恐怖沐序,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情堕绩,我是刑警寧澤策幼,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站奴紧,受9級特大地震影響特姐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜黍氮,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一唐含、第九天 我趴在偏房一處隱蔽的房頂上張望浅浮。 院中可真熱鬧,春花似錦捷枯、人聲如沸滚秩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叔遂。三九已至,卻和暖如春争剿,著一層夾襖步出監(jiān)牢的瞬間已艰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工蚕苇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留哩掺,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓涩笤,卻偏偏與公主長得像嚼吞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蹬碧,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

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