999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

數據庫中SQL語句學習技巧探索

2008-12-31 00:00:00王振海
計算機教育 2008年24期

摘要:數據庫技術是計算機技術中的一個重要分支,SQL語句的一項強大同時也特別容易混淆的功能是能采用很多種不同的方法表達多表操作,本文在分析的基礎上以實例的形式探索了靈活學習掌握SQL語句的方法。

關鍵詞:數據庫;SQL;聯接

中圖分類號:G642 文獻標識碼:A

1引言

計算機改變了世界,在對各行各業滲透最廣、介入最深、影響最大的為數不多的幾個計算機技術的分支中,數據庫技術占了重要的地位。40年來,數據庫技術與時俱進,日新月異,不斷開拓新的研究方向,推出新的軟件系統,涌現新的應用領域。數據庫技術已經成為計算機科學基礎教育中重要的一門課程。

數據庫應用技術是計算機本??葡嚓P專業必修的一門課程,SQL語句操作是課程教學的重點內容,學生能否對DML語句進行靈活熟練掌握是學好該課程的關鍵,也是進行與數據庫應用相關軟件開發的基礎。

結合從事教學的經驗,探索一種靈活學習掌握SQL語句的方法,以改善課堂教學質量。學習SQL語句解決的關鍵問題是對SQL語句的聯接運算可采用多種不同的方法表達。本文通過以多種方法實現的幾個實例來探索學習掌握SQL語句的方法。

2實例分析

在查詢語句中采用叉乘和聯接運算符,在叉乘風格中,所有的關系表被列于FROM子句中,而聯接條件則在WHERE子句中。在聯接運算符風格中可以在FROM子句中直接書寫INNER JOIN…ON格式的聯接運算符。聯接運算符風格的主要好處是,包含外聯接問題可以采用這種格式很方便地用SQL語言表達出來。如果不采用各廠商特有的SQL擴展,外聯接是不能使用叉乘表達出來的。

所謂嵌套查詢(又叫子查詢),就是一個在其內部以包含一個查詢語句(SELECT語句)的查詢語句。一般說來嵌套查詢常作為條件的一部分出現在WHERE或HAVING子句中。但是,嵌套查詢也可以出現在FROM子句中。子查詢又分為不相關子查詢與相關子查詢。

下面給出在學習中常用的三個表,Customers(顧客表),Products(產品表),Sales(銷售表),其結構如下所示:

Customers

(

CustomerID INT IDENTITY PRIMARY KEY,

FirstName VARCHAR(50), LastName VARCHAR(50), City VARCHAR(50), State CHAR(2), Zip VARCHAR(10) )

Products

(ProductID TINYINT IDENTITY PRIMARY KEY,

ProductName VARCHAR(20),RecommendedPrice

MONEY,Category VARCHAR(10)

)

Sales

(SaleID INT IDENTITY

PRIMARY KEY,ProductID TINYINT NOT NULL

REFERENCES Products(ProductID),CustomerID INT

NOT NULL REFERENCES Customers(CustomerID),SalePrice

MONEY NOT NULL,SaleDate SMALLDATETIME NOT NULL)

例1:返回在2005年10月售出的所有產品的名稱、價格和客戶姓名:

分析:要查詢產品的名稱、價格和客戶姓名來源于三個表,要用到表的聯接查詢,兩個表聯接要找公共字段,因此,Sales與Customers聯接,聯接條件為sales. CustomerID= customers.CustomerID,Customers與Products聯接,聯接條件為sales.ProductID= products.ProductID,根據以上分析可有兩種實現方法。

方法一:叉乘風格法

SELECT

c.FirstName, c.LastName, p.ProductName, s.SalePrice

FROM Sales s, Customers c, Products p

WHERE s.CustomerID = c.CustomerID AND s.ProductID = p.ProductID AND

s.SaleDate >= '10/1/2005' AND s.SaleDate < '11/1/2005'

方法二:聯接運算符風格法

SELECT

c.FirstName, c.LastName, p.ProductName, s.SalePrice

FROM

Sales s

INNER JOIN Customers c ON s.CustomerID = c.CustomerID

INNER JOIN Products p ON s.ProductID = p.ProductID

WHERE

s.SaleDate >= '10/1/2005' AND

s.SaleDate < '11/1/2005'

例2:返回沒有購買產品并且位于客戶表格上的人的姓名及其客戶ID:

分析:本實例返回的姓名及其客戶ID都來源于Customers,但返回的結果決定于Sales中的 CustomerID,因此也是兩個表的聯接查詢,聯接條件為sales.CustomerID= customers.CustomerID,聯接查詢分為內聯接和外聯接,內聯接返回的結果為購買產品的客戶信息,若返回沒有購買產品的客戶信息需返回所有客戶信息再去除購買產品的客戶信息。

方法一:叉乘風格法

可以用*=定義左連接,=*定義右連接(適用于SQL SERVER2000,不同廠商的SQL擴展不同)。

SELECT

c.CustomerID, c.FirstName, c.LastName

FROM

Sales s, Customers c

WHERE s.CustomerID = *c.CustomerID AND

s.CustomerID IS NULL

方法二:聯接運算符風格法

SELECT

c.CustomerID, c.FirstName, c.LastName

FROM

Sales s

RIGHT OUTER JOIN Customers c ON s.CustomerID = c.CustomerID

WHERE

s.CustomerID IS NULL

方法三:不相關子查詢法

SELECT

c.CustomerID, c.FirstName, c.LastName

FROM

Customers c

WHERE c.CustomerID NOT IN (SELECT s.CustomerID FROM Sales s)

方法三:相關子查詢法

SELECT Customerid,Firstname,Lastname FROM Customers WHERE NOT EXISTS(SELECT * FROM Sales WHERE Customers.Customerid=Sales.Customerid)

例3:從數據庫中刪除來自緬因洲(‘ME’)的客戶:

分析:在Sales與Customers表中都存在客戶信息,兩個表都應做刪除操作,但兩個表存在引用關系,Sales外鍵引用Customers(CustomerID),因此,先刪除Sales中的相關記錄,要刪除來自緬因洲(‘ME’)的客戶,在Customers中由State = 'ME'找到相應的CustomerID,由CustomerID刪除Sales中的相關記錄,再刪除Customers中State = 'ME'的記錄。

方法一:叉乘風格法

DELETE s

FROM

Sales s, Customers c

WHERE s.CustomerID = c.CustomerID AND c.State = 'ME'

DELETE c

FROM

Customers c

WHERE

c.State = 'ME'

方法二:聯接運算符風格法

DELETE s

FROM

Sales s

JOIN Customers c ON s.CustomerID = c.CustomerID

WHERE

c.State = 'ME'

DELETE c

FROM

Customers c

WHERE

c.State = 'ME'

方法三:子查詢風格法

DELETE s

FROM

Sales s

WHERE

s.CustomerID IN (SELECT c.CustomerID FROM Customers c WHERE c.State = 'ME' )

DELETE c

FROM

Customers c

WHERE

c.State = 'ME'

例4:將銷售在2005年6月10日到6月20日之間的產品的銷售價格升級為建議售價:

分析:產品的價格在Sales中表示,需修改Sales表,但要修改記錄的銷售價格由Products中的建議售價表示,因此,是一個多表的DML操作,可用多表的聯接操作,可理解為Sales與Products表聯接后生成一個集合,在這個集合中修改銷售在2005年6月10日到6月20日之間的產品價格。

方法一:叉乘風格法

UPDATE s

SET SalePrice = p.RecommendedPrice

FROM

Sales s, Products p

WHERE s.ProductID = P.ProductID AND

SaleDate >= '6/10/2005' AND

SaleDate < '6/21/2005'

方法二:聯接運算符風格法

UPDATE s

SET SalePrice = p.RecommendedPrice

FROM

Sales s

INNER JOIN Products p ON s.ProductID = s.ProductID

WHERE

SaleDate >= '6/10/2005' AND

SaleDate < '6/21/2005'

方法三:子查詢風格法

UPDATE s

SET SalePrice = p.RecommendedPrice

FROM

Sales s, Products p

WHERE s.ProductID IN (SELECT ProductID FROM Products ) AND

SaleDate >= '6/10/2005' AND

SaleDate < '6/21/2005'

3總結

SELECT、DELETE、UPDATE、INSERT是數據庫操作中的重要內容,也是數據庫應用技術學習中的重點,通過以上幾個實例的操作可以看出對于多表操作可以叉乘風格法、聯接運算符風格法、子查詢風格法靈活去解答。

參考文獻

[1] 趙松濤. SQL Server 2005系統管理實錄[M]. 北京:電子工業出版社,2006.

[2] 李勇平. Oracle9i基礎教程與上機指導[M]. 北京:科學出版社,2004.

[3] (美) Michael V. Mannino著. 數據庫設計、應用開發與管理[M]. 北京:高等教育出版社,2006.

主站蜘蛛池模板: 国产在线日本| 中文字幕天无码久久精品视频免费| 爱爱影院18禁免费| 天天做天天爱夜夜爽毛片毛片| 国产手机在线观看| 欧美性猛交一区二区三区| 午夜高清国产拍精品| jizz国产视频| 国产网站黄| 激情亚洲天堂| 在线观看免费国产| 国产簧片免费在线播放| 伊人成人在线| 精品撒尿视频一区二区三区| 1769国产精品视频免费观看| 91欧洲国产日韩在线人成| 精品无码一区二区三区在线视频| 精品视频一区二区三区在线播| 国产又粗又爽视频| 美女免费精品高清毛片在线视| 久久青青草原亚洲av无码| 第九色区aⅴ天堂久久香| 国产成人无码久久久久毛片| 国产精品一区二区国产主播| 国产色爱av资源综合区| 国产无码精品在线| 国产91视频观看| 亚洲无码日韩一区| 韩国v欧美v亚洲v日本v| 欧美日韩一区二区三区在线视频| 国产成人亚洲精品色欲AV| 中文字幕2区| 午夜高清国产拍精品| 日本91在线| 欧美天堂久久| 凹凸国产分类在线观看| 久久天天躁狠狠躁夜夜2020一| 亚洲中文字幕久久精品无码一区| 成人国产精品网站在线看 | 四虎精品免费久久| 波多野吉衣一区二区三区av| 国产亚洲精品自在久久不卡| 免费毛片网站在线观看| 亚洲免费毛片| 另类综合视频| 国产一级毛片高清完整视频版| 尤物国产在线| 亚洲成在人线av品善网好看| 中字无码精油按摩中出视频| 毛片免费观看视频| 一级爆乳无码av| 国产人免费人成免费视频| 久青草免费在线视频| 欧美性爱精品一区二区三区| 色香蕉网站| 在线人成精品免费视频| 在线观看av永久| 一级毛片在线播放| 香蕉久久国产超碰青草| 亚洲一级毛片| 国产精品第5页| 国产二级毛片| 国产黑人在线| 91精品日韩人妻无码久久| A级毛片无码久久精品免费| 日本午夜精品一本在线观看| 国产成人一区二区| 国产精品专区第一页在线观看| 2021亚洲精品不卡a| 成人小视频网| 影音先锋丝袜制服| 日韩在线中文| 亚洲成在线观看| aⅴ免费在线观看| 精品久久综合1区2区3区激情| 日韩中文无码av超清| 久久女人网| 19国产精品麻豆免费观看| 国产福利免费视频| 亚洲综合在线网| 亚洲无码精品在线播放| 国产一线在线|