You are on page 1of 124

TRNG I HC CNG NGH

KHOA CNG NGH THNG TIN


-------------------oOo--------------------

BI GING
THC HNH C S D LIU

Ging vin: ThS. V B Duy ThS. D Phng Hnh ThS. L Hng Hi

H Ni, Nm 2012

Li ni u ............................................................................................................................................ 1 Ci t h qun tr CSDL v qun l CSDL .......................................................................................... 3 1. 2. 3. 4. Ci t h qun tr CSDL MySQL Server ..................................................................................... 3 Cu trc MyQSL Server............................................................................................................... 7 Kt ni ti MySQL server............................................................................................................. 9 To, xa c s d liu (CSDL) ...................................................................................................11

Bi thc hnh s 2...............................................................................................................................15 Cc kiu d liu. To v sa i cu trc bng .................................................................................15 1. 2. 3. 4. Cc kiu d liu .........................................................................................................................15 To bng C s d liu ..............................................................................................................17 Thay i cu trc bng ...............................................................................................................22 Xa bng....................................................................................................................................24 Bi tp thc hnh .......................................................................................................................25

Bi thc hnh s 3...............................................................................................................................26 Truy vn c bn (phn 1).....................................................................................................................26 1. 2. 3. 4. 5. 6. 7. Ci t c s d liu mu...........................................................................................................26 Thc hin truy vn vi cu lnh SELECT ...................................................................................27 Mnh WHERE .......................................................................................................................30 Kt ni cc iu kin vi ton t AND v OR ..............................................................................31 IS NULL: tm cc gi tr khng xc nh ......................................................................................32 T kho DISTINCT .....................................................................................................................33 Gii hn s lng kt qu vi LIMIT ...........................................................................................34 Bi tp thc hnh: ......................................................................................................................36

Bi thc hnh s 4...............................................................................................................................37 Truy vn c bn (phn 2).....................................................................................................................37 1. 2. 3. 4. 5. 6. Ton t IN ..................................................................................................................................37 Ton t BETWEEN ....................................................................................................................38 Ton t LIKE ..............................................................................................................................40 Thuc tnh suy din (Derived Attribute) .......................................................................................44 Sp xp kt qu vi ORDER BY.................................................................................................45 Kt hp cc kt qu vi ton t UNION ......................................................................................47 Bi tp thc hnh: ......................................................................................................................51

Bi thc hnh s 5...............................................................................................................................52 Cc hm x l ca MySQL ..................................................................................................................52 1. 2. 3. 4. 5. 6. 7. Hm x l chui SUBSTRING ....................................................................................................52 Hm CONCAT............................................................................................................................53 Hm REPLACE ..........................................................................................................................56 Hm IF .......................................................................................................................................57 Hm LAST_INSERT_ID .............................................................................................................59 Hm DATEDIFF .........................................................................................................................61 Hm ADDDATE, EXTRACT ......................................................................................................62 Bi tp thc hnh: ......................................................................................................................66

Bi thc hnh s 6...............................................................................................................................67 Truy vn nhm .....................................................................................................................................67 1. 2. 3. Cc hm nhm ...........................................................................................................................67 Mnh nhm GROUP BY ........................................................................................................69 Mnh iu kin HAVING ........................................................................................................73 Bi tp thc hnh .......................................................................................................................75

Bi thc hnh s 7...............................................................................................................................76 Cc php ni bng d liu ..................................................................................................................76 1. 2. 3. PHP NI TRONG (INNER JOIN) .............................................................................................76 PHP NI TRI (LEFT JOIN) ....................................................................................................83 PHP T NI (Self Join) ...........................................................................................................87 Bi tp thc hnh: ......................................................................................................................88

Bi thc hnh s 8...............................................................................................................................89 Truy vn con (Subquery) .....................................................................................................................89 1. 2. 3. 4. Khi nim truy vn con ...............................................................................................................89 Truy vn con khng tng quan .................................................................................................89 Truy vn con tng quan............................................................................................................91 S dng truy vn con .................................................................................................................92 Bi tp thc hnh .......................................................................................................................95

Bi thc hnh s 9...............................................................................................................................96 Thm, sa, xa d liu trong bng .....................................................................................................96 1. 2. 3. Cu lnh INSERT .......................................................................................................................96 Cu lnh UPDATE......................................................................................................................99 Cu lnh DELETE ....................................................................................................................100

4.

Cp nht d liu c rng buc ..................................................................................................102 Bi tp thc hnh .....................................................................................................................104

Bi thc hnh s 10 ...........................................................................................................................105 M hnh ha CSDL s dng cng c MySQL Workbench ...............................................................105 1. 2. 3. 4. 5. Gii thiu MySQL Workbench...................................................................................................105 To m hnh quan h thc th EER ..........................................................................................106 To CSDL t m hnh quan h thc th EER ...........................................................................113 ng b ha m hnh EER vi CSDL trong MySQL Server.......................................................114 To m hnh quan h thc th EER t CSDL c sn ................................................................116 Bi tp thc hnh .....................................................................................................................119

Li ni u
Hin nay c rt nhiu phn mm H qun tr c s d liu theo m hnh quan h (Relational DBMS) khc nhau, nhng rt may mn l cc h qun tr c s d liu ny s dng chung mt ngn ng c gi l SQL (Structured Query Language- Ngn ng truy vn c cu trc). Cc h qun tr c s d liu hin nay u c bn h tr chun ANSI 2003 SQL. C th ni ngn ng SQL l mt yu t ng gp cho s thnh cng ca c s d liu quan h. y l ngn ng mc cao nn ngi dng ch cn vit lnh thc hin t kt qu ca truy vn, phn tnh ton v ti u ha cu lnh c h qun tr m nhn. SQL bao gm ba phn chnh:

Ngn ng thao tc d liu (Data manipulation language - DML): c s dng lu tr, sa i v truy xut d liu t CSDL. C nhng thnh phn tiu chun dng thm, cp nht v xa d liu delete data.

Ngn ng nh ngha d liu (Data definition language - DDL): c s dng nh ngha cu trc ca d liu. Cc cu lnh ny dng nh ngha cu trc ca c s d liu, bao gm nh ngha cc hng, cc ct, cc bng d liu, cc ch s v mt s thuc tnh khc lin quan n c s d liu

Ngn ng iu khin d liu (Data control language - DCL): c s dng qun l truy cp ti d liu ca ngi dng.

Ni dung cc bi thc hnh s tp trung ch yu vo hai phn ngn ng l DML v DDL v s dng DBMS m ngun m MySQL server 5.5 lm cng c thc hnh. Ni dung trong cc bi ging ch yu l cc thao tc, cu lnh truy vn, khai thc d liu minh ha phn l thuyt ca mn hc m khng nhm ti vic s dng hay khai thc ton b H qun tr c s d liu MySQL. Bi ging Thc hnh c s d liu gm 10 bi thc hnh; mi bi u c 2 phn, phn th nht: gii thiu tm tt cc khi nim hoc cc cu lnh cn thit ca bi ging, phn th 2 l cc bi tp thc hnh sinh vin cn thc hin di s hng dn trc tip ca gio vin hoc t thc hin nh cc bi tp cng c ni dung ca bi ging.

Cc yu cu trong sut cc bi thc hnh c thao tc trn mt C s d liu mu. Cc cu lnh, v d c thc hin thng nht trn MySQL 5.5.

Bi thc hnh s 1 Ci t h qun tr CSDL v qun l CSDL


Ni dung chnh
Ci t MySQL server, thit lp cng lm vic, to ti khon qun l; kt ni vi MySQL server. Cu trc th mc ca MySQL, ngha ca tng th mc. Lm quen vi thao tc to c s d liu.

1. Ci t h qun tr CSDL MySQL Server


MySQL Server c th chy trn nhiu nn tng khc nhau nh Linux, Windows, Mac, FreeBSD, Unix. MySQL Server c ci t t bn ci t hoc c ci t bng bn c bin dch t m ngun m. MySQL Server c th ti v t a ch http://dev.mysql.com/downloads/mysql/. Phn tip theo minh ha qu trnh ci t trn h iu hnh MS Windows. Ci t trn h iu hnh MS Windows Sau khi thc hin trnh ci t trn Window, qu trnh ci t MySQL Server bt u qua cc bc sau: Bc 1: La chn kiu server Chng ta c th la chn 1 trong 3 kiu server sau: Developer Machine: La chn ny thch hp khi ci t lm my pht trin. Vi cu hnh ny, MySQL s s dng s lng b nh ti thiu. Server Machine: La chn ny thch hp vi my tnh chy mt s ng dng server nh web/application server. MySQL s s dng b nh trung bnh trong cu hnh ny.

Dedicated MySQL Server Machine: Thch hp cho my tnh ch yu lm server c s d liu (Database Server). Trong cu hnh ny, MySQL s s dng ti a s lng b nh ca h thng.

Bc 2: Cu hnh s lng kt ni ng thi

Decision Support: thch hp vi ng dng khng yu cu s lng kt ni ng thi cao OLTP: thch hp vi ng dng yu cu s lng kt ni ng thi cao, nh webserver c ti ln. Manual Setting: cho php ngi s dng t thit lp s kt ni ng thi. Bc 3: Xc nh cng lm vic ca MySQL Server Vi vic la chn TCP/IP cho php cc my kt ni theo giao thc TCP/IP; ngc li, ch cho php cc kt ni cc b. Khi la chn TCP/IP, chng ta phi xc nh Port Number: s hiu cng lm vic ca MySQL server. Cng ngm nh MySQL l 3306. Enable Strict Mode: nu ty chn ny c s dng, s khng cho php a cc gi tr khng hp l vo bng d liu: v d d liu NULL vo ct NOT NULL.

Bc 4: La chn h m k t s dng khi lu tr

Standard Character Set: ngm nh s dng tp ch latin (ANSI) Best Support for Multilingualism: Vi la chn ny, Unicode UTF8 c ngm nh s dng (thch hp vi Vit Nam). Manual Selected Default Character Set/Collation: cho php la chn h k t c th khc trong hp Character set.

Bc 5: Cu hnh ti khon qun tr MySQL server

Bc ny thit lp mt khu cho ti khon root qun tr h thng. Nu Enable root access from remote machines c chn. Ti khon ny c th ng nhp qun tr MySQL t my tnh xa. Anonymous Account: nu c la chn, th ngi dng bt k c th ng nhp vo h thng (ch nn s dng trong qu trnh pht trin, kim th, khng s dng khi trin khai h thng).

2. Cu trc MyQSL Server


File cu hnh Tt c cc cu hnh ci t h thng u c lu li trong file cu hnh. Tn file l my.ini nu s dng Windows hoc my.cnf Linux, Unix, v Mac. Ni dung chnh ca file cu hnh nh sau (dng bt u bng k t # l dng ch thch): # The TCP/IP Port the MySQL Server will listen on
7

port=3306 # Path to installation directory. All paths are # usually resolved relative to this. basedir="C:/Program Files/MySQL/MySQL Server 5.5/" # Path to the database root datadir="C:/Program Files/MySQL/MySQL Server 5.5/Data/" Ty chn port: xc nh s hiu cng lm vic ca MySQL Server Ty chn basedir: ch th mc ci t MySQL server. Ty chn datadir: ng dn ch ti th mc lu tr d liu. Gi : Ngi s dng nn s dng th mc lm vic v th mc lu tr d liu khc vi ci t ngm nh tng tnh bo mt ca h thng. Cu trc th mc MySQL

Th mc bin

Ni dung File nh phn - mysqld chng trnh server, tt c cc chng trnh khch v cng c s dng v qun tr MySQL server.

data include

Ni MySQL lu tr (c v ghi) d liu, v cc file log ca server. Tp cc file header, s dng khi vit v bin dch cc chng trnh s dng cc th vin ca MySQL.

lib scripts

Cc file th vin ca MySQL. mysql_install_db script, c s dng khi to file d liu v cc ti khon.

share

SQL scripts sa cc c quyn, cng nh tp cc file ngn ng.

Th mc Bin cha cc file chng trnh ca MySQL. Di y l m t mt s chng trnh trong th mc:

Tn chng trnh mysqld mysql mysqladmin mysqldump mysqlimport mysqlshow myisamchk mysqlcheck

M t chc nng MySQL server Cng c khch gip thc thi tng tc cc cu lnh SQL Tr gip cc tc v qun tr khc nhau (hin th trng thi, tt server,..). Lu ni dung ca CSDL MySQL ra ngoi Nhp d liu vo bng t file Hin th thng tin v CSDL, bng, ct Kim tra s ton vn ca cc file bng MyISAM v sa cha Thc hin tc v bo tr bng

3. Kt ni ti MySQL server
Trc ht m bo rng MySQL Server c bt sau qu trnh ci t trn. Mt cch khc c th khi ng MySQL Server trc tip thng qua cu lnh. shell> basedir\mysqld.exe --console Trong basedir l th mc cha chng trnh mysqld.exe

Minh ha trn cho thy tin trnh MySQL server chy v ch kt ni ti ti cng c s hiu 3306. Chng trnh khch khi kt ni ti MySQL server s dng mt s tham s nh trong bng di, hai cch s dng l tng ng nhau. Xc nh ngi dng ng nhp -u <username> --user=username MySQL. Hi mt khu ngay sau khi lnh bt -p --password u Mt khu c truyn trc tip. Khc vi cc la chn khc, khng c -p<password> --password=xxx khong cch sau p. S thun tin hn nhng gim an ton (nn trnh) Xc nh tn hoc a ch IP ca my -h hostname --host=hostname tnh (gi tr ngm nh l chnh my tnh localhost) Xc nh cng lm vic ca MySQL -P port --port=port server

10

V d: Hai cch ng nhp vo h thng MySQL server Cch 1: shell> basedir\mysql.exe u user_name p your_password Cch 2: shell> basedir\mysql.exe --user=user_name -password=your_password Ngm nh ban u h qun tr CSDL c mt ti khon qun tr username l root v mt khu trng.

Sau khi kt ni thnh cng ti MySQL Server nh hnh trn, ta c th thao tc vi CSDL, V d: mysql> show databases; Ngt kt ni ti MySQL server s dng: mysql> exit;

4. To, xa c s d liu (CSDL)


Sau khi ng nhp vo MySQL server s dng chng trnh khch mysql.exe, cc bc sau m t cch khi to v xa c s d liu.
11

Khi to CSDL

to CSDL trong MySQL, s dng cu lnh CREATE DATABASE nh sau: CREATE DATABASE [IF NOT EXISTS] database_name; Ch : Cc cu lnh SQL kt thc bi du ; hoc \g, \G v bm phm Enter. Cu lnh CREATE DATABASE s to CSDL c tn l database_namec xc nh. IF NOT EXISTS l mt ty chn trnh li nu tn ti mt CSDL cng tn. Nu tn ti CSDL cng tn trong MySQL server, cu lnh s khng c thi hnh. V d: to mt CSDL tn l classicmodels CREATE DATABASE classicmodels; Hin th cc CSDL

Cu lnh SHOW DATABASES s hin th tt c cc CSDL trong server. C th s dng cu lnh ny kim tra CSDL mi to hoc hin th tn tt c cc CSDL c trong server trc khi to CSDL mi. SHOW DATABASES;

Chn CSDL lm vic

chn mt CSDL c d nh lm vic, c th s dng cu lnh USE nh sau:


12

USE database_name; V d: chn CSDL classicmodels, s dng cu lnh sau USE classicmodels; T y c th thao tc trn cc bng d liu ca CSDL c chn. V d hin th cc bng d liu trong CSDL hin thi s dng lnh: SHOW TABLES

Xa C s D liu

Xa CSDL c ngha l s xa CSDL vt l, tt c d liu v cc i tng lin quan trong CSDL s b xa vnh vin. Do cn cn thn khi thi hnh cu lnh ny. MySQL cung cp cu lnh theo chun DROP DATABASE cho php xa mt CSDL DROP DATABASE [IF EXISTS] database_name; Ging nh cu lnh CREATE DATABASE, ty chn IF EXIST chng xa CSDL nu khng tn ti.

13

Bi tp thc hnh:
1. Thay i cng ngm nh ca MySQL server thnh 3307 v kt ni ti MySQL server ti cng ny. 2. Thay i ng dn ngm nh th mc cha CSDL trong file cu hnh 3. To CDSL tn l my_database, sau dng lnh hin th cc CSDL c trong server. 4. Kim tra trong th mc cha CSDL xem CSDL mi c to ra. 5. Xa CSDL my_database, sau dng lnh hin th cc CSDL c trong server.

14

Bi thc hnh s 2 Cc kiu d liu. To v sa i cu trc bng


Ni dung chnh:
Cc kiu d liu ca MySQL To cc bng d liu Thay i cu trc bng Xa bng

1. Cc kiu d liu
MySQL h tr cc bng CSDL cha cc ct vi cc kiu d liu khc nhau. Cc bng di y lit k cc kiu d liu MySQL h tr. Cc kiu d liu s Bng sau m t mt cc kiu d liu s trong MySQL: Kiu TINYINT SMALLINT MEDIUMINT INT/INTEGER BIGINT Lu tr 1 byte 2 bytes 3 bytes 4 bytes 8 bytes

Lu : Kiu BOOLEAN tng ng vi TINYINT(1) Kiu d liu FLOAT DOUBLE DECIMAL Lu tr 4 bytes 8 bytes Ph thuc vo khi nh ngha ct

15

Cc kiu d liu xu Trong MySQL, xu c th lu mi th t d liu vn bn ti d liu nh phn nh nh, file. Xu c th c so snh v tm kim da trn mu s dng mnh LIKE hoc biu thc chnh quy. Bng pha di l cc kiu d liu xu trong MySQL:

Kiu d liu xu CHAR VARCHAR BINARY VARBINARY TINYBLOB BLOB MEDIUMBLOB LONGBLOB TINYTEXT TEXT MEDIUMTEXT LONGTEXT

M t Mt chui k t c di c nh Mt chui k t c di c th thay i Mt chui nh phn di c nh Mt chui nh phn di c th thay i Mt i tng nh phn rt nh Mt i tng nh phn nh Mt i tng nh phn c trung bnh Mt i tng nh phn c ln Mi chui vn bn rt nh Mi chui vn bn nh Mi chui vn bn c trung bnh Mi chui vn bn rt di

Cc kiu d liu ngy v thi gian


MySQL cung cp kiu d liu ngy, thi gian v t hp ngy v thi gian. Ngoi ra MySQL cng cung cp kiu d liu timestamp lu thi gian thay i ca bn ghi.

16

Cc kiu d liu DATE TIME DATETIME

M t Gi tr ngy trong nh dng 'YYYY-MM-DD' Gi tr thi gian trong nh dng 'hh:mm:ss' Gi tr ngy thng v thi gian trong nh dng 'YYYY-MMDD hh:mm:ss' Gi tr nhn thi gian trong nh dng 'YYYY-MM-DD hh:mm:ss'

TIMESTAMP

Ct c kiuTIMESTAMP ng vai tr t bit do c t ng cp nht gi tr thi gian thay i gn nht khi bn ghi c thm vo hoc cp nht.

2. To bng C s d liu
to bng, MySQL s dng cu lnh CREATE TABLE. Cu lnh c cu trc nh sau:
CREATE TABLE [IF NOT EXISTS] table_name( <column name><type> [<default value>] [column constraints], ... <column name><type> [<default value>] [column constraints], <table constraint>, ... <table constraint>

) type=table_type

MySQL h tr ty chn IF NOT EXISTS trnh li to bng tn ti trong CSDL table_name l tn bng mun to.

17

Gi tr DEFAULT: MySQL cho php gn gi tr ngm nh cho mt ct. Nu gi tr ca ct khng c xc nh khi thm d liu vo bng, gi tr ct s c gn gi tr value. Gi tr ngm nh ca mt ct l NULL. Table_type: xc nh kiu ca bng d liu khi lu tr (ch thuc tnh ny l c im ring ca MySQL). Nu khng xc nh th MySQL s s dng kiu bng ngm nh. MySQL h tr cc kiu bng lu tr khc nhau, cho php ti u CSDL theo mc ch s dng. Mt s kiu bng trong MySQL nh MyISAM, InnoDB, BerkeleyDB (BDB), MERGE, HEAP MyISAM: Cc bng MyISAM lm vic rt nhanh, nhng khng h tr giao dch. Thng c s dng trong cc ng dng Web, l kiu bng ngm nh trong cc phin bn MySQL trc 5.5 InnoDB: Cc bng InnoDB h tr giao dch an ton, h tr kha ngoi. InnoDB l kiu lu tr ngm nh t phin bn MySQL 5.5. nh ngha tp cc ct: Cc ct c lit k vi cc thuc tnh nh kiu d liu, gi tr ngm nh nu c, cc rng buc trn ct. Cc rng buc trong SQL gm c: Primary Key, Foreign Key, Not Null, Unique, Check. Nu d liu cp nht vi phm rng buc khai bo s b t chi. Cc rng buc c th c nh ngha theo hai cch: 1) Column constraint (Rng buc ct): rng buc c p dng cho mt ct c th 2) Table constraint(Rng buc bng): c khai bo tch ri, c th p dng rng buc cho mt hoc nhiu ct. PRIMARY KEY (rng buc kha chnh): Rng buc ny nh ngha mt ct hoc mt t hp cc ct xc nh duy nht mi dng trong bng NOT NULL: Rng buc ny yu cu gi tr ca ct khng c php l NULL UNIQUE: rng buc yu cu cc gi tr ca ct l phn bit. Ch vi rng buc ny gi tr ca ct c th l NULL nu rng buc NOT NULL khng c p dng trn ct. CHECK:
18

Rng buc kha chnh khai bo theo kiu rng buc mc ct Column_name datatype [CONSTRAINT constraint_name] PRIMARY KEY Rng buc kha chnh khai bo theo kiu rng buc mc bng [CONSTRAINT constraint_name] PRIMARY KEY (column_name1,column_name2,..) V d: To bng employees vi kha chnh xc nh khi nh ngha ct
CREATE TABLE employees ( employeeNumber int(11) NOT NULL PRIMARY KEY , lastName varchar(50) NOT NULL, firstName varchar(50) NOT NULL, extension varchar(10) NOT NULL, email varchar(100) NOT NULL, officeCode varchar(10) NOT NULL, reportsTo int(11) default NULL, jobTitle varchar(50) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Hoc s dng cch nh trn v t tn cho rng buc


CREATE TABLE employees ( employeeNumber int(11) NOT NULL CONSTRAINT emp_id_pk PRIMARY KEY,

19

lastName varchar(50) NOT NULL, firstName varchar(50) NOT NULL, extension varchar(10) NOT NULL, email varchar(100) NOT NULL, officeCode varchar(10) NOT NULL, reportsTo int(11) default NULL, jobTitle varchar(50) NOT NULL, PRIMARY KEY (employeeNumber) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

t tn rng buc Khai bo CONSTRAINT <name> <constraint> dng t tn rng buc. Mc ch ca vic t tn rng buc l khi cp nht d liu vi phm rng buc, h qun tr CSDL thng bao gm tn rng buc vo thng bo li. Ngoi ra c th s dng tn rng buc khi sa i ha xa rng buc. Nh v d trn, rng buc kha chnh c t tn l emp_id_pk. V d: To bng employees vi kha chnh xc nh theo kiu rng buc bng thay v khai bo cng vi nh ngha ct.
CREATE TABLE employees ( employeeNumber int(11) NOT NULL, lastName varchar(50) NOT NULL, firstName varchar(50) NOT NULL, extension varchar(10) NOT NULL,

20

email varchar(100) NOT NULL, officeCode varchar(10) NOT NULL, reportsTo int(11) default NULL, jobTitle varchar(50) NOT NULL, PRIMARY KEY (employeeNumber) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

FOREIGN KEY (Rng buc kha ngoi) T kha FOREIGN KEY c dng xc nh kha ngoi. Trong v d di xc nh ct country_id lm kha ngoi, tham chiu n kha chnh ca bng country.
CREATE TABLE city ( city_id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, city VARCHAR(50) NOT NULL, country_id SMALLINT UNSIGNED NOT NULL, last_update TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY(city_id), CONSTRAINT fk_city_country FOREIGN KEY (country_id) REFERENCES country (country_id) ON DELETE RESTRICT ON UPDATE CASCADE )

ngha ca cc ty chn i km khi khai bo rng buc kha ngoi:


ON DELETE RESTRICT:c ngha khng cho php xa dng d liu bng c

tham chiu khi cn d liu tham chiu ti. Trong v d trn khng c php xa dng d liu ca bng country nu tn ti dng d liu t bng city tham chiu ti.

21

ON UPDATE CASCADE:c ngha khi cp nht d liu bng c tham chiu, d

liu bn bng tham chiu s c t ng cp nht. Trong v d trn, khi thay i d liu ca ct country_id ca bng country th ct country_id ca bng city s c t ng cp nht.

Khi khng s dng cc ty chn ny, ngm nh RESTRICT s c s dng cho cc s kin DELETE v UPDATE.

Sau khi to cc bng d liu, c th kim tra xem cu trc ca cc ct d liu trong V d: Hin th thng tin ca bng employees DESCRIBE employees;

Kt qu tr v t MySQL server

Bn cnh lnh DESCRIBE c th s dng cu lnh: SHOW CREATE TABLE Table_Name s hin th v cu lnh c s dng to ra bng d liu.

3. Thay i cu trc bng


Bn cnh to bng, sa i cu trc bng tn ti trong CSDL s dng cu lnh ALTER TABLE. Cu lnh c th c dng :
22

Thm, xa, sa cc ct ca bng Thm v xa cc rng buc

C php ca lnh ALTER TABLE nh sau:


ALTER TABLE table_name ty chn[, ty chn...] Cc ty chn: ADD [COLUMN] <column_definition> MODIFY [COLUMN] <create_definition> DROP [COLUMN] <column_name> ADD <table_constraint> DROP <constraint_name>

V d: Thm ct salary c kiu INT, khng vt qu 10 ch s, rng buc khng c trng vo bng d liu employees ALTER TABLE employees ADD salary INT(10) NOT NULL

V d: Sa kiu ca ct salary thnh kiu decimal(15,2) ALTER TABLE employees MODIFY salary decimal(15,2);
23

V d: Xa ct officeCode khi bng employees ALTER TABLE employees DROP officeCode

4. Xa bng
xa bng khi CSDL, s dng cu lnh DROP TABLE: DROP TABLE [IF EXISTS] <table_name> MySQL cho php xa nhiu bng cng lc bng cch lit k tn cc bng cch nhau bi du phy. Ty chn IF EXISTS c s dng trnh xa bng khng tn ti trong CSDL.

24

Bi tp thc hnh
1. To CSDL My_Classicmodels gm 4 bng: productlines, products, orders v orderdetails vi cc thuc tnh nh trong hnh v pha di. Cc kha chnh c kiu INT s dng kiu t tng AUTO_INCREMENT. Gi : Kha chnh c to thnh t t hp cc ct cn khai bo theo rng buc mc bng. 2. Sau khi to 4 bng d liu trn, thm cc rng buc kha ngoi gia cc bng nh trong hnh v. Cc rng buc kha chnh s dng thm ty chn ON UPDATE
CASCADE

25

Bi thc hnh s 3 Truy vn c bn (phn 1)


Ni dung chnh
Cu lnh Select: c php v cch s dng Mnh where Loi b d liu kt qu trng lp vi DISTINCT Gii hn cc bn ghi tr v bng LIMIT

1. Ci t c s d liu mu
C s d liu mu bao gm cc bng sau:

Customers: Lu tr thng tin v khch hng. Products: Lu tr danh sch v cc sn phm. ProductLines: Lu tr danh mc cc loi sn phm Orders: Lu tr cc n hng c t bi cc khch hng. OrderDetails: Lu tr v chi tit cc dng n hng Payments: Lu tr cc thanh ton ca khch hng Employees: Lu tr thng tin v cc nhn vin ca t chc Offices: Lu thng tin v cc vn phng ca t chc.

Hnh di minh ha mi quan h gia cc bng d liu trong c s d liu

26

Ti file script sampledatabase.sql to CSDLv t a ch:


http://www.mysqltutorial.org/mysql-sample-database.aspx

Gi s file sampledatabase.sql c t trong th mc gc C: ng nhp vo MySQL server t chng trnh khch mysql.exe s dng ti khon root T du nhc mysql> thi hnh cu lnh sau: source c:\sampledatabase.sql C s d liu c to ra c tn l classicmodels

2. Thc hin truy vn vi cu lnh SELECT


Trong phn ny, s hc cch s dng mnh SELECT truy vn d liu t cc bng c s d liu. C php SELECT
27

SELECT tn ct 1, tn ct 2, ... FROM cc bng [WHERE iu kin chn] [GROUP BY nhm] [HAVING iu kin chn nhm] [ORDER BY cc ct sp xp] [LIMIT gii hn s lng]; Trong mt truy vn SELECT c nhiu yu t ty chn m c th s dng. Cc ty chn c t trong du ngoc vung []. Th t xut hin ca cc t kho WHERE, GROUP BY, HAVING, ORDER BY v LIMIT phi theo ng th t trn. chn tt c cc ct trong mt bng c th s dng du sao (*) k hiu thay v lit k tt c cc tn ct sau t kho SELECT. V d: nu cn phi truy vn tt c cc thng tin v nhn vin, c th s dng truy vn sau y: SELECT * FROM employees

cng c th xem d liu mt phn ca mt bng bng cch lit k tn cc ct sau t kha SELECT. iu ny c gi l phpchiu.

28

V d: nu cn phi xem tn, h v v tr cng vic ca nhn vin, c th s dng truy vn sau y: SELECT lastname, firstname, jobtitle FROM Employees

V d: Mun ly ra thng tin v m sn phm v tn sn phm, thc hin truy vn nh sau: SELECT ProductCode, ProductName FROM Products

29

3. Mnh WHERE
Mnh WHERE ca cu lnh SELECT cho php chn cc hng c th ph hp vi iu kin hoc tiu ch tm kim. S dng mnh WHERE lc cc bn ghi da trn mt iu kin nht nh. V d: c th tm thy cc ch tch ca cng ty bng cch s dng truy vn sau y: SELECT FirstName, LastName, email FROM Employees WHERE jobtitle = "President"

Hoc c th tm ra cc thng tin v tn ca khch hng c m s 112 bng truy vn nh sau:


30

SELECT * FROM Customers WHERE customerNumber=112

V d sau a ra cc n hng c m khch hng l 181 SELECT * FROM orders WHERE customerNumber = 181

4. Kt ni cc iu kin vi ton t AND v OR


Chng ta c th kt hp hai hay nhiu iu kin khc nhau trong mnh WHERE, s dng cc ton t AND, OR. Vi hai iu kin ni bi AND, cn c hai ng iu kin kt hp l ng. Vi hai iu kin ni bi OR, iu kin kt hp l ng nu mt hoc c hai iu kin l ng V d: a ra cc khch hng ti M ca ngi chm sc khch hng c m l 1165 SELECT * FROM customers WHERE country ='USA' and salesRepEmployeeNumber = 1165

31

V d: a ra cc n hng c trng thi l On Hold hoc In Process SELECT * FROM orders WHERE status = 'On Hold' or status ='In Process'

5. IS NULL: tm cc gi tr khng xc nh
Vi cc trng cha c nhp d liu (coi gi tr l cha xc nh), SQL coi gi tr l NULL. kim tra mt trng c gi tr l NULL hay khng, thay v s dng php so snh =, SQL s dng php ton is NULL V d: a ra cc khch hng cha c gn nhn vin chm sc SELECT customerName, salesRepEmployeeNumber FROM customers WHERE salesRepEmployeeNumber = NULL
32

Nu s dng php so snh = nh trn, s khng c dng kt qu no c tr v. Nu thay php so snh = bi is NULL SELECT customerName, salesRepEmployeeNumber FROM customers WHERE salesRepEmployeeNumber is NULL

6. T kho DISTINCT
Vi t kha DISTINCT, c th loi b d liu trng lp t cu lnh SELECT. V d: tm thy bao nhiu v tr cng vic ca tt c cc nhn vin, s dng t kha DISTINCT trong cu lnh SELECT nh sau:

SELECT DISTINCT jobTitle FROM Employees;


33

Hoc c th tm ra m s cc sn phm c mua bng truy vn nh sau: SELECT DISTINCT productCode FROM OrderDetails;

7. Gii hn s lng kt qu vi LIMIT


Trong hu ht cc ln truy vn, khi lm vic vi cc bng d liu c cha hng nghn n hng triu bn ghi v khng mun vit mt truy vn c c tt c cc d liu m bo hiu sut v lu lng truy cp gia cc my ch c s d liu v my ch ng
34

dng . MySQL h tr mt tnh nng l LIMIT cho php hn ch cc bn ghi tr li vi cu lnh SELECT. Gi thit ta c mt bng c s d liu vi 10.000 bn ghi v mun nhn c N bn ghi u tin, c th s dng truy vn sau y: SELECT * FROM table_name LIMIT N LIMIT cng cho php ly ra mt s lng bn ghi nht nh tnh t mt v tr no : LIMIT S, N Trong cu truy vn trn, S l im bt u ghi ch s. MySQL xc nh rng v tr u tin c ghi li bt u vi 0; N l s lng bn ghi mun chn. V d: C th ly ra thng tin v tn ca 5 sn phm u tin trong bng Product bng truy vn nh sau: SELECT productName FROM Products LIMIT 5;

Hoc c th ly ra thng tin v 10 khch hng u tin hin ang Php bng truy vn nh sau: select * from customers where country='France' limit 10;

35

Bi tp thc hnh:
1. a ra danh sch cc nhn vin c trng reportsTo cha xc nh. 2. a ra danh sch cc CustomerNumber c thc hin giao dch. 3. a ra danh sch cc n hng c ngy yu cu vn chuyn l 18/1/2003. Lu : MySQL lu d liu ngy thng theo nh dng nm/thng/ngy. 4. a ra danh sch cc n hng c ngy t trong thng 4 nm 2005 v c trng thi l In Process 5. a ra danh sch cc sn phm thuc nhm Classic Cars.

36

Bi thc hnh s 4 Truy vn c bn (phn 2)


Ni dung chnh
Trong bi ny, s cp n cch s dng mt s ton t nh IN, BETWEEN, UNION, LIKE, ORDER BY; Thuc tnh suy din.

1. Ton t IN
Ton t IN cho php chn gi tr ph hp t mt tp cc gi tr. C php s dng nh sau: SELECT danh sch cc ct FROM tn bng WHERE ct IN ("gi tr 1","gi tr 2") Cc ct trong mnh WHERE khng cn phi xut hin trong danh sch ct chn, nhng n phi l mt ct trong bng. Nu danh sch c nhiu hn mt gi tr, mi mc c phn cch bng du phy. Ngoi ra, c th s dng ton t NOT i km vi ton t IN cho mc ch ph nh. Chng ta hy xem mt s v d sau: Gi s nu mun tm tt c cc vn phng c t ti M (USA) v Php (France), c th thc hin truy vn sau y: SELECT officeCode, city, phone FROM offices WHERE country = 'USA' OR country = 'France' Trong trng hp ny, chng ta c th s dng IN thay v truy vn trn: SELECT officeCode, city, phone FROM offices WHERE country IN ('USA','France')
Kt qu tr v nh sau:
37

c c tt c cc vn phng khng nm M v Php, chng ta c th s dng NOT IN nh sau: SELECT officeCode, city, phone FROM offices WHERE country NOT IN ('USA','France')
Kt qu tr v nh sau: Kt qu tr v nh sau:

2. Ton t BETWEEN
BETWEEN cho php ly cc gi tr trong mt phm vi c th. N phi c s dng trong mnh WHERE. Sau y minh ha c php: SELECT column_list FROM table_name WHERE column_1 BETWEEN lower_range AND upper_range MySQL tr li tt c bn ghi trong gi tr column_1 nm trong phm vi lower_rage v upper_range. Truy vn tng ng c c cng mt kt qu l: SELECT column_list FROM table_name WHERE column_1 >= lower_range AND column_1 <= upper_range

38

V d: Gi s chng ta mun tm tt c cc sn phm c gi nm trong phm vi 90 $ v 100 $, chng ta c th thc hin truy vn sau y: SELECT productCode,ProductName,buyPrice FROM products WHERE buyPrice BETWEEN 90 AND 100 ORDER BY buyPrice DESC
Kt qu tr v nh sau:

tm tt c cc bn ghi khng nm trong mt phm vi, chng ta s dng NOT BETWEEN. V d: tm tt c cc sn phm vi gi mua nm ngoi phm vi 20 v 100, chng ta c th vit truy vn sau y: SELECT productCode,ProductName,buyPrice FROM products WHERE buyPrice NOT BETWEEN 20 AND 100
Kt qu tr v nh sau:

39

Truy vn trn tng ng vi truy vn sau: SELECT productCode,ProductName,buyPrice FROM products WHERE buyPrice < 20 OR buyPrice > 100 ORDER BY buyPrice DESC
Kt qu tr v nh sau:

3. Ton t LIKE
LIKE cho php thc hin vic tm kim thng tin da trn s so snh k t (ging nh). LIKE thng c s dng vi cu lnh SELECT trong mnh WHERE. MySQL cung cp cho hai k t i din s dng vi LIKE, l % v _. K t i din t l phn trm (%) i din cho bt k chui c th khng c hoc c nhiu k t Gch di (_) ch i din cho mt k t duy nht. V d: Gi s mun tm kim nhng nhn vin c tn bt u vi k t 'a', c th lm iu nh sau: SELECT employeeNumber, lastName, firstName FROM employees WHERE firstName LIKE 'a%'
Kt qu tr v nh sau:

40

MySQL qut ton b bng employees (nhn vin) tm tt c nhn vin c tn bt u vi k t 'a' v theo sau bi mt s lng k t bt k. V d: tm kim tt c cc nhn vin c h kt thc vi chui on, c th thc hin truy vn nh sau: SELECT employeeNumber, lastName, firstName FROM employees WHERE lastName LIKE '%on'
Kt qu tr v nh sau:

Nu ch bit rng chui tm kim c nhng vo mt v tr no trong gi tr ca mt ct, c th t % u v cui ca chui tm kim tm tt c kh nng. V d: mun tm tt c cc nhn vin m h ca cc nhn vin ny c cha cm 'on', c th thc hin truy vn sau y: SELECT employeeNumber, lastName, firstName FROM employees WHERE lastName LIKE '%on%'
Kt qu tr v nh sau:

41

Chng ta cng c th dng NOT km vi LIKE hm cha ngha ph nh. V d: mun tm cc nhn vin c h khng bt u bi k t B, vit nh sau: SELECT employeeNumber, lastName, firstName FROM employees WHERE lastName NOT LIKE 'B%'
Kt qu tr v nh sau:

Lu l MySQL khng phn bit ch hoa ch thng nn b% v B% l nh nhau. Trong trng hp chui tm kim ca li bt u bi mt k t i din, chng hn l _, mysql cung cp cho k t \ ch ra rng cc k t i din i sau c s dng theo ng ngha en ch khng cn l k t i din na. V d: tm cc sn phm m m ca chng c cha chui _20, khi phi vit truy vn nh sau: SELECT productCode, productName FROM products
42

WHERE productCode LIKE '%\_20%'


Kt qu tr v nh sau:

LIKE cung cp cho mt cch thun tin tm bn ghi c cc ct cha cc chui ph hp vi mu tm kim. Tuy nhin, do vic thc thi LIKE chnh l qut ton b bng tm tt c cc bn ghi ph hp do n khng cho php database engine s dng index tm kim nhanh. Khi d liu trong bng l ln, hiu sut thc thi LIKE s b suy gim. Trong mt s trng hp, c th trnh vn ny bng cch s dng cc k thut khc t c cc kt qu tng t. Hoc s dng phng php nh ch mc FULLTEXT ca MySQL (s cp v k thut ny trong kha hc v H qun tr CSDL MySQL). V d: nu mun tm tt c cc nhn vin c tn u tin bt u vi mt chui quy nh c th s dng hm LEFT() ging nh cc truy vn sau y: SET @str = 'b'; SELECT employeeNumber, lastName, firstName FROM employees WHERE LEFT(lastname,length(@str)) = @str;
Kt qu tr v nh sau:

43

Kt qu tr v ca truy vn ny l tng ng vi truy vn di y, tuy nhin tc thc thi ca cch vit sau tt hn rt nhiu v chng ta c th s dng index trn ct lastname. SELECT employeeNumber, lastName, firstName FROM employees WHERE lastname LIKE 'b%'

4. Thuc tnh suy din (Derived Attribute)


SQL cung cp kh nng to cc thuc tnh suy din trong bng kt qu tr v s dng cc ton t v hm da trn cc thuc tnh c sn. Tn ct ca thuc tnh suy din ph thuc vo h thng, tuy nhin c th gn b danh lm tn ct. V d sau s to ra mt ct suy din c t tn l lineTotal, thuc tnh ny l kt qu php nhn gia hai thuc tnh priceEach v quantityOrdered SELECT orderNumber, (priceEach*quantityOrdered) as lineTotal FROM orderdetails

44

5. Sp xp kt qu vi ORDER BY
Mnh ORDER BY cho php sp xp cc kt qu trn mt hoc nhiu ct trong kt qu truy vn theo th t tng dn hay gim dn. sp xp kt qu theo th t tng dn, s dng ASC; gim dn l DESC. Theo mc nh, ORDER BY s sp xp cc kt qu theo th t tng dn. V d: sp xp danh sch nhn vin theo tn v v tr cng vic, c th thc hin truy vn sau y: SELECT FirstName, LastName, jobtitle FROM Employees ORDER BY firstname ASC, jobtitle DESC;

45

Hoc c th a ra thng tin v tn cc sn phm theo th t tng dn ca s lng hng tn kho bng truy vn nh sau: SELECT productName FROM Products ORDER BY quantityInStock; Trong cu lnh trn t kha ASC khng s dng, do mc nh s sp xp kt qu theo th t tng dn. Kt qu ca cu lnh trong hnh sau.

46

Nu khng ch r vic sp xp c thc hin theo th t tng hay gim dn, MySQL s mc nh vic sp xp d liu c thc hin theo th t tng dn.

6. Kt hp cc kt qu vi ton t UNION
UNION cho php kt hp hai hoc nhiu b kt qu t nhiu bng vi nhau. C php ca vic s dng MySQL UNION l nh sau: SELECT statement UNION [DISTINCT | ALL] SELECT statement UNION [DISTINCT | ALL] s dng UNION, c mt s nguyn tc cn phi lm theo: S lng cc ct trong mi cu lnh SELECT phi ging nhau. Cc kiu d liu ca ct trong danh sch ct ca cu lnh SELECT phi ging nhau hoc t nht l c th chuyn i sang cho nhau.

47

Theo mc nh, UNION MySQL loi b tt c cc hng trng lp t kt qu ngay c khi khng s dng t kho DISTINCT sau t kho UNION. Nu s dng UNION ALL, cc hng trng lp vn cn trong tp hp kt qu cui cng. ch nn s dng iu ny trong cc trng hp hoc l mun gi li bn sao cc hng, hoc chc chn rng c khng c bn sao cc hng trong tp hp kt qu. V d: kt hp thng tin v cc khch hng v nhn vin thnh mt tp hp kt qu, s dng truy vn sau y: SELECT customerNumber id, contactLastname name FROM customers UNION SELECT employeeNumber id,firstname name FROM employees

Khi s dng ORDER BY sp xp kt qu vi UNION, phi t n v tr cui cng trong mnh SELECT.

48

V d: Gi s kt hp thng tin ca nhn vin v khch hng, sau mun sp xp kt qu theo tn v ID th t tng dn (SELECT customerNumber, contactLastname FROM customers) UNION (SELECT employeeNumber, firstname FROM employees) ORDER BY contactLastname, customerNumber

Nu tn ct khng ging nhau trong hai mnh SELECT ca php UNION, tn no s c hin th u ra nu chng ta khng s dng b danh cho mi ct trong mnh SELECT. Cu tr li l MySQL s s dng cc tn ct ca cu lnh SELECT u tin l tn ct trong kt qu u ra (SELECT customerNumber, contactLastname FROM customers) UNION
49

(SELECT employeeNumber, firstname FROM employees) ORDER BY contactLastname, customerNumber Kt qu ca php ton hp gia hai tp kt qu t bng d liu customers v employees

MySQL cng cung cp mt la chn khc sp xp cc kt qu thit lp da trn v tr ct trong mnh ORDER BY nh truy vn sau y: (SELECT customerNumber, contactLastname FROM customers) UNION (SELECT employeeNumber,firstname FROM employees) ORDER BY 2, 1

50

Bi tp thc hnh:
1. Dng ton t IN a ra thng tin ca cc khch hng sng ti cc thnh ph Nantes v Lyon. 2. S dng BETWEEN tm cc n hng c chuyn trong khong thi gian t 10/1/2003 n 10/3/2003. 3. S dng LIKE a ra thng tin v cc nhm hng ho c cha t CARS. 4. Truy vn 10 sn phm c s lng trong kho l ln nht. 5. a ra danh sch cc sn phm v thm thuc tnh l tin hng tn ca sn phm.

51

Bi thc hnh s 5 Cc hm x l ca MySQL


Ni dung chnh : Trong bi ny, chng ta s lm quen vi mt s hm (functions)
c bn: Hm x l xu k t: Substring, Concat, Replace Hm iu kin If Hm LAST_INSERT_ID Hm x l thi gian: DATEDIFF, ADDDATE, EXTRACT

1. Hm x l chui SUBSTRING
Hm Substring cho php trch xut mt chui con t mt chui khc, bt u ti v tr c th v vi mt di nht nh. Sau y minh ha cc hnh thc s dng khc nhau ca hm ny. SUBSTRING(str,pos); SUBSTRING(str FROM pos); Kt qu ca cu lnh trn tr v mt chui con t mt chui str bt u t v tr pos SUBSTRING(str,pos,len); SUBSTRING(str FROM pos FOR len); Hai cu lnh trn tr v mt chui con t mt chui str, bt u ti v tr pos v chui con tr v ch c len k t. Lu rng FROM l t kho c php SQL chun. Chng ta hy xem xt mt s v d sau SELECT substring('MySQL Substring',7); Tr v: Substring SELECT substring('MySQL Substring' FROM 7); Tr v: Substring SELECT substring('MySQL Substring',7,3); Tr v: Sub SELECT substring('MySQL Substring' FROM 7 FOR 3);
52

Tr v: Sub cng c th s dng gi tr m cho tham s pos. Nu s dng gi tr m cho tham s pos, s bt u ca chui con c tnh t cui ca chui, v d SELECT substring('MySQL Substring',-9); Tr v: Substring i khi thy on m s dng substr () thay v hm substring () . Substr l t ng ngha vi substring, v vy n c tc dng tng t.

2. Hm CONCAT
Hm Concat c s dng ni hai hoc nhiu chui. Nu cc i s l s, chng s c chuyn i thnh chui trc khi ni. Nu bt k i s trong danh sch i s l NULL, hm concat s tr v NULL. CONCAT(str1,str2,...) V d: hin th tn y u tin ca a ch lin lc ca khch hng chng ti s dng hm concat ni cc tn u tin v tn cui cng v du phn cch gia chng. Di y l truy vn: SELECT CONCAT(contactLastname,', ',contactFirstname) fullname FROM customers

53

MySQL cng h tr hm concat_ws cho php chng ta ni hai hay nhiu hn hai chui vi mt du phn cch c xc nh trc. C php ca hm concat_ws l: CONCAT_WS(seperator,str1,str2,...) Tham s u tin l du phn cch do nh ngha v sau l nhng chui mun ni. Kt qu tr v l mt chui c ghp ni,vi du phn cch gia mi thnh phn ghp ni. V d, c th t c kt qu tng t trong v d trn bng cch s dng concat_ws thay v hm concat. SELECT CONCAT_WS('; ',contactLastname,contactFirstname) fullname FROM customers

54

Di y l mt v d khc ca vic s dng concat_ws c c nh dng a ch ca khch hng. SELECT CONCAT_WS(char(10), CONCAT_WS(' ',contactLastname,contactFirstname), addressLine1, addressLine2, CONCAT_WS(' ',postalCode,city), FROM customers country, CONCAT_WS(char(10),'')) AS Customer_Address

55

3. Hm REPLACE
MySQL cung cp cho mt hm x l chui hu ch l Replace, cho php thay th mt chui trong mt ct ca mt bng bng mt chui mi. C php ca hm nh sau: UPDATE <tn bng> SET tn ct = REPLACE(tn ct,xu cn tm,xu thay th) WHERE <cc iu kin> Lu : rng khi tm kim cc vn bn thay th, MySQL c phn bit ch hoa v ch thng. V d: nu mun sa li chnh t trong bng Product trong c s d liu mu, s dng hm Replace nh sau: UPDATE products SET productDescription = REPLACE(productDescription,'abuot','about')
56

Truy vn s xem xt ct productDescription v tm thy tt c cc ln xut hin ca li chnh t 'abuot' v thay th n bng t chnh xc 'about'. iu rt quan trng cn lu rng trong hm Replace, tham s u tin l tn trng khng t trong du . Nu t du tn trng nh 'field_name, truy vn s cp nht ni dung ca ct 'field_name, gy mt d liu. Hin nay hm Replace khng h tr biu thc chnh quy v vy nu cn phi thay th mt chui vn bn bng mt mu, cn phi s dng hm do ngi dng nh ngha (UDF) t th vin bn ngoi.

4. Hm IF
IF l mt hm iu khin, tr v kt qu l mt chui hoc s da trn mt iu kin cho trc. C php ca hm IF nh sau: IF(expr,if_true_expr,if_false_expr) Tham s u tin l expr s c kim tra l ng hay sai. Gi tr thc c ngha l expr khng bng 0 v expr khng bng NULL. Lu rng NULL l mt gi tr c bit, khng bng bt c iu g khc, ngay c bn thn n. Nu expr c nh gi l ng, hm IF s tr li if_true_expr, nu khng n s tr li if_false_expr. V d: SELECT IF(1 = 2,'true','false'); Tr v: false SELECT IF(1 = 1,' true','false'); Tr v: true V d: Trong bng khch hng, khng phi tt c cc khch hng u c thng tin v state. V vy, khi chng ta la chn khch hng, thng tin state s hin th gi tr NULL, khng c ngha cho mc ch bo co. SELECT customerNumber, customerName,
57

state, country FROM customers;

Chng ta c th s dng IF hin th trng thi ca khch hng l N / A nu n l NULL nh sau: SELECT customerNumber, customerName, IF(state IS NULL,'N/A',state) state, country FROM customers;

58

V d: Hm IF cng rt hu ch vi chc nng tng hp. Gi s nu mun bit c bao nhiu n t hng vn chuyn v hu b cng mt lc, chng ta c th s dng IF m nh sau: SELECT SUM(IF(status = 'Shipped',1,0)) FROM orders; AS Shipped,

SUM(IF(status = 'Cancelled',1,0)) AS Cancelled

Trong truy vn trn, nu tnh trng ca n t hng l SHIPPED hoc CANCELLED, IF s tr li gi tr 1, nu khng n tr v 0. V sau hm SUM s tnh ton tng s vn chuyn v b hy b da trn gi tr tr v ca hm IF.

5. Hm LAST_INSERT_ID
Hm LAST_INSERT_ID tr v ID ca bn ghi cui cng c chn vo bng, vi iu kin l ID ca ct c thuc tnh AUTO_INCREMENT.Trong thit k c s d liu, thng s dng mt ct t ng tng AUTO_INCREMENT. Khi chn mt bn ghi mi
59

vo bng c ct AUTO_INCREMENT, MySQL to ra ID cho t ng da trn cc thit lp ca ct . c th c c ID ny bng cch s dng hm LAST_INSERT_ID. V d: to ra mt bng mi th nghim c gi l TBL. Trong bng TBL, chng ta s dng ID l ct AUTO_INCREMENT. CREATE TABLE tbl( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, description varchar(250) NOT NULL ); Sau , chng ta s dng hm LAST_INSERT_ID () c c ID mi chn. INSERT INTO tbl(description) VALUES('MySQL last_insert_id'); Thc hin truy vn: SELECT LAST_INSERT_ID();

iu quan trng cn lu rng nu chn nhiu bn ghi vo bng bng cch s dng cu lnh INSERT duy nht, hm LAST_INSERT_ID s tr li gi tr to ra cho cc bn ghi chn vo u tin. Hy th cc bc sau: INSERT INTO tbl(description) VALUES('record 1'), ('record 2'), ('record 3'); Thc hin truy vn: SELECT LAST_INSERT_ID();

60

Chng ta chn 3 bn ghi bng cch s dng cu lnh INSERT v hm LAST_INSERT_ID tr li ID ca bn ghi u tin nh mong mun. MySQL LAST_INSERT_ID hot ng da trn nguyn tc c lp vi client. N c ngha l gi tr c tr v bi hm LAST_INSERT_ID cho mt client c th l gi tr m client to ra. iu ny m bo rng mi client c th nhn c ID ring ca mnh m khng cn phi quan tm n cc hot ng ca cc client khc v khng cn s dng c ch lock hay transaction (s hc sau).

6. Hm DATEDIFF
Trong mt s trng hp, cn phi tnh ton s ngy gia hai mc thi gian, v d s ngy t ngy vn chuyn v ngy yu cu trong mt n t hng. Trong nhng trng hp ny, cn phi s dng hm DATEDIFF. C php DATEDIFF nh sau: DATEDIFF(expr1,expr2) expr1 v expr2 l hai mc thi gian. V d: SELECT DATEDIFF('2011-08-17','2011-08-17'); Tr v: 0 day SELECT DATEDIFF('2011-08-17','2011-08-08'); Tr v: 9 days SELECT DATEDIFF('2011-08-08','2011-08-17'); Tr v: 9 days V d: tnh ton s ngy cn li gia ngy vn chuyn v ngy yu cu trong n t hng, chng ta s dng DATEDIFF nh sau: SELECT orderNumber, DATEDIFF(requiredDate,shippedDate) AS daysLeft
61

FROM orders ORDER BY daysLeft DESC;

7. Hm ADDDATE, EXTRACT
MySQL cng h tr mt s hm x l ngy thng khc nh: ADDDATE, EXTRACT Hm ADDDATE: tr v mt gi tr thi gian l kt qu ca thao tc trn mt gi tr thi gian
khc.

V d: a ra ngy thng sau ngy gi hin ti 30 ngy: SELECT ADDDATE(NOW(), INTERVAL 30 DAY);

S dng t kha DAY ch gi tr s cng vo l ngy. V d: a ra cc n t hng trong khong 30 ngy tnh t ngy 1/5/2005 SELECT * FROM orders WHERE orderDate>= '2005-5-1' AND orderDate < ADDDATE('20055-1', INTERVAL 30 DAY);

62

Kt qu truy vn:

V d: a ra cc n t hng tnh t trc ngy 1/5/2005, 30 ngy n ngy 1/5/2005 SELECT * FROM orders WHERE orderDate<= '2005-5-1' AND orderDate > ADDDATE('20055-1', INTERVAL -30 DAY);

Nu thi gian cng vo l thng, nm th t kha tng ng c s dng l MONTH, YEAR. V d trn c th vit li nh sau

63

SELECT * FROM orders WHERE orderDate<= '2005-5-1' AND orderDate > ADDDATE('20055-1', INTERVAL -1 MONTH);

Hm EXTRACT: tch ra cc gi tr nh ngy, thng, nm t mt gi tr c kiu thi gian. V d: a ra thng ca mt gi tr thi gian: SELECT EXTRACT(MONTH FROM '2004-12-31 23:59:59');

V d: a ra thng ca mt gi tr thi gian: SELECT EXTRACT(YEAR FROM '2004-12-31 23:59:59');

V d: a ra cc n hng t nm 2005 SELECT * FROM orders

64

WHERE EXTRACT(YEAR FROM orderDate) = 2005

V d: a ra cc n hng t trong thng 5 nm 2005 SELECT * FROM orders WHERE EXTRACT(YEAR FROM orderDate) = 2005 and EXTRACT(MONTH FROM orderDate) = 5;

65

Bi tp thc hnh:
1. Ly ra 50 k t u tin ca phn m t sn phm, t tn l Title of products 2. a ra m t v cc nhn vin theo nh dng Fullname, jobTitle. 3. Thay th ton b tn nhm hng Cars thnh Automobiles. 4. Tm 5 n hng c vn chuyn sm nht so vi ngy hn. 5. a ra cc n t hng trong thng 5 nm 2005 v c ngy chuyn hng n cha xc nh.

66

Bi thc hnh s 6 Truy vn nhm


Ni dung chnh: Trong bi ny, chng ta s lm quen vi cc hm nhm v truy vn nhm: Cc hm nhm: Sum, AVG, MAX v MIN , Count Mnh GROUP BY Mnh HAVING

1. Cc hm nhm
Hm SUM i khi cc thng tin chng ta cn khng c lu tr thc s trong cc bng c s d liu, nhng chng ta c th ly c chng bng cch tnh ton t d liu c lu tr. V d, chng ta c bng OrderDetails lu tr thng tin v cc n t hng. Khi chng ta nhn vo , chng ta khng bit tng s tin ca tt c cc sn phm bn c l bao nhiu. Tuy nhin, hm tnh tng SUM c th gip chng ta tr li cu hi ny. Trc ht chng ta xem hot ng ca hm SUM, vic thc hin nhm d liu s trnh by trong phn 2 V d: Tnh tng s lng hng ha hin cn trong kho SELECT sum(quantityInStock) FROM products Kt qu tr v nh sau:

Hoc tnh tng s tin chng ta thu c t u ti gi, vit truy vn nh sau: SELECT sum(priceEach * quantityOrdered) total FROM orderdetails
67

Kt qu tr v nh sau:

Hm AVG AVG c s dng tnh gi tr trung bnh ca mt biu thc, N khng chp nhn gi tr NULL. Chng ta c th s dng AVG tnh ton gi trung bnh ca tt c cc sn phm mua nh sau: SELECT AVG(buyPrice) average_buy_price FROM Products Kt qu tr v nh sau:

Hm MAX v MIN Hm MAX tr v gi tr ln nht v hm MIN tr v gi tr nh nht ca mt tp cc gi tr. MAX(expression) MIN(expression) V d: S dng MAX v MIN ly ra mc gi cao nht v mc gi nh nht ca sn phm. SELECT MAX(buyPrice) highest_price, MIN(buyPrice) lowest_price FROM Products Kt qu tr v nh sau:

68

Hm COUNT Hm COUNT l hm m s lng, chng hn chng ta c th m s lng sn phm ang c bn nh sau: SELECT COUNT(*) AS Total FROM products Kt qu tr v nh sau:

Lu : mt phin bn khc ca hm COUNT s dng tham s l tn ct. Nu cch ny c s dng, s ch m cc dng m gi tr ti ct l khc NULL.

2. Mnh nhm GROUP BY


Mnh GROUP BY c s dng gp cc bn ghi c cng gi tr ti mt hay nhiu ct, thnh mt tp hp. GROUP BY nu c th n phi ng sau mnh WHERE hoc FROM. Theo sau t kho GROUP BY l mt danh sch cc biu thc, phn cch nhau bi du phy. SELECT col1_,col_2,... col_n, cc hm nhm(biu thc) FROM tn bng WHERE iu kin GROUP BY col_1, col_2, ... col_n ORDER BY danh sch ct Theo nh ngha, hm nhm cho php chng ta thc hin mt php tnh trn mt tp bn ghi v tr v mt gi tr. Hm nhm b qua cc gi tr null khi thc hin tnh ton, ngoi tr hm COUNT. Hm nhm thng c s dng vi mnh GROUP BY ca cu lnh SELECT.

69

V d: Gi s mun phn chia cc n t hng theo cc nhm ph thuc vo tnh trng ca cc n hng, c th lm nh sau: SELECT status FROM orders GROUP BY status Kt qu tr v nh sau:

Cc hm nhm c s dng vi GROUP BY thc hin tnh ton trn mi nhm cc bn ghi v tr v mt gi tr duy nht cho mi hng. V d: mun bit c bao nhiu n t hng trong tng nhm trng thi, c th s dng hm COUNT nh sau: SELECT status, count(*) FROM orders GROUP BY status Kt qu tr v nh sau:

70

V d: mun bit c bao nhiu loi sn phm trong mi loi dng sn phm SELECT productLine, count(*) FROM products GROUP BY productline

V d: c c tng s tin cho mi sn phm bn, chng ta ch cn s dng chc nng SUM v nhm sn phm. Di y l truy vn: SELECT productCode,sum(priceEach * quantityOrdered) total FROM orderdetails GROUP by productCode Kt qu tr v nh sau:

71

V d: Gi s chng ta mun xem cc kt qu ca truy vn trn, hin th theo th t tng dn chng ta lm nh sau: SELECT productCode,sum(priceEach * quantityOrdered) total FROM orderdetails GROUP by productCode ORDER BY total DESC Kt qu tr v nh sau:

Lu : s khc nhau gia GROUP BY trong MySQL v ANSI SQL MySQL tun theo chun ANSI SQL. Tuy nhin, c 2 s khc bit khi s dng GROUP BY trong MySQL nh sau: Trong ANSI SQL, phi thc hin GROUP BY tt c cc ct xut hin trong mnh SELECT. MySQL khng i hi nh vy, c th a thm cc ct vo trong mnh SELECT v khng bt buc chng phi xut hin mnh GROUP BY.
72

MySQL cng cho php sp xp cc nhm theo th t cc kt qu tnh ton, mc nh l gim dn.

3. Mnh iu kin HAVING


HAVING cng l mt mnh c th xut hin hoc khng trong mnh SELECT. N ch ra mt iu ki lc trn d liu l mt nhm cc bn ghi hoc l kt qu ca vic thc hin hm nhm. HAVING thng c s dng cng vi GROUP BY, khi iu kin lc ch c p dng trn cc ct xut hin trong mnh GROUP BY m thi. Nu HAVING khng di km vi GROUP BY, khi n c ngha nh WHERE m thi. Lu rng, HAVING p dng trn cc nhm bn ghi, cn WHERE p dng trn tng bn ghi ring l. V d: Chng ta s dng mnh GROUP BY c c tt c cc n t hng, s lng cc mt hng bn ra v tng gi tr trong mi n t hng nh sau: SELECT ordernumber, sum(quantityOrdered) AS itemsCount, sum(priceEach * quantityOrdered) AS total FROM orderdetails GROUP BY ordernumber

73

By gi, c th yu cu hin th ch nhng n hng c tng gi tr ln hn $1000 bng cch s dng HAVING nh sau: SELECT ordernumber, sum(quantityOrdered) AS itemsCount, sum(priceEach * quantityOrdered) AS total FROM orderdetails GROUP BY ordernumber HAVING total > 1000

Chng ta s dng b danh cho ct sum (priceEach * quantityOrdered) l total, nh vy trong mnh HAVING, chng ta ch cn dng b danh thay v G sum( priceeach) mt ln na. C th s dng mt iu kin kt hp trong mnh HAVING vi cc ton t OR, AND. V d: nu mun bit nhng n hng c tng gi tr ln hn $ 1000 v c hn 600 mt hng trong , c th s dng truy vn sau y:
74

SELECT ordernumber, sum(quantityOrdered) AS itemsCount, sum(priceeach) AS total FROM orderdetails GROUP BY ordernumber HAVING total > 1000 AND itemsCount > 600 Kt qu tr v nh sau:

Bi tp thc hnh
1. a ra tn cc thnh ph v s lng khch hng ti tng thnh ph. 2. a ra s lng cc n t hng trong thng 3/2005. 3. a ra 10 m n t hng c gi tr ln nht. 4. a ra m nhm hng v tng s lng hng ho cn trong kho ca nhm hng .

75

Bi thc hnh s 7 Cc php ni bng d liu


Ni dung chnh: Trong cc bi thc hnh trc, cc truy vn c thc hin trn mt bng d liu. Khng ngc nhin khi rt nhiu truy vn yu cu thng tin t nhiu bng d liu khc nhau. V d mun a ra thng tin khch hng ca cc n hng, cn kt hp thng tin t hai bng d liu l customers v orders. Kt hp cc bng d liu to ra mt bng suy din c gi l php ni (join). Trong bi ny, chng ta s lm quen vi php ton ni truy vn d liu t nhiu bng : INNER JOIN, LEFT JOIN, SELF JOIN

1. PHP NI TRONG (INNER JOIN)


INNER JOIN hay cn gi l php ni trong, l mt phn ty chn ca cu lnh SELECT. N xut hin lin ngay sau mnh FROM. Trc khi s dng INNER JOIN, phi xc nh r cc tiu ch sau y:

Trc tin, cn phi xc nh cc bng m mun lin kt vi bng chnh. Bng chnh xut hin trong mnh FROM. Bng mun ni vi bng chnh phi xut hin sau t kha INNER JOIN. V mt l thuyt, c th ni mt bng vi s
76

lng khng gii hn cc bng khc, tuy nhin, c hiu sut tt hn, nn hn ch s lng bng tham gia php ni da trn cc iu kin ni v khi lng d liu trong cc bng.

Th hai, cn phi xc nh iu kin ni. iu kin ni xut hin sau t kha ON. iu kin ni chnh l nguyn tc tm c cc bn ghi ph hp trong cc bng v ni chng li vi nhau.

C php INNER JOIN nh sau: SELECT column_list FROM table1 INNER JOIN table2 ON join_condition1 INNER JOIN table3 ON join_condition2 ... WHERE WHERE_conditions; V d, nu ni hai bng A v B, INNER JOIN so snh mi bn ghi ca bng A vi mi bn ghi ca bng B tm tt c cc cp bn ghi p ng c iu kin ni. Khi iu kin ni c tho mn, gi tr ct cho mi cp bn ghi ph hp ca bng A v bng B c kt hp thnh mt bn ghi trong kt qu tr v. Hn ch s trng tn ct khi s dng INNER JOIN: Nu ni nhiu bng c ct vi tn tng t, phi ch r tn bng c cha ct d liu nh ly trnh li ct khng r rng. Gi s nu bng tbl_A v tbl_B c cc ct tng t M . Trong cu lnh SELECT vi INNER JOIN, phi tham chiu ti ct M bng cch s dng c php nh tbl_A.M . V d: Hy xem xt hai bng products v orderDetails. Bng products l bng d liu tng th lu tr tt c cc sn phm. Bt c khi no mt sn phm c bn ra, n c lu tr trong bng OrderDetails cng vi cc thng tin khc. Lin kt gia cc bng ny l ct productCode

77

V d: mun bit nhng sn phm c bn, c th s dng INNER JOIN nh sau: SELECT products.productCode, products.productName, orderDetails.orderNumber FROM products INNER JOIN orderDetails on products.productCode = orderDetails.productCode;

78

INNER JOIN so snh tng dng trong bng products v OrderDetails tm mt cp bn ghi c cng productCode. Nu mt cp bn ghi c cng m sn phm, khi tn sn phm v s th t cng s c kt hp thnh mt hng tr li kt qu. B danh (Alias): c th to b danh ca bng tbl_A l A v tham chiu n ct M l A.M , nh vy khng mt cng g li tn bng na. V d trn c th vit li nh sau: SELECT p.productCode, p.productName, o.orderNumber FROM products p INNER JOIN orderDetails o on p.productCode = o.productCode; Lu : Bn cnh php ni trong s dng mnh INNER JOIN .. ON, c th ni trong hai bng bng cch a iu kin ni vo mnh WHERE. V d trn c th vit li nh sau: SELECT p.productCode, p.productName, o.orderNumber FROM products p, orderDetails o WHERE p.productCode = o.productCode;

Chng ta s xem xt mt s v d khc s dng php ni di y: V d: Bng Employees l bng lu gi thng tin v cc nhn vin ca cng ty; bng Customers l bng lu gi thng tin ca cc khch hng, trong c thng tin lin quan n m s ca nhn vin chm sc khch hng. Nh vy lin kt gia hai bng ny c thc hin thng qua ct employeeNumber ca bng Employees v ct salesRep employeeNumber ca bng Customers. bit thng tin v khch hng v tn nhn vin chm sc khch hng , c th vit truy vn s dng INNER JOIN nh sau: SELECT customerName, firstname as EmployeeName FROM customers C join employees E on C.salesrepemployeenumber = e.employeenumber Kt qu tr v nh sau:
79

V d: a ra thng tin v cc dng sn phm v tng s hng c trong dng sn phm . SELECT pl.productLine, pl.textDescription, sum(quantityInStock) FROM productlines pl JOIN products p ON pl.productLine =p.productLine GROUP by pl.productLine; Kt qu tr v nh sau:

80

V d: a ra thng tin v cc sn phm v tng gi tr t hng cho sn phm SELECT P.productCode, P.productName, SUM(priceEach * quantityOrdered) total FROM orderdetails O INNER JOIN products P ON O.productCode = P.productCode GROUP by productCode ORDER BY total Kt qu tr v nh sau:

81

Bn cnh php ni hai bng d liu, ta c th ni nhiu bng d liu trong cng mt cu lnh SELECT. V d: a ra tn cc khch hng v tng gi tr cc n hng ca cc khch hng . SELECT C.customerName, sum(OD.priceEach*OD.quantityOrdered) as total FROM customers C INNER JOIN orders O on C.customerNumber = O.customerNumber INNER JOIN orderdetails OD on O.orderNumber = OD.orderNumber GROUP BY C.customerName Nh trong v d trn thng tin cn kt hp t ba bng d liu l customers, orders v orderdetails.

V d: a ra cc n hng, tn cc khch hng v tng gi tr ca n hng . SELECT O.orderNumber,C.customerName, sum(OD.priceEach*OD.quantityOrdered) as total FROM customers C
82

INNER JOIN orders O on C.customerNumber = O.customerNumber INNER JOIN orderdetails OD on O.orderNumber = OD.orderNumber GROUP BY O.orderNumber;

2. PHP NI TRI (LEFT JOIN)


LEFT JOIN cng l mt ty chn ca cu lnh SELECT cho php ly thm d liu t cc bng khc. LEFT JOIN bao gm cc t kha LEFT JOIN, tip theo l bng th hai mun thc hin ni. Yu t tip theo l t kha ON v theo sau bi cc iu kin ni. Mnh LEFT JOIN s c thc hin nh sau: khi mt hng t bng bn tri ph hp vi mt hng t bng bn phi da trn iu kin ni, ni dung ca hng s c la chn nh mt dng trong kt qu u ra. Khi mt hng trong bng bn tri khng tm c hng no ph hp trong bng ni, n vn c xut hin trong kt qu u ra, nhng kt hp vi mt hng "gi" t bng bn phi vi gi tr NULL cho tt c cc ct. Tm li, LEFT JOIN cho php chn tt c cc hng t bng bn tri ngay c khi khng c bn ghi no ph hp vi n trong bng bn phi.

83

V d: s dng LEFT JOIN Chng ta hy xt vo hai bng customers v orders. Nu mun bit mt khch hng vi ho n no ca h v tnh trng ho n th no, c th s dng MySQL LEFT JOIN nh sau:

SELECT c.customerNumber, customerName,orderNUmber, o.status FROM customers c LEFT JOIN orders o ON c.customerNumber = o.customerNumber;

84

bng kt qu trn, c th nhn thy tt c cc khch hng c lit k. Tuy nhin, c nhng bn ghi c thng tin khch hng nhng tt c cc thng tin v n hng l NULL. iu ny c ngha l nhng khch hng ny khng c bt k mt n t hng no c lu trong c s d liu ca chng ta. LEFT JOIN rt hu ch khi mun tm cc bn ghi trong bng bn tri m khng ph hp vi bt k mt bn ghi no trong bng bn phi. c th thc hin iu ny bng cch thm mt mnh WHERE la chn cc hng ch c gi tr NULL trong mt ct bng bn phi . V vy, tm thy tt c cc khch hng khng c bt k n t hng no trong c s d liu ca chng ta, c th s dng LEFT JOIN nh sau: SELECT c.customerNumber, customerName,orderNUmber, o.status FROM customers c LEFT JOIN orders o ON c.customerNumber = o.customerNumber WHERE orderNumber is NULL Kt qu tr v nh sau:

Nh vy, truy vn ch tr v cc khch hng m khng c bt k n hng no nh vo cc gi tr NULL. Tng t nh vy, tm ra nhng nhn vin khng lm nhim v chm sc khch hng, bc u, thc hin truy vn nh sau: Select * from employees e
85

left join customers c on e.employeenumber=c.salesrepemployeenumber

Sau lc ra nhng bn ghi nhn gi tr null ti ct customerNumber, chnh l kt qu ca truy vn. Select * from employees e left join customers c on e.employeenumber=c.salesrepemployeenumber where customerNumber is null

86

3. PHP T NI (Self Join)


Mt php t ni l mt kiu ni trong mt bng c ni vi chnh n, c th khi mt bng c mt kha ngoi tham chiu ti kha chnh ca n. V d: Bng employees c mt kha ngoi l reportsTo tham chiu ti kha chnh employeeNumber ca chnh bng employees. Cn thit phi s dng b danh cho mi bn sao ca bng trnh nhp nhng SELECT concat (e1.lastName ," ",e1.firstName) as fullname, e1.email, concat (e2.lastName ," ",e2.firstName) as manager, e2.email FROM employees e1, employees e2 WHERE e1.reportsTo = e2.employeeNumber; Kt qu tr v nh sau:

87

Bi tp thc hnh:
1. a ra thng tin v cc nhn vin v tn vn phng ni h lm vic. 2. a ra thng tin v tn khch hng v tn cc sn phm h mua. 3. a ra thng tin v cc mt hng cha c ai t mua. 4. a ra thng tin v cc n hng (gm orderDate, requiredDate, Status) v tng gi tr ca n hng. 5. a ra thng tin v cc dng sn phm v s lng sn phm ca dng sn phm . Sp xp theo th t s lng gim dn.

88

Bi thc hnh s 8 Truy vn con (Subquery)


Ni dung chnh: Khi nim v s dng truy vn con, truy vn con tng quan v khng tng quan.

1. Khi nim truy vn con


kt hp cc bng d liu vi nhau, ngoi cc php ni v cc ton t tp hp, SQL cung cp mt cch khc tr li d liu t nhiu bng gi l truy vn con (subquery). Khi mt cu lnh SELECT c s dng trong mt cu lnh khc, cu lnh SELECT bn trong c gi l truy vn con (subquery), cch gi khc l truy vn lng (nested query), truy vn trong (inner query). C bn mt truy vn con c th c s dng bt c ni u m mt biu thc c th c s dng. V d: a ra cc n hng gn y nht SELECT * FROM orders WHERE orderDate = (SELECT MAX(orderDate) FROM orders) Truy vn con SELECT MAX(orderDate) FROM orders tr li ngy gn y nht trong cc n hng v gi tr ny s c s dng trong mnh WHERE ca truy vn ngoi. Kt hp hai truy vn trn s tr li danh sch cc n hng ca ngy gn nht.

Truy vn con c chia lm hai loi: truy vn con khng tng quan (non-correlated) v truy vn con c tng quan (correlated)

2. Truy vn con khng tng quan


Mt truy vn con khng tng quan l truy vn con c lp vi truy vn bn ngoi. Truy vn con khng tng quan c thi hnh thi hnh u tin v mt ln duy nht cho ton
89

b cu lnh. Kt qu ca truy vn con c in vo truy vn bn ngoi, v cui cng thi hnh truy vn bn ngoi. V d: a cc cc sn phm khng c mt trong bt k mt n hng no. Truy vn con bn trong s tr v cc m sn phm c trong bng orderdetails. Truy vn bn ngoi s tr v cc sn phm c m khng trong danh sch cc m sn phm . SELECT * FROM products (SELECT productCode FROM orderdetails ) WHERE productCode not in

V d:a ra cc sn phm c mt trong cc n hng SELECT * FROM WHERE products

productCode in

(SELECT productCode FROM orderdetails )

90

3. Truy vn con tng quan


Truy vn con tng quan khng c lp vi truy vn bn ngoi. Mt truy vn con tng quan l mt truy vn con s dng cc gi tr t truy vn bn ngoi trong mnh WHERE ca n. Qu trnh thc hin nh sau: cc truy vn bn ngoi c thc hin trc tin v sau thi hnh truy vn con bn trong cho mi dng kt qu ca truy vn bn ngoi. V d:a ra cc sn phm c s lng trong kho ln hn trung bnh s lng trong kho ca cc sn phm cng loi. SELECT * FROM products p

WHERE quantityInStock > (SELECt avg(quantityInStock) FROM products WHERE productLine = p.productLine )

Qu trnh thc hin truy vn nh sau: vi mi dng sn phm ca truy vn bn ngoi, cu lnh truy vn bn trong s tm ra s lng sn phm trung bnh ca ca sn phm cng loi vi sn phm v kt qu ca truy vn con s c a vo mnh WHERE kim tra. V d: a ra cc sn phm c mt trong cc n hng, cch vit di y l mt cch khc ca v d phn trc. S dng ton t EXISTS kim tra s tn ti. SELECT * FROM products as p
91

WHERE exists (SELECT productCode FROM orderdetails WHERE productCode = p.productCode)

4. S dng truy vn con


Ngoi s dng truy vn con trong mnh WHERE, truy vn con cn c th c s dng trong danh sch cc ct ca cu lnh SELECT hoc trong mnh FROM. V d: vi mi dng n hng, a vo thm tn ca sn phm. SELECT orderNumber, quantityOrdered, (SELECT productName FROM products WHERE o.productCode) as productName FROM orderdetails o productCode =

92

Trong v d trn tn ca sn phm l kt qu ca truy vn con trn bng products V d: vi mi sn phm, a km thm tng s lng sn phm c t hng SELECT productName, (SELECT sum(quantityOrdered) FROM FROM products as p ORDER BY totalQuantityOrderd desc orderdetails WHERE productCode = p.productCode) as totalQuantityOrderd

93

Trong v d trn gi tr tng s lng c t l kt qu ca truy vn t bng orderDetails V d trn c th vit li bng cch coi kt qu ca truy vn con nh mt bng d liu, sau ni bng products vi bng kt qu ny. SELECT productName, totalQuantityOrderd FROM products, (SELECT productCode,sum(quantityOrdered) as totalQuantityOrderd FROM orderdetails group by productCode) AS productOrder WHERE products.productCode = productOrder.productCode

Kt qu ca truy vn cho kt qu tng t nh truy vn trc

94

Bi tp thc hnh
1. S dng truy vn con a ra cc sn phm c n t hng trong thng 3/2005. 2. Tng t nh cu hi 1 nhng dng php ni bng thay v s dng truy vn con. 3. S dng truy vn con a ra cc thng tin v cc n hng trong thng gn nht (s dng thng tin t bng orders). 4. S dng truy vn con a ra thng tin v cc n hng v tng gi tr n hng (s dng thng tin t bng orders v orderdetails). 5. Cng nh cu hi 4, nhng s dng php ni bng thay v s dng truy vn con.

95

Bi thc hnh s 9 Thm, sa, xa d liu trong bng


Ni dung: Cc cu lnh cp nht d liu
Lnh INSERT Cu lnh UPDATE Cu lnh DELETE

1. Cu lnh INSERT
Cu lnh INSERT cho php thm cc dng d liu vo mt bng xc nh. C hai bin th ca lnh INSERT: cch th nht l thm mt dng gi tr, cch th hai l thm mt tp cc dng tr v t mt cu lnh SELECT. Thm mt dng gi tr INSERT INTO table_name [(column_name,...)] VALUES((expression | DEFAULT),...),(...),... INSERT to mt dng mi trong bng <table_name> . Dng mi cha cc gi tr xc nh bi cc biu thc trong danh sch VALUES. Nu column_name khng c a vo, th trnh t cc ct trong bng <table_name> c s dung. Nu column_name c a, theo cch ny, dng d liu mi c thm vo bng bng cch xc nh tn ct v d liu cho mi ct. V d: thm mt bn ghi vo bng offices INSERT INTO classicmodels.offices (officeCode, city, phone, addressLine1,
96

addressLine2, state, country, postalCode, territory ) VALUES ('8', 'Boston', '+1 215 837 0825', '1550 dummy street', NULL, 'MA, 'USA', '02107', 'NA' ) Nu gi tr cha xc nh c th s dng t kha NULL. S dng gi tr ngm nh bng t kha DEFAULT. C th kim tra kt qu ca lnh trn bng cu lnh truy vn: SELECT * FROM classicmodels.offices

97

Kt qu l mt dng d liu mi c ghi vo cui bng d liu Ch : Nu khng xc nh tn cc ct, khi trt t ca cc ct thay i, SQL c th a gi tr vo sai v tr. Do cch tt trnh iu ny l xc nh tn ct i km vi d liu khi thm d liu vo bng. Thm nhiu dng vi lnh SELECT Ngoi ra thay v cung cp d liu trc tip, c th chn t cc bng khc s dng cu lnh SELECT. INSERT INTO table_name [(column_name,...)] <SELECT statement>; Khng ging vi cch trc, cch ny cho php to nhiu dng d liu vi. Danh sch cc ct kt qu ca lnh SELECT phi trng vi danh sch cc ct ca bng. Cng ging nh cch trc, cc ct khng xc nh s c gn gi tr ngm ngm ca ct. V d: to mt bng tm v thm vo tt c cc offices ti US INSERT INTO temp_table SELECT * FROM classicmodels.offices WHERE country = 'USA'

C th kim tra kt qu ca lnh trn bng cu lnh truy vn: SELECT * FROM classicmodels.temp_table

98

2. Cu lnh UPDATE
Cu lnh UPDATE c s dng cp nht d liu tn ti trong cc bng ca CSDL. Cu lnh c th dng thay i cc gi tr ca mt dng, mt nhm cc dng hoc thm ch tt c cc dng trong mt bng. Cu trc ca cu lnh UPDATE nh sau: UPDATE table_name [, table_name...] SETcolumn_name1=expr1 [, column_name2=expr2 ...] [WHERE condition]

Sau t kha UPDATE l tn bng mun thay i d liu. Mnh SET xc nh ct thay i v gi tr thay i. Gi tr thay i c th l gi tr c nh, biu thc hoc thm ch mt truy vn con.

Mnh WHERE xc nh cc dng ca bng s c cp nht. Nu mnh WHERE b b qua, tt c cc dng ca bng s b cp nht. Mnh WHERE rt quan trng, khng nn b b qua. Nu ch mun thay i mt dng ca mt bng, nhng qun mnh WHERE s cp nht ton b bng. Nu mt cu lnh UPDATE vi phm bt c rng buc ton vn no, MySQL s khng thc hin cp nht v a ra thng bo li

V d: Trong bng employees, nu mun cp nht email ca Diane Murphy vi employeeNumber l 1002 thnh diane-murphy @classicmodelcars.com, Thc hin cu truy vn sau: SELECT firstname, lastname, email FROM employees WHERE employeeNumber = 1002

99

Kt qu cp nht email mi diane-murphy@classicmodelcars.com UPDATE employees SET email = 'diane-murphy @classicmodelcars.com' WHERE employeeNumber = 1002 Thc hin cu truy vn SELECT li, s thy email thay i gi tr mi:

3. Cu lnh DELETE
xa cc dng d liu ca mt bng CSDL, s dng cu lnh DELETE. Cu trc lnh DELETE nh sau: DELETE FROM table_name [WHERE conditions]

Sau DELETE FROM l tn bng mun xa cc bn ghi. Mnh WHERE xc nh iu kin gii hn cc dng mun loi b. Nu mt bn ghi tha mn iu kin WHERE s b loi b khi bng CSDL.

Nu mnh WHERE b b qua trong cu lnh DELETE, tt c cc dng ca bng s b xa. gim s nguy him ca cc cu lnh nh DELETE hoc UPDATE, nn lun lun kim tra iu kin WHERE trong mt cu lnh SELECT trc khi thc hin lnh DELELE hoc UPDATE.

V d: Xa tt c cc nhn vin trong vn phng c m officeNumber l 6, thc hin cu truy vn sau:

100

DELETE FROM employees WHERE officeCode = 6 Thc hin li cu lnh truy vn trn bng employees.Trong bng khng cn cc dng c officeCode = 6

Ch : Nu loi b iu kin WHERE DELETE FROM employees S xa tt c cc dng ca bng employees. Do cn ch iu kin trong mnh WHERE khi thc hin lnh DELETE. MySQL cng h tr xa cc bn ghi t nhiu bng khc nhau. V d: xa tt c cc nhn vin (employee) lm vic cho vn phng c m officecode 1 v cng xa c vn phng . DELETE employees,offices FROM employees,offices WHERE employees.officeCode = offices.officeCode offices.officeCode = 1 AND

Sau khi thc hin lnh xa d liu trn, kim tra li cc bng d liu Bng employees khng cn cc dng nhn vin c officeCode = 1

101

Bng offices khng cn dng c officeCode = 1

4. Cp nht d liu c rng buc


Gia cc bng d liu c th tn ti cc rng buc, v d rng buc kha ngoi gia bng products v productlines.

102

Nu chng ta xa mt dng d liu trong bng productline m vn cn tn ti cc dng d liu trong bng products tham chiu ti dng d liu ny, ngm nh s khng c php. V d: Xa cc dng sn phm c m l Ships DELETE FROM productlines WHERE productLine='Ships' S hin thng bo li Cannot delete or update a parent row: a foreign key constraint fails (`classicmodels`.`products`, CONSTRAINT `fk_products_productlines` FOREIGN KEY (`productLine`) REFERENCES `productlines` (`productLine`) ON DELETE NO ACTION ON UPDATE NO ACTION) Nu khai bo kha ngoi vi ty chn ON DELETE CASCADE, h thng s t ng xa cc dng d liu trong bng products tham chiu ti dng d liu ny. Nu khai bo kha ngoi vi ty chn ON DELETE SET NULL, th kha ngoi productLine ca cc dng tham chiu s c thit lp l NULL.

103

Bi tp thc hnh
1. Thc hnh cc lnh INSERT, UPDATE v DELETE trn cc bng trong hnh di y ca CSDL classicmodels.

2. 3.

To mt bng t tn l temp_orderdetails, sau thc hin thm d liu trong Sa cc nhn vin c titleJob l Sales Rep thnh Sales Representative

ngy gn y nht t bng orderdetails vo bng trn.

104

Bi thc hnh s 10 M hnh ha CSDL s dng cng c MySQL Workbench


Ni dung chnh:
Gii thiu MySQL Workbench To m hnh EER To CSDL t m hnh quan h thc th EER v ngc li

1. Gii thiu MySQL Workbench


MySQL Workbench cung cp mt cng c ha lm vic vi MySQL Server v CSDL. MySQL Workbench cung cp ba lnh vc chc nng chnh: Pht trin SQL: gip to v qun l cc kt ni ti cc CSDL server, cng nh cu hnh cc tham s kt ni. MySQL Workbench cng cung cp kh nng thi hnh cc truy vn SQL trn cc kt ni CSDL. M hnh ha d liu: Cho php to cc m hnh lc CSDL mt cch trc quan. Cung cp kh nng to lc t mt CSDL c sn (reverse) hoc to CSDL t lc (forward). Chc nng Table Editor gip d dng sa i cc bng, ct, ch mc, phn mnh.. Qun tr Server: Gip to v qun tr cc MySQL server.

105

MySQL Workbench c cung cp trn cc mi trng khc nhau: Windows Linux Mac OS X Trn mi trng Windows, chy Workbench my tnh cn ci t .NET framework

Phn sau s tp trung vo chc nng m hnh ha d liu 2. To m hnh quan h thc th EER
Bc 1: S dng chc nng Create new EER Model to mt m hnh mi

106

Bc 2: Thm mt biu mi vo m hnh (chn Model -> Add Diagram)

107

Bc 3: Thm cc bng yu cu vo biu mi to bc trc v sa i cc bng t c cc yu cu t ra. thm bng vo m hnh, chn vo biu tng c khoanh trn nh trong hnh di. sa i bng, chn bng v chn chc nng Edit Table

V d: sa tn bng mi to l film v b sung thm cc ct nh hnh v di PK: ch thuc tnh l kha chnh NN: gi tr khng c trng UQ: rng buc gi tr l duy nht BIN: ch gi tr lu dng nh phn UN: Unsigned ch thuc tnh lu dng khng du
108

AI: Nu gi tr thuc tnh l t tng Default: L gi tr ngm nh ca ct

To lin kt gia cc bng Cng c h tr to cc mi quan h gia cc bng: gm quan h 1-1, quan h 1-n, quan h n-m

Ch : vi quan h 1-n, cng c cung cp 3 tnh hung to quan h:


109

Nu la chn biu tng nt t: mt thuc tnh mi s c t ng to bn bng tham chiu tham chiu ti kha chnh ca bng c tham chiu, v thuc tnh mi to ra khng phi l thuc tnh kha chnh ca bng tham chiu. Nu la chn biu tng nt lin: mt thuc tnh mi tng t nh trn c to ra, khc bit ch thuc tnh ny c thuc tnh kha chnh ca bng tham chiu. Nu la chn biu tng nt lin km bt: s cho php la chn thuc tnh c sn ca bng tham chiu lm kha ngoi tham chiu ti kha chnh ca bng c tham chiu. V d: To quan h 1-n gia bng language v bng film to bc trn Bc 1: Chn vo biu tng nh hnh v di

Bc 2: Click chut vo bng film, tip click chut vo bng language Kt qu s sinh ra rng buc kha ngoi lin kt hai bng film v language. Ch : thuc tnh language_language_id s c t ng sinh ra

110

Ngoi cch to lin kt kha ngoi nh trn, c th to lin kt kha ngoi bng cch Chn sa i bng tham chiu Chn vo tab Foreign Keys nh hnh v di y:

Ch : Giao din ny ngoi to lin kt kha ngoi cn h tr sa i cc ty chn ca kha ngoi nh ON UPDATE, ON DELETE.
111

V d: To lin kt n-m gia hai bng film v category Bc 1: Chn vo biu tng nh hnh v di

Bc 2: Click chut vo bng film v sau l bng category. Kt qu cng c s t ng sinh ra mt bng mi c tn film_has_category c kha chnh l l t hp t kha chnh ca hai bng film v bng category. Sau bc to trn, ngi s dng c th sa i bng mi sinh theo nhu cu ca mnh.

112

3. To CSDL t m hnh quan h thc th EER


to c s d liu mi tn l my_classicmodels lu vo MySQL t m hnh trn: Bc 1: S dng chc nng Database -> Forward Engineer

Bc 2: Chn cc i tng t m hnh EER s lu vo CSDL

Bc 3: Chn kt ni ti MySQL server dng lu tr CSDL s c to ra

113

4. ng b ha m hnh EER vi CSDL trong MySQL Server


Trong qu trnh pht trin, m hnh EER hoc CSDL c s thay i, Workbench cung cp chc nng h tr ng b ha cc thay i gia m hnh EER v CSDL.

114

V d trn, m hnh EER c b sung bng actor. tin hnh ng b ha, thc hin cc bc sau: Bc 1: Chn chc nng Database -> Synchronize Model

Bc 2: Chn kt ni ti MySQL server cn ng b ha

Bc 3: Chn CSDL mun ng b v i tng cn ng b ha gia m hnh EER v CSDL


115

5. To m hnh quan h thc th EER t CSDL c sn


Bn cnh to m hnh quan h thc th EER t u, c th to m hnh t mt CSDL c sn, iu ny c th gp khi cn pht trin tip trn mt h thng CSDL c sn. Chn chc nng: Create EER Model From Existing Database

116

Hp thoi tip theo s ch ra Database server mun kt ni n

Bc tip theo chn CSDL mun sinh m hnh EER


117

Workbench s to ra mt m hnh EER t CSDL c chn nh hnh di y. Lu : gia cc bng ca m hnh cha c lin kt do trong CSDL gc, cha c lin kt gia cc bng d liu.

118

Bi tp thc hnh
1. To mt m hnh mi tn l my_classicmodels gm cc bng sau:

Cc rng buc kha ngoi vi ty chn ON UPDATE CASCADE Cc bng s dng engine InnoDB. Cc kha chnh u l kiu s t ng tng Dng chc nng Forward Engine to c s d liu t tn l my_classicmodels
2. B sung cc bng customers sau vo m hnh to cu 1

119

Bng orders to cu 1 s tham chiu ti bng customers Sau s dng chc nng ng b ha ng b m hnh vi CSDL my_classicmodels lu trong MySQL Server.

120

You might also like