亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        數(shù)據(jù)庫(kù)中SQL語(yǔ)句學(xué)習(xí)技巧探索

        2008-12-31 00:00:00王振海
        計(jì)算機(jī)教育 2008年24期

        摘要:數(shù)據(jù)庫(kù)技術(shù)是計(jì)算機(jī)技術(shù)中的一個(gè)重要分支,SQL語(yǔ)句的一項(xiàng)強(qiáng)大同時(shí)也特別容易混淆的功能是能采用很多種不同的方法表達(dá)多表操作,本文在分析的基礎(chǔ)上以實(shí)例的形式探索了靈活學(xué)習(xí)掌握SQL語(yǔ)句的方法。

        關(guān)鍵詞:數(shù)據(jù)庫(kù);SQL;聯(lián)接

        中圖分類(lèi)號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:A

        1引言

        計(jì)算機(jī)改變了世界,在對(duì)各行各業(yè)滲透最廣、介入最深、影響最大的為數(shù)不多的幾個(gè)計(jì)算機(jī)技術(shù)的分支中,數(shù)據(jù)庫(kù)技術(shù)占了重要的地位。40年來(lái),數(shù)據(jù)庫(kù)技術(shù)與時(shí)俱進(jìn),日新月異,不斷開(kāi)拓新的研究方向,推出新的軟件系統(tǒng),涌現(xiàn)新的應(yīng)用領(lǐng)域。數(shù)據(jù)庫(kù)技術(shù)已經(jīng)成為計(jì)算機(jī)科學(xué)基礎(chǔ)教育中重要的一門(mén)課程。

        數(shù)據(jù)庫(kù)應(yīng)用技術(shù)是計(jì)算機(jī)本專(zhuān)科相關(guān)專(zhuān)業(yè)必修的一門(mén)課程,SQL語(yǔ)句操作是課程教學(xué)的重點(diǎn)內(nèi)容,學(xué)生能否對(duì)DML語(yǔ)句進(jìn)行靈活熟練掌握是學(xué)好該課程的關(guān)鍵,也是進(jìn)行與數(shù)據(jù)庫(kù)應(yīng)用相關(guān)軟件開(kāi)發(fā)的基礎(chǔ)。

        結(jié)合從事教學(xué)的經(jīng)驗(yàn),探索一種靈活學(xué)習(xí)掌握SQL語(yǔ)句的方法,以改善課堂教學(xué)質(zhì)量。學(xué)習(xí)SQL語(yǔ)句解決的關(guān)鍵問(wèn)題是對(duì)SQL語(yǔ)句的聯(lián)接運(yùn)算可采用多種不同的方法表達(dá)。本文通過(guò)以多種方法實(shí)現(xiàn)的幾個(gè)實(shí)例來(lái)探索學(xué)習(xí)掌握SQL語(yǔ)句的方法。

        2實(shí)例分析

        在查詢(xún)語(yǔ)句中采用叉乘和聯(lián)接運(yùn)算符,在叉乘風(fēng)格中,所有的關(guān)系表被列于FROM子句中,而聯(lián)接條件則在WHERE子句中。在聯(lián)接運(yùn)算符風(fēng)格中可以在FROM子句中直接書(shū)寫(xiě)INNER JOIN…ON格式的聯(lián)接運(yùn)算符。聯(lián)接運(yùn)算符風(fēng)格的主要好處是,包含外聯(lián)接問(wèn)題可以采用這種格式很方便地用SQL語(yǔ)言表達(dá)出來(lái)。如果不采用各廠商特有的SQL擴(kuò)展,外聯(lián)接是不能使用叉乘表達(dá)出來(lái)的。

        所謂嵌套查詢(xún)(又叫子查詢(xún)),就是一個(gè)在其內(nèi)部以包含一個(gè)查詢(xún)語(yǔ)句(SELECT語(yǔ)句)的查詢(xún)語(yǔ)句。一般說(shuō)來(lái)嵌套查詢(xún)常作為條件的一部分出現(xiàn)在WHERE或HAVING子句中。但是,嵌套查詢(xún)也可以出現(xiàn)在FROM子句中。子查詢(xún)又分為不相關(guān)子查詢(xún)與相關(guān)子查詢(xún)。

        下面給出在學(xué)習(xí)中常用的三個(gè)表,Customers(顧客表),Products(產(chǎn)品表),Sales(銷(xiāo)售表),其結(jié)構(gòu)如下所示:

        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月售出的所有產(chǎn)品的名稱(chēng)、價(jià)格和客戶(hù)姓名:

        分析:要查詢(xún)產(chǎn)品的名稱(chēng)、價(jià)格和客戶(hù)姓名來(lái)源于三個(gè)表,要用到表的聯(lián)接查詢(xún),兩個(gè)表聯(lián)接要找公共字段,因此,Sales與Customers聯(lián)接,聯(lián)接條件為sales. CustomerID= customers.CustomerID,Customers與Products聯(lián)接,聯(lián)接條件為sales.ProductID= products.ProductID,根據(jù)以上分析可有兩種實(shí)現(xiàn)方法。

        方法一:叉乘風(fēng)格法

        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'

        方法二:聯(lián)接運(yùn)算符風(fēng)格法

        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:返回沒(méi)有購(gòu)買(mǎi)產(chǎn)品并且位于客戶(hù)表格上的人的姓名及其客戶(hù)ID:

        分析:本實(shí)例返回的姓名及其客戶(hù)ID都來(lái)源于Customers,但返回的結(jié)果決定于Sales中的 CustomerID,因此也是兩個(gè)表的聯(lián)接查詢(xún),聯(lián)接條件為sales.CustomerID= customers.CustomerID,聯(lián)接查詢(xún)分為內(nèi)聯(lián)接和外聯(lián)接,內(nèi)聯(lián)接返回的結(jié)果為購(gòu)買(mǎi)產(chǎn)品的客戶(hù)信息,若返回沒(méi)有購(gòu)買(mǎi)產(chǎn)品的客戶(hù)信息需返回所有客戶(hù)信息再去除購(gòu)買(mǎi)產(chǎn)品的客戶(hù)信息。

        方法一:叉乘風(fēng)格法

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

        SELECT

        c.CustomerID, c.FirstName, c.LastName

        FROM

        Sales s, Customers c

        WHERE s.CustomerID = *c.CustomerID AND

        s.CustomerID IS NULL

        方法二:聯(lián)接運(yùn)算符風(fēng)格法

        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

        方法三:不相關(guān)子查詢(xún)法

        SELECT

        c.CustomerID, c.FirstName, c.LastName

        FROM

        Customers c

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

        方法三:相關(guān)子查詢(xún)法

        SELECT Customerid,F(xiàn)irstname,Lastname FROM Customers WHERE NOT EXISTS(SELECT * FROM Sales WHERE Customers.Customerid=Sales.Customerid)

        例3:從數(shù)據(jù)庫(kù)中刪除來(lái)自緬因洲(‘ME’)的客戶(hù):

        分析:在Sales與Customers表中都存在客戶(hù)信息,兩個(gè)表都應(yīng)做刪除操作,但兩個(gè)表存在引用關(guān)系,Sales外鍵引用Customers(CustomerID),因此,先刪除Sales中的相關(guān)記錄,要?jiǎng)h除來(lái)自緬因洲(‘ME’)的客戶(hù),在Customers中由State = 'ME'找到相應(yīng)的CustomerID,由CustomerID刪除Sales中的相關(guān)記錄,再刪除Customers中State = 'ME'的記錄。

        方法一:叉乘風(fēng)格法

        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'

        方法二:聯(lián)接運(yùn)算符風(fēng)格法

        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'

        方法三:子查詢(xún)風(fēng)格法

        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:將銷(xiāo)售在2005年6月10日到6月20日之間的產(chǎn)品的銷(xiāo)售價(jià)格升級(jí)為建議售價(jià):

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

        方法一:叉乘風(fēng)格法

        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'

        方法二:聯(lián)接運(yùn)算符風(fēng)格法

        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'

        方法三:子查詢(xún)風(fēng)格法

        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總結(jié)

        SELECT、DELETE、UPDATE、INSERT是數(shù)據(jù)庫(kù)操作中的重要內(nèi)容,也是數(shù)據(jù)庫(kù)應(yīng)用技術(shù)學(xué)習(xí)中的重點(diǎn),通過(guò)以上幾個(gè)實(shí)例的操作可以看出對(duì)于多表操作可以叉乘風(fēng)格法、聯(lián)接運(yùn)算符風(fēng)格法、子查詢(xún)風(fēng)格法靈活去解答。

        參考文獻(xiàn)

        [1] 趙松濤. SQL Server 2005系統(tǒng)管理實(shí)錄[M]. 北京:電子工業(yè)出版社,2006.

        [2] 李勇平. Oracle9i基礎(chǔ)教程與上機(jī)指導(dǎo)[M]. 北京:科學(xué)出版社,2004.

        [3] (美) Michael V. Mannino著. 數(shù)據(jù)庫(kù)設(shè)計(jì)、應(yīng)用開(kāi)發(fā)與管理[M]. 北京:高等教育出版社,2006.

        国产又爽又粗又猛的视频| 不卡视频在线观看网站| 国产情侣一区二区三区| 伊人久久精品久久亚洲一区| 国产色噜噜| 久久精品国产亚洲av高清蜜臀 | 国产一区二区三区口爆在线| 亚洲av永久无码精品一福利| 国产人妻精品一区二区三区不卡| 色综合久久精品中文字幕| 少妇人妻精品一区二区三区视| 老熟女富婆激情刺激对白| 97成人碰碰久久人人超级碰oo| 天天狠天天透天干天天| 久久久免费精品国产色夜| 人妻少妇被粗大爽.9797pw| 免费a级毛片无码无遮挡| 中日韩欧美成人免费播放| 精品女厕偷拍视频一区二区区| 一本丁香综合久久久久不卡网站| 国产成人无码av在线播放dvd| 欧洲AV秘 无码一区二区三 | 亚洲国产精品日韩av专区| 欧美亚洲韩国国产综合五月天| 国产精品亚洲在线播放| 日本久久久久亚洲中字幕| 日韩成人无码一区二区三区| 日本一区二区不卡超清在线播放| 亚洲最新精品一区二区| 色综合久久88色综合天天| 国产免费资源| 蜜臀精品一区二区三区| 摸丰满大乳奶水www免费| 久久久久亚洲av无码观看 | 国产女主播一区二区三区在线观看| 亚洲三区在线观看内射后入| 亚洲人成人77777网站| 国产av一区二区凹凸精品| 一本之道久久一区二区三区| 麻豆精品久久久久久久99蜜桃| 国产一区二区三区爆白浆|