久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

sql試題大全

時間:2019-05-14 18:16:03下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《sql試題大全》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《sql試題大全》。

第一篇:sql試題大全

INNER JOIN操作

INNER JOIN操作用于組合兩個表中的記錄,只要在公共字段之中有相符的值。可以在任何的 FROM 子句中使用 INNER JOIN 運算。這是最普通的聯接類型。只要在這兩個表的公共字段之中有相符值,內部聯接將組合兩個表中的記錄。語法:FROM table1 INNER JOIN table2 ON table1.field1 compopr table2.field2 說明:table1, table2參數用于指定從其中組合記錄的表的名稱。

field1, field2參數指定被聯接字段的名稱。如果這些字段不是數值的,被聯接的字段必須是相同的數據類型,并且包含相同類型的數據,但是它們不必名稱相同。

compopr參數用于指定關系比較運算符,如:“=”,“<”,“>”,“<=”,“>=”,或 “<>”。

如果在INNER JOIN操作中要聯接包含Memo 數據類型或 OLE Object 數據類型數據的字段,將會發生錯誤。在一個 INNER JOIN 之中,可以嵌套 LEFT JOIN 或 RIGHT JOIN,但是在 LEFT JOIN 或 RIGHT JOIN 中不能嵌套 INNER JOIN。

LEFT JOIN操作

LEFT JOIN操作用于在任何的 FROM 子句中,組合來源表的記錄。使用 LEFT JOIN 運算來創建一個左邊外部聯接。左邊外部聯接將包含了從第一個(左邊)開始的兩個表中的全部記錄,即使在第二個(右邊)表中并沒有相符值的記錄。語法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2 說明:table1, table2參數用于指定要將記錄組合的表的名稱。

field1, field2參數指定被聯接的字段的名稱。且這些字段必須有相同的數據類型及包含相同類型的數據,但它們不需要有相同的名稱。

compopr參數指定關系比較運算符:“=”,“<”,“>”,“<=”,“>=” 或 “<>”。如果在INNER JOIN操作中要聯接包含Memo 數據類型或 OLE Object 數據類型數據的字段,將會發生錯誤。

RIGHT JOIN操作

RIGHT JOIN操作用于在任何的 FROM 子句中,組合來源表的記錄。使用 RIGHT JOIN 運算創建一個右邊外部聯接。右邊外部聯接將包含了從第二個(右邊)開始的兩個表中的全部記錄,即使在第一個(左邊)表中并沒有匹配值的記錄。語法:FROM table1 RIGHT JOIN table2 ON table1.field1 compopr table2.field2 說明:table1, table2參數用于指定要將記錄組合的表的名稱。

field1, field2參數指定被聯接的字段的名稱。且這些字段必須有相同的數據類型及包含相同類型的數據,但它們不需要有相同的名稱。

compopr參數指定關系比較運算符:“=”,“<”,“>”,“<=”,“>=” 或 “<>”。如果在INNER JOIN操作中要聯接包含Memo 數據類型或 OLE Object 數據類型數據的字段,將會發生錯誤。

你可以把存儲過程當做:把一系列語句合并到一起的這么一個整體

我覺得舉例說明比較好,給你個例子:

先將【表1】中ID號為50—2000的記錄刪除、再將【表2】中的這些記錄的狀態(STATUS)改為“已解除”:

delete 表1 where ID > 50 and ID < 2000

update 表2 set STATUS = '已解除' where ID > 50 and ID < 2000

正常情況下,以上兩條語句分步執行就可以了,如果要用存儲過程呢?

先建立存儲過程(以下的語法為Sybase數據庫的,其他數據庫類同):

create procedure PRC_TEST(@start_ID int, @end_ID int)as

begin

delete 表1 where ID > @start_ID and ID < @end_ID

update 表2 set STATUS = '已解除' where ID > @start_ID and ID < @end_ID end

好了,執行這個語句,就將存儲過程PRC_TEST提交到數據庫里了,它有兩個參數:start_ID int 和 end_ID,代表起始和終止ID號,類型為整數型int

怎么用這個存儲過程呢? 這樣執行:exc PRC_TEST 50, 2000

執行時,它先得到了兩個參數,50、2000,分別賦值給start_ID int 和 end_ID,然后按照這兩個參數分步執行封裝在存儲過程里的那兩條語句了。

如果你這樣執行:exc PRC_TEST 220, 8660

就是處理兩個表中ID介于220—8660之間的記錄了。

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

你也許會問了,既然可以分步執行的幾句SQL,為什么要費力的寫成存儲過程啊?

主要是(我的經驗和認識):

1、使數據處理參數化,對經常使用的一系列SQL進行封裝,使其成為一個存儲過程的整體,在每次執行時只要更換執行參數即可,不用去改里面每句SQL的where子句

2、★★這個很重要★★,假設你要循環處理某些數據,例如需要使用“游標”、“Do...while...語句”…………時,就要用到存儲過程(或觸發器)

=======================

最后給你轉一個短文吧,這是書面上的概念:

將常用的或很復雜的工作,預先用SQL語句寫好并用一個指定的名稱存儲起來, 那么以后要叫數據庫提供與已定義好的存儲過程的功能相同的服務時,只需調用execute,即可自動完成命令。

那么存儲過程與一般的SQL語句有什么區別呢? 存儲過程的優點:

1.存儲過程只在創造時進行編譯,以后每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高數據庫執行速度。

2.當對數據庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復雜操作用存儲過程封裝起來與數據庫提供的事務處理結合一起使用。

3.存儲過程可以重復使用,可減少數據庫開發人員的工作量

4.安全性高,可設定只有某此用戶才具有對指定存儲過程的使用權

存儲過程的種類:

1.系統存儲過程:以prc_(或sp_)開頭,用來進行系統的各項設定.取得信息.相關管理工作, 如 sp_help就是取得指定對象的相關信息

2.擴展存儲過程 以XP_開頭,用來調用操作系統提供的功能

exec master..xp_cmdshell 'ping 10.8.16.1'

3.用戶自定義的存儲過程,這是我們所指的存儲過程

測試table create table table1(id int,name char)insert into table1 select 1,'q' union all select 2,'r' union all select 3,'3' union all select 4,'5'

要求按指定的id順序(比如2,1,4,3)排列獲取table1的數據

方法1:使用union all,但是有256條數據的限制 select id,name from table1 where id=2 union all select id,name from table1 where id=1 union all select id,name from table1 where id=4 union all select id,name from table1 where id=3

方法2:在order by中使用case when select id ,name from t where id in(2,1,4,3)order by(case id when 2 then 'A' when 1 then 'B' when 4 then 'C' when 3 then 'D' end)

*以上兩種方法適合在數據量非常小的情況下使用

方法3:使用游標和臨時表

先建一個輔助表,里面你需要的順序插入,比如2,1,4,3 create table t1(id int)insert into t1 select 2 union all select 1 union all select 4 union all select 3 declare @id int--定義游標 declare c_test cursor for select id from t1

select * into #tmp from table1 where 1=2--構造臨時表的結構 OPEN c_test FETCH NEXT FROM c_test INTO @id WHILE @@FETCH_STATUS = 0 BEGIN--按t1中的id順序插數據到臨時表

insert into #tmp select id,name from table1 where id=@id FETCH NEXT FROM c_test INTO @id End Close c_test deallocate c_test

*該方法適合需要按照輔助表的順序重排table的順序時使用 方法4:分割字符串參數

select * into #tmp from table1 where 1=2--構造臨時表的結構 declare @str varchar(300),@id varchar(300),@m int,@n int set @str='2,1,4,3,'---注意后面有個逗號 set @m=CHARINDEX(',',@str)set @n=1 WHILE @m>0 BEGIN set @id=substring(@str,@n,@m-@n)--print @id insert into #tmp select id,name from table1 where id=convert(int,@id)set @n=@m+1 set @m=CHARINDEX(',',@str,@n)END *該方法比較有通用性

測試結果

id name---------------2 r 1 q 4 5 3 3

本文較長,包含了如下幾部分

1.2.3.4.5.使用不帶參數的存儲過程 使用帶有輸入參數的存儲過程

使用帶有輸出參數的存儲過程

使用帶有返回狀態的存儲過程

使用帶有更新計數的存儲過程

1使用不帶參數的存儲過程

使用 JDBC 驅動程序調用不帶參數的存儲過程時,必須使用 call SQL 轉義序列。不帶參數的 call 轉義序列的語法如下所示: {call procedure-name} 作為實例,在 SQL Server 2005 AdventureWorks 示例數據庫中創建以下存儲過程:

CREATE PROCEDURE GetContactFormalNames AS BEGIN

SELECT TOP 10 Title + ' ' + FirstName + ' ' + LastName AS FormalName FROM Person.Contact END

此存儲過程返回單個結果集,其中包含一列數據(由 Person.Contact 表中前十個聯系人的稱呼、名稱和姓氏組成)。

在下面的實例中,將向此函數傳遞 AdventureWorks 示例數據庫的打開連接,然后使用 executeQuery 方法調用 GetContactFormalNames 存儲過程。

public static void executeSprocNoParams(Connection con){ try { Statement stmt = con.createStatement();ResultSet rs = stmt.executeQuery(“{call dbo.GetContactFormalNames}”);

while(rs.next()){ System.out.println(rs.getString(“FormalName”));} rs.close();stmt.close();} catch(Exception e){ e.printStackTrace();} } 2使用帶有輸入參數的存儲過程

使用 JDBC 驅動程序調用帶參數的存儲過程時,必須結合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉義序列。帶有 IN 參數的 call 轉義序列的語法如下所示:

{call procedure-name[([parameter][,[parameter]]...)]}

構造 call 轉義序列時,請使用 ?(問號)字符來指定 IN 參數。此字符充當要傳遞給該存儲過程的參數值的占位符。可以使用 SQLServerPreparedStatement 類的 setter 方法之一為參數指定值。可使用的 setter 方法由 IN 參數的數據類型決定。向 setter 方法傳遞值時,不僅需要指定要在參數中使用的實際值,還必須指定參數在存儲過程中的序數位置。例如,如果存儲過程包含單個 IN 參數,則其序數值為 1。如果存儲過程包含兩個參數,則第一個序數值為 1,第二個序數值為 2。作為如何調用包含 IN 參數的存儲過程的實例,使用 SQL Server 2005 AdventureWorks 示例數據庫中的 uspGetEmployeeManagers 存儲過程。此存儲過程接受名為 EmployeeID 的單個輸入參數(它是一個整數值),然后基于指定的 EmployeeID 返回雇員及其經理的遞歸列表。下面是調用此存儲過程的 Java 代碼:

public static void executeSprocInParams(Connection con){ try { PreparedStatement pstmt = con.prepareStatement(“{call dbo.uspGetEmployeeManagers(?)}”);pstmt.setInt(1, 50);ResultSet rs = pstmt.executeQuery();while(rs.next()){ System.out.println(“EMPLOYEE:”);System.out.println(rs.getString(“LastName”)+ “, ” + rs.getString(“FirstName”));System.out.println(“MANAGER:”);System.out.println(rs.getString(“ManagerLastName”)+ “, ” + rs.getString(“ManagerFirstName”));System.out.println();} rs.close();pstmt.close();} catch(Exception e){ e.printStackTrace();} } 3使用帶有輸出參數的存儲過程

使用 JDBC 驅動程序調用此類存儲過程時,必須結合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉義序列。帶有 OUT 參數的 call 轉義序列的語法如下所示:

{call procedure-name[([parameter][,[parameter]]...)]}

構造 call 轉義序列時,請使用 ?(問號)字符來指定 OUT 參數。此字符充當要從該存儲過程返回的參數值的占位符。要為 OUT 參數指定值,必須在運行存儲過程前使用 SQLServerCallableStatement 類的 registerOutParameter 方法指定各參數的數據類型。

使用 registerOutParameter 方法為 OUT 參數指定的值必須是 java.sql.Types 所包含的 JDBC 數據類型之一,而它又被映射成本地 SQL Server 數據類型之一。有關 JDBC 和 SQL Server 數據類型的詳細信息,請參閱了解 JDBC 驅動程序數據類型。

當您對于 OUT 參數向 registerOutParameter 方法傳遞一個值時,不僅必須指定要用于此參數的數據類型,而且必須在存儲過程中指定此參數的序號位置或此參數的名稱。例如,如果存儲過程包含單個 OUT 參數,則其序數值為 1;如果存儲過程包含兩個參數,則第一個序數值為 1,第二個序數值為 2。

作為實例,在 SQL Server 2005 AdventureWorks 示例數據庫中創建以下存儲過程: 根據指定的整數 IN 參數(employeeID),該存儲過程也返回單個整數 OUT 參數(managerID)。根據 HumanResources.Employee 表中包含的 EmployeeID,OUT 參數中返回的值為 ManagerID。

在下面的實例中,將向此函數傳遞 AdventureWorks 示例數據庫的打開連接,然后使用 execute 方法調用 GetImmediateManager 存儲過程:

public static void executeStoredProcedure(Connection con){ try { CallableStatement cstmt = con.prepareCall(“{call dbo.GetImmediateManager(?, ?)}”);cstmt.setInt(1, 5);cstmt.registerOutParameter(2, java.sql.Types.INTEGER);cstmt.execute();System.out.println(“MANAGER ID: ” + cstmt.getInt(2));} catch(Exception e){ e.printStackTrace();} } 本示例使用序號位置來標識參數。或者,也可以使用參數的名稱(而非其序號位置)來標識此參數。下面的代碼示例修改了上一個示例,以說明如何在 Java 應用程序中使用命名參數。請注意,這些參數名稱對應于存儲過程的定義中的參數名稱:

CREATE PROCEDURE GetImmediateManager @employeeID INT, @managerID INT OUTPUT AS BEGIN

SELECT @managerID = ManagerID FROM HumanResources.Employee WHERE EmployeeID = @employeeID END

存儲過程可能返回更新計數和多個結果集。Microsoft SQL Server 2005 JDBC Driver 遵循 JDBC 3.0 規范,此規范規定在檢索 OUT 參數之前應檢索多個結果集和更新計數。也就是說,應用程序應先檢索所有 ResultSet 對象和更新計數,然后使用 CallableStatement.getter 方法檢索 OUT 參數。否則,當檢索 OUT 參數時,尚未檢索的 ResultSet 對象和更新計數將丟失。使用帶有返回狀態的存儲過程

使用 JDBC 驅動程序調用這種存儲過程時,必須結合 SQLServerConnection 類的 prepareCall 方法使用 call SQL 轉義序列。返回狀態參數的 call 轉義序列的語法如下所示:

{[?=]call procedure-name[([parameter][,[parameter]]...)]}

構造 call 轉義序列時,請使用 ?(問號)字符來指定返回狀態參數。此字符充當要從該存儲過程返回的參數值的占位符。要為返回狀態參數指定值,必須在執行存儲過程前使用 SQLServerCallableStatement 類的 registerOutParameter 方法指定參數的數據類型。

此外,向 registerOutParameter 方法傳遞返回狀態參數值時,不僅需要指定要使用的參數的數據類型,還必須指定參數在存儲過程中的序數位置。對于返回狀態參數,其序數位置始終為 1,這是因為它始終是調用存儲過程時的第一個參數。盡管 SQLServerCallableStatement 類支持使用參數的名稱來指示特定參數,但您只能對返回狀態參數使用參數的序號位置編號。

作為實例,在 SQL Server 2005 AdventureWorks 示例數據庫中創建以下存儲過程:

CREATE PROCEDURE CheckContactCity(@cityName CHAR(50))AS BEGIN

IF((SELECT COUNT(*)FROM Person.Address WHERE City = @cityName)> 1)RETURN 1 ELSE

RETURN 0 END

該存儲過程返回狀態值 1 或 0,這取決于是否能在表 Person.Address 中找到 cityName 參數指定的城市。

在下面的實例中,將向此函數傳遞 AdventureWorks 示例數據庫的打開連接,然后使用 execute 方法調用 CheckContactCity 存儲過程:

public static void executeStoredProcedure(Connection con){ try { CallableStatement cstmt = con.prepareCall(“{? = call dbo.CheckContactCity(?)}”);cstmt.registerOutParameter(1, java.sql.Types.INTEGER);cstmt.setString(2, “Atlanta”);cstmt.execute();System.out.println(“RETURN STATUS: ” + cstmt.getInt(1));} cstmt.close();catch(Exception e){ e.printStackTrace();} } 5 使用帶有更新計數的存儲過程 使用 SQLServerCallableStatement 類構建對存儲過程的調用之后,可以使用 execute 或 executeUpdate 方法中的任意一個來調用此存儲過程。executeUpdate 方法將返回一個 int 值,該值包含受此存儲過程影響的行數,但 execute 方法不返回此值。如果使用 execute 方法,并且希望獲得受影響的行數計數,則可以在運行存儲過程后調用 getUpdateCount 方法。

作為實例,在 SQL Server 2005 AdventureWorks 示例數據庫中創建以下表和存儲過程:

CREATE TABLE TestTable(Col1 int IDENTITY, Col2 varchar(50), Col3 int);

CREATE PROCEDURE UpdateTestTable @Col2 varchar(50), @Col3 int AS BEGIN

UPDATE TestTable SET Col2 = @Col2, Col3 = @Col3 END;在下面的實例中,將向此函數傳遞 AdventureWorks 示例數據庫的打開連接,并使用 execute 方法調用 UpdateTestTable 存儲過程,然后使用 getUpdateCount 方法返回受存儲過程影響的行計數。

public static void executeUpdateStoredProcedure(Connection con){ try { CallableStatement cstmt = con.prepareCall(“{call dbo.UpdateTestTable(?, ?)}”);cstmt.setString(1, “A”);cstmt.setInt(2, 100);cstmt.execute();int count = cstmt.getUpdateCount();cstmt.close();

System.out.println(“ROWS AFFECTED: ” + count);} catch(Exception e){ e.printStackTrace();} }

1.sql存儲過程概述

在大型數據庫系統中,存儲過程和觸發器具有很重要的作用。無論是存儲過程還是觸發器,都是SQL 語句和流程控制語句的集合。就本質而言,觸發器也是一種存儲過程。存儲過程在運算時生成執行方式,所以,以后對其再運行時其執行速度很快。SQL Server 2000 不僅提供了用戶自定義存儲過程的功能,而且也提供了許多可作為工具使用的系統存儲過程。

存儲過程的概念

存儲過程(Stored Procedure)是一組為了完成特定功能的SQL 語句集,經編譯后存儲在數據庫。中用戶通過指定存儲過程的名字并給出參數(如果該存儲過程帶有參數)來執行它。

在SQL Server 的系列版本中存儲過程分為兩類:系統提供的存儲過程和用戶自定義存儲過程。系統過程主要存儲在master 數據庫中并以sp_為前綴,并且系統存儲過程主要是從系統表中獲取信息,從而為系統管理員管理SQL Server 提供支持。通過系統存儲過程,MS SQL Server 中的許多管理性或信息性的活動(如了解數據庫對象、數據庫信息)都可以被順利有效地完成。盡管這些系統存儲過程被放在master 數據庫中,但是仍可以在其它數據庫中對其進行調用,在調用時不必在存儲過程名前加上數據庫名。而且當創建一個新數據庫時,一些系統存儲過程會在新數據庫中被自動創建。用戶自定義存儲過程是由用戶創建并能完成某一特定功能(如查詢用戶所需數據信息)的存儲過程。在本章中所涉及到的存儲過程主要是指用戶自定義存儲過程。

存儲過程的優點

當利用MS SQL Server 創建一個應用程序時,Transaction-SQL 是一種主要的編程語言。若運用Transaction-SQL 來進行編程,有兩種方法。其一是,在本地存儲Transaction-SQL 程序,并創建應用程序向SQL Server 發送命令來對結果進行處理。其二是,可以把部分用Transaction-SQL 編寫的程序作為存儲過程存儲在SQL Server 中,并創建應用程序來調用存儲過程,對數據結果進行處理存儲過程能夠通過接收參數向調用者返回結果集,結果集的格式由調用者確定;返回狀態值給調用者,指明調用是成功或是失敗;包括針對數據庫的操作語句,并且可以在一個存儲過程中調用另一存儲過程。

我們通常更偏愛于使用第二種方法,即在SQL Server 中使用存儲過程而不是在客戶計算機上調用Transaction-SQL 編寫的一段程序,原因在于存儲過程具有以下優點:

(1)存儲過程允許標準組件式編程

存儲過程在被創建以后可以在程序中被多次調用,而不必重新編寫該存儲過程的SQL 語句。而且數據庫專業人員可隨時對存儲過程進行修改,但對應用程序源代碼毫無影響(因為應用程序源代碼只包含存儲過程的調用語句),從而極大地提高了程序的可移植性。

(2)存儲過程能夠實現較快的執行速度

如果某一操作包含大量的Transaction-SQL 代碼或分別被多次執行,那么存儲過程要比批處理的執行速度快很多。因為存儲過程是預編譯的,在首次運行一個存儲過程時,查詢優化器對其進行分析、優化,并給出最終被存在系統表中的執行計劃。而批處理的Transaction-SQL 語句在每次運行時都要進行編譯和優化,因此速度相對要慢一些。

(3)存儲過程能夠減少網絡流量

對于同一個針對數據數據庫對象的操作(如查詢、修改),如果這一操作所涉及到的 Transaction-SQL 語句被組織成一存儲過程,那么當在客戶計算機上調用該存儲過程時,網絡中傳送的只是該調用語句,否則將是多條SQL 語句,從而大大增加了網絡流量,降低網絡負載。

(4)存儲過程可被作為一種安全機制來充分利用

系統管理員通過對執行某一存儲過程的權限進行限制,從而能夠實現對相應的數據訪問權限的限制,避免非授權用戶對數據的訪問,保證數據的安全。(我們將在14 章“SQLServer 的用戶和安全性管理”中對存儲過程的這一應用作更為清晰的介紹)

注意:存儲過程雖然既有參數又有返回值,但是它與函數不同。存儲過程的返回值只是指明執行是否成功,并且它不能像函數那樣被直接調用,也就是在調用存儲過程時,在存儲過程名字前一定要有EXEC保留字。

2.SQL存儲過程創建

創建存儲過程,存儲過程是保存起來的可以接受和返回用戶提供的參數的 Transact-SQL 語句的集合。

可以創建一個過程供永久使用,或在一個會話中臨時使用(局部臨時過程),或在所有會話中臨時使用(全局臨時過程)。

也可以創建在 Microsoft? SQL Server? 啟動時自動運行的存儲過程。

語法

CREATE PROC [ EDURE ] procedure_name [;number ]

[ { @parameter data_type }

[ VARYING ] [ = default ] [ OUTPUT ]

] [ ,...n ]

[ WITH

{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]

[ FOR REPLICATION ]

AS sql_statement [...n ]

參數

procedure_name

新存儲過程的名稱。過程名必須符合標識符規則,且對于數據庫及其所有者必須唯一。

要創建局部臨時過程,可以在 procedure_name 前面加一個編號符(#procedure_name),要創建全局臨時過程,可以在 procedure_name 前面加兩個編號符

(##procedure_name)。完整的名稱(包括 # 或 ##)不能超過 128 個字符。指定過程所有者的名稱是可選的。

;number

是可選的整數,用來對同名的過程分組,以便用一條 DROP PROCEDURE 語句即可將同組的過程一起除去。例如,名為 orders 的應用程序使用的過程可以命名為

orderproc;

1、orderproc;2 等。DROP PROCEDURE orderproc 語句將除去整個組。如果名稱中包含定界標識符,則數字不應包含在標識符中,只應在 procedure_name 前后使用適當的定界符。

@parameter

過程中的參數。在 CREATE PROCEDURE 語句中可以聲明一個或多個參數。用戶必須在執行過程時提供每個所聲明參數的值(除非定義了該參數的默認值)。存儲過程最多可以有 2.100 個參數。

使用 @ 符號作為第一個字符來指定參數名稱。參數名稱必須符合標識符的規則。每個過程的參數僅用于該過程本身;相同的參數名稱可以用在其它過程中。默認情況下,參數只能代替常量,而不能用于代替表名、列名或其它數據庫對象的名稱。

data_type

參數的數據類型。所有數據類型(包括 text、ntext 和 image)均可以用作存儲過程的參數。不過,cursor 數據類型只能用于 OUTPUT 參數。如果指定的數據類型為 cursor,也必須同時指定 VARYING 和 OUTPUT 關鍵字。

說明 對于可以是 cursor 數據類型的輸出參數,沒有最大數目的限制。

VARYING

指定作為輸出參數支持的結果集(由存儲過程動態構造,內容可以變化)。僅適用于游標參數。

default

參數的默認值。如果定義了默認值,不必指定該參數的值即可執行過程。默認值必須是常量或 NULL。如果過程將對該參數使用 LIKE 關鍵字,那么默認值中可以包含通配符(%、_、[] 和 [^])。

OUTPUT

表明參數是返回參數。該選項的值可以返回給 EXEC[UTE]。使用 OUTPUT 參數可將信息返回給調用過程。Text、ntext 和 image 參數可用作 OUTPUT 參數。使用 OUTPUT 關鍵字的輸出參數可以是游標占位符。

n

表示最多可以指定 2.100 個參數的占位符。

{RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}

RECOMPILE 表明 SQL Server 不會緩存該過程的計劃,該過程將在運行時重新編譯。在使用非典型值或臨時值而不希望覆蓋緩存在內存中的執行計劃時,請使用 RECOMPILE 選項。

ENCRYPTION 表示 SQL Server 加密 syscomments 表中包含 CREATE PROCEDURE 語句文本的條目。使用 ENCRYPTION 可防止將過程作為 SQL Server 復制的一部分發布。

說明 在升級過程中,SQL Server 利用存儲在 syscomments 中的加密注釋來重新創建加密過程。

FOR REPLICATION

指定不能在訂閱服務器上執行為復制創建的存儲過程。.使用 FOR REPLICATION 選項創建的存儲過程可用作存儲過程篩選,且只能在復制過程中執行。本選項不能和 WITH RECOMPILE 選項一起使用。

AS

指定過程要執行的操作。

sql_statement

過程中要包含的任意數目和類型的 Transact-SQL 語句。但有一些限制。

n

是表示此過程可以包含多條 Transact-SQL 語句的占位符。

注釋

存儲過程的最大大小為 128 MB。

用戶定義的存儲過程只能在當前數據庫中創建(臨時過程除外,臨時過程總是在 tempdb 中創建)。在單個批處理中,CREATE PROCEDURE 語句不能與其它 Transact-SQL 語句組合使用。

默認情況下,參數可為空。如果傳遞 NULL 參數值并且該參數在 CREATE 或 ALTER TABLE 語句中使用,而該語句中引用的列又不允許使用 NULL,則 SQL Server 會產生一條錯誤信息。為了防止向不允許使用 NULL 的列傳遞 NULL 參數值,應向過程中添加編程邏輯或為該列使用默認值(使用 CREATE 或 ALTER TABLE 的 DEFAULT 關鍵字)。

建議在存儲過程的任何 CREATE TABLE 或 ALTER TABLE 語句中都為每列顯式指定 NULL 或 NOT NULL,例如在創建臨時表時。ANSI_DFLT_ON 和 ANSI_DFLT_OFF 選項控制 SQL Server 為列指派 NULL 或 NOT NULL 特性的方式(如果在 CREATE TABLE 或 ALTER TABLE 語句中沒有指定的話)。如果某個連接執行的存儲過程對這些選項的設置與創建該過程的連接的設置不同,則為第二個連接創建的表列可能會有不同的為空性,并且表現出不同的行為方式。如果為每個列顯式聲明了 NULL 或 NOT NULL,那么將對所有執行該存儲過程的連接使用相同的為空性創建臨時表。

在創建或更改存儲過程時,SQL Server 將保存 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 的設置。執行存儲過程時,將使用這些原始設置。因此,所有客戶端會話的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 設置在執行存儲過程時都將被忽略。在存儲過程中出現的 SET QUOTED_IDENTIFIER 和 SET ANSI_NULLS 語句不影響存儲過程的功能。

其它 SET 選項(例如 SET ARITHABORT、SET ANSI_WARNINGS 或 SET ANSI_PADDINGS)在創建或更改存儲過程時不保存。如果存儲過程的邏輯取決于特定的設置,應在過程開頭添加一條 SET 語句,以確保設置正確。從存儲過程中執行 SET 語句時,該設置只在存儲過程完成之前有效。之后,設置將恢復為調用存儲過程時的值。這使個別的客戶端可以設置所需的選項,而不會影響存儲過程的邏輯。

第二篇:VF上機試題 SQL語言

VFP關系數據庫標準語言SQL

【機試】

[1] 在練習文件夾中有一個數據庫sdb,其中有數據庫表student2、sc和course2。3個表結構如下所示:

STUDENT2(學號,姓名,年齡,性別,院系編號)

SC(學號,課程號,成績,備注)

COURSE2(課程號,課程名,選修課號,學分)

用SQL語句查詢“計算機軟件基礎”課程的考試成績在85分以下(含85分)的學生的全部信息并將結果按學號升序存入noex.dbf文件中(表的結構同student2,并在其后加入成績字段)。答案: SELECT STUDENT2.*,成績 FROM STUDENT2,SC,COURSE2 WHERE

STUDENT2.學號=SC.學號

AND SC.課程號=COURSE2.課程號 AND 課程名=“計算機軟件

基礎” AND 成績<=85 ORDER BY STUDENT2.學號 INTO TABLE

NOEX。

[2] 將order_list1表中的全部記錄追加到order_list表中,然后用SQL SELECT語句完成查詢:按總金額降序列出所有客戶的客戶號、客戶名及其訂單號和總金額,并將結果存儲到results表中(其中客戶號、客戶名取自customer表,訂單號、總金額取自order_list表)答案:(1)SELECT * FROM ORDER_LIST1 INTO TABLE ORDER_LIST

(2)SELECT CUSTOMER.客戶號, ORDER_LIST.客戶名,訂單號,總金額 FROM CUSTOMER, ORDER_LIST WHERE CUSTOMER.客戶

號=ORDER_LIST.客戶號 ORDER BY 總金額DESC INTO TABLE

RESULTS.[3]將customer1表中的全部記錄追加到customer表中,然后用SQL SELECT語句完成查詢:列出目前有訂購單的客戶信息(即有對應的order_list記錄的customer表中的記錄),同時要求按客戶號升序排序,并將結果存儲到results表中(表結構與customer表結構相同)。

答案:SELECT * FROM CUSTOMER1 INTO TABLE CUSTOMER

SELECT * FROM CUSTOMER WHERE 客戶號 IN(SELECT 客戶號

FROM ORDER_LIST)ORDER BY 客戶號 INTO TABLE RESULTS

[4]列出總金額大于所有訂購單總金額平均值的訂購單(order_list)清單(按客戶號升序排列),并將結果存儲到results表中(表結構與order_list表結構相同)。

答案:SELECT * FROM ORDER_LIST WHERE 總金額>(SELECT AVG(總金額)FROM ORDER_LIST)ORDER BY 客戶號 INTO TABLE RESULTS.

第三篇:SQL數據庫期末復習試題 - 填空

三、填空題(每空1分,共20分)1.數據庫系統具有數據的___外模式____、__模式_____和內模式三級模式結構。2.SQL Server 2000局部變量名字必須以____@、_____開頭,而全局變量名字必須以______@@___開頭。

3.語句 select ascii('D'), char(67)的執行結果是:___68______和__C_______。68、C“,2 4.語句 select lower('Beautiful'), rtrim('我心中的太陽 ')的執行結果是: _beautiful____和___我心中的太陽_____。

5.選擇運算是根據某些條件對關系做_ 水平__分割;投影是根據某些條件對關系做____垂直”__分割。“ 6.關系運算主要有___選擇___、__投影__和連接。

7.完整性約束包括__實體__完整性、_域____性、參照完整性和用戶定義完整性。8.在SQL Server 2000中,數據庫對象包括__表__、___視圖__、觸發器、過程、列、索引、約束、規則、默認和用戶自定義的數據類型等。

9.語句 select day('2004-4-6'), len('我們快放假了.')的執行結果是:___6______和____7____。

10.語句 select round(13.4321,2), round(13.4567,3)的執行結果是:__13.4300_______和____13.4570_____。

11.完整性約束包括____域___完整性、__實體____完整性、參照完整性和用戶定義完整性。

12.T-SQL 語言中,有__算術__運算、字符串連接運算、比較運算和__邏輯__運算。

13.語句 select upper('beautiful'), ltrim(' 我心中的太陽')的執行結果是: ______ BEAUTIFUL __和__我心中的太陽___。

14.索引的類型主要有______聚集索引_______和____非聚集索引______。15.在SQL Server 2000中,數據庫對象包括數據表、_視圖___、__存儲過程_、觸發器、規則、默認和用戶自定義的數據類型等。

16.數據庫的數據模型包含__數據結構__、_數據操作_和__完整性約束_三個要素。

17.___ 域完整性___是指保證指定列的數據具有正確的數據類型、格式和有效的數據范圍。

18.___ 觸發器____是特殊類型的存儲過程,它能在任何試圖改變表中由觸發器保護的數據時執行。

19.事務(Transaction)可以看成是由對數據庫的若干操作組成的一個單元,這些操作要么__都完成__,要么__都取消___(如果在操作執行過程中不能完成其中任一操作)。

20.SQL Server 2000 采用的身份驗證模式有_ Windows身份驗證__模式和_混合_模式。

21.用戶訪問SQL Server數據庫時,經過了兩個_身份__驗證和__權限__驗證安全驗證階段。

22.SQL Server 2000提供的數據庫備份方法有____完整___數據庫備份和_差異__數據庫備份、___事務日志____備份和_____文件和文件組_______備份。23.SQL Server代理主要由__作業____、___操作員___和警報來組成。24.SQL Server復制把服務器分為__發布____服務器、____分發__服務器和訂閱服務器三種。

25.SQL語言主要由____數據定義語言(DDL)______、___數據操作語言(DML)____和數據控制語言(DCL)組成。

26.語句 SELECT(7+3)*4-17/(4-(8-6))+99%4 的執行結果是____35______ 27.____ 視圖____是由一個或多個數據表(基本表)或視圖導出的虛擬表。28._實體完整性_用于保證數據庫中數據表的每一個特定實體的記錄都是惟一的。

29.索引的類型有_____聚集索引_______和非聚集索引。

30.___ 存儲過程______是已經存儲在SQL Server服務器中的一組預編譯過的Transact-SQL語句。

31.觸發器定義在一個表中,當在表中執行___ insert _____、____ update ____或delete操作時被觸發自動執行。

32.事務的ACID屬性是指___原子__性、__一致__性、__獨立__性和___持久__性。

33.數據庫管理系統的安全性通常包括兩個方面,一是指數據__訪問_____的安全性,二是指數據___運行____的安全性。

34.SQL Server代理主要由___作業_____、操作員和____警報____來組成。35.SQL Server復制有快照復制、____事務__復制和___合并_____復制3種類型。36.從最終用戶角度來看,數據庫應用系統分為單用戶結構、主從式結構、分布式結構、____客戶服務器___結構和_____瀏覽器服務器____結構。

37.用SELECT進行模糊查詢時,可以使用like或not like匹配符,但要在條件值中使用_ %_或__等通配符來配合查詢。并且,模糊查詢只能針__字符_類型字段查詢。%、_、字符”,3 38.SQL Server中數據操作語句包括___ insert _____、__ update ______、___ delete _____和select語句。

39.游標的操作步驟包括聲明、__打開___、處理(提取、刪除或修改)、__關閉____和___釋放___游標。

40.SQL Server 2000以____#___開頭的標識符,表示臨時表或過程; 41.left join 運算是____左連接______。

42.SELECT DATEADD(day, 10, '2005-12-22')結果是____2006-01-01____。43.ROUND()函數的是______四舍五入___函數。

44.SQL Server復制把服務器分為___發布___服務器、___分發___服務器和___訂閱___服務器三種。

45.MS SQL Server提供多個圖形化工具,其中用來啟動、停止和暫停SQL Serve的圖形化工具稱為_____服務管理器_____。

46.____ 存儲過程_____是已經存儲在SQL Server服務器中的一組預編譯過的Transact-SQL語句。

47.HAVING子句與WHERE子句很相似,其區別在于:

WHERE子句作用的對象是__表和視圖__,HAVING子句作用的對象是__分組____。48.實體—聯系模型的三要素是_____實體_____、___屬性____和實體之間的聯系。

49.SQL Server的數據類型可分為_系統___數據類型和__用戶自定義__數據類型。

50.SQL Server聚合函數有最大、最小、求和、平均和計數等,它們分別是max、_______、_______、avg和count。min、sum",2 51.IBM公司的研究人員E.F.Codd連續發表了論文,提出了關系模型,奠定了__關系數據庫_____管理系統的基礎。

52.SQL Server的數據庫文件的擴展名為_ mdf_、事務日志文件的擴展名為_ ldf_。

53.建立和使用____約束____的目的是為了保證數據的完整性。

54.BACKUP命令是對數據庫進行_ ___備份______, RESTORE命令是對數據庫進行______恢復____。

55.SQL Server 2000的安全性分為兩類_數據訪問_安全性和__數據運行_安全性。

56.關系模型用___二維表_____結構表示實體集,用鍵來表示實體間聯系。3.數據庫是被長期存放在計算機內的、有組織的、統一管理的相關___數據___的集合。57.SQL Server數據庫的體系結構也是三級模式結構,在SQL Server中,___外模式___對應于視圖、__模式____對應于基本表、__內模式____對應于存儲文件。58.___ 關系完整性_____是為保證數據庫中數據的正確性和相容性,對關系模型提出的某種約束條件或規則。

59.視圖是由一個或多個___數據表___或視圖導出的___虛擬表___或查詢表。60.__ 角色___是指服務器管理、數據庫管理和數據庫訪問特定的權限的集合。61.當___表___被刪除時與它關聯的觸發器也一同被刪除。

第四篇:SQL Server數據庫試題七及答案

SQL Server數據庫試題七及答案

一.單項選擇題(每題2分,計30分)

1._______是數據庫系統的核心,它負責數據庫的配置、存取、管理和維護等工作。(c)A、操作系統 B、關系模型 C、數據庫管理系統 D、數據庫

2.SQL Server2000是一款基于_________體系的關系型數據庫管理系統。(A)A、客戶機/服務器 B、主機 C、N層 D、單機

3.下面哪一個不是SQL Server2000的基本數據類型(A)A、VARIANT B、VARCHAR C、VARBINARY D、NVARCHAR 4.下面的類型中寬度最大的是(C)A、CHAR(5)B、VARCHAR(5)C、NCHAR(5)D、BIGINT 5.表達式LEN('電子學院')+ DATALENGTH(GETDATE())的值為(C)A、8 B、10 C、12 D、16 6.在SQL Server2000中,數據存儲的基本單位是頁,頁的大小是(D)A、1K B、2K C、4K D、8K 7.在使用CREATE DATABASE命令創建數據庫時,FILENAME選項定義的是(D)A、文件增長量 B、文件大小 C、邏輯文件名 D、物理文件名 8.關于表結構的定義,下面說法中錯誤的是(C)A、表名在同一個數據庫內應是唯一的 B、創建表使用CREATE TABLE命令 C、刪除表使用DELETE TABLE命令 D、修改表使用ALTER TABLE命令 9.下面哪一個約束用來禁止輸入重復值?(A)A、UNIQUE B、NULL C、DEFAULT D、FOREIGN KEY 10.下面關于登錄賬戶、用戶和角色的說法錯誤的是(C)A、登錄賬戶是服務器級的 B、用戶是登錄賬戶在某個數據庫中的映射 C、用戶不一定要和登錄賬戶相關聯 D、角色其實就是用戶組 11.在SELECT語句中,用于去除重復行的關鍵字是(B)A、TOP B、DISTINCT C、PERCENT D、HAVING 12.若想查詢出所有姓張的、且出生日期為空的學生信息,則WHERE條件應為(C)A、姓名 LIKE ‘張%’ AND 出生日期 = NULL B、姓名 LIKE ‘張*’ AND 出生日期 = NULL C、姓名 LIKE ‘張%’ AND 出生日期 IS NULL D、姓名 LIKE ‘張_’ AND 出生日期 IS NULL 13.下面關于視圖的說法中,錯誤的是(C)A、視圖是個虛擬表 B、可以使用視圖更新數據,但每次更新只能影響一個表 C、不能為視圖定義觸發器 D、可以創建基于視圖的視圖 14.下面關于觸發器的描述,錯誤的是(A)A、觸發器是一種特殊的存儲過程,用戶可以直接調用 B、觸發器表和DELETED表沒有共同記錄

C、觸發器可以用來定義比CHECK約束更復雜的規則

D、刪除觸發器可以使用DROP TRIGGER命令,也可以使用企業管理器 15.下面關于事務的描述,錯誤的是(D)A、事務可用于保持數據的一致性 B、事務應該晝小且應盡快提交

C、應避免人工輸入操作出在在事務中 D、在事務中可以使用ALTER DATEABSE

二.填空題(每空1分,計20分)

1.SQL Server是作為Windows NT或2000的一個__服務________運行的,用戶可以啟動、暫停或停止它。

2.SQL Server服務包括有__ SQL Server服務________、___ SQL Server Agent服務_______、Microsoft Search和MS DTC服務。

3.SQL Server有兩類數據庫,__系統數據庫________和用戶數據庫。其中為新的用戶數據庫提供模板的系統數據庫是____ model ______。

4.所有的數據庫都有一個____主數據文件______和一個或多個事務日志文件,此外,還可能有_____次要數據文件_____。

5.向表中添加數據應使用___ INSERT(或填INSERT INTO)_______命令,更新數據應使用___ UPDATE _______命令。

6.在SQL Server2000中,約束有非空約束、缺省約束、_主鍵約束_________、____外鍵約束______、檢查約束和唯一約束等6種類型。

7.對象權限是指用戶基于數據庫對象層次上的訪問和操作權限,共有5種:SELECT、INSERT、DELETE、___ UPDATE_______和____ EXECUTE ______。(或填更新、執行)

8._____ UNION _____可以把兩個或多個SELECT語句的查詢結果組合成一個結果集,使用時要求所有SELECT語句的列數應_______相同___,對應列的數據類型相容。

9.索引表的順序與數據行的物理順序相同的索引稱為___聚集(或聚簇 或簇)_______索引。

10.使用游標的一般步驟應為:__創建游標

________、_____打開游標_____、從游標的結果集中讀取數據、對游標中的數據逐行操作、關閉游標和釋放游標。

11.___事務_______是指一個操作序列,這些操作序列要么都被執行,要么都不被執行。

12.___差異備份_______只記錄自上次完整數據庫備份后發生更改的數據。

三.判斷題(每題1分,計10分)

1.外鍵是指一個表中含有與另外一個表的主鍵相同的列或列組,外鍵不要求惟一。(√)2.SQL Server2000支持Unicode字符集,相應數據類型為text、char和varchar。(×)

3.企業管理器是SQL Server提供的最主要的數據庫管理工具,它以樹形結構的形式來管理數據庫服務器、數據庫和數據庫中的對象。(√)

4.全局變量與局部變量一樣,用戶必須進行聲明后才能使用。(×)5.在SQL Server2000中,由于不能跨頁存儲數據行,所以頁中每一行最多包含的數據量是8060B。(√)

6.數據完整性就是指數據的正確性、完備性和一致性。(√)

7.若使用REVOKE命令撤消某用戶創建表的權限,則該用戶將肯定無權創建表。(×)

8.WITH CHECK OPTION表示使用視圖更新數據時應滿足視圖定義中設置的條件(√)9.表的每個觸發動作只能有一個INSTEAD OF觸發器。(√)

10.在使用差異數據庫備份還原數據庫時,應先還原最新的完整數據庫備份。(√)

四.查詢設計(每題5分,計25分)某個學籍數據庫有如下表結構:

學生(學號,姓名,性別,出生日期,班級)課程(課程號,課程名稱,課程類別,課時)選課(學號,課程號,成績)請完成下列查詢要求。

1.查詢出“軟件041”班的所有男生的學號和姓名。

SELECT 學號, 姓名 FROM學生

WHERE班級 = ‘軟件041’ AND性別 = ‘男’ 2.查詢出所有姓張的同學的姓名和班級。SELECT * FROM課程

WHERE課程名稱 LIKE ‘%語言%’

3.查詢出“C語言”課程成績前5名的學生的學號、姓名和班級。SELECT TOP 5學生.學號, 姓名, 班級

FROM學生 JOIN 選課 ON 學生.學號 = 選課.學號 JOIN 課程 ON課程.課程號 = 選課.課程號

WHERE課程名稱 = ‘C語言’ ORDER BY 成績 DESC

4.查詢出各班級學生人數。SELECT 班級, COUNT(*)AS 人數 FROM 學生 GROUP BY班級

5.查詢出“計算機應用基礎”課程成績高于張三同學此門課程成績的學生的學號和姓名。

SELECT學生.學號, 姓名

FROM 學生JOIN 選課 ON 學生.學號 = 選課.學號 JOIN 課程 ON課程.課程號 = 選課.課程號

WHERE課程名稱 = ‘計算機應用基礎’ AND 成績 >(SELECT成績

FROM 學生JOIN 選課 ON 學生.學號 = 選課.學號 JOIN 課程 ON課程.課程號 = 選課.課程號

WHERE課程名稱 = ‘計算機應用基礎’ AND姓名 = ‘張三’)

五.綜合題(每空3分,計15分)

根據下面某教學管理數據庫的表結構,完成下面的程序填空題。教師(職工號,姓名,學歷,職稱)課程(課程號,課程名稱,課程類別)任課(職工號,課程號,周課時)

1.補填下面的存儲過程的定義,使其被調用時,能根據調用程序提供的教師姓名使用輸出參數返回該教師任課的課程數。CREATE PROCEDURE 按教師姓名查詢任課課程數 @姓名 VARCHAR(10), @課程數 INT __ OUTPUT ___________________ AS SELECT __@課程數 = COUNT(*)___________________ FROM 教師 JOIN 任課 ON 教師.職工號 = 任課.職工號 WHERE ____姓名 = @姓名_________________

2.完成下面的觸發器的定義,當向任課表中插入記錄時,觸發器能判斷若插入的記錄使該教師的任課周課時總計超過20,則回滾插入操作。CREATE TRIGGER 添加教學任務 ON 任課

AFTER INSERT AS DECLARE @總課時 INT SELECT @總課時 = SUM(任課.周課時)FROM 任課 JOIN _ INSERTED ON任課.職工號 = INSERTED.職工號 ____________________ IF @總課時 > 20 _____ ROLLBACK TRANSACTION ________________

參考答案

一.單項選擇題(每題2分,計30分)1.C 2.A 3.A 4.C 5.C 6.D 7.D 8.C 9.A 10.C 11.B 12.C 13.C 14.A 15.D 二.填空題(每空1分,計20分)1.服務

2.SQL Server服務 SQL Server Agent服務(或填主服務、代理服務)3.系統數據庫 model 4.主數據文件 次要數據文件

5.INSERT(或填INSERT INTO)UPDATE 6.主鍵約束 外鍵約束

7.UPDATE EXECUTE(或填更新、執行)8.UNION 相同

9.聚集(或聚簇 或簇)10.創建游標 打開游標 11.事務

12.差異備份

三.判斷題(每題1分,計10分)1.√ 2.× 3.√ 4.× 5.√ 6.√ 7.× 8.√ 9.√ 10.√

四.查詢設計(每題5分,計25分)

1.查詢出“軟件041”班的所有男生的學號和姓名。SELECT 學號, 姓名 FROM學生

WHERE班級 = ‘軟件041’ AND性別 = ‘男’ 2.查詢出所有姓張的同學的姓名和班級。SELECT * FROM課程

WHERE課程名稱 LIKE ‘%語言%’

3.查詢出“C語言”課程成績前5名的學生的學號、姓名和班級。SELECT TOP 5學生.學號, 姓名, 班級

FROM學生 JOIN 選課 ON 學生.學號 = 選課.學號 JOIN 課程 ON課程.課程號 = 選課.課程號

WHERE課程名稱 = ‘C語言’ ORDER BY 成績 DESC

4.查詢出各班級學生人數。SELECT 班級, COUNT(*)AS 人數 FROM 學生 GROUP BY班級

5.查詢出“計算機應用基礎”課程成績高于張三同學此門課程成績的學生的學號和姓名。

SELECT學生.學號, 姓名

FROM 學生JOIN 選課 ON 學生.學號 = 選課.學號 JOIN 課程 ON課程.課程號 = 選課.課程號

WHERE課程名稱 = ‘計算機應用基礎’ AND 成績 >(SELECT成績

FROM 學生JOIN 選課 ON 學生.學號 = 選課.學號 JOIN 課程 ON課程.課程號 = 選課.課程號

WHERE課程名稱 = ‘計算機應用基礎’ AND姓名 = ‘張三’)五.綜合題(每空3分,計15分)

1.OUTPUT @課程數 = COUNT(*)姓名 = @姓名 2.INSERTED ON任課.職工號 = INSERTED.職工號 ROLLBACK TRANSACTION

第五篇:SQL Server數據庫試題九及答案

一、選擇題(每題2分,共30分)

1、下面不屬于數據定義功能的SQL語句是:()

A.CREAT TABLE B.CREAT CURSOR C.UPDATE D.ALTER TABLE

2、SQL數據庫中的視圖與下列哪項是對應的()。A.關系模式 B.存儲模式 C.子模式 D.以上都不是

3、下列選項中不是數據庫復制類型的是()。A.快照復制 B.差異復制 C.事務復制 D.合并復制

4、下列說法錯誤的是:()。

A.一個基本表可以跨一個或多個存儲文件 B.一個存儲文件可以跨一個或多個基本表

C.每個存儲文件與外部存儲器上一個物理文件對應 D.每個基本表與外部存儲器上一個物理文件對應

5.顯示包含警告信息或其他信息的消息框,應該使用的操作是()。A.Echo B.Message C.Warn D.MsgBox

6、在SQL Server 2000中,索引的順序和數據表的物理順序相同的索引是()。A.聚集索引 B.非聚集索引 C.主鍵索引 D.唯一索引 7.SQL Server的字符型系統數據類型主要包括()。A.Int、money、char B.char、varchar、text C.datetime、binary、int D.char、varchar、int

8、以下選項中哪一項不是訪問數據庫系統的接口()。A.ODBC B.OLE DB C.API D.ADO

9、在SELECT語句的WHERE子句的條件表達式中,可以匹配0個到多個字符的通配符是()

A.* B.% C.-D.?

10、SELECT語句中與HAVING子句同時使用的是()子句。A.ORDER BY B.WHERE C.GROUP BY D.無需配合 11~15題使用如下數據: 當前盤當前目錄下有數據庫db_stock,其中有表stock的內容是: 股票代碼 股票名稱 單價 交易所 600600 青島啤酒 7.48 上海 600601 方正科技 15.20 上海 600602 廣電電子 10.40 上海 600603 興業房產 12.76 上海 600604 二紡機 9.96 上海 600605 輕工機械 14.59 上海 000001 深發展 7.48 深圳 000002 深萬科 12.50 深圳

11、有如下SQL語句

create view stock_view as select * from stock where 交易所=”深圳” 執行該語句后產生的視圖包含的記錄個數是()A.1 B.2 C.3 D.4

12、有如下SQL語句

create view view_stock as select 股票名稱 as 名稱,單價 from stock 執行該語句后產生的視圖含有的字段名是()

A.股票、名稱、單價 B.名稱、單價

C 名稱、單價、交易所 D 股票名稱、單價、交易所

13、執行如下SQL語句后

select distinct 單價 from stock where 單價=(select min(單價)from stock)into dbf stock_x 表stock_x中的記錄個數是()A.1 B.2 C.3 D.4

14、求每個交易所的平均單價的SQL語句是()

A.SELECT(交易所,avg(單價)FROM stock GROUP BY 單價 B.SELECT(交易所,avg(單價)FROM stock ORDER BY 單價 C.SELECT(交易所,avg(單價)FROM stock ORDER BY 交易所 D.SELECT(交易所,avg(單價)FROM stock GROUP BY交易所

15、在當前盤當前目錄下刪除表stock的命令是()A.DROP stock B.DELETE TABLE stock C.DROP TABLE stock C.DELETE stock

二、填空題(每空2分,共30分)

1、SQL Server 2000支持5種類型的存儲過程:系統存儲過程、、臨時存儲過程、和擴展存儲過程。

2、在Microsoft SQL Server系統中,數據庫備份的類型包括:數據庫備份、、和。

3、觸發器有3種類型,即INSERT類型、和。

4、Transact-SQL語言有4部分元素組成,分別是:、數據定義語言、和一些附加的語言元素。

5、事務的4個屬性:原子性、一致性、和。

6、ADO的對象模型為層次結構,主要的ADO對象有3個:、、和。

7、函數datediff(year,’1998-10-12’, ’2005-1-17’)的執行結果是 ;函數str(1234.56,3,1)的執行結果是。

三、簡答題(共3題,20分)

1、為什么要創建索引(4分)

2、簡述INSERT觸發器的工作原理(6分)

3、根據所給的商品庫和教學庫,按照下列所給的每條SQL查詢語句寫出相應的功能,或者按照下列所給的每種功能寫出相應的SQL查詢語句。(每小題2分,共10分)

在名稱為商品庫的數據庫中包含有商品表1和商品表2,它們的定義分別為: 商品表1(商品代號 char(8),分類名 char(8),單價 float,數量 int)商品表2(商品代號 char(8),產地 char(6),品牌 char(6),)在名稱為教學庫的數據庫中包含有學生、課程和選課三個表,它們的定義分別為: 學生(學生號 char(7),姓名 char(6),性別 char(2),出生日期 datetime, 專業 char(10),年級 int)課程(課程號 char(4),課程名 char(10),課程學分 int 選課(學生號 char(7),課程號 char(4),成績 int)1.select distinct 產地 from 商品表2

2.select * from 學生

where 學生號 in(select 學生號 from 選課

group by 學生號 having count(*)=1)

3.select * from 學生

where 學生號 in(select 學生號 from 選課

group by 學生號 having count(*)<=2)or not exists(select * from 選課

where 學生.學生號=選課.學生號)

4.從商品庫中查詢出每類(即分類名相同)商品的最高單價。

5.從教學庫中查詢出至少選修了姓名為@m1學生所選課程中一門課的全部學生。

四、設計題(每題4分,共20分)有一個“學生-課程”數據庫,數據庫中包括三個表:(1)“學生”表Student由學號(Sno)、姓名(Sname)、性別(Ssex)、年齡(Sage)、所在系(Sdept)五個屬性組成,可記為: Student(Sno,Sname,Ssex,Sage,Sdept)Sno 為關鍵字。(2)“課程”表Course由課程號(Cno)、課程名(Cname)、先修課號(Cpno)、學分(Ccredit)四個屬性組成,可記為: Course(Cno,Cname,Cpno,Ccredit)Cno為關鍵字。(3)“學生選課”表SC由學號(Sno)、課程號(Cno)、成績(Grade)三個屬性組成,可記為: SC(Sno,Cno,Grade)(SNO, CNO)為關鍵字。完成下列操作:

1、建立一個“學生”表Student,它由學號Sno、姓名Sname、性別Ssex、年齡Sage、所在系Sdept五個屬性組成,其中學號屬性不能為空,并且其值是唯一的。

2、查考試成績有不及格的學生的學號

3、將學生95001的年齡改為22歲

4、計算1號課程的學生平均成績

5、創建一存儲過程getDetailByName,通過輸入參數學生姓名(如“章山“),篩選出該學生的基本信息,對不存在此學生姓名的輸入值,必須作一檢測,打印信息“不存在此學生”。參考答案

一、選擇題(每題2分,共30分)

1、A

2、C

3、B

4、D

5、D

6、C

7、B

8、C

9、A

10、C

11、B

12、B

13、B

14、D

15、C

二、填空題(每空2分,共30分)

1、本地存儲過程、遠程存儲過程

2、事務日志備份、差異備份、文件和文件組備份

3、UPDATE類型、DELETE類型

4、數據控制語言(或DCL)、數據操作語言(或DML)

5、隔離性、持久性

6、Connection Command和Recordset7、7 ***

三、簡答題(每題5分,共20分)

1、什么要創建索引?(4分)

答:創建索引可以大大提高系統的性能。第一,通過創建唯一性索引,可以保證每一行數據的唯一性。第二,可以大大加快數據的檢索速度,這也是所以的最主要原因。第三,可以加速表與表之間的連接,特別是實現數據的參考完整性方面特有意義。第四,在使用ORDER BY和GROUP BY子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。第五,通過使用索引,可以在查詢過程中,使用優化隱藏器,提高系統性能。

2、簡述INSERT觸發器的工作原理(6分)

答:當向表中插入數據時,INSERT觸發器觸發執行。當INSERT觸發器觸發時,新的記錄增加到觸發器表中和inserted表中。該inserted表是邏輯表,保存了所插入記錄的拷貝,允許用戶參考INSERT語句中的數據。觸發器可以檢查inserted表,來確定該觸發器的操作是否應該執行和如何執行。在inserted表中的哪些記錄,總是觸發表中一行或多行記錄的冗余。

3、根據商品庫和教學庫,按照下列所給的每條SQL查詢語句寫出相應的功能,或者按照下列所給的每種功能寫出相應的SQL查詢語句。(每小題2分,共10分)

1.從商品庫中查詢出所有商品的不同產地。

2.從教學庫中查詢出只選修了一門課程的全部學生。

3.從教學庫中查詢出最多選修了2門課程(含未選任何課程)的全部學生。4.select 分類名,max(單價)as 最高單價 from 商品表1 group by 分類名

5.select distinct 學生.* from 學生,選課

where 學生.學生號=選課.學生號 and 課程號=any(select 課程號 from 學生,選課

where 學生.學生號=選課.學生號 and 姓名=@m1)

四、設計題(每題4分,共20分)

1、建立一個“學生”表Student,它由學號Sno、姓名Sname、性別Ssex、年齡Sage、所在系Sdept五個屬性組成,其中學號屬性不能為空,并且其值是唯一的。CREATETABLE Student(Sno CHAR(5)NOT NULL UNIQUE, Sname CHAR(20), Ssex CHAR(1), Sage INT, Sdept CHAR(15));

2、查考試成績有不及格的學生的學號 SELECT DISTINCT Sno FROM Course WHERE Grade <60;

3、將學生95001的年齡改為22歲 UPDATE Student SET Sage=22 WHERE Sno='95001';

4、計算1號課程的學生平均成績 SELECT AVG(Grade)FROM SC WHERE Cno='1';

5、創建一存儲過程getDetailByName,通過輸入參數學生姓名(如“章山”),篩選出該學生的基本信息,對不存在此學生姓名的輸入值,必須作一檢測,打印信息“不存在此學生”。

Create procedure getDetailByName @name nvarchar(10)AS IF(SELECT COUNT(*)FROM Student WHERE Sname = @Name)> 0 SELECT * FROM Student Where Sname = @Name ELSE SELECT 警示 = '不存在姓名為 ' + @Name + ' 的學生資料'

下載sql試題大全word格式文檔
下載sql試題大全.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    SQL Server數據庫試題九及答案

    SQL Server數據庫試題九及答案 一、選擇題(每題2分,共30分) 1、下面不屬于數據定義功能的SQL語句是:( ) A.CREAT TABLE B.CREAT CURSOR C.UPDATE D.ALTER TABLE 2、SQL數據庫......

    復習資料(SQL)

    以下復習資料僅供考試前作為復習的參考提綱,考試期間不得攜帶任何資料進入考場,切記! 一、將以下概念理解并牢記。 1、簡述SQL Server查詢分析器作用? 用于執行SQL語句,查看結果......

    SQL語言匯總

    1. UPDATE MARK SET 總分=語文+數學+英語SELECT 準考證號,姓名,總分 FROM MARK WHERE 語文>=75 AND數學>=75 AND 英語>=75 AND 語文+數學+英語>=240 ORDER BY 總分 DESC2 UP......

    sql常用語句

    //創建臨時表空間create temporary tablespace test_temp tempfile 'E:oracleproduct10.2.0oradatatestservertest_temp01.dbf'size 32m autoextend on next 32m maxs......

    SQL語言

    1.輸出任意兩個字符串變量的值(參考代碼) declare @v1 varchar(12),@V2 varchar(12) set @v1='中國' set @v2='你好!' select @v1+@v2 2.為以下程序糾錯 declare @v1 varchar(12)......

    SQL語言以及SQL

    SQL語言以及SQL*PLUS工具 1. SQL語言組成: ? 數據查詢語言(DQL):SELECT; ? 數據操縱語言(DML):INSERT、UPDATE、DELETE; ? 事務控制語言(TCS):COMMIT、ROLLBACK; ? 數據定義語言(DDL):CREATE、DR......

    SQL總結(精選合集)

    1.SQL語句的With cte as用法: with as短語,也叫做子查詢部分。即定義一個SQL片斷,該片斷會讓整個SQL語句所用到。 eg: with cr as (select CountryRegionCode from person.Count......

    SQL 語言

    SQL語言 create database student on primary (name=student_data1,filename='c:student_data1.mdf',size=10M,maxsize=100M,filegrowth=10%) filegroupstudent_group分組......

主站蜘蛛池模板: 精品国产福利一区二区三区| 五月丁香国产在线视频| 99久久国产综合精品五月天喷水| 亚洲一区av无码专区在线观看| 国产日韩精品一区二区三区在线| 久久99久久99小草精品免视看| 强奷乱码中文字幕熟女一| 99久久国产综合精品麻豆| 亚洲国产成人精品无码区二本| 人妻换人妻a片爽麻豆| 国内精品视频在线观看九九| 亚洲区日韩精品中文字幕| 亚洲精品无码伊人久久| 777久久精品一区二区三区无码| 免费国产在线精品一区| 亚洲丁香婷婷综合久久| 亚洲女人被黑人巨大进入| 亚洲伊人久久大香线蕉| 色www永久免费视频| 在线观看免费人成视频色9| 1000部拍拍拍18勿入免费视频| 国产精品白丝av在线观看播放| 亚洲欲色欲香天天综合网| 少妇放荡的呻吟干柴烈火动漫| 人人妻人人澡人人爽欧美精品| av电影在线观看| 国产精品毛片av999999| 久久国产精品久久久久久| www午夜精品男人的天堂| 午夜无码片在线观看影院y| 曰韩少妇内射免费播放| 亚洲成国产人片在线观看| 在线点播亚洲日韩国产欧美| 男女高潮又爽又黄又无遮挡| 国产成人亚洲综合网色欲网| 国产成人8x视频网站入口| 久久精品国产精品青草| 性欧美老人牲交xxxxx视频| 日木亚洲精品无码专区| 国产无遮挡a片又黄又爽| 亚洲精品无码久久久久app|