(7)在科研人员表中追加一个科研者(53,DAIHONG,DOCTOR,MALE,TIANJIN)。 (8)删除51号科研人员的所有科研课题。
(9)修改203号课题的课题经费为120万元。 (10)把52号科研人员的工作量减少10%。 11. 有以下三个关系:
SALESPERSON(销售人员)
Name Age Salary Abel 63 120,000 Baker 38 42,000 Jones 26 36,000 Murphy 42 50,000 Zenith 59 118,000 Kobad 27 34,000 ORDER(定单) Number CustName SalespersonName Amount 100 Abernathy Construction Zenith 560 200 Abernathy Construction Jones 1800 300 Manchester Lumber Abel 480 400 Amalgamated Housing Abel 2500 500 Abernathy Construction Murphy 6000 600 Tri-city Builders Abel 700 700 Manchester Lumber Jones 150 CUSTOMER(顾客) Name City Industry Type Abernathy Construction Willow B Manchester Lumber Manchester F Tri-city Builders Memphis B Amalgamated Housing Memphis B (1) 显示所有Salespeople的Ages和salary。 (2) 显示所有Salespeople的Ages和salary但是去掉重复的行。 (3) 显示所有三十岁以下的Salespeople。 (4) 显示所有的和ABERNATHY CONSTRUCTION有订单的Salespeople。 (5) 显示所有的和ABERNATHY CONSTRUCTION没有订单的Salespeople,按工资的升序进行排列。 (6) 计算订单的数量。
(7) 计算有订单的客户的数量。 (8) 计算Salepeople的平均年龄。
(9) 显示年龄最大的Salepeople的年龄。 (10) 计算每一个Salepeople的订单数。
(11) 计算每一个Salepeople的订单数,结果只包括订单数量在500个以上的。 (12) 显示所有的和ABERNATHY CONSTRUCTION有订单的Salepeople的年龄和姓名,按年龄的降序进行排列(使
用子查询)。
(13) 显示所有的和ABERNATHY CONSTRUCTION有订单的Salepeople的年龄和姓名,按年龄的降序进行排列(使
用连接)。
(14) 显示和在MEMPHIS中的一个客户有订单的Salespeople的年龄(使用子查询)。 (15) 显示和在MEMPHIS中的一个客户有订单的Salespeople的年龄(使用连接)。 (16) 显示和在MEMPHIS中的所有公司的工业类型和公司所有订单的销售员的年龄。 (17) 显示有两个或两个以上订单的销售员的姓名。
(18) 显示有两个或两个以上订单的销售员的姓名和年龄。 (19) 显示所有和客户有订单的销售员的姓名。
(20) 写出在CUSTOMER表中添加一条记录的SQL语句。
(21) 写出在SALESPERSON表中添加一条记录的SQL语句,已知年龄和姓名,工资未知。 (22) 写出删除客户ABERNATHY CONSTRUCTION的SQL语句。 (23) 写出删除客户ABERNATHY CONSTRUCTION的所有订单SQL语句。 (24) 写出将销售员JONES的工资改成45000的SQL语句。
26
(25) 写出将所有的销售员的工资加10%的SQL语句。
(26) 假设销售员JONES的名字改成PARKS,写出对应的SQL语句。
参考答案
1. 答案:
DDL(数据定义)语句,包括: CREATE 语句:创建和定义数据对象 ALTER语句:修改数据对象的定义 DROP语句:删除数据对象 DCL(数据控制)语句,包括: GRANT语句,授权对象的访问权限 REVOKE语句,收回对象的访问权限 DENY语句,禁止对象的访问权限 DML(数据操作)语句,包括:
SELECT语句,从表或视图中查询数据 INSERT 语句,向表中插入数据 DELETE语句,删除表中的数据 UPDATE语句,更新表中的数据
2. 答案:
T-SQL 局部变量是可以保存特定类型的单个数据值的对象。批处理和脚本中的变量通常用于:
? 作为计数器计算循环执行的次数或控制循环执行的次数。 ? 保存数据值以供控制流语句测试。
? 保存由存储过程返回代码返回的数据值。
Transact-SQL 全局变量能够反映系统的运行状态,为函数形式,在SQL SERVER 2000中作为函数引用。 有关更多信息,请参见函数。
3. 在Student数据库中,有以下关系表
字段名 StudentID StudentCode StudentName Sex Phone Address Parent Birthdate Remark RegisterDate 学生表(Student)基本数据表的字段 类型 长度 Int (Identity) Char 8 Varchar 20 Bit Varchar 20 Varchar 100 Varchar 20 Smalldatetime Varchar 500 Datetime 成绩表(Score)基本数据的字段 长度 小数位 8 1 5 1 5 1 5 1 5 1 5 1
字段名 StudentCode ExamType Chinese Math English Physics Chemist 类型 Char Char Decimal Decimal Decimal Decimal Decimal 其中:“ExamType”(考试类别)一列的代码为: 1——第一次月考 4——期末考
2——第二次月考 5——第一次小考 3——第三次月考 6——第二次小考 创建表: CREATE TABLE Student (
27
StudentID int identity(1,1) StudentCode Char(8)
StudentName Varchar (20), Phone Varchar (20), Address Varchar (100), Parent Varchar (20), Birthdate Smalldatetime , Photo Image ,
Remark Varchar (500), RegisterDate Datetime )
CREATE TABLE Score (
StudentCode Char(8), ExamType Char(1), Chinese Decimal (5,1), Math Decimal (5,1), English Decimal (5,1), Physics Decimal (5,1), Chemist Decimal (5,1) )
录入数据
(1) 在查询分析器中执行sp_help Student 存储过程和sp_help Score 存储过程可以查看Student和Score表的定
义。
Exec sp_help Student Exec sp_help Student
请按要求完成以下查询:
(2) 查询学生的列表,按照姓名的拼音顺序进行排序。
SELECT * FROM Student ORDER BY StudentName
(3) 查询姓“王”的同学。
SELECT * FROM Student
WHERE StudentName LIKE ?%王%?
(4) 查询出生日期在1986-10-1至1986-12-31日之间的所有学生。
SELECT * FROM Student
WHERE Birthdate BETWEEN ?1986-10-1? AND ?1986-12-31?
(5) 查询学生的考试成绩列表,按照数学、外语、物理的由高到低的顺序进行排序
SELECT * FROM Student
ORDER BY Math DESC, English DESC, Physics DESC
(6) 查询有不及格(<60分)科目的学生。
SELECT StudentName, Math ,English ,Physics,Chemist ,Chinese FROM Student LEFT JOIN Score
ON Score. StudentCode= Student. StudentCode
WHERE Math <60 OR English <60 OR Physics <60 OR Chemist <60 OR Chinese <60
(7) 计算每个学生的期末考试所有科目的总成绩,并按照总成绩由高到低的顺序进行排序
SELECT StudentName, (Math +English +Physics+Chemist +Chinese) AS Total FROM Student LEFT JOIN Score
ON Score. StudentCode= Student. StudentCode ORDER BY Total DESC
(8) 如查询的列名存在“空格”,例如某字段名称为“Student Name”在查询语句中应该如何处理?
SELECT “Student Name” FROM Student
(9) 删除编号为StudentID最大的学生,然后插入新的学生记录,观察StudentID (自增类型)列值的变化
DELETE FROM Student
WHERE StudentID =(SELECT MAX(StudentID) FROM Student) GO
28
4.
5.
6.
7.
8.
9.
INSERT INTO STUDENT(StudentCode,StudentName) VALUES(?001?,?TEST?)
(10) 使用T-SQL语句插入学生记录,获取系统当前日期和时间作为RegisterDate列的值。
INSERT INTO STUDENT(StudentCode,StudentName,RegisterDate) VALUES(?001?,?TEST?,getdate())
SQL SERVER中起注释作用的标记是哪些 SQL Server 支持两种类型的注释字符:
--。这些注释字符可与要执行的代码处在同一行。从双连字符开始到行尾均为注释。对于多行注释,必须在每个注释行的开始使用双连字符。 /* ... */。这些注释字符可与要执行的代码处在同一行,也可另起一行,甚至在可执行代码内。从开始注释对 (/*) 到结束注释对 (*/) 之间的全部内容均视为注释部分。对于多行注释,必须使用开始注释字符对 (/*) 开始注释,使用结束注释字符对 (*/) 结束注释。注释行上不应出现其它注释字符。
简述T-SQL语句聚合函数有哪些作用是什么?
聚合函数是对一组行中的某个列执行计算,并返回单个值。 常用聚合函数包括: SUM() 列值的合计 COUNT()列值的计数 AVG() 列值的平均值 MAX() 列中最大的值 MIN() 列中最小的值
分别简述内连接和左外连接查询的工作方式以及区别
外连接:外连接会返回 FROM 子句中提到的至少一个表或视图的所有行。
左外连接执行时,检索通过左外联接引用的左表的所有行,以及通过右向外联接引用的右表的所有行 右外连接执行时,检索通过右外联接引用的右表的所有行,以及通过左向外联接引用的左表的所有行 思考并简述在哪些情况下应该使用左外联结,哪些情况下使用内连接
仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行。内联接消除与另一个表中的任何行不匹配的行。而外联接会返回 FROM 子句中提到的至少一个表或视图的所有行。 如果希望显示两个表中按某一条件匹配的数据行,请使用内连接。
如希望显示某一表中所有的数据行,使用左外连接,并将该表放在LEFT关键字左边,即左外联接引用表,也称为 “左表”
简述子查询的工作方式
子查询是一个 SELECT 查询,它返回单个值且嵌套在 SELECT、INSERT、UPDATE、DELETE 语句或其它子查询中。
任何允许使用表达式的地方都可以使用子查询。
外部查询可以使用子查询生成的结果集,包括查询子查询返回的结果集和与结果集中的数据进行比较 在Product数据库中,具体表结构和数据如下所示:
PART(零件表) PNO(零件号) PNAME(零件名称) QUTY(库存量) 101 CAM 150 102 BOLT 300 105 GEAR 50 203 BELT 30 207 WHEEL 120 215 WASHER 1300 QUATATIONS(报价表) SNO PNO PRICE(报价) D_TIME(供货时间) DELIQUTY(供货量) 51 101 25 10 50 51 105 42 15 100 52 101 20 15 75 52 203 13 7 50 58 102 9 5 200 67 207 34 12 0 67 215 4 3 500 69 105 36 20 40 69 203 15 10 30 29
SNO 51 52 58 67 69 75 SUPPLIERS(供应商表) SNAME CITY LIMING BEIJING XINGHUA TIANJIN KEHAI BEIJING VESAM SHANGHAI SMITH SHANGHAI HUAHE BEIJING
CREATE TABLE PART (
PNO INT , PNAME VARCHAR(10), QUTY INT )
CREATE TABLE QUATATIONS (
SNO INT, PNO INT, PRICE INT, D_TIME INT, DELIQUTY INT, )
CREATE TABLE SUPPLIERS (
SNO INT ,
SNAME VARCHAR(10), CITY VARCHAR(10) )
按要求完成以下需求:
(1) 计算SUPPLIERS(供应商)表中,每个城市有多少格供应商
SELECT CITY,COUNT(SNAME) FROM SUPPLIERS GROUP BY CITY
(2) 什么SQL 语句提供了复制表结构以及表表中数据的方法?
SELECT ….INTO语句
SELECT * FROM SUPPLIERS INTO SUPPLIERS2
(3) 使用Case…when语句更新QUATATIONS(报价表),价格小于10元的零件价格上调5%,价格高于30元的零
件价格上调10%,价格介于10-30元之间的零件价格上调15% UPDATE QUATATIONS CASE
WHEN price <10 THEN price*1.05 WHEN (price>10 and price <30) THEN price*1.15 WHEN price >30 THEN price*1.10 END
(4) 使用Case…when查询学生的数学,查询类表为:StudentName, Math,Type。其中Type列按照数学成绩90、80、
70、60几种情况显示优、良、中、及格、不及格5个类型。 SELECT StudentName, Math, CASE WHEN Math>=90 THEN ?优? WHEN Math>=80 AND Math<90 THEN ?良?
WHEN Math>=70 AND Math<80 THEN ?中? WHEN Math>=60 AND Math<70 THEN ?及格? WHEN Math<50 THEN ?不及格? END AS Type FROM student INNER JOIN score
ON Student. Studentcode =Score.Studentcode
30