Tài liệu Giáo án dạy CNTT- P3 docx

10 274 0
Tài liệu Giáo án dạy CNTT- P3 docx

Đang tải... (xem toàn văn)

Thông tin tài liệu

Ngän ngỉỵ SQL Chỉång 3: CẠC NGÄN NGỈỴ THAO TẠC DỈỴ LIÃÛU 3.1 Ngän ngỉỵ truy váún dỉỵ liãûu SQL Trong mủc ny trçnh by ngän ngỉỵ dỉỵ liãûu (Structered Query Language), SQL l ngän ngỉỵ con dỉỵ liãûu âỉc xạc nháûn l ráút mảnh , phäø dủng v lải dãù sỉí dủng . SQL l ngän ngỉỵ phi th tủc, chøn mỉûc v âiãøn hçnh. Do váûy hiãûn nay ráút nhiãưu sn pháøm pháưn mãưm âãưu âỉåüc ci âàût SQL nhỉ : Oracle, DB2, . Trong pháưn ny s trçnh by cạc kh nàng ca ngän ngỉỵ SQL. Phẹp toạn cå bn trong SQL l phẹp ạnh xả âỉåüc miãu t bàòng khäúi lãûnh SELECT - FROM - WHERE. Cạc mãûnh âãư ca ngän ngỉỵ SQL s âỉåüc trçnh by chi tiãút bàòng vê dủ. Cạc thût ngỉỵ trong Cå Såí Dỉỵ Liãûu quan hãû nhỉ quan hãû , thüc tênh , bäü, âỉåüc thay thãú bàòng cạc thût ngỉỵ nhỉ : Bng( Table), cäüt(colum), bn ghi(Record) hồûc hng(Row) trong SQL. Chụng ta s xem cạc chỉïc nàng cå bn ca mäüt hãû qun trë Cå Såí Dỉỵ Liãûu nhỉ cung cáúp ngän ngỉỵ âënh nghéa dỉỵ liãûu (DDM), Ngän ngỉỵ thao tạc dỉỵ liãûu(DML) , tçm kiãúm v bo vãû dỉỵ liãûu âỉåüc thãø hiãûn trong ngän ngỉỵ SQL nhỉ thãú no. 1. Âënh nghéa dỉỵ liãûu Trong SQL cho phẹp ngỉåìi sỉí dủng tảo cạc dỉỵ liãûu nhỉ Bng(table), Khung nhçn(View), v cạc táûp chè säú(Index) * Lãûnh tảo bng Cụ phạp: CREAT TABLE Ten_Bang(Atr1 Type [NOT NULL], Atr2 Type [NOT NULL], .) Trong âọ Ten_Bang: tãn ca table tảo ra; tãn bng l xáu k tỉû báút k khäng cọ k hiãûu träúng v khäng trng våïi tỉì khọa Atr1, Atr2 : Tãn cạc thüc tênh (Cạc cäüt ca bng) Type: Kiãøu dỉỵ liãûu cho thüc tênh. Mäüt säú loải dỉỵ liãûu thỉåìng dng nhỉ: integer : säú ngun tỉì -2 174 483 648 âãún 2 174 483 648 Smallinteger : säú ngun tỉì - 32 768 âãún 32 767 decimal (n,p) säú tháûp phán våïi âäü di täúi âa n kãø c p chỉỵ säú tháûp phán ( khäng tênh dáúu cháúm tháûp phán). Tỉì khọa number trong SQL âỉc dng trong dảng dỉỵ liãûu ny. float : säú dáúu pháøy âäüng char(n) : xáu k tỉû cọ âäü di cäú âënh n, n≤ 255 varchar(n) xáu k tỉû cọ âäü di biãún âäøi, âäü di xáu cọ thãø tỉì 0 âãún n v âỉåüc xạc âënh tải thåìi âiãøm âỉa dỉỵ liãûu vo lỉu trỉỵ date : dỉỵ liãûu dảng ngy thạng chè thë NOT NULL âãø bạo ràòng giạ trë ca thüc tênh âọ khäng âỉåüc thiãúu trong cạc bäü ca quan hãû Ngän ngỉỵ SQL Vê Dủ: Tảo Cå Såí Dỉỵ Liãûu gäưm 3 bng S(nh cung cáúp SUPPLIERS), P ( Sn pháøm PRODUCTS) v bng SP (Cung cáúp) nhỉ sau: - Tảo bng S: CREATE TABLE S ( S# INTEGER NOT NULL,SNAME VARCHAR(8) NOT NULL,AGES INTEGER NOT NULL, CITY VARCHAR(30) NOT NULL) Chụ : NULL l giạ trë ngáưm âënh - Tảo bng P:(Bng sn pháøm) CREATE TABLE P (P# INTEGER NOT NULL, PNAME VARCHAR(10) NOT NULL, WEIGHT INTEGER NOT NULL, COLOR VARCHAR(10) NOT NULL, CITY VARCHAR(30) NOTNULL) - Tảo bng SP: CREATE TABLE SP (S# INTEGER NOT NULL, P# INTEGER NOT NULL, QTY INTEGER,SDATE DATE NOT NULL, PRICE DECIMAL(8,2)). Vo dỉỵ liãûu : Cọ ba cạch âãø vo dỉỵ liãûu cho bng nhỉ sau INSERT INTO S(S#,SNAME,AGES,CITY) VALUE(1,’Thanh Huong’, 30,’ TP Ho Chi Minh’) Nãúu vë trê ca cạc cäüt trong bng cäú âënh, ta cọ thãø viãút INSERT INTO S VALUE(1,’Thanh Huong’, 30,’ TP Ho Chi Minh’) Ngỉåìi vo dỉỵ liãûu cọ thãø qn vë trê cạc cäüt, khi âọ ta cọ thãø biãøu diãùn nhỉ sau: INSERT INTO S(S#,AGES,CITY, SNAME) VALUE(1, 30, ’ TP Ho Chi Minh’, ’Thanh Huong’) 2. Tçm Kiãúm dỉỵ liãûu Trong SQL Âáy l chỉïc nàng cå bn nháút ca SQL, cho phẹp ngỉåìi sỉí dủng tçm kiãúm cạc thäng tin trãn Cå Såí Dỉỵ Liãûu våïi Cáu lãûnh SELECT .FROM WHERE Cụ phạp: SELECT [*| DISTINCT] Danh sạch cạc cäüt âỉa ra FROM Tãn_Bng/Tãn_View [WHERE biãøu thỉïc âiãưu kiãûn] [GROUP BY Danh sạch cạc cäüt] [HAVING biãøu thỉïc âiãưu kiãûn] [ORDER BY Tãn_cäüt [ASC/DESC] Gii thêch cạc tham säú bàòng cạc vê dủ Ngän ngỉỵ SQL 2.1 Tçm kiãúm theo cáu hi âån gin Tçm kiãúm khäng âiãưu kiãûn: i. Cho biãút danh sạch cạc nh cung cáúp: SELECT * FROM S Dáúu ‘*’ cọ nghéa l chn ton bäü cạc cäüt trong bng. Âãø bng kãút qu sau khi thỉûc hiãûn mäüt mãûnh âãư SQL âụng l mäüt quan hãû (Cọ nghéa l khäng cọ cạc bäü trng nhau) thç phi cọ tỉì khọa DISTINCT. SELECT DISTINCT PNAME FROM SP Tçm kiãúm våïi âiãưu kiãûn âån gin Tçm m säú ca nhỉỵng nh cung cáúp â cung cáúp màût hng P2 SELECT S# FROM SP WHERE P#=’P2’ Tçm kiãúm cọ xỉí l xáu k tỉû Xỉí l xáu k tỉû gáưn âụng cn gi l phẹp tênh “thäng minh” trong trỉåìng håüp ngỉåìi sỉí dủng khäng nhåï r tãn ngỉåìi hồûc âëa danh . vê dủ l Hoa hay Hoan khi âọ ta cọ thãø viãút SELECT * FROM S WHERE SNAME LIKE ‘HOA%” Trong SQL sỉí dủng k hiãûu ‘%’ l thay thãú cho mäüt xáu con báút k, dáúu phán cạch ‘_’ âãø thay thãú cho mäüt k tỉû. A%B : Xáu k tỉû bàõt âáưu bàòng chỉỵ A v kãút thục bàòng chỉỵ B %A Xáu k tỉû báút k kãút thục bàòng chỉỵ A A_B : Xáu bao gäưm 3 k tỉû , k tỉû thỉï 2 l báút k A_ : Xáu cọ hai k tỉû, k tỉû âáưu l A Xỉí l ngy thạng Tçm nhỉỵng màût hng bạn trỉåïc ngy 94-04-24 10 ngy SELECT P# FROM SP WHERE ‘94-04-24’ - SDATE =10 Tçm kiãúm sỉí dủng IN v BETWEEN Tçm nhỉỵng màût hng â cung cáúp cọ giạ tỉì 1000 âãún 2000 SELECT P# FROM SP WHERE PRICE BETWEEN 1000 AND 2000 Tçm m säú nhỉỵng nh cung cáúp â cung cáúp êt nháút mäüt trong cạc màût hng P1,P2,P3 Ngọn ngổợ SQL SELECT S# FROM SP WHERE P# IN (P1,P2,P3) CAẽC HAèM THặ VIN Cuợng giọỳng nhổ caùc ngọn ngổợ Cồ Sồớ Dổợ Lióỷu khaùc, Trong SQL coù caùc haỡm mỏựu gọửm COUNT, MAX, MIN, SUM, AVG. Rióng haỡm COUNT khi coù õọỳi sọỳ laỡ * coù nghộa laỡ õóỳm sọỳ baớng ghi thoớa maợn yóu cỏửu tỗm kióỳm maỡ khọng quan tỏm õóỳn bỏỳt kyỡ cọỹt naỡo. Vờ du Cho bióỳt sọỳ lỏửn mỷt haỡng P2 õaợ õổồỹc cung cỏỳp SELECT COUNT(*) FROM SP WHERE P#=P2 Tỗm hióỷu sọỳ mỷt haỡng P1 baùn mọỹt lỏửn nhióửu nhỏỳt vaỡ mọỹt lỏửn ờt nhỏỳt cuớa haợng S1 SELECT MAX(QTY) - MIN(QTY) FROM SP WHERE S#=S1 AND P#=P1 Tỗm kióỳm nhồỡ móỷnh õóử GROUPE BY Tỗm maợ sọỳ nhổợng mỷt haỡng maỡ mọựi nhaỡ cung cỏỳp õaợ cung cỏỳp cho khaùch haỡng. SELECT S#,P# FROM SP GROUPE BY S# trong móỷnh õóử naỡy baớng dổợ lióỷu SP õổồỹc lỏỳy ra, sau õoù phỏn thaỡnh nhoùm theo maợ sọỳ cuớa ngổồỡi cung cỏỳp (S#). Coù nghộa laỡ caùc bọỹ coù cuỡng giaù trở S# seợ õổồỹc xóỳp lión tióỳp nhau, hóỳt nhoùm naỡy õóỳn nhoùm khaùc. Tỗm kióỳm nhồỡ móỷnh õóử HAVING Móỷnh õóử HAVING thổồỡng õổồỹc sổớ duỷng cuỡng móỷnh õóử GROUP BY. Sau HAVING la bióứu thổùc õióửu kióỷn. Bióứu thổùc õióửu kióỷn naỡy khọng taùc õọỹng vaỡo toaỡn baớng õổồỹc chố ra ồớ móỷnh õóử FROM maỡ chố taùc õọỹnỏửnnnn lổồỹt õóỳn tổỡng nhoùm caùc baớn ghi õaợ chố ra taỷi móỷnh õóử GOUP BY. Vờ duỷ: Tỗm maợ sọỳ nhổợng nhaỡ cung cỏỳp õaợ cung cỏỳp ờt nhỏỳt hồn hai mỷt haỡng SELECT S# FROM SP GROUP BY S# HAVING CUONT (DISTINCT P#)>2 Tỗm kióỳm coù sừp xóỳp Tỗm tón caùc mỷt haỡng maỡu õoớ vaỡ sừp xóỳp theo thổù tổỷ cuớa maợ sọỳ mỷt haỡng SELECT PNAME,P# Ngän ngỉỵ SQL FROM P WHERE COLOUR = ‘RED’ ORDER BY P# ASC Mãûnh âãư ORDER BY cho phẹp ta sàõp xãúp cạc cäüt theo thỉï tỉû tàng dáưn (ASC) hồûc gim dáưn (DESC), ngáưm âënh l ASC Mãûnh âãư ORDER BY cọ thãø sàõp xãúp theo nhiãưu cäüt. Nãúu nọ âỉïng sau mãûnh âãư GROUP BY thç miãưn tạc âäüng l tỉìng nhọm ca cäüt âỉåüc chè ra trong mãûnh âãư GROUP BY. Nãúu cäüt sàõp xãúp cọ màût åí mãûnh âãư SELECT thç trong mãûnh âãư ORDER BY cọ thãø chè cáưn chè ra säú thỉï tỉû ca cäüt âọ trong danh sạch tham chiãúu l â. trong vê dủ trãn ta cọ thãø viãút SELECT PNAME,P# FROM P WHERE COLOUR = ‘RED’ ORDER BY 2 ASC Tçm kiãúm våïi cáu hi phỉïc tảp Trong pháưn ny s trçnh by viãûc tçm kiãúm dỉỵ liãûu trãn nhiãưu bng thäng qua phẹp kãút näúi hồûc viãûc sỉí dủng cạc ạnh xả läưng. Kh nàng kãút näúi dỉỵ liãûu Trong phẹp kãút näúi, cạc cäüt tham gia kãút näúi phi cọ miãưn trë l so sạnh âỉåüc våïi nhau. Tãn cäüt ca cạc bng khạc nhau cọ thãø viãút tỉåìng minh qua tãn bng. Vê Dủ: Våïi mäùi màût hng âỉåüc cung cáúp , hy cho biãút m säú ca màût hng v âëa chè ca hng â cung cáúp màût hng âọ. SELECT DISTINCT P#, CITY FROM SP, S WHERE SP.S# =S.S# nh xả läưng Ta cọ thãø sỉí dủng nhỉỵng mãûnh âãư SELECT läưng nhau Vê dủ: Tçm tãn nhỉỵng hng â cung cáúp màût hng P2 SELECT SNAME FROM S WHERE S# IN( SELECT S# FROM SP WHERE P#=’P2’) Ngän ngỉỵ SQL Phẹp läưng nhau cọ thãø läưng nhiãưu mỉïc hồûc sỉí dủng sỉû dáùn tr giỉỵa cạc khäúi mäùi khi hỉåïng tåïi mäüt bng khạc nhau Vê dủ: Tçm tãn cạc hng khäng cung ỉïng màût hng P1 SELECT SNAME FROM S WHERE ‘P1’ NOT IN SELECT P# FROM SP WHERE S#= S.S# Trong SQL cn cho phẹp tçm kiãúm trãn nhiãưu bng nhåì mãûnh â EXISTS (täưn tải) Vê dủ: Tçm kiãúm nhỉỵng nh cung cáúp â cung cáúp êt nháút mäüt màût hng no âọ SELECT * FROM S WHERE EXISTS (SELECT * FROM SP WHERE SP.S#=S.S#) Hồûc cọ thãø biãøu diãùn bàòng cạch khạc SELECT * FROM S WHERE 0< (SELECT COUNT(*) FROM SP WHERE SP.S#=S.S#) Tçm kiãúm cọ sỉí dủng lỉåüng tỉì ANY v ALL Tçm tãn nhỉỵng màût hng cọ m säú màût hng l màût hng no âọ m hng S1 â cung cáúp SELECT PNAME FROM P WHERE P#= ANY SELECT P# FROM SP WHERE S#=’S1’ Tçm tãn nhỉỵng nh cung cáúp cung cáúp êt nháút mäüt màût hng mu â SELECT SNAME Ngän ngỉỵ SQL FROM S WHERE S#= ANY SELECT S# FROM SP,S,P WHERE S.S#=SP.S# AND P.P#=SP.P# AND COLOUR=’RED’ Tçm m säú nhỉỵng nh cung cáúp säú lỉåüng mäyt láưn mäüt màût hng no âọ låïn hån hồûc bàòng säú lỉåüng mäùi láưn cung ỉïng ca hng SELECT S# FROM SP WHERE QTY >= ALL SELECT QTY FROM SP Mãûnh âãư trãn hon ton tỉång âỉång våïi SELECT S# FROM SP WHERE QTY = (SELECT MAX( QTY) FROM SP) Tçm nhỉỵng hng chỉa hoảt âäüng SELECT * FROM S WHERE NOT EXISTS SELECT * FROM SP WHERE SP.S# = S.S# Chụ mãûnh âãư NOT EXISTS cọ giạ trë âụng (True) nãúu kãút qu ca cáu hi sau nọ l mäüt táûp räùng. Tçm kiãúm cọ chỉïa phẹp tênh táûp håüp Tçm m säú nhỉỵng hng hiãûn thåìi chỉa cung cáúp mäüt màût hng no c SELECT S# FROM S MINUS SELECT S# FROM SP Tçm tãn cạc hng cung cáúp, cung cáúp táút c cạc màût hng SELECT SNAME FROM S WHERE ( SELECT P# Ngọn ngổợ SQL FRPM SP WHERE S#=S.S#) = (SELECT P# FRPM P) 3. Caùc lóỷnh cỏỷp nhỏỷt dổợ lióỷu Thóm mọỹt bọỹ vaỡo trong quan hóỷ Cuù phaùp: INSERT INTO Tón_Baớng(Danh saùch tón cọỹt) VALUES(Danh saùch caùc trở) [cỏu hoới con] Vờ duỷ: coù thóứ bọứ sung mọỹt tỏỷp caùc baớn ghi laỡ kóỳt quaớ xổớ lyù cuớa mọỹt cỏu hoới naỡo õoù, chún haỷn: Giaớ sổớ ta coù baớng W coù cuỡng lổồỹc õọử nhổ baớng P. khi õoù móỷnh õóử sau õỏy seợ bọứ sung vaỡo baớng P tỏỳt caớ nổợng bọỹ tổỡ baớng W nhổợng mỷt haỡng coù mỏửu õoớ INSERT INTO P SELECT * FROM W WHERE COLOUR =RED + Xoùa caùc bọỹ Cuù phaùp DELETE FROM tón_baớng [WHERE btõk] Vờ duỷ: Loaỷi boớ haợng S1 ra khoới baớng S DELETE FROM S WHERE S#=S1 Loỹai boớ caùcmỷt haỡng õổồỹc cung cỏỳp sau ngaỡy 20 -5- 1994 DELETE FROM SP WHERE SDATE >1994-5-20 Loaỷi boớ caùc haợng chổa cung cỏỳp mỷt haỡng naỡo DELETE FROM S WHERE S# NOT IN (SELECT S# FROM SP) + Sổớa õọứi dổợ lióỷu Ngän ngỉỵ SQL Cụ phạp: UPDATE [Tãn_bng] SET [Tãn_cäüt=Biãøu thỉïc, .] [FROM Tãn_Bng] [WHERE btâk] Vê dủ: Âäøi mu cạc màût hng P2 thnh mu vng UPDATE P SET COLOUR =’ YELLOW’ WHERE P#= ‘ P2’ + Thãm mäüt cäüt vo bng Cụ phạp: ALTER TABLE Tãn_Bng [ADD/MODIFY][(Tãn_cäüt Kiãøu dỉỵ liãûu ] ADD: Thãm cäüt måïi vo MODIFY : Sỉía cäüt d cọ trong quan hãû Vê dủ: thãm cäüt DONGIA ( âån giạ) cho bng SP våïi kiãøu dỉỵ liãûu dảng säú tháûp phán ALTER TABLE SP ADD DONGIA DECIMAL(8.2) + Xọa bng: cụ phạp: DROP TABLE Tãn_bng Xọa VIEW Cụ phạp DROP VIEW Tãn_view Tảo tãûp chè säú Trong SQL khäng cọ cå chãú tỉû âäüng tảo tãûp chè säú cho cạc cäüt ca bng. Viãûc tảo tãûp chè säú do ngỉåìi dng thủc hiãûn. Cụ phạp nhỉ sau: CREATE [UNIQUE] INDEX tãn_tãûp_chè_säú ON tãn_bng (tãn_cäüt [ASC|DESC]) Hy b chè säú thç sỉí dủng mãûnh âãư DROP INDEX tãn_tãûp_chè_säú Vê dủ:tảo tãûp chè säú 13 theo cäüt City tàng dáưn ca bng S CREATE INDEX 13 ON S(CITY ASC) Trong SQL cọ thãø täø chỉïc âa chè säú, tỉïc l täø chỉïc mäüt tãûp chè säú cho nhiãưu cäüt, mäùi cäüt cọ thãø cọ chiãưu tàng gim khạc nhau, thỉï tỉû âỉåüc tênh tỉì trại qua phi Vê dủ tảo tãûp chè säú 14 cho bng SP theo cäüt S# tàng dáưn v theo cäüt P# gim dáưn CREATE INDEX 14 ON SP(S# ASC, P# DESC) 4. Cạc mãûnh âãư an ton dỉỵ liãûu Âáy l úu täú khäng thãø thiãúu âỉåüc âäúi våïi mäüt hãû qun trë Cå Såí Dỉỵ Liãûu âãø bo vãû dỉỵ liãûu v ngàn chàûn nhỉỵng ngỉåìi khäng âỉåüc phẹp truy cáûp. Cạc quưn truy cáûp vo Cå Såí Ngän ngỉỵ SQL Dỉỵ Liãûu gäưm: Read(âc), Write(ghi), Insert(bäø sung), Update(Sỉía âäøi),Select(chn),Delete(xọa)Run(chảy). Viãûc phán phạt quưn truy cáûp vo Cå Såí Dỉỵ Liãûu do ngỉåìi qun trë Cå Såí Dỉỵ Liãûu do ngỉåìi qun trë Cå Såí Dỉỵ Liãûu (database administrator -DBA) thỉûc hiãûn båíi lãûnh sau: Giạn quưn truy cáûp cho ngỉåìi sỉí dủng: Lãûnh GRANT cụ phạp: GRANT Quưn truy cáûp ON Tãn_bng/view TO Tãn_User [ with GRANT option] Tỉì khọa with GRANT option âãø cho ngỉåìi âỉåüc cáúp quưn cọ thãø tiãúp tủc trao quưn cho ngỉåìi khạc. Nãúu tãn_User l Public hồûc Word thç cọ nghéa l cho mi ngỉåìi sỉí dủng. Vê dủ: trao quưn sỉí dủng bng S cho cä Häưng GRANT READ ON S TO HONG with GRANT option Lãûnh ny cä Häưng cọ thãø trao quưn âc bng S cho ngỉåìi dng khạc Hy b quưn truy cáûp: REVOKE Tãn_quưn ON tãn_bng FROM Tãn_User vê dủ:Rụt lải quưn âc bng S ca User Häưng REVOKE READ ON S FROM HONG . 32 767 decimal (n,p) säú tháûp phán våïi âäü di täúi âa n kãø c p chỉỵ säú tháûp phán ( khäng tênh dáúu cháúm tháûp phán). Tỉì khọa number trong SQL âỉc. cung cáúp êt nháút mäüt trong cạc màût hng P1,P2 ,P3 Ngọn ngổợ SQL SELECT S# FROM SP WHERE P# IN (P1,P2 ,P3) CAẽC HAèM THặ VIN Cuợng giọỳng nhổ caùc ngọn

Ngày đăng: 12/12/2013, 09:16

Tài liệu cùng người dùng

Tài liệu liên quan