posts - 110,  comments - 152,  trackbacks - 0

          第12章 聯(lián)結(jié)表

          聯(lián)結(jié)表多個表直接通過關(guān)系形成的。數(shù)據(jù)庫設(shè)計(jì)里面我們努力的把信息分解到多個表里面,表直接通過關(guān)系來聯(lián)系。
          看例子,這里不給表關(guān)系了,想想應(yīng)該能看個大概:

          1.

          SELECT vend_name,prod_name,prod_price 
          FROM Vendors INNER JOIN Products 
          WHERE Vendors.vend_id = Products.vend_id;

          注意:Where語句是關(guān)鍵,沒有這個約束得到的只能是個笛卡爾積。

          2.

          SELECT cust_name,cust_contact 
          FROM Customers,Orders,OrderItems 
          WHERE Customers.cust_id = Orders.cust_id 
          AND OrderItems.order_num =Orders.order_num 
          AND prod_id ='RGA01';

          這個等價(jià)于下面這條SQL

          SELECT cust_name,cust_contact 
          FROM Customers 
          WHERE cust_id  IN ( SELECT cust_id 
                              FROM Orders
                              WHERE order_num IN (SELECT order_num 
                                                  FROM OrderItems 
                                                  WHERE prod_id='RGAO1' ));

          注意:關(guān)聯(lián)可以發(fā)生在多個表直接,表的數(shù)量沒有限制。但是,聯(lián)結(jié)表越多性能下降越快。
          大家可以是試試,聯(lián)結(jié)性能遠(yuǎn)高于嵌套查詢。

           

          第13章 創(chuàng)建高級聯(lián)結(jié)

           

          自聯(lián)結(jié):

          SELECT c1.cust_id , c1.cust_name,c1.cust_contact  
          FROM  Customers AS c1,Customers AS c2 
          WHERE c1.cust_name = c2.cust_name 
          AND c2.cust_contact ='Jim Jones';

          外部鏈接:左外部鏈接(左鏈接,left outer join ... on ,*=  ) 和 右外部鏈接(右鏈接,right out join ... on , =*); 這個應(yīng)該N熟悉了。

           

          第14章 組合查詢

          1.組合查詢一般用在兩個地方:
          在單個查詢中,從不同的表類似的返回結(jié)構(gòu)數(shù)據(jù)。
          對單個表執(zhí)行多個查詢,按照單個查詢返回?cái)?shù)據(jù)。

          2.其實(shí)where組合可以視為一種組合查詢。

          3.Union關(guān)鍵字,用于關(guān)聯(lián)兩個select查詢。但是每個查詢必須包含完全相同的列,表達(dá)式或聚集函數(shù)(不過各列的次序是不要求相同的)

          4.Union會從查詢結(jié)果中去除重復(fù)的結(jié)果,這個where組合的效果是一樣的。如果不愿意這樣,可以使用Union All 來關(guān)聯(lián)查詢。一般而言,Union都可以通過where來替代,但是Union All 有點(diǎn)特色,where替代不了。

          5.某些DBMS還提供了其他的類似Union的關(guān)鍵字,如Except(Minus):檢索第一個表中存在,而第二個表中不存在的行;Intersect:檢索兩個表中都存在的行,可用聯(lián)結(jié)來取代。

           

          第15章 插入數(shù)據(jù)

          日常開發(fā)中用的比較多,而且一般用的比較簡單。

          1.最基本的插入:Insert Into ... Values...

          2.插入檢索出來的數(shù)據(jù):

          INSERT INTO Customers(cust_id,cust_contact,cust_email,cust_name)
           SELECT cust_id,cust_contact,cust_email,cust_name 
          FROM CustNew;

          注意:對應(yīng)列的列名不要求一樣,但是類型至少是兼容的。
          SELECT子句可以使用Where加以修飾。

          3.從一個表復(fù)制到另一個表

          SELECT * INTO CustCopy FROM Customers;

          而Mysql寫法:

          CREATE TABLE CustCopy AS 
          SELECT * FROM Customers;

          這樣適合更合適表達(dá)這樣的意思。

           

          第16章 更新和刪除數(shù)據(jù)

          幾個好習(xí)慣:

          1.更新和刪除操作一定要記得設(shè)置合適的Where子句;

          2.實(shí)際操作前只好通過Select驗(yàn)證Where子句是否正確。

          因?yàn)镾ql里面是沒有undo操作的。

           

          第17章 創(chuàng)建和操作表

          1.創(chuàng)建表: CREATE TABLE tablename;
             刪除表: DROP TABLE tablename;
             更新表: ALERT TABLE tablename;
          具體的需要查詢手冊。

          2.重命名表:
          DB2, Mysql,Oracle和PostgreSQL可以使用RENAME語句;而SQL Server 和Sybase可以使用sp_rename存儲過程。

          3.復(fù)雜的更新表操作一般過程如下

          a.安裝新的列規(guī)范重建立新表,復(fù)制舊表數(shù)據(jù)到新表,并檢查新表所包含的數(shù)據(jù)
          b.重明白舊表,用舊表名字重命名新表,更加需要重新創(chuàng)建觸發(fā)器,存儲過程,索引和外鍵。



          平凡而簡單的人一個,無權(quán)無勢也無牽無掛。一路廝殺,只進(jìn)不退,死而后已,豈不爽哉!
          收起對“車”日行千里的羨慕;收起對“馬”左右逢緣的感嘆;目標(biāo)記在心里面,向前進(jìn)。一次一步,一步一腳印,跬步千里。
          這個角色很適合現(xiàn)在的


          posted on 2007-11-28 14:36 過河卒 閱讀(911) 評論(0)  編輯  收藏 所屬分類: DataBase/Sql

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          文章來自: http://www.blogjava.com/ponzmd/ (彭俊-過河卒) 轉(zhuǎn)貼請聲明!
          訪問統(tǒng)計(jì):
          主站蜘蛛池模板: 沙坪坝区| 乌审旗| 黄平县| 肃宁县| 绥德县| 进贤县| 筠连县| 屯门区| 上饶县| 随州市| 佛山市| 德保县| 平罗县| 交城县| 宜兰市| 伊通| 张掖市| 璧山县| 开原市| 乌鲁木齐县| 通榆县| 汉中市| 秭归县| 梁山县| 石柱| 清流县| 鄂伦春自治旗| 巴里| 五华县| 屏边| 内乡县| 巧家县| 博乐市| 文水县| 霍山县| 师宗县| 松潘县| 革吉县| 江口县| 巴塘县| 秭归县|