文档库 最新最全的文档下载
当前位置:文档库 › 数据库SQL语句练习题含答案

数据库SQL语句练习题含答案

数据库SQL语句练习题含答案
数据库SQL语句练习题含答案

SQL语句练习

练习5. 1. 2: 基于不断滚动的电影数据库的实例:

Movie( 电影名title,拍摄年代year ,长度length, inColor ,制片厂名studioName, 制片人证书号producerC# )

StarsIn(电影名movieTitle,拍摄年份movieYear ,影星名starName) MovieStar (姓名name,地址address,性别gender ,生日birthdate) MovieExec( 姓名name,地址address ,证书号cert # ,净资产netWorth ) Studio(姓名name, 地址address,总裁证书号presC# )

请写出下列SQL 查询语句:

* ( a) 找出米高梅制片公司(MGM studios)的地址。

SELECT address AS Studio_Address

FROM Studio WHERE name = 'MGM';

( b) 找出桑德拉·布洛克( Sandra Bullock ) 的出生日期( birthdate) 。SELECT birthdate AS Star_Birthdate

FROM MovieStar WHERE name = 'Sandra Bullock';

* ( c) 找出在1980 年拍摄过电影的所有影星, 或者拍摄过电影名中含有“Love”的电影的所有影星。

SELECT starName FROM StarsIn

WHERE movieYear = 1980 OR movieTitle LIKE '%Love%';

( d) 找出净资产至少1 000 万美元的所有行政长官。

SELECT name AS Exec_Name

FROM MovieExec WHERE netWorth >= 10000000;

( e) 找出所有的男影星或者是住址中含有Malibu 的影星。

SELECT name AS Star_Name FROM movieStar

WHERE gender = 'M' OR address LIKE '% Malibu %';

练习5. 1. 3: 用SQL 写出下列的查询。查询将引用练习4. 1. 1 中所描述的数据库模式:

Product (maker , model, t ype)

maker( 制造商) model( 型号) t ype( 类型)

PC(model, speed, ram, hd, cd, pr ice)

model( 型号) speed( 速度) ram( 内存) hd( 硬盘) cd( 光驱) pr ice( 价格)

Laptop(model, speed, ram, h d, screen, price)

model( 型号) speed( 速度) ram( 内存) hd( 硬盘) s creen( 屏幕) pr ice( 价格) Printer (model, color , t ype, pr ice)

model( 型号) color ( 彩色) type( 类型) price( 价格)

使用练习4. 1. 1 的数据, 请写出查询的结果。

* ( a ) 找出价格低于1 600 美元的所有个人计算机( PC) 的型号

( model)、速度( speed) 以及硬盘容量( hd) 。

SELECT model, speed, hd FROM PC WHERE price < 1600 ;

* ( b) 同( a)的要求, 另外将“速度”( speed)改为“兆赫”(megaher t z) , 将“硬盘”( hd) 改为“吉字节”( gigabytes) 。

SELECT model , speed AS gigahertz, hd AS gigabytes FROM PC WHERE price < 1600 ;

( c) 找出打印机( Printer ) 的制造商(maker ) 。

SELECT maker FROM Product WHERE type = 'printer' ;

( d) 找出费用高于2 000 美元的便携式电脑( laptop )的型号、内存容量( ram)以及屏幕尺寸( screen) 。

SELECT model, ram , screen FROM Laptop WHERE price > 2000 ;

( e) 从Printer 关系中找出所有彩色打印机的元组。记住color 是布尔值的属性。

SELECT * FROM Printer WHERE color =true;

( f ) 找出具有6 倍速或8 倍速光驱( 6x or 8x cd)而价格低于2 000 美元的所有个人计算机的型号、速度以及硬盘容量。你可以把属性cd 看作是字符串类型的。

SELECT model, speed, hd FROM PC

WHERE cd=’6x’ or cd=’8x’ and price <= 2000 ;

练习5. 1. 4: 基于练习4. 1. 3 的数据库模式:

Classes ( class , type, country, numGuns, bore, displacement)

class( 等级名) 、type( 类型: bb 代表战列舰, 或bc 代表巡洋舰) 、country

( 制造舰艇的国家) 、numGuns ( 主要火炮的数量) 、bore( 主要火炮的口径: 炮管的直径, 以英寸计算) 和displacement ( 排水量: 重量, 以吨计算)

Ships (name, class , launched)

name( 舰艇名) 、class( 舰艇等级名) 和launched( 舰艇下水的年份)

Battles(name, date)

name(名字) 和date(日期)

Outcomes( ship, battle, result )

给出每艘舰艇在每次战役中的result ( 结果: 沉没、损坏或完好)

写出下列查询, 并根据练习4. 1. 3 中的数据给出查询的结果:

( a) 列出至少拥有十门火炮( numGuns )的所有舰艇等级( class )的名称( name )和所属国家( country) 。

SELECT class, country FROM Classes WHERE numGuns >= 10 ;

( b) 找出所有在1918 年以前下水的舰艇的name, 而结果的名称用shipName 来表示。

SELECT name AS shipName FROM Ships WHERE launched < 1918; ( c) 找出所有在作战中沉没的舰艇的name, 同时给出使它们沉没的bat tle( 战役名) 。

SELECT ship AS shipName, battle FROM Outcomes

WHERE result = 'sunk';

( d) 找出所有name 和class 同名的舰艇。

SELECT name AS shipName FROM Ships WHERE name = class;

( e) 找出name 以字母R 开头的所有舰艇的名称。

SELECT name AS shipName FROM Ships WHERE name LIKE 'R%';

! ( f ) 找出舰名中包含三个或三个以上单词( 如King George V) 的所有舰艇的名称。

SELECT name AS shipName FROM Ships

WHERE name LIKE '_% _% _%' ;

练习5. 2. 1: 使用我们不断滚动的电影实例的数据库模式

Movie( title, year , length, inColor , studioName, producerC# )

StarsIn(movieTitle, movieYear , starName)

MovieStar ( name, address, gender , birthdate)

MovieExec( name, address , cert # , netWorth )

Studio( name, address, presC# )

用SQL 写出下列查询:

* ( a) 电影“Terms of Endearment”中的男影星都有谁?

SELECT https://www.wendangku.net/doc/237192636.html, AS starName FROM MovieStar M, StarsIn S

WHERE https://www.wendangku.net/doc/237192636.html, = S.starName AND S.movieTitle = 'Terms of Endearment' AND M.gender = 'M';

( b) 哪些影星出现在米高梅公司(MGM) 于1995 年制作的电影中? SELECT S.starName FROM Movies M , StarsIn S, Studios T

WHERE https://www.wendangku.net/doc/237192636.html, ='MGM' AND M.year = 1995

AND M.title = S.movieTitle AND M.studioName = https://www.wendangku.net/doc/237192636.html,;

( c) 谁是米高梅制片公司的总裁?

SELECT https://www.wendangku.net/doc/237192636.html, AS presidentName FROM MovieExec X, Studio T WHERE X.cert# = T.presC# AND https://www.wendangku.net/doc/237192636.html, = 'MGM';

* ! ( d) 哪些电影比《乱世佳人》(Gong With the Wind) 更长?

SELECT M1.title FROM Movies M1, Movies M2

WHERE M1.length > M2.length AND M2.title ='Gone With the Wind' ;

! ( e) 哪些行政长官比Merv Griffin 更富有?

SELECT https://www.wendangku.net/doc/237192636.html, AS execName FROM MovieExec X1, MovieExec X2 WHERE https://www.wendangku.net/doc/237192636.html,Worth > https://www.wendangku.net/doc/237192636.html,Worth AND https://www.wendangku.net/doc/237192636.html, = 'Merv Griffin' ;

练习5. 2. 2: 基于练习4. 1. 1 中的数据库模式

Product (maker , model, type)

PC ( model, speed, ram, hd, cd, pr ice)

Laptop (model, speed, ram, hd, screen, price)

Printer (model, color , type, price)

写出下列查询:

* ( a) 给出配置了容量至少为1G 字节的硬盘( h d)的便携式电脑( laptop)的生产厂商(maker ) 及其速度( speed) 。

L.speed AS gigahertz FROM Product R, Laptop L

WHERE L.hd >= ‘1G’ AND R.model = L.model ;

* ( b) 找出由生产厂商 B 生产的所有产品的型号(model)和价格( pr ice)。SELECT R.model, P.price FROM Product R, PC P WHERE R.maker = 'B' AND R.model = P.model UNION

SELECT R.model, L.price FROM Product R, Laptop L WHERE R.maker = 'B' AND R.model = L.model UNION

SELECT R.model, T.price FROM Product R, Printer T

WHERE R.maker = 'B' AND R.model = T.model ;

( c) 找出所有出售便携式电脑( 而不出售PC 机) 的生产厂商。SELECT R.maker FROM Product R, Laptop L

WHERE R.model = L.model EXCEPT

SELECT R.maker FROM Product R, PC P WHERE R.model = P.model ;

! ( d) 找出在两种或两种以上PC 机上出现的硬盘的容量。

SELECT DISTINCT P1.hd FROM PC P1, PC P2 WHERE P1.hd =P2.hd AND P1.model > P2.model ;

! ( e) 找出拥有相同速度和内存的PC 机的成对的型号(model)。每对只列出一次; 例如, 列出了( i, j ) 就不要列出( j , i) 。

SELECT P1.model, P2.model FROM PC P1, PC P2

WHERE P1.speed = P2.speed AND P1.ram = P2.ram

AND P1.model < P2.model ;

! ! ( f) 找出所有这样的生产厂商, 其产品中至少有两种不同类型的计算机( PC 机或便携式电脑) 速度最低为133MHz。

SELECT M.maker FROM

(SELECT maker, R.model FROM PC P, Product R WHERE SPEED >= 133 AND P.model=R.model UNION SELECT maker, R.model FROM Laptop L, Product R WHERE speed >= 133 AND L.model=R.model ) M

GROUP BY M.maker HAVING COUNT(M.model) >= 2 ;

练习5. 2. 3: 基于练习4. 1. 3 中的数据库模式

Classes ( class , type, country, numGuns, bore, displacement )

Ships ( name, class , launched)

Battles ( name, date)

Outcome ( ship, battle, result )

写出下列查询, 并用练习4. 1. 3 中的数据对你写出的查询求值:

( a) 找出排水量( displacement ) 大于35 000 吨的舰艇。

SELECT https://www.wendangku.net/doc/237192636.html, FROM Ships S, Classes C

WHERE S.class = C.class AND C.displacement > 35000;

( b) 列出参加瓜达尔卡纳尔岛(Guadalcanal, 简称瓜岛)战役的舰艇的名称、排水量以及火炮的数量。

SELECT https://www.wendangku.net/doc/237192636.html, , C.displacement, C.numGuns

FROM Ships S , Outcomes O, Classes C

WHERE https://www.wendangku.net/doc/237192636.html, = O.ship AND S.class = C.class

AND O.battle = 'Guadalcanal' ;

( c) 列出数据库中所有提到的舰艇。(记住: 所有提到的舰艇不一定都出现在关系Ships 中) 。

SELECT name shipName FROM Ships UNION

SELECT ship shipName FROM Outcomes ;

! ( d) 找出所有既拥有战列舰又拥有巡洋舰的国家。

SELECT C1.country FROM Classes C1, Classes C2

WHERE C1.country = C2.country AND C1.type = 'bb'

AND C2.type = 'bc' ;

! ( e) 找出在一次战役中受损, 而后又在另一次战役中投入战斗的那些舰艇。

SELECT O1.ship FROM Outcomes O1, Battles B1

WHERE O1.battle = https://www.wendangku.net/doc/237192636.html, AND O1.result = 'damaged'

AND EXISTS

(SELECT B2.date FROM Outcomes O2, Battles B2

WHERE O2.battle=https://www.wendangku.net/doc/237192636.html, AND O1.ship = O2.ship(相关子查询)AND B1.date < B2.date ) ;

! ( f ) 找出参战的舰艇中至少有三艘属于同一国家的所有战役。SELECT O.battle FROM Ships S , Classes C, Outcomes O

WHERE C.Class = S.class AND O.ship = https://www.wendangku.net/doc/237192636.html,

GROUP BY C.country, O.battle

HAVING COUNT(O.ship) >= 3;

练习5. 3. 1: 基于练习4. 1. 1 中的数据库模式

Product (maker , model, type)

PC ( model, speed, ram, hd, cd, price)

Laptop (model, speed, ram, hd, screen, price)

Printer (model, color , type, price)

写出下列查询。每个解答应该至少用一个子查询, 每个查询都用两种明显不同的方法( 如,

用运算符EXISTS, IN, ALL 和ANY 的不同的集合) 。

* ( a) 找出速度至少为160MHz 的PC 机的制造商(maker )。SELECT DISTINCT maker FROM Product WHERE model IN (SELECT model FROM PC WHERE speed >= 160 );

SELECT DISTINCT R.maker FROM Product R WHERE EXISTS (SELECT P.model FROM PC P WHERE P.speed >= 160

AND P.model =R.model );

( b) 找出价格最高的打印机。

SELECT P1.model FROM Printer P1 WHERE P1.price >= ALL (SELECT P2.price FROM Printer P2 ) ;

SELECT P1.model FROM Printer P1 WHERE P1.price IN

(SELECT MAX(P2.price) FROM Printer P2 ) ;

! ( c) 找出速度低于任何PC 机的便携式电脑( laptop) 。

SELECT L.model FROM Laptop L WHERE L.speed < ANY

(SELECT P.speed FROM PC P ) ;

SELECT L.model FROM Laptop L WHERE EXISTS

(SELECT P.speed FROM PC P WHERE P.speed >= L.speed ) ;

! ( d) 找出具有最高价格的机器( PC 机、便携式电脑或打印机) 的型号(model) 。

SELECT model FROM (SELECT model, price FROM PC UNION SELECT model, price FROM Laptop UNION

SELECT model, price FROM Printer )M1

WHERE M1.price >= ALL (SELECT price FROM PC UNION SELECT price FROM Laptop UNION

SELECT price FROM Printer ) ;

SELECT model FROM (SELECT model, price FROM PC UNION SELECT model, price FROM Laptop UNION

SELECT model, price FROM Printer ) M1

WHERE M1.price IN (SELECT MAX(price) FROM

(SELECT price FROM PC UNION

SELECT price FROM Laptop UNION

SELECT price FROM Printer ) M2 ) ;

! ( e) 找出具有最低价格的彩色打印机的制造商。

SELECT R.maker FROM Product R, Printer T

WHERE R.model =T.model AND T.color = true

AND T.price <= ALL (SELECT MIN(price) FROM Printer );

SELECT R.maker FROM Product R, Printer T1

WHERE R.model =T1.model AND T1.color=true

AND T1.price IN (SELECT MIN(T2.price) FROM Printer T2 );

! ! ( f) 找出在具有最小内存( ram) 容量的所有PC 机中具有最快处理器的PC 机制造商。

SELECT R1.maker FROM Product R1, PC P1

WHERE R1.model=P1.model AND P1.ram IN

(SELECT MIN(ram) FROM PC ) AND P1.speed >= ALL

(SELECT P1.speed FROM Product R1, PC P1

WHERE R1.model=P1.model AND P1.ram IN

(SELECT MIN(ram) FROM PC ) );

SELECT R1.maker FROM Product R1, PC P1

WHERE R1.model=P1.model AND P1.ram =

(SELECT MIN(ram) FROM PC ) AND P1.speed IN

(SELECT MAX(P1.speed) FROM Product R1, PC P1

WHERE R1.model=P1.model AND P1.ram IN

(SELECT MIN(ram) FROM PC ) );

练习5. 3. 2: 基于练习4. 1. 3 中的数据库模式

Classes ( class , type, country, numGuns, bore, displacement )

Ships ( name, class , launched)

Battles ( name, date)

Outcome ( ship, battle, result )

写出下列查询。每个解答应该至少用一个子查询, 每个查询都用两种明显不同的方法( 如,用运算符EXISTS, IN, ALL 和ANY 的不同的合) 。( a) 找出其舰艇拥有最大数量火炮的国家。

SELECT C.country FROM Classes C WHERE numGuns IN

(SELECT MAX(numGuns) FROM Classes );

SELECT C.country FROM Classes C WHERE numGuns >= ALL (SELECT numGuns FROM Classes );

* ! ( b ) 找出其中至少有一艘舰艇在战役中沉没的舰艇等级。SELECT DISTINCT C.class FROM Classes C, Ships S

WHERE C.class = S.class AND EXISTS

(SELECT ship FROM Outcomes O WHERE O.result='sunk'

AND O.ship = https://www.wendangku.net/doc/237192636.html, ) ;

SELECT DISTINCT C.class FROM Classes C, Ships S

WHERE C.class = S.class AND https://www.wendangku.net/doc/237192636.html, IN

(SELECT ship FROM Outcomes O WHERE O.result='sunk' ) ;

( c) 找出具有16 英寸口径( bore) 火炮的舰艇名称。

SELECT https://www.wendangku.net/doc/237192636.html, FROM Ships S WHERE S.class IN

(SELECT class FROM Classes C WHERE bore=16 ) ;

SELECT https://www.wendangku.net/doc/237192636.html, FROM Ships S WHERE EXISTS

(SELECT class FROM Classes C WHERE bore =16 AND C.class =

S.class );

( d) 找出Kongo 级舰艇参战的战役。

SELECT O.battle FROM Outcomes O WHERE O.ship IN

(SELECT name FROM Ships S WHERE S.Class ='Kongo' );

SELECT O.battle FROM Outcomes O WHERE EXISTS

(SELECT name FROM Ships S WHERE S.Class ='Kongo'

AND https://www.wendangku.net/doc/237192636.html, = O.ship );

! ! ( e) 在具有相同口径火炮的舰艇中找出火炮数量最多的舰艇的名称。SELECT https://www.wendangku.net/doc/237192636.html, FROM Ships S, Classes C

WHERE S.Class = C.Class AND numGuns >= ALL

(SELECT numGuns FROM Ships S2, Classes C2 WHERE S2.Class =

C2.Class AND C2.bore = C.bore ) ;

SELECT https://www.wendangku.net/doc/237192636.html, FROM Ships S, Classes C WHERE S.Class = C.Class AND numGuns IN

(SELECT MAX(numGuns) FROM Ships S2, Classes C2

WHERE S2.Class = C2.Class AND C2.bore = C.bore ) ;

Better answer; 相关子查询

SELECT https://www.wendangku.net/doc/237192636.html, FROM Ships S, Classes C

WHERE S.Class = C.Class AND numGuns >= ALL

(SELECT numGuns FROM Classes C2 WHERE C2.bore = C.bore ) ; SELECT https://www.wendangku.net/doc/237192636.html, FROM Ships S, Classes C

WHERE S.Class = C.Class AND numGuns IN

(SELECT MAX(numGuns) FROM Classes C2 WHERE C2.bore =

C.bore ) ;

练习5. 5. 1: 在练习4. 1. 1 的数据库模式的基础上, 写出下列查询, 并用练习4. 1. 1 中的

数据计算你的查询结果。数据库模式为:

Product (make, model, type)

PC ( model, speed, ram, hd, cd, price)

Laptop (model, speed, ram, hd, screen, price)

Printer (model, color , type, price)

查询:

* ( a) 找出PC 机的平均速度。

SELECT AVG(speed) AS Avg_Speed FROM PC ;

( b) 找出价格超过2 500 美元的便携式电脑( laptop) 的平均速度。SELECT AVG(speed) AS Avg_Speed FROM Laptop WHERE price > 2500 ;

( c) 找出厂商“A”生产的PC 机的平均价格。

SELECT AVG(P.price) AS Avg_Price FROM Product R, PC P

WHERE R.model=P.model AND R.maker='A' ;

! ( d) 找出厂商“D”生产的PC 机和便携式电脑的平均价格。SELECT AVG(M.price) AS Avg_Price FROM

(SELECT P.price FROM Product R, PC P WHERE R.model = P.model AND R.maker = 'D' UNION ALL

SELECT L.price FROM Product R, Laptop L WHERE R.model = L.model AND R.maker = 'D' ) M ;

( e) 找出各种不同速度的PC 机的平均价格。

SELECT SPEED, AVG(price) AS AVG_PRICE FROM PC

GROUP BY speed ;

* ! ( f ) 找出各厂商生产的便携式电脑的显示器平均尺寸。

SELECT R.maker, AVG(L.screen) AS Avg_Screen_Size FROM Product R, Laptop L WHERE R.model = L.model GROUP BY R.maker ;

! ( g) 找出至少生产三种不同型号的PC 机的厂商。

SELECT R.maker FROM Product R, PC P WHERE R.model = P.model GROUP BY R.maker HAVING COUNT(R.model) >=3 ;

better:

SELECT maker FROM Product WHERE type='pc' GROUP BY maker HAVING COUNT(model) >=3 ;

! ( h ) 找出各厂商生产的PC 机的最高价格。

SELECT R.maker, MAX(P.price) AS Max_Price FROM Product R,

PC P WHERE R.model = P.model GROUP BY R.maker ;

* ! ( i) 找出速度超过150MHz 的各种速度的PC 机的平均价格。SELECT speed, AVG(price) AS Avg_Price FROM PC

WHERE speed > 150 GROUP BY speed ;

! ! ( j) 找出所有生产打印机的厂商生产的PC机的硬盘平均容量。SELECT AVG(P.hd) AS Avg_HD_Size FROM Product R, PC P WHERE R.model = P.model AND R.maker IN

(SELECT maker FROM Product WHERE type = 'printer' ) ;

练习5. 5. 2: 在练习4. 1. 3 中的数据库模式的基础上, 写出下列查询, 并用练习4. 1. 3 的数据计算你的查询结果。数据库模式为:

Classes ( class , type, country, numGuns, bore, displacement )

Ships ( name, class , launched)

Battles ( name, date)

Outcomes ( ship, battle, result )

查询:

( a) 找出战列舰( battleship ) 的等级数。

SELECT COUNT(C.class) AS NO_Classes FROM Classes WHERE type ='bb' ;

( b) 找出各等级战列舰火炮的平均数。

SELECT AVG(C.numGuns) AS Avg_Guns FROM Classes WHERE type ='bb' ;

! ( c) 找出战列舰火炮的平均数。请注意( b)和( c)之间的差别; 我们是否根据某一等级舰艇的数量而对该等级加权?

SELECT AVG(C.numGuns) AS Avg_Guns FROM Classes C

INNER JOIN Ships S ON (C.class = S.class) WHERE C.type ='bb';

! ( d) 找出各等级舰艇中的第一艘下水的年份。

SELECT C.class, MIN(https://www.wendangku.net/doc/237192636.html,unched) AS First_Launched

FROM Classes C, Ships S WHERE C.class = S.class

GROUP BY C.class ;

! ( e) 对于每个等级都找出在战役中沉没的舰艇数。

SELECT C.class, COUNT(O.ship) AS No_Sunk FROM Classes C , Outcomes O, Ships S

WHERE C.class = S.class AND https://www.wendangku.net/doc/237192636.html, = O.ship AND O.result = 'sunk' GROUP BY C.Class ;

! ! ( f) 对于至少有三艘舰艇的各个等级找出在战役中沉没的舰艇数。SELECT M.class, COUNT(O.ship) AS No_Sunk FROM Outcomes O, Ships S ,

(SELECT C.class FROM Classes C, Ships S WHERE C.class = S.class GROUP BY C.class HAVING COUNT(https://www.wendangku.net/doc/237192636.html,) >= 3 ) M

WHERE O.result = 'sunk' AND O.ship = https://www.wendangku.net/doc/237192636.html, AND S.class = M.class GROUP BY M.class ;

! ! ( g) 舰炮发射的炮弹的重量(以磅为单位)约等于口径(以英寸为单位)的立方的1/ 2。找出每个国家舰艇上所用的炮弹的平均重量。SELECT C.country, AVG(C.bore*C.bore*C.bore*0.5) Avg_Shell_Wt FROM Classes C, Ships S WHERE C.class = S.class

GROUP BY C.country ;

练习5. 6. 1: 基于练习4. 1. 1 中的数据库模式

Product (make, model, type)

PC ( model, speed, ram, hd, cd, price)

Laptop (model, speed, ram, hd, screen, price)

Printer (model, color , type, price)

写出下列数据库更新操作, 描述对练习4. 1. 1 中的数据进行更新的效果。

( a) 用两个INSERT 语句将下述事实存入数据库:生产厂商C 制造的

型号为1100 的PC 机, 速度240M, 内存32M, 硬盘2. 5G, 12 倍速光驱, 售价2 499 美元。

INSERT INTO Product VALUES ( 'C' , '1100', 'pc' ) ;

INSERT INTO PC VALUES ( '1100', 240,32 , 2.5,12,2499 ) ;

! ( b ) 插入这些事实: 对于每一种PC 机, 都有一种具有相同速度、内存和硬盘的便携式电脑, 而屏幕为11 英寸, 型号大于1100, 价格超过500 美元。

INSERT INTO Product

SELECT make , model+1100, 'laptop' FROM Product WHERE type = 'pc' ; INSERT INTO Laptop

SELECT model+1100, speed , ram , hd , 11 , price+500 FROM PC ;

( c) 删掉所有硬盘容量不到2G 字节的PC 机。

DELETE FROM PC WHERE hd < 2 ;

( d) 删掉由不制造打印机的厂商所制造的所有便携式电脑。DELETE FROM Laptop L WHERE L.model IN

(SELECT R2.model FROM Product R2 WHERE R2.maker IN (SELECT DISTINCT R.maker FROM Product R

WHERE R.maker NOT IN

(SELECT R2.maker FROM Product R2 WHERE R2.type = 'printer'

) ) ) ;

DELETE FROM PRODUCT R3

WHERE R3.model IN

(SELECT R2.model FROM Product R2 WHERE R2.maker IN (SELECT DISTINCT R.maker FROM Product R

WHERE R.maker NOT IN

(SELECT R2.maker FROM Product R2 WHERE R2.type = 'printer' ) ) ) AND R3.type = 'laptop';

( e) 厂商A 收购了厂商B, 将所有由B 制造的产品改为由A 制造。UPDATE Product SET maker = 'A' WHERE maker = 'B' ;

( f) 对每种PC 机, 将内存的容量加倍, 硬盘的容量增加1G 字节。(记住:一些属性可以通过UPDATE 语句进行更改。)

UPDATE PC SET ram = ram*2, hd =hd +1 ;

sql数据库基础面试题复习试题考试题_全

不定项选择题(针对以下题目,请选择最符合题目要求的答案,每道题有一项或二项正确答案。针对每一道题目,所有答案都选对,则该题得分,所选答案错误或不能选出所有答案,则该题不得分。题量为50道,每题2分,总分为100分。) 第一章 1、是SQLServer数据库的主数据文件的扩展名。(选择一项) A、.sql B、.mdb C、.ldf D、.mdf 2、在SQL Server 2005中,有系统数据库和用户数据库,下列不属于系统数据库的是()。 (选择一项) A、master B、pubs C、model D、msdb 3、当安装完SQL Server2005数据库时,系统默认当前的超级管理员是( ) (选择一项) A、sa B、master C、administrator D、super 4、在使用SQL Server2005数据库时,有时需要将本机的数据库移动到其他机器上,恢复成对应的数据库使用。移动数据库分两步进行,应包括()和附加数据库(选择一项)A、分离数据库 B、删除数据库 C、新建数据库 D、合并数据库 5、在SQL Server2005中,附加数据库操作是指()(选择一项) A、把SQL Server 数据库文件保存为其他数据文件 B、根据数据库物理文件中的信息,把数据库在SQL Server 2005中恢复 C、把所有该数据库表的数据清空 D、把数据库删除掉 6、某单位由不同的部门组成,不同的部门每天都会生产一些报告、报表等数据,以为都采用纸张的形式来进行数据的保存和分类,随着业务的发展,这些数据越来越多,管理这些报告越来越费力,此时应考虑()(选择一项) A、由多个人来完成这些工作 B、在不同的部门中,由专门的人员去管理这些数据 C、采用数据库系统来管理这些数据 D、把这些数据统一成一样的格式 7、在SQL Server 2005中,对于数据库的定义正确的是()(选择一项) A、数据库是用来描述事物的符号记录 B、数据库是位于用户与操作系统之间的一层数据管理软件

SQL数据库面试题以和答案

Student(S#,Sname,Sage,Ssex)学生表 S#:学号 Sname:学生姓名 Sage:学生年龄 Ssex:学生性别 Course(C#,Cname,T#)课程表 C#:课程编号 Cname:课程名称 T#:教师编号 SC(S#,C#,score)成绩表 S#:学号 C#:课程编号 score:成绩 Teacher(T#,Tname)教师表 T#:教师编号: Tname:教师名字 问题: 1、查询“001”课程比“002”课程成绩高的所有学生的学号 select a.S# from (select S#,score from SC where C#='001')a, (select s#,score from SC wh ere c#='002')b Where a.score>b.score and a.s# = b.s#; 2、查询平均成绩大于60分的同学的学号和平均成绩 select S#, avg(score) from sc group by S# having avg(score)>60 3、查询所有同学的学号、姓名、选课数、总成绩 select student.S#, student.Sname, count(sc.C#), sum(score) from student left outer join SC on student.S# = SC.S# group by Student.S#, Sname

4、查询姓‘李’的老师的个数: select count(distinct(Tname)) from teacher where tname like '李%'; 5、查询没有学过“叶平”老师可的同学的学号、姓名: select student.S#, student.Sname from Student where S# not in (select distinct(SC.S#) from SC,Course,Teacher where sc.c#=course.c# AND teacher.T#=course.T# AND Teahcer.Tname ='叶平'); 6、查询学过“叶平”老师所教的所有课的同学的学号、姓名:select S#,Sname from Student where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname='叶平')); 7、查询学过“011”并且也学过编号“002”课程的同学的学号、姓名: select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002'); 8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名: Select S#,Sname

数据库面试题(4)

数据库面试题 四数据库写SQL题(30) 1.按要求写SQL语句:根据集团成员培训业务,建立以下三张表: S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄 C (C#,CN ) C#,CN 分别代表课程编号、课程名称 SC ( S#,C#,G ) S#,C#,G分别代表学号、所选修的课程编号、学习成绩 要求如下: 1)使用标准SQL语句查询成员名单中所属单位叫“技术一部”的人员总数及 平均年龄; 2)使用标准的SQL语句更新学号为‘S#1’的姓名为“Mike”; 3)使用嵌套语句查询选修课程编号为‘C2’的学员姓名和所属单位; 4)使用嵌套语句查询不选修课程编号为‘C5’的学员姓名和所属单位; 5)查询选修课程超过5门的学员学号和所属单位; 解答: 1) select count(SN),avg(SA) from S where SD='技术一部'; 2) update S set SN='Mike' where S#='S#1'; 3) select SN,SD from S where S#=(select S# from SC where C#='C2'); 4) select SN,SD from S where S# not in(select S# from SC where C#='C5'); 5) select S#,SD from S where S#= (select S# from SC group by S# having count(S#)>=5); 2.请根据以下四张表(其中course_t表的teacher_id字段是teacher_t表的id字段的外键引用), 拼写出相应的sql语句(oracle语法)。(15分) 学生表:students_t id name sex 001赵学生Male 002钱学生Male 003孙学生Male 004李学生Female 005周学生Female ……… 教师表:teacher_t id name sex 001吴老师Male 002郑老师Male 003王老师Male

SQL数据库面试题目及其答案

1.触发器的作用? 答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。 它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。 2.什么是存储过程?用什么来调用? 答:存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。 3.索引的作用?和它的优点缺点是什么? 答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。 缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。 3。什么是内存泄漏? 答:一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用完后要显示释放内存。当应用程序用关键字new 等创建对象时,就从堆中为它分配一块内存,使用完后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。 4.维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么? 答:我是这样做的,尽可能使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。 5.什么是事务?什么是锁? 答:事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。 要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。 锁:在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。

sql数据库面试题及答案

sql数据库面试题及答案 【篇一:sql数据库经典面试题(笔试题)】 =txt>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语句? 胜负 2005-05-09 2 2 2005-05-10 1 2 ------------------------------------------ create table #tmp(rq varchar(10),shengfu nchar(1)) insert into #tmp values(2005-05-09,胜) insert into #tmp values(2005-05-09,胜) insert into #tmp values(2005-05-09,负) insert into #tmp values(2005-05-09,负) insert into #tmp values(2005-05-10,胜) insert into #tmp values(2005-05-10,负) insert into #tmp values(2005-05-10,负) 1)select rq, sum(case when shengfu=胜 then 1 else 0 end)胜,sum(case when shengfu=负 then 1 else 0 end)负 from #tmp group by rq 2) select n.rq,n.勝,m.負 from ( select rq,勝=count(*) from #tmp where shengfu=胜group by rq)n inner join (select rq,負=count(*) from #tmp where shengfu=负group by rq)m on n.rq=m.rq 3)select a.col001,a.a1 胜,b.b1 负 from (select col001,count(col001) a1 from temp1 where col002=胜group by col001) a,

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 2.学生表如下: 自动编号学号姓名课程编号课程名称分数 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 https://www.wendangku.net/doc/237192636.html,, https://www.wendangku.net/doc/237192636.html, from team a, team b where https://www.wendangku.net/doc/237192636.html, < https://www.wendangku.net/doc/237192636.html, 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 ********************************************************************* *************** 5.面试题:怎么把这样一个表儿 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

经典SQL面试题总结

表 Student(S#,Sname,Sage,Ssex) 学生表 CREATE TABLE student ( sid varchar(10) NOT NULL, sName varchar(20) DEFAULT NULL, sAge datetime DEFAULT '1980-10-12 23:12:36', sSex varchar(10) DEFAULT NULL, PRIMARY KEY (sid) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Course(C#,Cname,T#) 课程表 CREATE TABLE course ( cid varchar(10) NOT NULL, cName varchar(10) DEFAULT NULL, tid int(20) DEFAULT NULL, PRIMARY KEY (cid) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; SC(S#,C#,score) 成绩表 CREATE TABLE sc ( sid varchar(10) DEFAULT NULL, cid varchar(10) DEFAULT NULL, score int(10) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8; Teacher(T#,Tname) 教师表 CREATE TABLE teacher ( tid int(10) DEFAULT NULL, tName varchar(10) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 数据:(MySQL) insert into teacher(tid,tName) values (1,'李老师'),(2,'何以琛'),(3,'叶平'); insert into student(sid,sName,sAge,sSex) values ('1001','张三丰','1980-10-12 23:12:36','男'),('1002','张无极','1995-10-12 23:12:36','男'),('1003','李奎','1992-10-12 23:12:36','女'),('1004','李元宝','1980-10-12 23:12:36','女'),('1005','李世明','1981-10-12 23:12:36','男'),('1006','赵六','1986-10-12 23:12:36','男'),('1007','田七','1981-10-12 23:12:36','女'); insert into sc(sid,cid,score) values ('1','001',80),('1','002',60),('1','003',75),('2','001',85),('2','002',70),('3','004',100), ('3','001',90),('3','002',55),('4','002',65),('4','003',60); insert into course(cid,cName,tid) values ('001','企业管理',3),('002','马克思',3),('003','UML',2),('004','数据库',1),('005 ','英语',1); 1、查询“001”课程比“002”课程成绩高的所有学生的学号; select a.S# from (select s#,score from SC where C#='001') a,(select s#,score from SC where C#='002') b where a.score>b.score and a.s#=b.s#; 2、查询平均成绩大于60分的同学的学号和平均成绩;

SQL数据库面试题以及答案精编

S Q L数据库面试题以及 答案精编 Document number:WTT-LKK-GBB-08921-EIGG-22986

Student(S#,Sname,Sage,Ssex)学生表 S#:学号 Sname:学生姓名 Sage:学生年龄 Ssex:学生性别 Course(C#,Cname,T#)课程表C#:课程编号 Cname:课程名称 T#:教师编号 SC(S#,C#,score)成绩表 S#:学号 C#:课程编号 score:成绩 Teacher(T#,Tname)教师表 T#:教师编号: Tname:教师名字 问题:

1、查询“001”课程比“002”课程成绩高的所有学生的学号 select # from (select S#,score from SC where C#='00 1')a, (select s#,score from SC where c#='002')b Whe re > and # = #; 2、查询平均成绩大于60分的同学的学号和平均成绩select S#, avg(score) from sc group by S# having av g(score)>60 3、查询所有同学的学号、姓名、选课数、总成绩 select #, , count#), sum(score) from student left o uter join SC on # = # group by #, Sname 4、查询姓‘李’的老师的个数: select count(distinct(Tname)) from teacher where tname like '李%'; 5、查询没有学过“叶平”老师可的同学的学号、姓名:select #, from Student

SQL Server数据库笔试题和答案

一单词解释(2分/个) 34分 Data 数据Database 数据库RDBMS 关系数据库管理系统GRANT 授权 REVOKE 取消权限DENY 拒绝权限DECLARE 定义变量PROCEDURE存储过程 事务Transaction 触发器TRIGGER 继续continue 唯一unqiue 主键primary key 标识列identity 外键foreign key 检查check 约束constraint 二编写SQL语句(5分/题) 50分(包含笔试题问题和解答答案) 1) 创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话Create table stu (学号int , 姓名varchar(8), 年龄int, 性别varchar(4), 家庭地址varchar(50), 联系电话int ); 2) 修改学生表的结构,添加一列信息,学历 Alter table stu add 学历varchar(6); 3) 修改学生表的结构,删除一列信息,家庭住址 Alter table stu drop column 家庭地址 4) 向学生表添加如下信息: 学号姓名年龄性别联系电话学历 1A22男123456小学 2B21男119中学 3C23男110高中 4D18女114大学 Insert into stu values(1,?A?,22,?男?,123456,?小学?) Insert into stu values(2,?B?,21,?男?,119,?中学?) Insert into stu values(3,?C?,23,?男?,110,?高中?) Insert into stu values(4,?D?,18,?女?,114,?大学?) 5) 修改学生表的数据,将电话号码以11开头的学员的学历改为“大专” Update stu set 学历=?大专? where 联系电话like …11%? 6) 删除学生表的数据,姓名以C开头,性别为…男?的记录删除 Delect from stu where 性别=?男? and 姓名like …c%? 7) 查询学生表的数据,将所有年龄小于22岁的,学历为“大专”的,学生的姓名和学号示出来 Select 姓名,学号from stu where 年龄<22 and 学历=?大专?

SQLServer数据库笔试题和答案

一单词解释(2分/个)34分 Data数据Database数据库RDBMS关系数据库管理系统GRANT授权 REVOKE取消权限DENY 拒绝权限DECLARE定义变量PROCEDURE存储过程事务Transaction 触发器TRIGGER 继续continue 唯一unqiue 主键primary key 标识歹U identity 夕卜键foreign key 检查check 约束constraint 二编写SQL语句(5分/题)50分(包含笔试题问题和解答答案) 1)创建一张学生表,包含以下信息,学号,姓名,年龄,性别,家庭住址,联系电话 Create table stu (学号int , 姓名varchar(8), 年龄int, 性别varchar(4), 家庭地址varchar(50), 联系电话int ); 2)修改学生表的结构,添加一列信息,学历 Alter table stu add 学历varchar(6); 3)修改学生表的结构,删除一列信息,家庭住址 Alter table stu drop colu mn 家庭地址 4)向学生表添加如下信息: 学号姓名年龄性别联系电话学历 1A22 男123456 小学 2B21男119中学3C23男110高中 5)修改学生表的数据,将电话号码以11开头的学员的学历改为大专” Update stu set 学历='大专' where联系电话like '11% ' 6)删除学生表的数据,姓名以C开头,性别为男'勺记录删除 Delect from stu where 性别='男'anc姓名like ' c%' 7)查询学生表的数据,将所有年龄小于22岁的,学历为大专”的,学生的姓名和学号示出 来 Select姓名,学号from stu where 年龄<22 and 学历='大专' 8)查询学生表的数据,查询所有信息,列出前25%的记录 Select top 25 perce nt * from stu 9)查询出所有学生的姓名,性别,年龄降序排列

SQL数据库经典面试题(修改笔试题)(有答案)

28、 数据库:抽出部门,平均工资,要求按部门的字符串顺序排序,不能含有"human resource"部门,employee结构如下: employee_id, employee_name,depart_id,depart_name,wage 答: select depart_name, avg(wage) from employee where depart_name <> 'human resource' group by depart_name order by depart_name -------------------------------------------------------------------------- 29、 给定如下SQL数据库:Test(num INT(4)) 请用一条SQL语句返回num的最小值,但不许使用统计功能,如MIN,MAX等 答: select top 1 num from Test order by num -------------------------------------------------------------------------- 33、一个数据库中有两个表: 一张表为Customer,含字段ID,Name; 一张表为Order,含字段ID,CustomerID(连向Customer中ID的外键),Revenue; 写出求每个Customer的Revenue总与的SQL语句。 建表create table customer (ID int primary key,Name char(10)) go create table [order] (ID int primary key,CustomerID int foreign key references customer(id) , Revenue float) go --查询 select Customer、ID, sum( isnull([Order]、Revenue,0) ) from customer full join [order] on( [order]、customerid=customer、id ) group by customer、id select customer、id,sum(order、revener) from order,customer where customer、id=customerid group by customer、id select customer、id, sum(order、revener ) from customer full join order on( order、customerid=customer、id ) group by customer、id 5数据库(10)

数据库面试题(4)

数据库面试题 四数据库写 SQL题( 30) 1.按要求写 SQL语句:根据集团成员培训业务,建立以下三张表: S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄 C (C#,CN ) C#,CN 分别代表课程编号、课程名称 SC ( S#,C#,G ) S#,C#,G分别代表学号、所选修的课程编号、学习成绩 要求如下: 1)使用标准 SQL语句查询成员名单中所属单位叫“技术一部”的人员总数及 平均年龄; 2)使用标准的 SQL语句更新学号为‘S#1’的姓名为“Mike”; 3)使用嵌套语句查询选修课程编号为‘C2’的学员姓名和所属单位; 4)使用嵌套语句查询不选修课程编号为‘C5’的学员姓名和所属单位; 5)查询选修课程超过 5门的学员学号和所属单位; 解答: 1) select count(SN),avg(SA) from S where SD='技术一部'; 2) update S set SN='Mike' where S#='S#1'; 3) select SN,SD from S where S#=(select S# from SC where C#='C2'); 4) select SN,SD from S where S# not in(select S# from SC where C#='C5'); 5) select S#,SD from S where S#= (select S# from SC group by S# having count(S#)>=5); 2.请根据以下四张表(其中course_t表的 teacher_id字段是teacher_t表的 id字段的外键引用), 拼写出相应的sql语句(oracle语法)。(15分) 学生表:students_t id name sex 001赵学生 Male 002钱学生 Male 003孙学生 Male 004李学生 Female 005周学生 Female ……… 教师表:teacher_t id name sex 001吴老师 Male 002郑老师 Male 003王老师 Male

数据库面试题整理

数据库部分 1、数据库三范式是什么? 第一范式(1NF): 字段具有原子性,不可再分。所有关系型数据库系统都满足第一范式)数据库表中的字段都是单一属性的,不可再分。例如,姓名字段,其中的姓和名必须作为一个整体,无法区分哪部分是姓,哪部分是名,如果要区分出姓和名,必须设计成两个独立的字段。 第二范式(2NF): 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。要求数据库表中的每个实例或行必须可以被惟一地区分。通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键。第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。 第三范式(3NF): 满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。 所以第三范式具有如下特征: 1,每一列只有一个值 2,每一行都能区分。 3,每一个表都不包含其他表已经包含的非主关键字信息。 例如,帖子表中只能出现发帖人的id,而不能出现发帖人的id,还同时出现发帖人姓名,否则,只要出现同一发帖人id的所有记录,它们中的姓名部分都必须严格保持一致,这就是数据冗余。 2、说出一些数据库优化方面的经验? 1、关键字段建立索引。 2、使用存储过程,它使SQL变得更加灵活和高效。 3、备份数据库和清除垃圾数据。 4、SQL语句语法的优化。 5、清理删除日志。

数据库面试题 4

数据库面试题 4 第一章: 1)E-R模型的组成包括以下的元素,除了(C)。(选择一项) a) 实体 b) 属性 c) 记录 d) 关系 2) 你为公司开发了一个逻辑模型:公司有10个部门,每个部门有6-7个员工,但每个员工可能会不止一个部门工作。下面所给的模型正确的是(B)。(选择一项) a) 部门和员工之间是一种确定的一对多的关系 b) 建立一个关联表,从该关联表到员工建立一个一对多的关系,然后再从该关 联表到部门表建立一个一对多的关系 c) 建立一个关联表,从员工表到该关联表建立一个一对多的关系,然后再从部 门表到该关联表建立一个一对多的关系 d) 这种情况不能建立正常的数据库模型 3) 下面(C)不是数据库规范化要达到的效果.(选择一项) a) 改善数据库的设计 b) 实现最小的数据冗余 c) 可以用一个表来存储所有数据,使设计及存储更加简化 d) 防止更新,插入及删除的时候,产生数据丢失 4) (A)是个人能看到的相关数据库部分的数据库视图。(选择一项) a) 外部级别 b) 逻辑级别 c) 用户级别 d) 物理级别 5) 在某ERD里有“客户”和“订单”两个实体,他们的关系是“客户”发出“订单”,在“订单”这个实体里又有“订购数量”、“产品代码”等属性,“产品”与“产品代码”之间的关系应该是(B)。(选择一项) a) 一对一 b) 一对多 c) 多对多 d) 循环对应 6) 在ACCESS数据库表设计的时候,某用户在设计视图的有效性规则中设置为[get score]>[average score],则此用户用的是(C)类型的检查约束。(选择一项) a) 字段值 b) 记录级 c) 表级 d) 平均值 第二章:T-SQ程序设计 1) 使用T-SQL定义两个局部变量AA和BB,正确的语句是(A).(选择一项) a) DECLARE@AA,@BB b) PIRVTE@AA;@BB c) PUBLIC@AA;@BB d) DECLARE@AA;@BB 第三章:事务和锁

SQL经典面试题及答案

SQL经典面试题及答案 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语句? 胜负 2005-05-09 2 2 2005-05-10 1 2 ------------------------------------------ create table #tmp(rq varchar(10),shengfu nchar(1)) insert into #tmp values('2005-05-09','胜') insert into #tmp values('2005-05-09','胜') insert into #tmp values('2005-05-09','负') insert into #tmp values('2005-05-09','负') insert into #tmp values('2005-05-10','胜') insert into #tmp values('2005-05-10','负') insert into #tmp values('2005-05-10','负') 1)select rq, sum(case when shengfu='胜' then 1 else 0 end)'胜',sum(case when shengfu='负' then 1 else 0 end)'负' from #tmp group by rq 2) select N.rq,N.勝,M.負 from ( select rq,勝=count(*) from #tmp where shengfu='胜'group by rq)N inner join (select rq,負=count(*) from #tmp where shengfu='负'group by rq)M on N.rq=M.rq 3)select a.col001,a.a1 胜,b.b1 负 from (select col001,count(col001) a1 from temp1 where col002='胜' group by col001) a, (select col001,count(col001) b1 from temp1 where col002='负' group by col001) b where a.col001=b.col001 2.请教一个面试中遇到的SQL语句的查询问题

数据库面试题(SQLSERVER)及答案

数据库面试题(SQL2005) 一、选择题(5分一题,共50分) 1、公司A使用SQL Server 2005数据库。来自贸易伙伴的客户数据每天晚上都要导入到客户表。你要确保,在导入的过程中,对于存在的客户数据进行更新、对于不存在的客户数据进行插入。你该怎么做?(B) A. 创建一个FOR触发器。 B. 创建一个INSTEAD OF 触发器。 C. 创建一个 AFTER 触发器。 D. 创建一个 DDL 触发器。 2、你负责维护你们部门SQL Server 2005数据库的调度作业。其中一个作业从多源为报表聚集数据。这个作业每日运行,由多步构成。每一步都为某一特定报表聚集数据。有用户反映一些报表的数据近期没有更新。你要确保即使发生错误,聚合数据作业的每一步也都要执行。那你该如何做?(C) A. 将作业中所有步骤组合成一个每日运行的步骤。 B. 创建一个通知;在每次出现错误时通知你。以便你能及时更正错误,重启作业。 C. 修改失败使要执行的步骤为“转到下一步”。 D. 设置作业重试当前步骤。 3、你要创建一个SQL Server 2005应用程序来存储和管理法律文件。原文件以XML文档存于一文件服务器上。此应用程序用于将文件插入到数据库。此后,这些文档必须能够从数据库中得到,并与原文件保持一致。你要设计一个表去存储这些文档数据,该怎样做?(A) A. 将XML文档存于以nvarchar(max)为数据类型的一列中。 B. 分割此XML文档并将其存储于在一个关系结构中。 C. 将XML文档存于以XML为数据类型的一列中。 D. 将XML文档存于以varchar(8000)为数据类型的一列中。 4、你正在写一个查询,从SQL Server 2005数据库表中返回数据。一些数据存储在关系列中,一些存储在XML数据类型列中。你的查询需要返回一个关系结果集,其中包含关系域中的数据以及XML数据类型列的属性值。你应该使用XML数据类型的哪两个方法?(每一个正确的答案代表方案的一部分。选两项。)(AD) A. the value() 方法。 B. the exist()方法。 C. the query()方法。 D. the nodes()方法。 E. the modify()方法。 5、你配置一个采用默认设置全新安装的SQL SERVER 2005计算机使用TCP/IP协议。公司的安全策略也要求每个服务器都使用防火墙。你发现在本地计算机上可以连接到这个SQL SERVER 实例,但是客户端计算机却不能连接到这个SQL SERVER 实例上。为了找到最有可能导致这个连接问题的原因,你首先应该做?(A) A. 检查防火墙是否打开了1433端口。 B. 检查防火墙是否打开了433端口。

常见SQL数据库面试题和答案(一)

常见SQL数据库面试题和答案(一) Student(S#,Sname,Sage,Ssex) 学生表 S#:学号;Sname:学生姓名;Sage:学生年龄;Ssex:学生性别 Course(C#,Cname,T#) 课程表 C#,课程编号;Cname:课程名字;T#:教师编号 SC(S#,C#,score) 成绩表 S#:学号;C#,课程编号;score:成绩 Teacher(T#,Tname) 教师表 T#:教师编号; Tname:教师名字 问题: 1、查询“001”课程比“002”课程成绩高的所有学生的学号; select a.S# from (select s#,score from SC where C#='001') a,(select s#,score from SC where C#='002') b where a.score>b.score and a.s#=b.s#; 2、查询平均成绩大于60分的同学的学号和平均成绩; select S#,avg(score) from sc group by S# having avg(score) >60; 3、查询所有同学的学号、姓名、选课数、总成绩; select Student.S#,Student.Sname,count(SC.C#),sum(score) from Student left Outer join SC on Student.S#=SC.S# group by Student.S#,Sname 4、查询姓“李”的老师的个数; select count(distinct(Tname)) from Teacher where Tname like '李%'; 5、查询没学过“叶平”老师课的同学的学号、姓名; select Student.S#,Student.Sname from Student where S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平'); 6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名; select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002'); 7、查询学过“叶平”老师所教的所有课的同学的学号、姓名; select S#,Sname from Student where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher where Teacher.T#=Course.T# and Tname='叶平'));

相关文档
相关文档 最新文档