Giáo trình Access - Nguyễn Trần Phương (Phần 1)
Tóm tắt Giáo trình Access - Nguyễn Trần Phương (Phần 1): ...uất hiện bảng mới ở chế ủộ Datasheet View. − Thanh Ribbon chuyển sang tab Field với nhúm lệnh Add & Delete giỳp bạn chọn kiểu dữ liệu cho Field mới khi thờm Field vào bảng. Giỏo trỡnh Access -21- − ðặt trỏ trong ụ bờn dưới Field mới (Click to Add), sau ủú chọn một trong cỏc kiểu ...y chọn: Enforce Referential Integrity nếu muốn quan hệ cú tớnh ràng buộc toàn vẹn. Quan hệ cú tớnh ràng buộc toàn vẹn sẽ ủảm bảo cỏc vấn ủề sau: Khi nhập dữ liệu, dữ liệu của field tham gia quan hệ ở bảng “nhiều” (bảng con) phải tồn tại trong bảng “một” (bảng cha). Vớ dụ: muốn nhập m...ured Query Language - ngụn ngữ truy vấn mang tớnh cấu trỳc) là một loại ngụn ngữ phổ biến ủể tạo, hiệu chỉnh, và truy vấn dữ liệu từ một cơ sở dữ liệu quan hệ. Trong access, Query là một cụng cụ mạnh dựng ủể khai thỏc và xử lý dữ liệu, ủỏp ứng cỏc nhu cầu tra cứu dữ liệu, gồm cỏc loại query:...
o phép bạn tạo ra các bảng mới hoặc thay đổi dữ liệu trong các bảng hiện cĩ của cơ sở dữ liệu. action Giáo trình Access -52- query khi thực thi sẽ ảnh hưởng đến nhiều recored trong các bảng. 4.3. Cách tạo select query bằng Design view ðể tạo query bạn chọn tab Create trên thanh Ribbon, click nút query Design trong nhĩm lệnh Queries. Xuất hiện cửa sổ thiết kế query và cửa sổ Show table cho phép chọn các bảng hoặc query tham gia truy vấn. − Chọn các bảng chứa các field mà bạn muốn hiển thị trong kết quả, hoặc các field cần trong các biểu thức tính tốn. − Click nút Add để thêm các bảng vào cửa sổ thiết kế query. − Sau khi chọn đủ các bảng hoặc query cần thiết, click nút close để đĩng cửa sổ Show Table. − Chọn các field cần hiển thị trong kết quả vào lưới thiết kế bằng cách drag chuột kéo tên field trong field list hoặc double click vào tên field. − Nhập điều kiện lọc tại dịng Criteria. − Click nút View để xem trước kết quả, click nút run để thực thi. 4.3.1. Các thành phần trong cửa sổ thiết kế query: Cửa sổ thiết kế query gồm 2 phần Giáo trình Access -53- − Table/query pane: khung chứa các bảng hoặc query tham gia truy vấn. − Lưới thiết kế (Query by Example: QBE) : Chứa tên field tham gia vào truy vấn và bất kỳ tiêu chuẩn được sử dụng để chọn các records. Mỗi cột trong lưới QBE chứa thơng tin về một field duy nhất từ một bảng hoặc query trên Table/query pane. Lưới thiết kế bao gồm các thành phần: Field list Table/Query pane Lưới QBE Field: là nơi mà các tên field được tạo vào hoặc thêm vào và hiển thị trong kết quả truy vấn. Table: hiển thị tên của các bảng chứa các field tương ứng trên dịng Field. Sort: chỉ định kiểu sắp xếp dữ liệu của các field trong query. Show: quyết định để hiển thị các field trong Recordset. Criteria: Nhập các điều kiện lọc các record. Or: thêm các điều kiện lọc tương ứng với phép OR, nếu các biểu thức điều kiện ở các field cùng đặt trên một dịng thì tương ứng với phép AND. 4.3.2. Các thao tác trong cửa sổ thiết kế query: a) Chọn field trong lưới thiết kế: ðể chọn một field hoặc nhiều field trong lưới thiết kế, ta đưa chuột lên trên tên field Giáo trình Access -54- khi chuột cĩ dạng mũi tên màu đen hướng xuống thì click chuột để chọn, drag chuột để chọn nhiều field. b) Di chuyển field: Drag chuột trên tên field để di chuyển c) Chèn thêm field hoặc xĩa field: − Chèn thêm field: click nút Insert Columns, mặc định cột mới sẽ được chèn vào trước field hiện hành. − Xĩa field: chọn field cần xĩa, click nút Delete Columns. d) Tạo nhãn cho field: ðể làm cho bảng dữ liệu truy vấn dễ dàng hơn để đọc, bạn cĩ thể cung cấp các nhãn cho các field trong truy vấn điều này khơng ảnh hưởng đến tên của field hoặc cách dữ liệu được lưu trữ và sử dụng truy cập. − Click phải trên tên field, chọn properties − Tại thuộc tính Caption, nhập nhãn cho field. e) Thêm Table/Query vào truy vấn: Khi thiết kế query, nếu cần chọn thêm bảng, click nút Show Table trong nhĩm lệnh Query Setup. f) Xĩa Table/Query trong khỏi truy vấn: Click phải trên Table/Query cần xĩa, chọn Remove Table. Giáo trình Access -55- 4.3.3. Cách nhập biểu thức điều kiện Ngồi việc sử dụng các truy vấn để chọn các field hiển thị các thơng tin cần thiết, bạn cịn cĩ thể sử dụng các truy vấn để hiển thị một số các record theo một điều kiện nào đĩ. Biểu thức điều kiện là các quy tắc lọc áp dụng cho dữ liệu khi chúng được chiết xuất từ cơ sở dữ liệu, nhằm giới hạn các record trả về của truy vấn. Ví dụ: người dùng chỉ muốm xem thơng tin về các sinh viên của một lớp CDTHA. Biểu thức điều kiện được nhập trên dịng Criteria và dịng Or của lưới thiết kế query và tại cột chứa giá trị của biểu thức điều kiện lọc. Ví dụ: Chuỗi điều kiện “CDTHA” là giá trị trong field Malop, do đĩ chuỗi “CDTHA” được nhập trên dịng Critetia tại cột Malop. a) Các loại dữ liệu dates, times, text, và giá trị trong biểu thức điều kiện: Kiểu dữ liệu Ví dụ Text “Text” Date #1-Feb-2010# Time #12:00AM# Number 10 Field name [field name] Giáo trình Access -56- b) Tốn tử được sử dụng trong biểu thức điều kiện: Tốn tử Ví dụ = [Ngaylaphd]=#01/01/08# < [Ngaylaphd]<#01/01/08# < = Year([ngaysinh])<=1980 > [soluong]>50 > = [dongia]>=100 [donvitinh]”Kg” Between and Between 1/1/99 And 12/31/99 Like Like "s*" Is null Is null In(v1, v2, ) In(“java”, “c++”) − Ngồi ra các hàm ngày giờ, hàm dữ liệu chuỗi, cũng được sử dụng trong biểu thức điều kiện. 4.3.4. Truy vấn cĩ nhiều điều kiện ở nhiều fields Khi bạn muốn giới hạn các records dựa trên nhiều điều kiện ở nhiều field khác nhau, thì Access sẽ kết hợp các điều kiện lại với nhau bằng cách sử dụng tốn tử And và Or, cho hai trường hợp: − Nếu các điều kiện phải được thoả mãn đồng thời thì các điều kiện phải được liên kết nhau bởi phép AND, bằng cách nhập các điều kiện trên cùng một dịng Criteria trong lưới thiết kế query. Ví dụ: Tìm những sinh viên cĩ điểm mơn CSDL >=5 Giáo trình Access -57- − Nếu chỉ cần thỏa mãn một trong các điều kiện thì các điều kiện được liên kết nhau bởi phép OR, bằng cách nhập các điều kiện trên các dịng khác nhau trong lưới thiết kế query. Ví dụ: Tìm những sinh viên cĩ điểm mơn “CSDL” hoặc “CTDL” >=5 4.3.5. Top value Chức năng top value được sử dụng để hiển thị những record trên cùng của danh sách được tạo ra bởi một truy vấn. a) Cách thực hiện: − Nếu muốn hiển thị danh sách các record cĩ giá trị cao nhất ở field được chỉ định thì sắp xếp field đĩ theo chiều giảm dần (Descending) Nếu muốn hiển thị danh sách các record cĩ giá trị thấp nhất ở field được chỉ định thì sắp xếp field đĩ theo chiều tăng dần (Ascending). Trong ơ return ta nhập vào số giá trị muốn hiển thị. b) Các tùy chọn trong Top Values: All : Hiển thị tất cả các record của Query. 5 : Hiển thị 5 record đầu tiên. 25 : Hiển thị 25 record đầu tiên. Giáo trình Access -58- 100 : Hiển thị 100 record đầu tiên. 5% : Hiển thị 5% record đầu tiên trên tổng số record. 25% : Hiển thị 25% record đầu tiên trên tổng số record. Nếu các record thuộc Top Values cĩ giá trị trùng nhau thì chúng cũng xuất hiện trong kết quả. Nếu muốn chỉ xuất hiện duy nhất một record trong các record cĩ giá trị trùng nhau ta click phải trong cửa sổ thiết kế querychọn properties, tại thuộc tính Unique Valueschọn yes. 4.3.6. Tạo field tính tốn trong query Access cĩ thể thực hiện các phép tốn trong các query, form, report, và macro. Tuy nhiên các field tính tốn thường được thực hiện trong query, từ đĩ, bất kỳ form, report, hoặc macro cĩ sử dụng các truy vấn này sẽ tự động truy cập tính giá trị. ðể làm được các phép tính trong một truy vấn, bạn tạo một field tính tốn mới trong query. Tên của field tính tốn khơng trùng với tên của các field trong bảng. Cú pháp: Field Name: Expression Ví dụ: Tạo Field ThanhTien:[SoLuong]*[DonGiaBan] Field lấy từ bảng Field tính tốn Giáo trình Access -59- 4.3.7. Sử dụng Expresstion Builder Expression Builder là một cơng cụ để giúp bạn tạo các biểu thức nhanh và dễ dàng hơn và cĩ thể truy cập vào thư viện hàm của Access. ðể sử dụng Expression Builder để xây dựng một biểu thức điều kiện hoặc tạo một field mới trong query ta thực hiện như sau: Trong cửa sổ thiết kế query. Click nút Builder trong nhĩm lệnh Query Setup. Xuất hiện cửa sổ Expression Builder bao gồm khung trên cùng cho phép nhập biểu thức, bên dưới là 3 khung giúp bạn tìm tên field và các hàm cần thiết cho biểu thức. Khung Expression Elements chứa các đối tượng trong cơ sở dữ liệu. ðể chọn các field đưa vào biểu thức ta mở mục Database bằng cách double click vào tên của cơ sở dữ liệu hiện hành, chọn table hoặc query, các field trong table hoặc query sẽ hiển thị trong khung Expression Categories, double click để chọn tên field đưa vào biểu thức. ðể chọn hàm bạn click mục function Khung Expression Categories: hiển thị các thành phần của expression theo nhĩm. Khung Expression values chứa giá trị của các phần tử trong biểu thức, hoặc các hàm nếu chọn function trong khung Expression elements. Giáo trình Access -60- G ro u p b y C o u n t 4.4. Total query Access cung cấp chức năng kết nhĩm các record và thực hiện các phép thống kê dữ liệu trên nhĩm record đĩ. Các hàm count, sum, min, max, avg là các hàm cơ bản trong Total Query. Ví dụ: ðếm tất cả các học sinh trong mỗi lớp. Kết quả của query trước khi tổng hợp dữ liệu Mã Lớp Tên Lớp Mã SV CDTH1A Cao ðẳng Tin Học 1A A101 CDTH1A Cao ðẳng Tin Học 1A A102 CDTH1A Cao ðẳng Tin Học 1A A103 CDTH1A Cao ðẳng Tin Học 1A A104 CDTH1B Cao ðẳng Tin Học 1B B101 CDTH1B Cao ðẳng Tin Học 1B B102 CDTH1B Cao ðẳng Tin Học 1B B103 CDTH1B Cao ðẳng Tin Học 1B B104 CDTH1B Cao ðẳng Tin Học 1B B105 CDTH2A Cao ðẳng Tin Học 2A A201 CDTH2A Cao ðẳng Tin Học 2A A202 CDTH2A Cao ðẳng Tin Học 2A A203 CDTH2A Cao ðẳng Tin Học 2A A204 Sau khi tổng hợp dữ liệu ta cĩ kết quả: Mã Lớp Tên Lớp TongsoSV CDTH1A Cao ðẳng Tin Học 1A 4 CDTH1B Cao ðẳng Tin Học 1B 5 CDTH2A Cao ðẳng Tin Học 2A 4 4.4.1. Cách tạo Total Query: ðể tạo một Total query, bạn thực hiện các bước sau: Tạo một query mới bằng Design view. Chọn các table cần sử dụng trong query từ cửa sổ Show Table. Chọn các field chứa dữ liệu cần thống kê vào lưới thiết kế. Giáo trình Access -61- Chọn Query Tools, chọn tab Design. Trong nhĩm lệnh Show/Hide, click nút Totals. Trên lưới thiết kế query xuất hiện thêm dịng Total. Tại mỗi field, chọn các tùy chọn trên dịng Total. 4.4.2. Các tùy chọn trên dịng Total: Tùy chọn Ý nghĩa Group by Nhĩm các record cĩ giá trị giống nhau tại một số field được chỉ định thành một nhĩm. Sum Tính tổng các giá trị trong một nhĩm record tại field được chỉ định. Avg Tính trung bình cộng các giá trị trong một nhĩm record tại field được chỉ định. Max Tìm giá trị lớn nhất trong nhĩm record tại field được chỉ định. Min Tìm giá trị nhỏ nhất trong nhĩm record tại field được chỉ định. Count ðếm số record trong nhĩm. First Tìm giá trị đầu tiên trong nhĩm tại cột được chỉ định. Last Tìm giá trị cuối cùng trong các giá trị trên cột Giáo trình Access -62- t h a m s ố của nhĩm. Expression Dùng cho field chứa biểu thức tính tốn. Where Dùng cho field chứa điều kiện dùng để lọc Record trước khi tính tốn và khơng hiển thị trong kết quả. 4.5. Queries tham số (Parameter Queries) Query tham số là query nhắc người dùng nhập điều kiện cho query tại thời điểm query thực thi. Cách tạo: Trong cửa sổ thiết kế query, chọn các bảng/query tham gia truy vấn. Chọn các field hiển thị trong kết quả . Tại field chứa điều kiện lọc, nhập câu nhắc trên dịng Critetia và đặt trong cặp dấu [ ]. Ví dụ: Xem thơng tin điểm của một sinh viên tùy ý Khi thực thi query, chương trình yêu cầu nhập giá trị cho Giáo trình Access -63- 4.6. Crosstab query 4.6.1. Khái niệm: Crosstab query là một query dùng để tổng hợp dữ liệu dưới dạng bảng tính hai chiều, trong đĩ tiêu đề của dịng và cột của bảng là các giá trị được kết nhĩm từ các field trong bảng dữ liệu, phần thân của bảng tính là dữ liệu được thống kê bởi các hàm: Sum, count, avg, min, max, và các chức năng khác. Ví dụ: Thống kê tổng số sinh viên theo loại giỏi, khá, trung bình, yếu theo từng lớp. Dạng crosstab query Dạng Total query 4.6.2. Cách tạo: a) Tạo Crosstab query bằng chức năng Wizard: Trên thanh Ribbon, click nút Create. Trong nhĩm lệnh Query, chọn Query Wizard. Trong cửa sổ New Query, chọn Crosstab Query WizardOK. Giáo trình Access -64- Chọn dữ liệu nguồn cho Crosstab Query, cĩ thể là table hoặc Query Next. Chọn field làm Row heading trong khung Available Fields Click nút > để chọn field. Click Next. Chọn field làm column heading Next. Giáo trình Access -65- R o w h ea d in g V al u e Chọn field chứa dữ liệu thống kê trong khung Fields. Chọn hàm thống kê trong khung Function Next Nhập tên cho query và click nút Finish để kết thúc. Hạn chế khi tạo crosstab query bằng wizard: Nếu các field trong Crosstab query được lấy từ nhiều bảng hoặc trong query cĩ chứa các điều kiện lọc dữ liệu thì phải tạo một select query chứa tất cả các field và các điều kiện, sau đĩ lấy select query này làm dữ liệu nguồn tạo crosstab query. b) Tạo Crosstab query bằng Design Một crosstab query cần ít nhất là 3 field: Một field để lấy giá trị làm tiêu đề cho cột gọi là column heading. Một field (hoặc nhiều field) để lấy giá trị làm tiêu đề cho dịng gọi là row heading. Một field chứa dữ liệu thống kê (Value) Ví dụ: Column heading Giáo trình Access -66- ðể tạo một Crosstab query bằng Design View ta thực hiện như sau: Trong cửa sổ thiết kế Query, trên thanh Ribbon, chọn Query Tools, chọ Tab Design. Trong nhĩm lệnh Query Type, chọn Crosstab. Trong lưới thiết kế query xuất hiện thêm dịng Crosstab và dịng Total. Chỉ định chức năng cho các field: ðối với các field làm row heading và column heading thì trên dịng Total ta chọn chức năng Group by, trên dịng Crosstab, chỉ định chức năng Row Heading hoặc Column Heading. ðối với field chứa dữ liệu để thống kê thì trên dịng Total, chọn hàm thống kê (Sum, Avg, Count, Min, Max, ), trên dịng Crosstab chọn Value. ðối với các field chứa điều kiện lọc dữ liệu thì trên dịng Total chọn Where, các field này sẽ khơng xuất hiện trong kết quả. Lưu ý: Row Heading và Column Heading cĩ thể hốn đổi nhau, nhưng đối với những field chứa nhiều giá trị thì nên chọn làm Row Heading. Giáo trình Access -67- 4.7. Các loại query tạo bằng chức năng Wizard 4.7.1. Find Duplicate query Find Duplicate query Wizard dùng để tìm những record cĩ giá trị trùng lắp ở một số field. Ví dụ, tìm những nhân viên cĩ trùng ngày sinh, trùng tên, Cách tạo: Trong cửa sổ làm việc của Access, trên thanh Ribbon, chọn tab Create. Trong nhĩm lệnh Queries click nút Query Wizard. Trong cửa sổ New Query chọn Find Duplicate query Wizard. Xuất hiện cửa sổ Find Duplicates query wizardOK. Chọn bảng chứa field muốn tìm dữ liệu trùng lắpNext. Chọn field chứa dữ liệu trùng lắpNext. Chọn các field muốn hiển thị trong kết quảNext. Nhập tên cho queryFinish. 4.7.2. Find Unmatched query Wizard Trong quan hệ 1-n, một record trong bảng 1 quan hệ với nhiều record trong bảng n. Tuy nhiên cũng cĩ những record khơng quan hệ với bất kỳ record nào trong bảng n. Ví dụ, những nhân viên chưa tham gia lập hĩa đơn, những nhân viên này tồn tại trong bảng NHANVIEN, nhưng khơng tồn tại trong bảng HOADON. Find Unmatched query Wizard dùng để tìm những record cĩ trong bảng 1 nhưng khơng cĩ trong bảng n Giáo trình Access -68- Cách tạo: Trong cửa sổ làm việc của Access, trên thanh Ribbon, chọn tab Create. Trong nhĩm lệnh Queries click nút Query Wizard. Trong cửa sổ New Query chọn Find Unmatched query WizardOK. Xuất hiện cửa sổ Find Unmatched query wizard. Chọn bảng 1 là bảng chứa các record cần tìmNext Chọn bảng n là bảng chứa record quan hệNext Ví dụ: tìm nhưng sinh viên chưa thi, bảng 1 là bảng SINHVIEN, bảng n là bảng KETQUA, field quan hệ là field MASV Chọn field quan hệ giữa hai bảng Next. Chọn các field hiển thị trong kết quảNext. Nhập tên cho queryFinish. 4.8. Action query Action query là loại query mà khi thực thi sẽ làm thay đổi dữ liệu trong các bảng của cơ sở dữ liệu, sự thay đổi cĩ thể làm cho cơ sở dữ liệu bị sai, do đĩ trước khi thực thi các loại action query bạn nên chép một file dự phịng. Cĩ 4 loại action query: Update query. Make-Table query. Append query. Delete query. 4.8.1. Update query a) Chức năng Update query dùng để cập nhật dữ liệu trong các bảng. -69- Giáo trình Access b) Cách tạo Trong cửa sổ làm việc của Access, trên thanh Ribbon chọn tab Create, trong nhĩm lệnh Queries, click nút Query Design. Chọn các bảng chứa dữ liệu muốn cập nhật. Thanh Ribbon chuyển sang tab Design Trong nhĩm lệnh Query Type, Click nút Update, Trong lưới thiết kế xuất hiện dịng Update to. Chọn field chứa dữ liệu cần cập nhật và các field chứa điều kiện. Tại field chứa dữ liệu muốn cập nhật và trên dịng Update to ta nhập biểu thức cập nhật dữ liệu. c) Thực thi Update Query: Click nút run để thực thi query. Khi thực thi query sẽ xuất hiện hộp thoại thơng báo số record được Update. Nếu đồng ýclick yes. Xem kết quả trong bảng chứa dữ liệu Update. Giáo trình Access -70- 4.8.2. Make-Table query a) Chức năng Make-Table dùng để tạo một bảng mới dựa trên các bảng hoặc query cĩ sẵn. b) Cách tạo Trong cửa sổ làm việc của Access, trên thanh Ribbon chọn tab Create, trong nhĩm lệnh Queries, click nút Query Design. Chọn các bảng hoặc query làm dữ liệu nguồn cho Make- Table. Thanh Ribbon chuyển sang tab Design Chọn các field muốn hiển thị trong bảng mới. Trong nhĩm lệnh Query Type, click nút Make-Table. Xuất hiện hộp thoại Make Table với các tùy chọn: Table name: Nhập tên bảng mới. CurrentDatabase: Bảng mới được lưu trong cơ sở dữ liệu hiện hành. Another Database: Bảng mới được lưu trong một cơ sở dữ liệu khác, click nút browse để tìm cơ sở dữ liệu chứa bảng mới. Click nút OK để tạo Make-Table. Giáo trình Access -71- c) Thực thi Make-Table Query Click nút Run để thực thi query, xuất hiện hộp thơng báo số record được đưa vào bảng mới. Nếu đồng ýClick yes, khi đĩ bảng mới sẽ được tạo, xem kết quả trong phần Table. 4.8.3. Append query a) Chức năng Append query dùng để nối dữ liệu vào cuối một bảng cĩ sẵn. b) Cách tạo Trong cửa sổ làm việc của Access, trên thanh Ribbon chọn tab Create, trong nhĩm lệnh Queries, click nút Query Design. Chọn các bảng hoặc query làm dữ liệu nguồn cho Append Query. Thanh Ribbon chuyển sang tab Design. Chọn các field chứa dữ liệu nối vào bảng cĩ sẵn, các field được chọn phải tương ứng với các field trong bảng muốn nối dữ liệu vào. Click nút Append trong nhĩm lệnh Query Type. Xuất hiện hộp thoại AppendChọn bảng muốn nối dữ liệu vào. Giáo trình Access -72- Trong lưới thiết kế xuất hiện dịng Append to, chứa tên các field tương ứng trong bảng cĩ sẵn. c) Thực thi Append query Click nút run để thực thi query. Xuất hiện hộp thơng báo số record được nối vào. Nếu đồng ý click yes, xem kết quả trong phần Table. 4.8.4. Delete query a) Chức năng: Delete query xĩa các record từ các bảng, thơng thường dựa trên các điều kiện mà bạn cung cấp, Delete query xĩa tất cả các record trong một bảng trong khi vẫn giữ nguyên cấu trúc của bảng. Delete Query là nguy hiểm vì nĩ xĩa vĩnh viễn dữ liệu từ các bảng trong cơ sở dữ liệu của bạn, do đĩ trước khi thực thi loại query này cần phải cĩ một backup. b) Cách tạo: Trong cửa sổ làm việc của Access, trên thanh Ribbon chọn tab Create, trong nhĩm lệnh Queries, click nút Query Design. Chọn bảng hoặc query chứa dữ liệu cần xĩa. Thanh Ribbon chuyển sang tab Design. Click nút Delete trong nhĩm Query Type. Chọn field chứa điều kiện xĩa, lưới thiết kế xuất hiện dịng Deletetại field chứa điều kiện xĩa ta chọn where. Nhập điều kiện xĩa trên dịng Criteria. Giáo trình Access -73- c) Thực thi Delete Query Click nút run để thực thi, xuất hiện hộp thơng báo số record bị xĩa Nếu đồng ý yes, các record trong bảng đã bị xĩa, xem kết quả trong phần Table.
File đính kèm:
- giao_trinh_access_nguyen_tran_phuong_phan_1.pdf