Cách định dạng mã nguồn mở PHP (Personal Home Page) phần 8
lượt xem 9
download
Khi cần thêm mẩu tin vào bảng trong cơ sở dữ liệu MySQL, bạn có nhiều cách để thực hiện công việc này. Trong Visual Basic 6.0, VB.NET, C Sharp hay Java có những phương thức để thêm mẩu tin vào bảng trong cơ sở dữ liệu.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Cách định dạng mã nguồn mở PHP (Personal Home Page) phần 8
- COMPUTER LEARNING CENTER WWW.HUUKHANG.COM 5.7. Nhaäp döõ lieäu baèng phaùt bieåu SQL daïng Insert Khi caàn theâm maåu tin vaøo baûng trong cô sôû döõ lieäu MySQL, baïn coù nhieàu caùch ñeå thöïc hieän coâng vieäc naøy. Trong Visual Basic 6.0, VB.NET, C Sharp hay Java coù nhöõng phöông thöùc ñeå theâm maåu tin vaøo baûng trong cô sôû döõ lieäu. Tuy nhieân, ñeå söû duïng caùc phaùt bieåu SQL mang tính chuyeân nghieäp trong MySQL, baïn caàn söû duïng phaùt bieåu INSERT. Baïn coù theå söû duïng phaùt bieåu Insert ngay treân öùng duïng keát noái vôùi MySQL. Trong tröôøng hôïp baïn söû duïng cô sôû döõ lieäu SQL Server hay Oracle, baïn coù theå taïo ra moät Stored Procedure vôùi muïc ñích INSERT döõ lieäu vaøo baûng chæ ñònh tröôùc. Khi theâm döõ lieäu, caàn chuù yù kieåu döõ lieäu gioáng hoaëc töông öùng kieåu döõ lieäu ñaõ khai baùo cuûa coät ñoù, neáu khoâng phuø hôïp thì loãi seõ phaùt sinh. Ngoaøi ra baïn caàn quan taâm ñeán quyeàn cuûa User ñang truy caäp cô sôû döõ lieäu. User phaûi ñöôïc caáp quyeàn Insert döõ lieäu vaøo töøng baûng cuï theå (quyeàn naøy do nhaø quaûn trò cô sôû döõ lieäu phaân quyeàn cho User ñoù). Trong phaùt bieåu INSERT INTO chuùng toâi thöïc hieän treân baûng tblOrderDetails vaø baûng tblOrderDetailsHist, hai baûng naøy coù caáu truùc nhö sau: /* Baûng tblOrderDetails*/ CREATE TABLE tblorderdetails ( ItemID int(3) unsigned DEFAULT '0' , OrderID int(3) unsigned DEFAULT '0' , No tinyint(3) unsigned DEFAULT '0' , Qtty int(3) unsigned DEFAULT '0' , Price int(3) unsigned DEFAULT '0' , Discount int(3) unsigned DEFAULT '0' , Amount bigint(3) unsigned DEFAULT '0' ); /* Baûng tblOrderDetailsHist, duøng ñeå chöùa caùc thoâng tin hôïp ñoàng chi tieát khi hôïp ñoàng cuûa khaùch haøng naøy keát thuùc, chöông trình töï ñoäng xoaù trong tblOrderDetails vaø lö tröõ laïi trong baûng tblOrderDetailsHist.*/ CREATE TABLE tblorderdetailshist ( ItemID int(3) unsigned DEFAULT '0' , OrderID int(3) unsigned DEFAULT '0' , No tinyint(3) unsigned DEFAULT '0' , Qtty int(3) unsigned DEFAULT '0' , Price int(3) unsigned DEFAULT '0' , Discount int(3) unsigned DEFAULT '0' , Amount bigint(3) unsigned DEFAULT '0' ); Khi Insert döõ lieäu vaøo baûng, coù 3 tröôøng hôïp xaûy ra: insert döõ lieäu vaøo baûng töø caùc giaù trò cuï theå, insert vaøo baûng laáy giaù trò töø moät hay nhieàu baûng khaùc, vaø cuoái cuøng laø keát hôïp caû hai tröôøng hôïp treân. 5.7.1. Insert vaøo baûng laáy giaù trò cuï theå: INSERT INTO [] Values (data_value) Ví duï 8-16: INSERT döõ lieäu vaøo baûng töø giaù trò cuï theå Giaùo vieân: Phaïm Höõu Khang
- COMPUTER LEARNING CENTER WWW.HUUKHANG.COM /* Theâm maåu tin vôùi moät soá coät */ INSERT INTO TBLCUSTOMERS (CustName,Username,Password, Address,Tel,FaxNo,Email,Contact, CountryCode,ProvinceCode) Values ('Khach San CENTURY', ‘century’, ’1111’,’5 Le Loi’,’8676767’,’8767676’, ‘century@yahoo.com’,’Hoang Anh’, ‘VNA’,’HCM’) /* Theâm maåu tin vôùi moät soá coät */ INSERT INTO TBLORDERS(OrderID,OrderDate, CustID,Description,Amount) Values ('11',curdate(),’1', 'Dat hang qua mang', 20000) 5.7.2. Insert vaøo baûng laáy giaù trò töø baûng khaùc: INSERT INTO [] Select [columnname list] From Where Ví duï 8-17: INSERT vaøo baûng töø giaù trò cuûa baûng khaùc /* Theâm maåu tin vôùi caùc coät cuï theå */ /* Chuyeån taát caû nhöõng hôïp ñoàng chi tieát töø baûng tblOrderDetails vaøo baûng tblOrderDetailsHist */ INSERT INTO TBLORDERDETAILSHIST( ItemID, OrderID, No, Qtty, Price, Discount, Amount) SELECT ItemID, OrderID, No, Qtty, Price, Discount, Amount From tblOrderDetails ORDER BY OrderID ASC /* Coù theå vieát laïi theâm maåu tin vôùi taát caû caùc coät nhö sau Chuyeån taát caû nhöõng hôïp ñoàng chi tieát töø baûng tblOrderDetails vaøo baûng tblOrderDetailsHist vôùi ñieàu kieän soá coät töông öùng trong baûng tblOrderDetails baèng vôùi soá coät trong baûng tblOrderDetailsHist, baïn coù theå vieát laïi nhö sau */ Giaùo vieân: Phaïm Höõu Khang
- COMPUTER LEARNING CENTER WWW.HUUKHANG.COM INSERT INTO TBLORDERDETAILSHIST SELECT * from tblOrderDetails ORDER BY OrderID ASC 5.7.3. Insert vaøo baûng laáy giaù trò cuï theå, baûng khaùc: INSERT INTO [] Select [columnname list], valueslist From Where ORDER BY ASC/DESC Ví duï 8-18: INSERT vaøo baûng töø giaù trò cuï theå, baûng khaùc /* Theâm maåu tin vôùi caùc coät cuï theå */ /* Chuyeån taát caû nhöõng hôïp ñoàng chi tieát töø baûng tblOrderDetails vaøo baûng tblOrderDetailsHist. Giaû söû raèng, ngoaøi nhöõng coät gioáng nhö tblOrderDetails, baûng tblOrderDetailsHist coøn coù theâm coät Tranferdate. */ INSERT INTO TBLORDERSHIST( OrderID, OrderDate, ReceiveFolio, CustID, Descriion, Amount, Historydate) SELECT OrderID, OrderDate, ReceiveFolio, CustID, Descriion, Amount, getdate() as Historydate From tblOrders where Month(OrderDate)=12 Order by OrderDate,CustID /* Coù theå vieát laïi theâm maåu tin vôùi taát caû caùc coät nhö sau */ /* Chuyeån taát caû nhöõng phieáu thu trong thaùng 12 töø baûng tblOrders vaøo baûng tblOrdersHist vôùi ñieàu kieän soá coät töông öùng trong baûng tblOrders baèng vôùi soá coät trong baûng tblOrdersHist, baïn coù theå vieát laïi nhö sau */ INSERT INTO TBLORDERDETAILSHIST( ItemID, OrderID, No, Qtty, Price, Discount, Amount,TranferDate) SELECT ItemID, Giaùo vieân: Phaïm Höõu Khang
- COMPUTER LEARNING CENTER WWW.HUUKHANG.COM OrderID, No, Qtty, Price, Discount, Amount,CurDate() From tblOrderDetails ORDER BY OrderID ASC 5.8. Phaùt bieåu SQL daïng UPDATE Phaùt bieåu SQL daïng UPDATE duøng caäp nhaät laïi döõ lieäu ñaõ toàn taïi trong baûng. Khi UPDATE duøng caäp nhaät döõ lieäu cho moät maåu tin chæ ñònh naøo ñoù thöôøng UPDATE söû duïng chung vôùi meänh ñeà WHERE. Neáu caàn caäp nhaät taát caû caùc maåu tin trong baûng baïn coù theå boû meänh ñeà WHERE. Phaùt bieåu naøy coù caáu truùc nhö sau: /* neáu caäp nhaát giaù trò cuï theå */ Update Set =,[=] [where ] /* neáu caäp nhaát giaù trò laø keát quaû traû veà töø phaùt bieåu select treân moät hay nhieàu baûng khaùc */ Update Set = [where ] UPDATE coù theå aûnh höôûng ñeán nhieàu baûng, nhöng caäp nhaát giaù trò chæ coù hieäu löïc treân baûng ñoù, baïn coù theå tham khaûo phaàn naøy trong chöông keá tieáp JOIN TABLE. Caäp nhaät giaù trò cuï theå vaøo moät hay nhieàu coät minh hoaï trong ví duï 8-18 sau: Ví duï 8-18: UPDATE treân caùc coät döõ lieäu töø giaù trò cuï theå /* caäp nhaät coät vôùi giaù trò cuï theå */ Update tblCustomers Set CustName='Cong ty TNHH Coca cola Vietnam' Where CustID=‘12’ /* caäp nhaät moät coät vôùi giaù trò coät khaùc trong baûng tblOrderDetails*/ Update tblOrders Set Amount= Amount*.01, TotalAmount=Amount*0.1 Where Month(OrderDate)=12 /* caäp nhaät moät coät vôùi giaù trò töø baûng khaùc*/ /* caäp nhaät coät Price vôùi giaù trò töø coät Cost cuûa baûng tblItems, khai baùo sau chæ ñuùng trong MySQL 4.1 trôû veà sau*/ Update tblOrderDetails Giaùo vieân: Phaïm Höõu Khang
- COMPUTER LEARNING CENTER WWW.HUUKHANG.COM Set Price= (select distinct Cost] from tblItems where ItemID=tblOrderDetails.ItemID) Where Price1000) 5.9. Phaùt bieåu SQL daïng DELETE Vôùi phaùt bieåu SQL daïng DELETE thì ñôn giaûn hôn. Khi thöïc hieän leänh xoaù maåu tin trong baûng chuùng ta chæ caàn quan taâm ñeán teân baûng, vaø meänh ñeà WHERE ñeå xoaù vôùi nhöõng maåu tin ñaõ choïn loïc neáu coù. Cuù phaùp cuûa Delete: Delete from Where Vôùi meänh ñeà WHERE gioáng nhö baát kyø meänh ñeà WHERE naøo trong phaùt bieåu SELECT hay UPDATE vaø INSERT cuûa baát kyø öùng duïng cô sôû döõ lieäu naøo coù söû duïng SQL. Conditions coù theå laø pheùp toaùn giöõa caùc coät vaø giaù trò, nhöng cuõng coù theå giaù trò laø keát quaû traû veà töø moät phaùt bieåu SELECT khaùc. Ghi chuù: Khoâng coù khaùi nieäm xoùa giaù trò trong moät coät, vì xoùa giaù trò moät coät ñoàng nghóa vôùi caäp nhaät coät ñoù baèng giaù trò roãng. Ví duï 8-19: Xoùa maåu tin vôùi phaùt bieåu SQL daïng DELETE /* Xoaù maåu tin töø baûng vôùi ñieàu kieän */ Delete from tblCustomers Where CustName is null Trong tröôøng hôïp coù raøng buoäc veà quan heä cuûa döõ lieäu, thì xoùa maåu tin phaûi tuaân thuû theo quy taéc: Xoaù maåu tin con tröôùc roài môùi xoaù maåu tin cha. Chaúng haïn, trong tröôøng hôïp ta coù 2 baûng: hôïp ñoàng baùn haøng (tblOrders) vaø hôïp ñoàng baùn haøng chi tieát (tblOrderDetails). Ñeå xoaù moät hôïp ñoàng baïn caàn xoùa maåu tin trong baûng tblOrders tröôùc roài môùi ñeán caùc maåu tin trong baûng tblOrderDetails. Ví duï 8-20: Xoaù maåu tin vôùi Delete /* Xoaù maåu tin töø baûng con */ Delete from tblOrderDetails where OrderID=123 /* Xoaù maåu tin töø baûng cha */ Delete from tblOrders where OrderID=123 Giaùo vieân: Phaïm Höõu Khang
- COMPUTER LEARNING CENTER WWW.HUUKHANG.COM Baïn coù theå thöïc hieän moät phaùt bieåu SQL daïng DELETE vôùi ñieàu kieän trong meänh ñeà WHERE laáy giaù trò traû veà töø phaùt bieåu SELECT töø baûng khaùc, khai baùo nhö vaäy chæ coù hieäu löïc trong cô sôû döõ lieäu MySQL phieân baûn 8.1 trôû veà sau hay trong cô sôû döõ lieäu SQL Server vaø Oracle. Ví duï 8-21: Xoaù maåu tin theo quy taéc coù raøng buoäc quan heä /* Xoaù maåu tin töø baûng vôùi ñieàu kieän laáy giaù trò töø baûng khaùc */ Delete from tblOrderDetails where ItemID in (select ItemID from tblItems where ItemName like 'IT%') 6. PHAÙT BIEÅU SQL DAÏNG JOIN Ngoaøi caùc phaùt bieåu SQL vôùi 4 daïng treân, trong phaàn keá tieáp, chuùng toâi trình baøy moät soá phaùt bieåu SQL daïng Select ñeåâ keát noái döõ lieäu giöõa caùc baûng coù quan heä vôùi nhau, nhöõng phaùt bieåu seõ trình baøy trong chöông 5 nhö: Khaùi nieäm JOIN Phaùt bieåu INNER JOIN Phaùt bieåu LEFTJOIN Phaùt bieåu RIGHT JOIN 6.1. Khaùi nieäm veà quan heä Ñeå phaùt trieån öùng duïng Web baèng baát kyø loaïi cô sôû döõ lieäu naøo, giai ñoaïn phaân tích thieát keá heä thoáng cöïc kyø quan troïng. Neáu keát quaû phaân tích khoâng toái öu thì öùng duïng ñoù khoâng theå ñaït ñöôïc giaù trò kyõ thuaät cuõng nhö giaù trò thöông maïi. Thieát keá cô sôû döõ lieäu khoâng toái öu, chuùng coù theå daãn ñeán vieäc chöông trình chaïy chaäm vaø khoâng beàn vöõng. Moät khi öùng duïng chaïy chaäm ñi do cô sôû döõ lieäu khoâng toái öu thì raát coù theå baïn phaûi thieát keá vaø xaây döïng laïi töø ñaàu toaøn boä caáu truùc cuûa chöông trình vaø cô sôû döõ lieäu. Xuaát phaùt töø lyù do naøy, khi xaây döïng moät öùng duïng thoâng tin quaûn lyù, chuùng ta caàn phaûi qua nhöõng böôùc phaân tích thieát keá heä thoáng kyõ löôõng ñeå coù ñöôïc moâ hình quan heä vaø ERD tröôùc khi ñeán caùc moâ hình chöùc naêng chi tieát. Tuy nhieân, trong lyù thuyeát moät soá kieán thöùc cô baûn baét buoäc baïn phaûi thöïc hieän theo moâ hình heä thoáng öùng vôùi nhöõng quan heä toaøn veïn, nhöng trong thöïc teá, do tính ñaëc thuø cuûa öùng duïng, thöôøng baïn phaûi thieát keá laïi moâ hình theo nhu caàu caân ñoái giöõa ñoä phöùc taïp vaø tính toái öu. Trong öùng duïng baùn haøng qua maïng Test ñaõ trình baøy trong chöông 3, khi quan taâm ñeán moät hôïp ñoàng treân maïng, ngoaøi nhöõng thoâng tin lieân laïc veà khaùch haøng, baïn caàn phaûi löu tröõ döõ lieäu khaùc nhö chieát haøng mua, phöông thöùc traû tieàn, phöông thöùc giao haøng,... Vaán ñeà ñöôïc thaûo luaän ôû ñaây, moãi hôïp ñoàng coù nhì6u maët haøng chi tieát. Trong tröôøng hôïp naøy, chuùng ta coù 6 thöïc theå lieân quan nhö sau, thöïc theå danh muïc Customers (thoâng tin lieân laïc cuûa khaùch haøng), Orders (hôïp ñoàng mua haøng), OrderDetails (chi tieát haøng mua), Items (danh muïc saûn phaåm). Giaùo vieân: Phaïm Höõu Khang
- COMPUTER LEARNING CENTER WWW.HUUKHANG.COM Customers 1-n Orders Items 1-n 1-n Order Details Sô ñoà 8-1: Moâ hình quan heä Giaû söû raèng khi nhaäp soá lieäu vaøo cô sôû döõ lieäu, öùng vôùi hôïp ñoàng coù maõ 101, cuûa khaùch haøng coù teân Nguyeãn Vaên A, ... coù hai saûn phaåm chi tieát: 11 (Nöôùc ngoït) vaø 32 (xaø phoøng Lux). Trong tröôøng hôïp naøy baïn ñang coù moät maåu tin hôïp ñoàng trong baûng tblCustomers, moät maåu tin hôïp ñoàng trong baûng tblOrders vaø hai maåu tin trong baûng tblOrderDetails. Neáu muoán bieát thoâng tin hôïp ñoàng cuûa khaùch haøng A, roõ raøng baïn caàn duøng phaùt bieåu SELECT vôùi meänh ñeà keát hôïp töø 3 baûng treân. Keát quaû traû veà 2 maåu tin laø söï keát hôïp thoâng tin töø hai baûng tblCustomers, tblOrders vaø tblOrderDetails. Khi thöïc thi phaùt bieåu SQL daïng SELECT öùng vôùi cô sôû döõ lieäu nhö treân baïn phaûi duyeät qua hai maåu tin. Taát nhieân, khi vieát öùng duïng thì ñieàu naøy chaáp nhaän ñöôïc, vaø coù theå coi laø toái öu. Giaû söû raèng, öùng duïng naøy ñöôïc phaùt trieån treân WEB caàn löu taâm ñeán vaán ñeà toái öu toác ñoä truy vaán thì sao? Ngöôøi thieát keá cô sôû döõ lieäu trong tröôøng hôïp naøy phaûi thay ñoåi laïi caáu truùc ñeå taêng toác ñoä truy caäp qua maïng khi xöû lyù treân cô sôû döõ lieäu cuûa ngöôøi duøng. 6.2. Khaùi nieäm veà meänh ñeà JOIN Trong haàu heát phaùt bieåu SELECT, phaàn lôùn keát quaû maø baïn mong muoán laáy veà ñeàu coù lieân quan ñeán moät hoaëc nhieàu baûng khaùc nhau. Trong tröôøng hôïp nhö vaäy, khi truy vaán döõ lieäu baïn caàn söû duïng meänh ñeà JOIN ñeå keát hôïp döõ lieäu treân hai hay nhieàu baûng laïi vôùi nhau. Khi söû duïng JOIN, baïn caàn quan taâm ñeán tröôøng (coät) naøo trong baûng thöù nhaát coù quan heä vôùi tröôøng (coät) naøo trong baûng thöù hai. Neáu moâ hình quan heä cuûa baïn khoâng toái öu hay khoâng ñuùng, quaûn trình söû duïng JOIN seõ cho keát quaû traû veà khoâng nhö yù muoán. Trôû laïi öùng duïng baùn haøng qua maïng trong giaùo trình naøy, khi xuaát moät hôïp ñoàng baùn haøng cho khaùch haøng, theo thieát keá trong cô sôû döõ lieäu chuùng ta coù raát nhieàu baûng lieân quan ñeán nhau. Chaúng haïn, neáu quan taâm baùn haøng thì baùn cho ai. Suy ra, lieân quan ñeán thoâng tin khaùch haøng, baùn saûn phaåm gì cho hoï thì lieân quan ñeán maõ saûn phaåm, neáu khaùch haøng traû tieàn thì lieân quan ñeán phieáu thu, neáu khaùch haøng coù coâng nôï thì lieân quan ñeán nôï kyø tröôùc... Trong phaân naøy, chuùng toâi tieáp tuïc thieát keá moät soá baûng döõ lieäu cuøng vôùi kieåu döõ lieäu töông öùng vaø quan heä giöõa caùc baûng ñöôïc moâ taû nhö sau: Giaùo vieân: Phaïm Höõu Khang
- COMPUTER LEARNING CENTER WWW.HUUKHANG.COM tblCustomers (danh saùch khaùch haøng) [CustID] int auto_increment Primary key, [CustName] [varchar] (50) NULL , [Address] [varchar] (100) NULL, [Tel] [varchar] (20) NULL, [FaxNo] [varchar] (20) NULL, [Email] [varchar] (50) NULL, [Contact] [varchar] (50) NULL [Country] [varchar] (3) NULL, [Province] [varchar] (3) NULL tblOrders (Hôïp ñoàng baùn haøng) [OrderID] [int] Not null auto_increment Primary Key, [OrderDate] [date] NULL , [CustID] int , [Description] [varchar] (200) NULL , [ShipCost] [float] NULL , [TranID] [tinyint] NULL , [PaymentID] [tinyint] NULL , [Amount] [float] NULL , [TotalAmount] [float] NULL , tblOrderDetails (Hôïp ñoàng baùn haøng chi tieát) [SubID] [int] auto_increment NOT NULL , [OrderID] int , [ItemID] int, [No] int, [Qtty] [int] NULL , [Price] int NULL , [Discount] [Float] NULL , [Amount] [Float] NULL tblItems (Danh saùch saûn phaåm) [ItemID] int auto_increment Primary key, [ItemName] [varchar] (200) NULL , [Unit] [nvarchar] (20) NULL , [Cost] [Float] NULL , [Active] [tinyint] NOT NULL , [Category] int Baïn coù theå tìm thaáy caùc baûng döõ lieäu coøn laïi trong döõ lieäu Test trong ñóa ñính keøm theo saùch. 6.3. Meänh ñeà INNER JOIN Phaùt bieåu SQL daïng SELECT coù söû duïng meänh ñeà INNER JOIN thöôøng duøng ñeå keát hôïp hai hay nhieàu baûng döõ lieäu laïi vôùi nhau, cuù phaùp cuûa SELECT coù söû duïng meänh ñeà INNER JOIN: SELECT [SELECT LIST] FROM INNER JOIN ON WHERE ORDER BY [ASC / DESC] Neáu baïn caàn laáy ra moät soá coät trong caùc baûng coù keát noái laïi vôùi nhau baèng meänh ñeà INNER JOIN thì cuù phaùp naøy vieát laïi nhö sau: SELECT [FIELD1,FIELD2, ...] FROM INNER JOIN Giaùo vieân: Phaïm Höõu Khang
- COMPUTER LEARNING CENTER WWW.HUUKHANG.COM ON WHERE ORDER BY [ASC / DESC] Ví duï 8-23: INNER JOIN vôùi moät soá coät chæ ñònh /* in ra danh saùch khaùch haøng mua haøng trong thaùng 10 */ Select CustName,OrderID, OrderDate,Amount, TotalAmount from tblCustomers inner join tblOrders on tblCustomers.CustID = tblOrders.CustID where month (OrderDate) = 10 order by CustName Keát quaû traû veà nhö sau: CustName OrderID OrderDate .. TotalAmount --------------------------------------------- CENTURY Hotel 13 2001-10-17 388800000 CENTURY Hotel 14 2001-10-18 518400000 CENTURY Hotel 16 2001-10-17 388800000 CENTURY Hotel 17 2001-10-18 14400000 CENTURY Hotel 18 2001-10-18 12960000 CENTURY Hotel 110 2001-10-18 216000000 Plaza Hotel 12 2001-10-17 403200000 Plaza Hotel 19 2001-10-17 86400000 Plaza Hotel 11 2001-10-17 576000000 Plaza Hotel 15 2001-10-17 288000000 Neáu baïn caàn laáy ra taát caû caùc coät trong caùc baûng coù keát noái laïi vôùi nhau baèng meänh ñeà INNER JOIN, cuù phaùp treân coù theå vieát laïi nhö sau: SELECT first_tablename.*, second_tablename.* [,next table name] FROM INNER JOIN ON [INNER JOIN ON ] WHERE ORDER BY [ASC / DESC] Ví duï 8-24: INNER JOIN vôùi taát caùc tröôøng lieân quan /* in ra danh saùch khaùch haøng mua haøng trong thaùng 10 */ Select CustID,CustName,OrderID, OrderDate,TotalAmount from tblCustomers inner join tblOrders On TblCustomers.CustID=tblOrders.CustID where month (OrderDate) = 10 order by CustName DESC Keát quaû traû veà nhö sau: Giaùo vieân: Phaïm Höõu Khang
- COMPUTER LEARNING CENTER WWW.HUUKHANG.COM CustID CustName .. OrderID ..TotalAmount ------ --------------------------------------- 13 Plaza Hotel .. 11 .. 576000000 13 Plaza Hotel .. 15 .. 288000000 12 Plaza Hotel .. 12 . . 403200000 12 Plaza Hotel .. 19 .. 86400000 16 CENTURY Hotel .. 13 .. 388800000 16 CENTURY Hotel .. 14 .. 518400000 16 CENTURY Hotel .. 16 .. 388800000 16 CENTURY Hotel .. 17 .. 14400000 16 CENTURY Hotel .. 18 .. 12960000 16 CENTURY Hotel .. 110 .. 216000000 Neáu trong nhöõng baûng caàn keát noái coù teân tröôøng (coät) gioáng nhau thì khi thöïc thi phaùt bieåu SQL daïng SELECT phaûi chæ roõ coät thuoäc baûng naøo. Trong tröôøng hôïp caû hai cuøng laáy döõ lieäu ra thì baïn caàn chuyeån aùnh xaï teân khaùc cho coät thoâng qua meänh ñeà AS, ví duï nhö: SELECT first_tablename.CustID as CUSTID, second_tablename.CustID as CUSTID FROM INNER JOIN ON WHERE ORDER BY [ASC / DESC] Neáu trong nhöõng baûng caàn keát noái ñoù coù teân tröôøng (coät) gioáng nhau vaø khoâng ñöôïc chæ roõ nhö tröôøng hôïp treân khi khai baùo trong cô sôû döõ lieäu SQL Server, khi thöïc thi phaùt bieåu SQL daïng SELECT baïn seõ bò loãi, chaúng haïn nhö: SELECT first_tablename.*, second_tablename.* FROM INNER JOIN ON WHERE ORDER BY [ASC / DESC] Server: Msg 209, Lecel 16, State Line 1 Ambiguous column name 'CustID' Tuy nhieân, vôùi phaùt bieåu treân baïn coù theå thöïc thi trong cô sôû döõ lieäu MySQL. Ngoaøi ra, phaùt bieåu SQL daïng SELECT söû duïng INNER JOIN baïn coù theå aùnh xaï (alias) teân cuûa baûng thaønh teân ngaén goïn ñeå deã tham chieáu veà sau. Thöïc ra phaùt bieåu ALIAS coù yù nghóa gioáng nhö AS vôùi teân coät trong baûng thaønh teân coät khaùc trong phaùt bieåu SELECT. Select p.*,s.* from tablename1 inner join tablename2 On tablename1.field1 = tablename2.field2 Ví duï 8-25: INNER JOIN vôùi aùnh xaï teân baûng /* in ra danh saùch khaùch haøng mua haøng trong thaùng 10 */ Giaùo vieân: Phaïm Höõu Khang
- COMPUTER LEARNING CENTER WWW.HUUKHANG.COM Select c.CustName, s.OrderID,s.OrderDate, s.TotalAmount from tblCustomer c inner join tblOrders s On c.CustID=s.CustID where month (s.OrderDate) = 10 order by c.CustName DESC Keát quaû traû veà nhö sau: CustName OrderID OrderDate .. TotalAmount ----------------------------------------------CENTURY Hotel 13 2001- 10-17 .. 388800000 CENTURY Hotel 14 2001-10-18 .. 518400000 CENTURY Hotel 16 2001-10-17 .. 388800000 CENTURY Hotel 17 2001-10-18 .. 14400000 CENTURY Hotel 18 2001-10-18 .. 12960000 CENTURY Hotel 11 2001-10-18 .. 216000000 Plaza Hotel 12 2001-10-17 .. 403200000 Plaza Hotel 19 2001-10-17 .. 86400000 Plaza Hotel 11 2001-10-17 .. 576000000 Plaza Hotel 15 2001-10-17 .. 288000000 Taát nhieân, baïn cuõng coù theå vieát phaùt bieåu treân öùng vôùi töøng coät muoán laáy ra baèng caùch khai baùo teân coät. 6.4. Meänh ñeà Left Join Tröôøng hôïp baïn mong muoán keát quaû laáy ra trong hai baûng keát hôïp nhau theo ñieàu kieän: Nhöõng maåu tin baûng beân traùi toàn taïi öùng vôùi nhöõng maåu tin ôû baûng beân phaûi khoâng toàn taïi baïn haõy duøng meänh ñeà LEFT JOIN trong phaùt bieåu SQL daïng SELECT, cuù phaùp coù daïng: select from lefttablename LEFT JOIN righttablename on lefttabkename.field1=righttablename.field2 Where Order by ASC/DESC Chaúng haïn, baïn choïn ra taát caû caùc saûn phaåm (vôùi caùc coät) coù hay khoâng coù doanh soá baùn trong thaùng hieän taïi. Moät soá saûn phaåm khoâng baùn trong thaùng seõ coù coät Amount coù coät Amount giaù trò NULL. Ví duï 8-26: SELECT duøng LEFT JOIN /* in ra danh saùch saûn phaåm baùn trong thaùng 10 */ select ItemID,ItemName,Amount from tblItems left join tblOrderDetails on tblItems.ItemID=tblOrderDetails.ItemID order by Amount Keát quaû traû veà nhö sau: ItemID ItemName Amount ---------------------------------------------- 12 ASW-60VP NULL Giaùo vieân: Phaïm Höõu Khang
- COMPUTER LEARNING CENTER WWW.HUUKHANG.COM 13 ASW-60VT NULL 14 ASW-660T 120V TW 29340 NULL 14 ASW-685V 120V TW 29440 NULL 15 ASW60VP 220V 34571 NULL 16 ASW-45Z1T1 2960000 17 ASW-45Y1T 127V 14400000 18 ASW-45Y1T 220V 72000000 19 ASW-45Y1T 220V 86400000 20 ASW-45Z1T 15200000 ... 6.5. Meänh ñeà Right Join Ngöôïc laïi vôùi phaùt bieåu SQL daïng SELECT söû duïng meänh ñeà LEFT JOIN laø phaùt bieåu SQL daïng SELECT söû duïng meänh ñeà RIGHT JOIN seõ xuaát döõ lieäu cuûa baûng beân phaûi cho duø döõ lieäu cuûa baûng beân traùi khoâng toàn taïi, cuù phaùp coù daïng: Select From lefttablename RIGHT JOIN righttablename On lefttabkename.field1=righttablename.field2 Where Order by ASC/DESC Trong ví duï sau, baïn coù theå choïn ra taát caû caùc saûn phaåm coù hay khoâng coù doanh soá baùn trong thaùng hieän taïi. Caùc saûn phaåm khoâng toàn taïi doanh soá baùn seõ khoâng hieän ra. Ví duï 8-27: SELECT duøng RIGHT JOIN /* in ra danh saùch saûn phaåm baùn trong thaùng ngaøy 17 */ /* trong phaùt bieåu SELECT naøy coù söû duïng meänh ñeà WHERE söû duïng phaùt bieåu SELECT khaùc, keát quaû cuûa SELECT trong meänh ñeà WHERE traû veà moät maûng OrderID */ Select ItemName,Qtty, Price,Amount From tblItems Right join tblOrderDetails On tblItems.ItemID=tblOrderDetails.ItemID Where OrderID in (12,14,23,15) Order by ItemID Keát quaû traû veà nhö sau: ItemName Qtty Price Amount ---------------------------------------------- ASW-45Y1T 127V SDIA29350 11000 12000 58400000 ASW-45Y1T 127V SDIA29350 10000 12000 44000000 ASW-45Y1T 127V SDIA 29350 10000 12000 14400000 ASW-45Y1T 127V SDIA 29350 10000 12000 44000000 ASW-45Y1T 127V SDIA 29350 11000 12000 58400000 ASW-45Y1T 127V SDIA 29350 10000 12000 44000000 ASW-45Y1T 127V SDIA 29350 11000 12000 58400000 ASW-45Y1T 220V ARG 29391 6000 12000 86400000 ASW-45Z1T 9000 12000 29600000 ASW-45Z1T 9000 12000 29600000 ... Giaùo vieân: Phaïm Höõu Khang
- COMPUTER LEARNING CENTER WWW.HUUKHANG.COM 6.6. Pheùp toaùn hôïp (union) Union khoâng gioáng nhö nhöõng meänh ñeà JOIN ñaõ giôùi thieäu treân ñaây. Union laø pheùp toaùn duøng ñeå noái hai hay nhieàu caâu truy vaán daïng Select laïi vôùi nhau. Ñoái vôùi JOIN, baïn coù theå keát noái döõ lieäu ñöôïc thöïc hieän theo chieàu ngang. Ñoái vôùi Union baïn keát noái döõ lieäu ñöôïc thöïc hieän theo chieàu doïc. Ñeå choïn ra nhöõng khaùch haøng thöôøng xuyeân trong tblCustomers, keát quaû traû veà laø danh saùch caùc khaùch haøng thöôøng xuyeân. Ví duï 8-28: Khaùch haøng thöôøng xuyeân trong tblCustomers Select CustID,CustName from tblCustomers Keát quaû traû veà nhö sau: CustID CustName ---------- ----------------- 13 New World Hotel 12 Kinh Do Hotel 16 CENTURY Hotel 10 PLAZA Hotel Ñeå choïn ra nhöõng khaùch haøng vaõng lai trong tblTempCustomers, keát quaû traû veà laø danh saùch caùc khaùch haøng vaõng lai. Ví duï 8-29: Khaùch haøng vaõng lai trong tblTempCustomers Select CustID,CustName from tblTempCustomers Keát quaû traû veà nhö sau: CustID CustName ---------- --------------------------------- 23 Cong ty nuoc giai khat ‘12’COLA 24 Cong ty nuoc giai khat PEPSI 25 Cong ty nuoc giai khat REDBULK 26 Cong ty nuoc giai khat TRIBICO Neáu duøng pheùp toaùn UNION ñeå keát noái hai baûng treân, keát quaû traû veà laø danh saùch caû hai loaïi khaùch haøng trong cuøng moät recordset. Ví duï 8-30: SELECT söû duïng pheùp hôïp UNION Select CustID,CustName From tblCustomers UNION Select CustID,CustName From tblTempCustomers Keát quaû traû veà nhö sau: CustID CustName Giaùo vieân: Phaïm Höõu Khang
- COMPUTER LEARNING CENTER WWW.HUUKHANG.COM ---------- ----------------------------------- 23 Cong ty nuoc giai khat ‘12’COLA 24 Cong ty nuoc giai khat PEPSI 25 Cong ty nuoc giai khat REDBULK 26 Cong ty nuoc giai khat TRIBICO 12 Kinh Do Hotel 10 PLAZA Hotel 16 CENTURY Hotel 13 New World Hotel Ghi chuù: Khi söû duïng pheùp toaùn Union trong phaùt bieåu SQL daïng Select, baïn caàn löu yù caùc quy ñònh sau: Taát caû nhöõng truy vaán trong UNION phaûi cuøng soá coät hay tröôøng. Neáu truy vaán thöù nhaát coù hai coät thì truy vaán thöù hai ñöôïc söû duïng UNION cuõng phaûi coù hai coät töông töï. Khi söû duïng UNION, nhöõng coät naøo coù teân coät hay bí danh (alias) môùi thì keát quaû traû veà seõ coù töïa ñeà (header) cuûa töøng coät vaø teân laø teân coät cuûa truy vaán thöù nhaát. Kieåu döõ lieäu trong caùc coät cuûa truy vaán 2 töông thích vôùi kieåu döõ lieäu caùc coät töông öùng trong truy vaán thöù nhaát. Trong UNION baïn coù theå keát hôïp nhieàu caâu truy vaán laïi vôùi nhau. Keát quaû hieän ra theo thöù töï cuûa truy vaán töø döôùi leân treân. 6.7. SQL daïng thay ñoåi vaø ñònh nghóa cô sôû döõ lieäu 6.7.1. Phaùt bieåu SQL daïng CREATE Phaùt bieåu SQL daïng CREATE duøng ñeå taïo cô sôû döõ lieäu vaø nhöõng ñoái töôïng cuûa cô sôû döõ lieäu trong MySQL, SQL Server, Oracle, ..., chuùng cuù phaùp nhö sau: CREATE Database CREATE OBJECT TYPE: Loaïi ñoái töôïng cuûa cô sôû döõ lieäu ví duï nhö Procedure, Table, View,... OBJECT NAME: Teân cuûa ñoái töôïng trong cô sôû döõ lieäu SQL nhö sp_IC, tblEmployer, ... 6.7.2. Taïo cô sôû döõ lieäu - Create database Khi xaây döïng cô sôû döõ lieäu, baïn baét ñaàu töø moâ hình cô sôû döõ lieäu ERD, hay töø moät giai ñoaïn naøo ñoù trong quy trình phaân tích thieát keá heä thoáng. Ñeå taïo cô sôû döõ lieäu treân MySQL hay SQL Server baïn söû duïng cuù phaùp sau: CREATE DATABASE Cuù phaùp ñaày ñuû cuûa phaùt bieåu taïo cô sôû döõ lieäu nhö sau, neáu baïn söû duïng cô sôû döõ lieäu SQL Server: CREATE DATABASE [ ON [PRIMARY] ( [Name= ,] FileName= [, SIZE= ] [, MAXSIZE= ][, FILEGROWTH = ] )] Giaùo vieân: Phaïm Höõu Khang
- COMPUTER LEARNING CENTER WWW.HUUKHANG.COM [ LOG ON ( [Name= ,] FileName= [, SIZE= ] [, MAXSIZE= ][, FILEGROWTH = ] )] [COLLATE ] [For Load | For Attach] 6.7.3. Dieãn giaûi CREATE Database trong SQL Server ON: Duøng ñeå ñònh nghóa nôi chöùa cô sôû döõ lieäu vaø khoâng gian chöùa taäp tin log. NAME: Duøng ñònh nghóa teân cuûa cô sôû döõ lieäu. Teân naøy duøng tham chieáu khi goïi ñeán cô sôû döõ lieäu, teân ñöôïc duøng cho quaù trình backup, export, Import, Shrink cô sôû döõ lieäu ñoù. FILENAME: Teân taäp tin cô sôû döõ lieäu löu trong ñóa cöùng, thoâng thöôøng khi caøi SQL Server leân oå ñóa naøo thì giaù trò maëc ñònh cho pheùp löu taäp tin ñeán thö muïc ñoù. Tuy nhieân, neáu muoán baïn cuõng coù theå thay ñoåi vò trí caùc file naøy. Khi taïo cô sôû döõ lieäu, baïn ñaõ ñònh nghóa vò trí ñaët taäp tin ôû thö muïc naøo thì khoâng theå di chuyeån moät caùch thuû coâng (nhö duøng Explorer cuûa Windows), vì laøm ñieàu ñoù thaät nguy hieåm nhaát laø khi döõ lieäu trong cô sôû döõ lieäu ñang coù giaù trò kinh teá. SIZE: Dung löôïng cuûa cô sôû döõ lieäu khi khôûi taïo chuùng. Thoâng thöôøng giaù trò maëc ñònh laø 1 MB. Dung löôïng phaûi laø soá nguyeân, coù theå taêng theâm baèng caùch söû duïng thuû tuïc Shrink trong SQL Server. MAXSIZE: Dung löôïng lôùn nhaát, khi dung löôïng cô sôû döõ lieäu taêng leân ñeán möùc MaxSize thì döøng laïi. Neáu khi dung löôïng baèng MaxSize, caùc chuyeån taùc coù theå bò huyû boû hay traû veà loãi khoâng theå thöïc hieän ñöôïc, vaø coù theå laøm cho cô sôû döõ lieäu cuûa baïn bò treo. Ñeå traùnh ñieàu naøy xaûy ra, thì ngöôøi quaûn trò cô sôû döõ lieäu phaûi thöôøng xuyeân theo gioûi quaù trình taêng dung löôïng cô sôû döõ lieäu theo thôøi gian, ñeå coù bieän phaùp traùnh moïi ruûi ro coù theå xaûy ra. FILEGROWTH: Dung löôïng khôûi taïo cuøng dung löôïng toái ña cho pheùp taêng trong quaù trình theâm döõ lieäu vaøo cô sôû döõ lieäu. Nhaèm töï ñoäng hoùa, chuùng ta phaûi thieát laäp quaù trình taêng töï ñoäng theo chæ soá KB cho tröôùc hay tyû leä phaàn traêm theo dung löôïng ñang coù. LOG ON: Log on cho pheùp baïn quaûn lyù nhöõng chuyeån taùc xaûy ra trong quaù trình söû duïng cô sôû döõ lieäu cuûa SQL Server. Xaây döïng cô sôû döõ lieäu Test Nhö ñaõ trình baøy ôû treân, sau ñaây ví duï taïo cô sôû döõ lieäu Test coù cuù phaùp nhö sau: Ví duï 8-31: Taïo cô sôû döõ lieäu Test trong SQL Server USE master GO CREATE DATABASE Test ON ( NAME = Test, FILENAME = 'c:\mssql7\data\Testdat.mdf', Giaùo vieân: Phaïm Höõu Khang
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Cách thiết lập hệ thống mạng Ubuntu quản lý tập trung với LDAP
19 p | 200 | 95
-
SMPlayer - Xem hầu hết các định dạng video và cả video bị lỗi
1 p | 122 | 19
-
Cách chuyển mã văn bản với Unikey
3 p | 110 | 12
-
Cách định dạng mã nguồn mở PHP (Personal Home Page) phần 1
15 p | 77 | 11
-
Thiết kế web bằng mã nguồn mở và web viết bằng tay
3 p | 140 | 11
-
Cách định dạng mã nguồn mở PHP (Personal Home Page) phần 2
15 p | 71 | 10
-
Cách định dạng mã nguồn mở PHP (Personal Home Page) phần 10
7 p | 68 | 9
-
Cách định dạng mã nguồn mở PHP (Personal Home Page) phần 3
15 p | 56 | 9
-
Cách định dạng mã nguồn mở PHP (Personal Home Page) phần 9
15 p | 74 | 8
-
Cách định dạng mã nguồn mở PHP (Personal Home Page) phần 4
15 p | 79 | 8
-
Cách định dạng mã nguồn mở PHP (Personal Home Page) phần 5
15 p | 87 | 8
-
Cách định dạng mã nguồn mở PHP (Personal Home Page) phần 6
15 p | 92 | 8
-
.4 cách sử dụng Dropbox hiệu quả nhất cho Android
9 p | 137 | 7
-
Cách định dạng mã nguồn mở PHP (Personal Home Page) phần 7
15 p | 91 | 7
-
5 lựa chọn “đỉnh” thay thế Microsoft Outlook
5 p | 117 | 5
-
Cách nén đĩa DVD bằng phần mềm VLC Media Player
5 p | 100 | 5
-
Bài giảng Lập trình viên mã nguồn mở (Module 3) - Bài 8: Smarty - Template Engine 1
14 p | 46 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn