基本的SQL語句


表結構




實驗內容

1

  • 用SQL語句創建數據庫CAP,數據文件名為CAPData.mdf,數據文件的初始存儲空間大小為50M,最大存儲空間為500M,存儲空間自動增長量為10M。
CREATE DATABASE CAP
ON
(
	NAME = CAP,
	FILENAME = 'C:\Users\Zero\Desktop\CAPData.mdf', -- 文件名
	SIZE = 50, -- 初始存儲空間大小
	MAXSIZE = 500,  -- 最大存儲空間大小
	FILEGROWTH = 10  -- 自動增長量
)

2

  • 在CAP數據庫中用SQL語句創建下面的4張表,合理設計每個字段的數據類型,建立主鍵與外鍵約束。表Products中的Price字段不允許為空。表Customers的discnt字段取值范圍在[0,30]之間。利用SQL語句向表中添加表結構中的數據。
use CAP
CREATE TABLE Customers
(
	"cid" char(4) CONSTRAINT Custom_Prim PRIMARY KEY,
	"cname" varchar(10),
	"city" varchar(10),
	"discnt" numeric(4,2) CONSTRAINT DISCNT_CHK CHECK(discnt BETWEEN 0 AND 30)
)
CREATE TABLE Products
(
	"Pid" char(3) CONSTRAINT Product_Prim PRIMARY KEY,
	"pname" varchar(10),
	"city" varchar(10),
	"quantity" int,
	"price" numeric(10,2) CONSTRAINT Price_NotNull NOT NULL
)
CREATE TABLE Agents
(
	"Aid" char(3) CONSTRAINT Agent_Prim PRIMARY KEY,
	"aname" varchar(10),
	"city" varchar(10),
	"percent" TINYINT
)
CREATE TABLE Orders
(
	"OrDno" char(4) CONSTRAINT Order_Prim PRIMARY KEY,
	"month" char(3) CONSTRAINT Month_CHK CHECK(month in ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec') ),
	"cid" char(4) CONSTRAINT Cid_Fore FOREIGN KEY REFERENCES Customers(cid),
	"aid" char(3) CONSTRAINT Aid_Fore FOREIGN KEY REFERENCES Agents(Aid),
	"pid" char(3) CONSTRAINT Pid_Fore FOREIGN KEY REFERENCES Products(Pid),
	"qty" int,
	"dollars" numeric(10,2)
)

3

  • 利用系統預定義的存儲過程sp_helpdb查看數據庫的相關信息,例如所有者、大小、創建日期等。
EXEC sp_helpdb

4

  • 利用系統預定義的存儲過程sp_helpconstraint查看表中出現的約束(包括Primary key, Foreign key, check constraint, default, unique)。
EXEC sp_helpconstraint Orders

5

  • 創建一張表Orders_Jan,表的結構與Orders相同,將Orders表中month為‘Jan’的訂單記錄復制到表Orders_Jan中。
CREATE TABLE Orders_Jan
(
	"OrDno" char(4) CONSTRAINT Order_Jan_Prim PRIMARY KEY,
	"month" char(3) ,
	"cid" char(4) CONSTRAINT Jan_Cid_Fore FOREIGN KEY REFERENCES Customers(cid),
	"aid" char(3) CONSTRAINT Jan_Aid_Fore FOREIGN KEY REFERENCES Agents(Aid),
	"pid" char(3) CONSTRAINT Jan_Pid_Fore FOREIGN KEY REFERENCES Products(Pid),
	"qty" int,
	"dollars" numeric(10,2)
);

INSERT INTO Orders_Jan
SELECT * 
FROM Orders
WHERE month='Jan'

6

  • 將Orders表中month為‘Jan’的訂單記錄全部刪掉。
DELETE 
FROM Orders
WHERE month='Jan'

7

  • 對曾經下過金額(dollars)大於500的訂單的客戶,將其discnt值增加2個百分點(+2)。
UPDATE Customers
SET  discnt = discnt + 2  -- 更新discnt
WHERE cid IN(			-- 找出下過500訂單的客戶cid
			SELECT DISTINCT cid -- 使用DISTINCT防止對同一個客戶重復更新discnt
            -- 其實可以直接SELECT cid , IN會自動去除重復值
			FROM Orders
			WHERE dollars > 500
			)

8

  • 寫一段TSQL程序,向表Orders中增加5000條記錄,要求訂單盡可能均勻地分布在12個月中。
use CAP
DECLARE @i AS INT,@randNum AS FLOAT,@mon AS char(3),@OrdNo AS SMALLINT,@cid AS char(4),@aid AS char(3),@pid AS char(3),@price AS numeric(10,2);
SET @i=1;
SET @OrdNo=1030;
while @i<=5000  -- 流程控制,循環5000次
	BEGIN
		SET @randNum=RAND()*12;
		SET @mon=							-- 隨機產生月份
		CASE
			WHEN @randNum<1 THEN 'Jan'
			WHEN @randNum>=1 AND @randNum<2 THEN 'Feb'
			WHEN @randNum>=2 AND @randNum<3 THEN 'Mar'
			WHEN @randNum>=3 AND @randNum<4 THEN 'Apr'
			WHEN @randNum>=4 AND @randNum<5 THEN 'May'
			WHEN @randNum>=5 AND @randNum<6 THEN 'Jun'
			WHEN @randNum>=6 AND @randNum<7 THEN 'Jul'
			WHEN @randNum>=7 AND @randNum<8 THEN 'Aug'
			WHEN @randNum>=8 AND @randNum<9 THEN 'Sep'
			WHEN @randNum>=9 AND @randNum<10 THEN 'Oct'
			WHEN @randNum>=10 AND @randNum<11 THEN 'Nov'
			ELSE 'Dec'
		END

		SELECT  @cid=cid 	-- 隨機獲取一個用戶id
		FROM Customers
		ORDER BY NEWID()

		SELECT @pid=Pid,@price=price	-- 隨機獲取一個產品id以及對應的產品價格
		FROM Products
		ORDER BY NEWID()
		
		SET @aid=(SELECT TOP 1 Aid 			-- 隨機獲取一個代理商id
				  FROM Agents
		          ORDER BY NEWID()
				  )
		
		SET @randNum=RAND()*2000+400;  -- 生成400至2400的隨機訂單數

		INSERT INTO Orders				-- 插入一條訂單記錄
		VALUES(CONVERT(char(4),@OrdNo),@mon,@cid,@aid,@pid,CONVERT(INT,@randNum),CONVERT(INT,@randNum) * @price);
        -- 使用轉換函數CONVERT()

		SET @OrdNo=@OrdNo+1;
		SET @i=@i+1;
	END

9

  • 在表Orders的’month’字段上建立索引。
CREATE INDEX Orders_Index
ON Orders(month)

10

  • 創建一個視圖order_month_summary,視圖中的字段包括月份、該月的訂單總量和該月的訂單總金額。基於視圖order_month_summary,查詢第一季度各個月份的訂單總量和訂單總金額。
CREATE VIEW order_month_summary(month,total_qty,total_dollars)
AS SELECT month,SUM(qty),SUM(dollars)      -- 獲得每月的總訂單,總金額
   FROM Orders
   GROUP BY month
SELECT month,total_qty,total_dollars
FROM order_month_summary
WHERE month IN ('Jan','Feb','Mar')     -- 查詢第一季度


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM