CƠ sở dữ LIỆU chương 3 NGÔN NGỮ dữ LIỆU

25 2 0
CƠ sở dữ LIỆU chương 3  NGÔN NGỮ dữ LIỆU

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

THUYTTT THUYTTT CƠ SỞ DỮ LIỆU Chương NGÔN NGỮ DỮ LIỆU Ngày nay, hệ thống sở liệu xây dựng ngôn ngữ truy vấn phát triển từ ngôn ngữ SQL (Structure Query Language) chuẩn Một ứng dụng phát triển hệ sở liệu SQL Server Microsoft, không sử dụng chức đặc biệt có riêng sản phẩm này, dễ dàng chuyển đổi sang hệ sở liệu khác, Oracle Oracle Corp., DB2 IBM, …, ngược lại Một điều thuận lợi người dùng thực câu lệnh truy vấn nhiều hệ quản trị sở liệu quan hệ (Relational Database Management System - RDBMS) khác nhau, mà không cần phải thay đổi ngơn ngữ truy vấn, RDBMS hỗ trợ ngơn ngữ SQL chuẩn Có thể nói xây dựng sở liệu tảng SQL ngun nhân dẫn đến thành cơng mặt thương mại sản phẩm sở liệu quan hệ 3.1 Ngôn ngữ định nghĩa liệu SQL sử dụng thuật ngữ bảng, hàng, cột tương ứng với thuật ngữ quan hệ, bộ, thuộc tính mơ hình liệu quan hệ Để định nghĩa liệu SQL, sử dụng lệnh CREATE Lệnh dùng để định nghĩa lược đồ quan hệ, miền giá trị, nhiều cấu trúc lưu trữ khác Trước vào chi tiết câu lệnh CREATE, tìm hiểu khái niệm lược đồ danh mục SQL Tiếp theo, tim hiểu cách thức tạo đối tượng lưu trữ quan trọng sở liệu quan hệ, bảng liệu Trong trình tạo bảng, phải xác định kiểu liệu cho thuộc tính bảng Lược đồ SQL: Các phiên trước SQL không đề cập đến khái niệm lược đồ sở liệu quan hệ, tất bảng (quan hệ) xem phần lược đồ sở liệu chung Khái niệm lược đồ SQL đề cập đến SQL2 Các bảng liệu Page of 25 Page of 25 THUYTTT THUYTTT phục vụ cho ứng dụng gom chung lược đồ sở liệu Lược đồ SQL xác định tên lược đồ, tài khoản tạo lược đồ, mô tả thành phần lược đồ Thành phần lược đồ bảng liệu, ràng buộc tồn vẹn, khung nhìn view, miền giá trị, … Lược đồ SQL tạo lệnh CREATE SCHEMA Ví dụ 3.1: Tạo lược đồ sở liệu lệnh CREATE SCHEMA Để tạo lược đồ SQL có tên company, với tài khoản tạo dbo, sử dụng câu lệnh sau: USE COMPANY GO create SCHEMA company authorization dbo GO Để xóa lược đồ, ta sử dụng câu lệnh sau: USE COMPANY GO /****** Object: Schema [company] Script Date: 09/20/2018 11:56:46 ******/ DROP SCHEMA company GO Hình 3.1 Câu lệnh tạo lược đồ sở liệu COMPANY Nói chung, tất tài khoản sử dụng có quyền tạo lược đồ SQL, thành phần Việc cấp quyền tạo lược đồ SQL, bảng, cấu trúc khác quản trị hệ thống (System Administrator, viết tắt SA) hay quản trị sở liệu (Database Administrator, viết tắt DBA) thực 3.1.1 Tạo bảng, view, mục a/ Tạo bảng Lệnh CREATE TABLE dùng để khởi tạo quan hệ cách xác định tên bảng, liệt kê thuộc tính, định nghĩa ràng buộc tồn vẹn bảng Đối với thuộc tính cần phải xác định tên thuộc tính, kiểu giá trị ứng với miền giá trị thuộc tính đó, đồng thời phải định nghĩa ràng buộc thuộc tính, ví dụ ràng buộc giá trị mặc định DEFAULT hay ràng buộc NOT NULL Khóa chính, ràng buộc toàn vẹn thực thể, ràng buộc toàn vẹn tham chiếu xác định bên câu lệnh CREATE TABLE sau phần khai báo thuộc tính, chúng bổ sung Page of 25 Page of 25 THUYTTT THUYTTT vào sau hoàn tất câu lệnh CREATE TABLE cách sử dụng câu lệnh ALTER TABLE Các quan hệ định nghĩa lệnh CREATE TABLE gọi bảng sở (quan hệ sở), nghĩa quan hệ tạo lưu trữ vật lý tệp tin liệu DBMS Đối lập với quan hệ sở quan hệ ảo tạo thông qua câu lệnh CREATE VIEW, kết tạo liệu khơng lưu trữ vật lý DBMS Trong SQL thuộc tính bảng sở xem có trật tự, ứng với trật tự định nghĩa thuộc tính câu lệnh CREATE TABLE Ngược lại, trật tự hàng (các bộ) bảng liệu lại không trọng đến /* Create table DEPARTMENT */ create table DEPARTMENT (DNumber int, DName nvarchar (50), mgrSSN decimal(18,0), mgrStartdate datetime) /* Create table EMPLOYEE */ create table EMPLOYEE (ESSN decimal(18,0), EName nvarchar(50), ESalary decimal(18,0), ESex char(1), EBirthdate datetime, EStartdate datetime, DNum int, supervisorSSN decimal (18,0)) /* Create table DEPLOCATION */ create table DEPLOCATION (DNum int, DLocation nvarchar(50)) /* Create table PROJECT */ create table PROJECT (PNumber int, PName nvarchar(50), PLocation nvarchar(50), DNum int) /* Create table WORKSON */ create table WORKSON (ESSN decimal(18,0), PNum int, workHours int) /* Create table DEPENDENT */ create table DEPENDENT (DName nvarchar(50), ESSN decimal(18,0), DSex char(1), DBirthdate datetime, DRelationship nvarchar(50)) Hình 3.2 Các câu lệnh định nghĩa lược đồ sở liệu COMPANY  Các kiểu liệu miền giá trị thuộc tính Link tham khảo: https://www.w3schools.com/sql/sql_datatypes.asp Page of 25 Page of 25 THUYTTT THUYTTT Các kiểu liệu sử dụng SQL bao gồm kiểu liệu số, kiểu liệu chuỗi ký tự, kiểu liệu chuỗi bit, kiểu Boolean, kiểu liệu ngày Cụ thể sau: • Kiểu liệu số bao gồm kiểu số nguyên với kích thước khác (INTEGER hay INT, SMALLINT), kiểu liệu dấu chấm động (FLOAT hay REAL, DOUBLE PRECISION) Ngồi cịn có kiểu số thập phân DECIMAL(i,j), với i số chữ số phần nguyên, j số chữ số phần thập phân • Kiểu liệu chuỗi ký tự bao gồm kiểu liệu có chiều dài cố định CHAR(n) hay CHARACTER(n), với n số ký tự chuỗi Ngoài ra, cịn sử dụng kiểu liệu có chiều dài thay đổi, ví dụ VARCHAR(n), CHAR VARYING(n), CHARACTER VARYING(n), với n số ký tự tối đa chuỗi Khi khai báo giá trị chuỗi ký tự, phải đặt cặp nháy đơn ‘’, ý phân biệt chữ hoa chữ thường Đối với kiểu chuỗi có chiều dài cố định n, có chuỗi bao gồm m ký tự (m < n), thêm n – m ký tự khoảng trắng vào bên phải chuỗi ký tự đó, kết quả, có chuỗi gồm n ký tự Hai chuỗi ký tự so sánh với theo trật tự abc, cụ thể chuỗi str1 xuát trước chuỗi str2 trật tự abc, nói chuỗi str1 nhỏ chuỗi str2 Ngoài ra, phép nối hai chuỗi || sử dụng kiểu liệu chuỗi ký tự Ví dụ, kết phép nối ‘abc’ || ‘XYZ’ chuỗi ‘abcXYZ’ • Các kiểu liệu chuỗi bit bao gồm kiểu liệu có chiều dài cố định – BIT(n), với n số bit chuỗi – kiểu liệu có chiều dài thay đổi – BIT VARYING(n), với n số bit tối đa chuỗi Giá trị mặc định n Chuỗi bit đặt cặp nháy đơn, trước chữ B để phân biệt với chuỗi ký tự thơng thường, ví dụ B’10110101010’ Page of 25 Page of 25 THUYTTT THUYTTT • Kiểu liệu Boolean với giá trị TRUE FALSE Trong SQL, với xuất giá trị NULL, có ba giá trị luận lý thường dùng, TRUE, FALSE, UNKNOWN • Kiểu liệu ngày xuất từ SQL2 Kiểu liệu DATE có ba thành phần YEAR, MONTH, DAY định dạng YYYY–MM– DD Kiểu liệu TIME có ba thành phần HOUR, MINUTE, SECOND định dạng HH:MM:SS Chỉ ngày định dạng hợp lệ SQL chấp nhận Phép so sánh nhỏ < sử dụng hai giá trị ngày Giá trị ngày đặt cặp nháy đơn, để phân biệt với chuỗi ký tự hay chuỗi bit, sử dụng chữ DATE hay TIME đằng trước nó, ví dụ DATE’2009–04–18’ hay TIME’21:05:00’ Trong định nghĩa bảng liệu lệnh CREATE TABLE, dùng dùng lại nhiều lần kiểu liệu cho thuộc tính bảng khác Để câu lệnh CREATE TABLE đơn giản dễ hiểu hơn, định nghĩa sẵn miền giá trị, sử dụng miền giá trị khai báo thuộc tính phù hợp Ví dụ 3.2: Định nghĩa miền giá trị lệnh CREATE TYPE Chúng ta định nghĩa miền giá trị SSN_TYPE sau: /* Create TYPE*/ create type SSN_TYPE from decimal(18,0) Tiếp theo, sử dụng SSN_TYPE thay cho DECIMAL(18,0) hình 3.2 thuộc tính ESSN, supervisorSSN EMPLOYEE, mgrSSN DEPARTMENT, ESSN WORKSON, ESSN DEPENDENT Cụ thể tạo bảng DEPARTMENT câu lệnh sau đây: /*Create table DEPARTMENT using SSN_TYPE*/ create table DEPARTMENT (DNumber int, DName nvarchar(50), mgrSSN SSN_TYPE, mgrStartdate datetime) Page of 25 Page of 25 THUYTTT THUYTTT  Các ràng buộc SQL Trong câu lệnh tạo bảng, việc liệt kê danh sách thuộc tính kèm theo kiểu liệu – miền giá trị chúng, khai báo ràng buộc tồn vẹn liệu Các ràng buộc loại bao gồm ràng buộc khóa chính, ràng buộc tồn vẹn tham chiếu, ràng buộc miền giá trị, ràng buộc NOT NULL, ràng buộc liên quan hệ  Ràng buộc toàn vẹn NOT NULL ràng buộc toàn vẹn miền giá trị: Do SQL cho phép thuộc tính có giá trị NULL, đơi cần dùng ràng buộc NOT NULL để xác thực thuộc tính khơng phép có giá trị NULL Bất kỳ thuộc tính nào, có u cầu khơng nhận giá trị rỗng, đặt NOT NULL Một thuộc tính, thành phần khóa chính, NOT NULL Ví dụ 3.3: Khai báo ràng buộc NOT NULL lệnh tạo bảng Câu lệnh tạo bảng DEPARTMENT với ràng buộc toàn vẹn NOT NULL sau: create table DEPARTMENT (DNumber int NOT NULL, DName nvarchar(50) NOT NULL, mgrSSN decimal(18,0), mgrStartdate datetime) Với định nghĩa này, q trình thêm phịng ban vào bảng, bắt buộc phải cung cấp giá trị thuộc tính DNumber DName.Trong trường hợp hai giá trị NULL, ràng buộc NOT NULL bị vi phạm, kết hệ quản trị CSDL thông báo lỗi từ chối thực thao tác Hơn nữa, cịn khai báo giá trị mặc định cho thuộc tính cách sử dụng từ khóa DEFAULT định nghĩa thuộc tính Ví dụ 7.4 minh họa cách khai báo giá trị mặc định cho thuộc tính câu lệnh tạo bảng liệu Ví dụ 3.4: Khai báo giá trị mặc định lệnh tạo bảng Giả sử lệnh tạo bảng EMPLOYEE , thuộc tính ESalary cài đặt có giá trị mặc định 35,000 câu lệnh sau đây: Page of 25 Page of 25 THUYTTT THUYTTT create table EMPLOYEE (ESSN decimal(18,0), EName nvarchar(50), ESalary decimal(18,0) default 35000, ESex char(1), EBirthdate datetime, EStartdate datetime, DNum int, supervisorSSN decimal (18,0)) Với định nghĩa này, trình thêm nhân viên vào bảng, không cung cấp giá trị cho thuộc tính ESalary, nhân viên nhận giá trị lương 35,000, giá trị mặc định mà khai báo ban đầu Rõ ràng, thuộc tính khơng khai báo giá trị mặc định cách tường minh, giá trị mặc định mà thuộc tính nhận NULL (trong trường hợp khơng có ràng buộc NOT NULL) Một loại ràng buộc toàn vẹn khác liên quan đến miền giá trị thuộc tính ràng buộc tồn vẹn miền giá trị sử dụng từ khóa CHECK theo sau khai báo thuộc tính Ví dụ 3.5: Khai báo ràng buộc miền giá trị lệnh tạo bảng Để thể ràng buộc miền giá trị thuộc tính ESex bảng EMPLOYEE sử dụng câu lệnh tạo bảng sau: create table EMPLOYEE (ESSN decimal(18,0), EName nvarchar(50), ESalary decimal(18,0) default 35000, ESex char(1) check (ESex in ('F','M')) , EBirthdate datetime, EStartdate datetime, DNum int, supervisorSSN decimal (18,0)) Trong trường hợp này, quy ước ‘F’ viết tắt female tức giới tính nữ, ‘M’ viết tắt male tức giới tính nam  Khóa ràng buộc tồn vẹn tham chiếu: Như trình bày chương trước, quan hệ có nhiều khóa, tập hợp thuộc tính dùng để phân biệt thực thể quan hệ, số chọn khóa gọi khóa chính, khóa cịn lại có tên gọi khóa khóa phụ Để định nghĩa khóa (phụ), sử dụng mệnh đề PRIMARY KEY (UNIQUE) câu lệnh định nghĩa cấu trúc bảng liệu Có hai cách để định nghĩa khóa quan hệ: Page of 25 Page of 25 THUYTTT THUYTTT  Cách 1: Mệnh đề PRIMARY KEY (UNIQUE) đặt sau thuộc tính khóa quan hệ  Cách 2: Mệnh đề PRIMARY KEY (UNIQUE) đặt sau phần khai báo tất thuộc tính quan hệ Ràng buộc tồn vẹn tham chiếu thể thơng qua mệnh đề FOREIGN KEY câu lệnh tạo bảng Ràng buộc tồn vẹn tham chiếu bị vi phạm thực thao tác xử lý liệu (thêm, xóa), sửa giá trị thuộc tính khóa chính, khóa ngoại Khi thao tác làm cho ràng buộc toàn vẹn tham chiếu bị vi phạm, SQL mặc định hủy bỏ việc thực thao tác Tuy nhiên, tự ghi nhận có hình thức xử lý trường hợp ràng buộc bị vi phạm, cách sử dụng mệnh đề REFERENTIAL TRIGGER ACTION Các hình thức xử lý đưa giá trị NULL (SET NULL), xóa tất có liên quan (CASCADE), đưa giá trị mặc định (SET DEFAULT) Dưới minh họa cho việc khai báo khóa khóa ngoại định nghĩa lược đồ sở liệu COMPANY Ví dụ 3.6: Khai báo khóa chính, khóa phụ lệnh tạo bảng Các câu lệnh định nghĩa bảng liệu cho COMPANY với khai báo khóa chính, khóa phụ cho bảng liệu: create table DEPARTMENT (DNumber int PRIMARY KEY, DName nvarchar(50)UNIQUE, mgrSSN decimal(18,0), mgrStartdate datetime) create table EMPLOYEE (ESSN decimal(18,0)PRIMARY KEY, EName nvarchar(50), ESalary decimal(18,0), ESex char(1), EBirthdate datetime, EStartdate datetime, DNum int, supervisorSSN decimal (18,0)) create table DEPLOCATION (DNum int, DLocation nvarchar(50), PRIMARY KEY(DNum, DLocation) ) Page of 25 Page of 25 THUYTTT THUYTTT create table PROJECT (PNumber int PRIMARY KEY, PName nvarchar(50)UNIQUE, PLocation nvarchar(50), DNum int) create table WORKSON (ESSN decimal(18,0), PNum int, workHours int, PRIMARY KEY (ESSN,PNum)) create table DEPENDENT (DName nvarchar(50), ESSN decimal(18,0), DSex char(1), DBirthdate datetime, DRelationship nvarchar(50), PRIMARY KEY (DName,ESSN)) Ví dụ 3.7: Khai báo ràng buộc tồn vẹn tham chiếu lệnh tạo bảng Câu lệnh sau định nghĩa bảng PROJECT, có khai báo ràng buộc toàn vẹn tham chiếu đến bảng DEPARTMENT kèm theo hình thức xử lý ràng buộc bị vi phạm create table PROJECT (PNumber int PRIMARY KEY, PName nvarchar(50)UNIQUE, PLocation nvarchar(50), DNum int foreign key references DEPARTMENT(DNumber) on update cascade on delete set null) - CASCADE: thường dùng kết hợp với ON UPDATE ON DELETE, cho biết liệu cập nhật/ xóa liệu cha cập nhật/ xóa - SET NULL: thường dùng kết hợp với ON UPDATE ON DELETE, cho biết liệu thiết lập giá trị NULL liệu cha cập nhật/ xóa b/ Tạo view Các bảng sở liệu đóng vai trị đối tượng tổ chức lưu trữ liệu Như vậy, ta quan sát liệu sở liệu cách thực truy vấn bảng liệu Ngồi ra, SQL cịn cho phép quan sát liệu thông qua việc định nghĩa khung nhìn (view) Một khung nhìn xem bảng “ảo” sở liệu có nội dung định nghĩa thơng qua truy vấn (câu lệnh) SELECT Page of 25 Page of 25 THUYTTT THUYTTT Như vậy, khung nhìn trơng giống bảng với tên khung nhìn tập bao gồm dịng cột Điểm khác biệt khung nhìn bảng khung nhìn khơng xem cấu trúc lưu trữ liệu tồn sở liệu Thực chất liệu quan sát khung nhìn lấy từ bảng thơng qua câu lệnh truy vấn liệu Khi khung nhìn định nghĩa, ta sử dụng câu lệnh SELECT để truy vấn liệu từ khung nhìn bảng Khi câu truy vấn xuất khung nhìn, hệ quản trị sở liệu dựa vào định nghĩa khung nhìn để chuyển yêu cầu truy vấn liệu liên quan đến khung nhìn thành yêu cầu tương tự bảng sở việc truy vấn liệu thực yêu cầu tương đương bảng Việc sử dụng khung nhìn sở liệu đem lại lợi ích sau đây: Page 10 of 25 Page 10 of 25 THUYTTT THUYTTT • Bảo mật liệu: Người sử dụng cấp phát quyền khung nhìn với phần liệu mà người sử dụng phép Điều hạn chế phần việc người sử dụng truy cập trực tiếp liệu • Đơn giản hoá thao tác truy vấn liệu: Một khung nhìn đóng vai trị đối tượng tập hợp liệu từ nhiều bảng khác vào “bảng” Nhờ vào đó, người sử dụng thực yêu cầu truy vấn liệu cách đơn giản từ khung nhìn thay phải đưa câu truy vấn phức tạp • Tập trung đơn giản hố liệu: Thơng qua khung nhìn ta cung cấp cho người sử dụng cấu trúc đơn giản, dễ hiểu liệu sở liệu đồng thời giúp cho người sử dụng tập trung phần liệu cần thiết • Độc lập liệu : Một khung nhìn cho phép người sử dụng có nhìn liệu độc lập với cấu trúc bảng sở liệu cho dù bảng sở có bị thay đổi phần cấu trúc Tuy nhiên, việc sử dụng khung nhìn tồn số nhược điểm sau: • Do hệ quản trị sở liệu thực việc chuyển đổi truy vấn khung nhìn thành truy vấn bảng sở nên khung nhìn định nghĩa truy vấn phức tạp dẫn đến chi phí mặt thời gian thực truy vấn liên quan đến khung nhìn lớn • Mặc dù thơng qua khung nhìn thực thao tác bổ sung cập nhật liệu cho bảng sở hạn chế khung nhìn đơn giản Đối với khung nhìn phức tạp thường khơng thực , hay nói cách khác liệu khung nhìn đọc Tạo khung nhìn Câu lệnh CREATE VIEW sử dụng để tạo khung nhìn có cú pháp sau: CREATE VIEW tên_khung_nhìn [(danh_sách_tên_cột)] AS câu_lệnh_SELECT Page 11 of 25 Page 11 of 25 THUYTTT THUYTTT Link tham khảo: https://www.youtube.com/watch?v=MK_dWEcltWY c/ Tạo mục Index yếu tố quan trọng góp phần vào việc nâng cao hiệu suất sở liệu Index SQL tăng tốc độ trình truy vấn liệu cách cung cấp phương pháp truy xuất nhanh chóng tới dịng bảng, tương tự cách mà mục lục sách giúp ta nhanh chóng tìm đến trang sách Cấu trúc Index: Index tạo cột bảng khung nhìn Index giúp tìm kiếm liệu dựa giá trị cột Ví dụ, tạo index khóa sau tìm kiếm dịng liệu dựa giá trị khóa chính, SQL Server tìm giá trị index sau sử dụng index để nhanh chóng tìm dịng liệu mong muốn Nếu khơng có index, phải quét toàn bảng Một index tập trang (các nút index) tổ chức dạng B-tree Page 12 of 25 Page 12 of 25 THUYTTT THUYTTT Khi có truy vấn dựa cột được gán index, trình tìm kiếm nút gốc (root node) lan xuống nút trung gian (intermediate) Q trình tiếp tục nút (leaf node) tiếp cận Ví dụ: Nếu ta tìm kiếm giá trị 123 cột gán index, máy xử lý truy vấn tìm kiếm mức root để định trang tham chiếu mức trung gian Trong hình trên, trang dẫn đến giá trị từ 1-100, trang thứ dẫn đến giá trị 101-200, truy vấn đến trang thứ Ở mức tiếp theo, truy vấn đến trang thứ Từ đó, truy vấn đến nút chứa giá trị 123 Nút chứa toàn liệu dịng cần tìm (trỏ) đến dịng tìm kiếm, phụ thuộc vào index thuộc loại clusterd hay nonclustered Clustered Index: clustered index chứa dòng liệu thực mức index Một đặc điểm quan trọng clustered index giá trị gán index xếp theo thứ tự tăng giảm dần Do đó, có clustered index bảng Page 13 of 25 Page 13 of 25 THUYTTT THUYTTT hay khung nhìn Hơn nữa, liệu bảng xếp clustered index định nghĩa bảng Chú ý: Một bảng có clustered index gọi clustered table Nếu khơng có clustered index, bảng gọi heap Nonclustered Index: Khác với clustered index, nút nonclustered index chứa giá trị cột gán index trỏ định vị dòng (row locator) tới dịng liệu thực Nonclustered index khơng thể xếp clustered index, nhiên tạo nhiều nonclustered index bảng/khung nhìn Index tổ hợp (composite index): index chứa nhiều cột Cả clustered nonclustered index index tổ hợp Index (unique index): index loại đảm bảo tính cho giá trị cột gán index Trong trường hợp index tổ hợp, tính đảm bảo tất cột thể thống nhất, không theo cột riêng biệt Unique index tự động tạo định nghĩa khóa ràng buộc unique - Primary key: Khi định nghĩa khóa chính, SQL Server tạo unique, clustered index - Unique: Khi định nghĩa ràng buộc unique, SQL Server tự động tạo unique, nonclustered index CREATE INDEX index_name ON table_name (column1, column2, ); CREATE INDEX idx_lastname ON Persons (LastName); CREATE INDEX idx_pname ON Persons (LastName, FirstName); Page 14 of 25 Page 14 of 25 THUYTTT THUYTTT 3.1.2 Thay đổi cấu trúc bảng Ví dụ 3.8: Thêm thuộc tính vào bảng lệnh ALTER TABLE Để bổ sung thông tin số điện thoại liên lạc nhân viên, dùng lệnh sau đây: Alter table EMPLOYEE add EPhone nvarchar(50) Kết bảng EMPLOYEE có thêm cột tên EPhone, với hàng bảng EMPLOYEE, giá trị thuộc tính EPhone NULL Tiếp theo, phải sử dụng lệnh UPDATE để cập nhật giá trị cho hàng bảng EMPLOYEE Ví dụ 3.9: Xóa thuộc tính khỏi bảng lệnh ALTER TABLE Để xóa thuộc tính EPhone khỏi bảng EMPLOYEE, sử dụng lệnh sau đây: alter table EMPLOYEE drop column Ephone Ví dụ 3.10: Thêm ràng buộc vào bảng lệnh ALTER TABLE Để tạo ràng buộc toàn vẹn bảng, phải xóa ràng buộc cũ thêm ràng buộc vào quan hệ Quá trình thực hai câu lệnh SQL sau: ALTER TABLE EMPLOYEE DROP CONSTRAINT FK_Emp_Dep ALTER TABLE EMPLOYEE ADD CONSTRAINT FK_Emp_Dep FOREIGN KEY (DNum) REFERENCES DEPARTMENT (DNumber) 3.1.3 Xóa bảng, view, mục DROP TABLE EMPLOYEE DROP VIEW view_name DROP INDEX table_name index_name 3.2 Ngôn ngữ thao tác liệu 3.2.1 Thêm liệu Lệnh INSERT dùng để thêm vào quan hệ Chúng ta phải xác định tên quan hệ danh sách giá trị tương ứng với muốn thêm vào quan hệ Các giá trị phải Page 15 of 25 Page 15 of 25 THUYTTT THUYTTT liệt kê trình tự với thuộc tính tương ứng xác định câu lệnh tạo quan hệ Ngồi ra, lệnh INSERT cịn cho phép người dùng xác định tường minh tên thuộc tính tương ứng với giá trị cung cấp lệnh INSERT Điều hữu dụng quan hệ có nhiều thuộc tính nhận giá trị số thuộc tính mà thơi Khi thêm vào quan hệ, phải cung cấp giá trị cho thuộc tính khai báo NOT NULL khơng có giá trị mặc định Ví dụ 3.11: Câu lệnh thêm vào quan hệ Câu lệnh sau dùng để thêm vào quan hệ EMPLOYEE: INSERT INTO EMPLOYEE (ESSN) VALUES ('30121050004') INSERT INTO EMPLOYEE (ESSN, EName) VALUES ('30121050004','Mai Duy An') INSERT INTO EMPLOYEE (ESSN, EName) VALUES ('30121050005','Mai Duy An') INSERT INTO EMPLOYEE(ESSN, EBirthdate) VALUES ('30121050006','2018/09/25') Các thuộc tính tường minh câu lệnh nhận giá trị DEFAULT NULL, giá trị liệt kê theo trật tự mà thuộc tính tương ứng xuất câu lệnh INSERT Chú ý thao tác thêm vào quan hệ dẫn đến vi phạm ràng buộc tồn vẹn tham chiếu Ví dụ, thêm vào quan hệ EMPLOYEE với giá trị thuộc tính DNum 7, quan hệ DEPARTMENT khơng có có giá trị thuộc tính DNumber Như biết, quan hệ EMPLOYEE quan hệ DEPARTMENT có ràng buộc tồn vẹn tham chiếu từ DNum EMPLOYEE đến DNumber DEPARTMENT Như vậy, thao tác thêm nói vi phạm ràng buộc toàn vẹn tham chiếu Ngoài ra, lệnh INSERT sử dụng để thêm vào quan hệ nhiều kết câu truy vấn Ví dụ 3.12: Câu lệnh thêm nhiều vào quan hệ Để tạo bảng tạm chứa tên, số lượng nhân viên, tổng lương đơn vị, sử dụng hai câu lệnh sau đây: CREATE TABLE DEPTS_INFO (DName VARCHAR(15), EmpCounts Page 16 of 25 Page 16 of 25 THUYTTT THUYTTT INTEGER, SalTotal INTEGER) INSERT INTO DEPTS_INFO (DName, EmpCounts, SalTotal) SELECT DName, COUNT(*), SUM(ESalary) FROM (DEPARTMENT JOIN EMPLOYEE ON DNumber=DNum) GROUP BY DName 3.2.2 Cập nhật liệu Lệnh UPDATE dùng để thay đổi giá trị thuộc tính nhiều chọn Tương tự với lệnh DELETE, mệnh đề WHERE lệnh UPDATE chọn từ quan hệ cần chỉnh sửa Mệnh đề SET lệnh UPDATE xác định thuộc tính cần chỉnh sửa giá trị chúng Ví dụ 3.13: Câu lệnh cập nhật giá trị (số) thỏa mãn điều kiện Để thay đổi địa điểm đơn vị quản lý dự án có mã số 10 với giá trị ‘Hà Nội’ 5, sử dụng câu lệnh sau đây: UPDATE PROJECT SET PLocation = N’Hà Nội’, DNum=5 WHERE PNumber = 10 Trong câu lệnh thay đổi giá trị quan hệ PROJECT Lệnh UPDATE thay đổi lúc nhiều bộ, thỏa mãn điều kiện mệnh đề WHERE Ví dụ 3.14: Truy vấn lồng xuất mệnh đề WHERE câu lệnh cập nhật (số) quan hệ Để tăng lương cho nhân viên phòng Nghiên cứu lên 10% lương tại, sử dụng lệnh UPDATE sau đây: UPDATE EMPLOYEE SET ESalary = ESalary *1.1 3.2.3 Xóa liệu Câu lệnh sau xóa thân nhân nhân viên có mã số ‘30121050180’ DELETE FROM DEPENDENT WHERE ESSN = ‘30121050180’ Page 17 of 25 Page 17 of 25 THUYTTT THUYTTT Ví dụ 3.15: Truy vấn lồng xuất mệnh đề WHERE câu lệnh xóa (số) khỏi quan hệ Câu lệnh sau xóa tất thân nhân nhân viên phịng có mã số DELETE FROM DEPENDENT WHERE ESSN IN (SELECT ESSN FROM EMPLOYEE WHERE DNum=1) Khóa UNIQUE: khóa 3.3 Ngôn ngữ điều khiển liệu 3.3.1 Cấp phát quyền 3.3.2 Thu hồi quyền 3.4 Ngôn ngữ truy vấn liệu 3.4.1 Truy vấn 3.4.2 Truy vấn tập hợp 3.4.3 Hàm kết hợp 3.4.4 Phép gom nhóm BONUS Cơ chế thay ràng buộc cập nhật Cơ chế thiết lập giá trị NULL xóa Cơ chế mặc định thêm Khung nhìn khác với bảng: khung nhìn k thực lưu trữ, cịn table lưu trữ mặt vật lý Tạo view nhằm tính chất bảo mật INDEX tạo nhằm tăng tốc độ truy xuất Truy vấn không xuất mệnh đề GROUP BY(mệnh đề gom nhóm) Câu lệnh create table khơng có truy vấn insert, update, select có truy vấn Truy vấn có từ khóa select from where Từ khóa khai báo mootjt huộc tính khơng nhận giá trị null: NOT NULL Page 18 of 25 Page 18 of 25 THUYTTT THUYTTT Thứ tự đúng: select from where group by having order by( tăng) Page 19 of 25 Page 19 of 25 THUYTTT THUYTTT Liệt kê họ tên tất nhân viên: select FName, LName from EMPLOYEE Liệt kê mối quan hệ bảng DEPENDENT: select DRelationship from DEPENDENT select distinct DRelationship from DEPENDENT select COUNT(distinct DRelationship) from DEPENDENT Liệt kê danh sách (Họ tên) nhân viên có giới tính Nữ select FName, LName, ESex from EMPLOYEE where ESex='F' Liệt kê nhân viên có mã người quản lý 333445555 select * from EMPLOYEE where supervisorSSN=333445555 Các toán tử sử dụng mệnh đề WHERE: Toán tử Ý nghĩa = Bằng != Khác > Lớn < Nhỏ >= Lớn =3 21 Với nhân viên, cho biết họ tên nhân viên họ tên người quản lý trực tiếp nhân viên select e.FName + ' ' + e.LName as EmpName, s.FName + ' ' + s.LName as SupName from EMPLOYEE e, EMPLOYEE s where e.supervisorSSN = s.ESSN select e.FName + ' ' + e.LName as EmpName, s.FName + ' ' + s.LName as SupName from EMPLOYEE e join EMPLOYEE s on e.supervisorSSN = s.ESSN Page 22 of 25 Page 22 of 25 THUYTTT THUYTTT 22 Với dự án ‘Houston’, liệt kê mã dự án, mã đơn vị quản lý dự án, tên, mức lương trưởng đơn vị quản lý dự án select p.PNumber, p.DNum, e.FName + ' ' +e.LName as SupName, e.ESalary from PROJECT p, DEPARTMENT d, EMPLOYEE e where p.DNum = d.DNumber and d.mgrSSN=e.ESSN and p.PLocation='Houston' 23 Liệt kê thông tin dự án có địa điểm Houston Stafford select * from PROJECT where PLocation IN ('Houston','Stafford') 24 Liệt kê thông tin dự án có nhân viên John Smith tham gia select * from PROJECT where PNumber IN (select w.Pnum from WORKSON w, EMPLOYEE e where w.ESSN= e.ESSN and FName='John' and LName='Smith') 25 Liệt kê nhân viên có lương cao tất nhân viên phịng ban có mã số select * from EMPLOYEE e where e.ESalary >= ALL (select ESalary from EMPLOYEE where DNum =4) 26 Liệt kê danh sách nhân viên tham gia dự án có mã 20 select * from EMPLOYEE e where exists (select * from WORKSON w where w.ESSN=e.ESSN and PNum =20) 27 Liệt kê danh sách dự án có nhân viên Jennifer Wallace làm việc với tư cách trưởng đơn vị phụ trách dự án nhân viên tham gia (select p.* from PROJECT p, DEPARTMENT d, EMPLOYEE e where p.DNum=d.DNumber and d.mgrSSN=e.ESSN and e.FName ='Jennifer' and e.LName='Wallace') UNION Page 23 of 25 Page 23 of 25 THUYTTT THUYTTT (select p.* from p.PNumber=w.PNum PROJECT and p, WORKSON w.ESSN=e.ESSN w, and EMPLOYEE e.FName e ='Jennifer' where and e.LName='Wallace') 28 Truy xuất tên tất nhân viên phòng ban & làm việc cho project ProductX nhiều 10 tuần select E.FName + ' ' + E.LName as Name from Employee E join WORKSON W on E.ESSN = W.ESSN join Project P on W.PNum = P.PNumber where ((E.DNum = or E.DNum = 4) and W.workHours > 10 and P.PName = 'ProductX'); BÀI TẬP THỰC HÀNH BUỔI 10 Tạo view chứa thông tin (mã nhân viên, họ tên, lương năm = lương tháng * 12) nhân viên phịng ban có mã số CREATE VIEW EMP_5 AS SELECT ESSN, FName,LName, ESalary*12 Annual_salary FROM EMPLOYEE WHERE DNum = 5; select * from EMP_5 Tạo view chứa thông tin nhân viên có mã người giám sát ‘333445555’ bao gồm: mã nhân viên, họ tên, tiền lương) tổng số làm việc nhân viên tuần Create View ViewEmployee as SELECT EMPLOYEE.ESSN, LName, FName, ESalary, SUM (workHours) NumOfWorkhours From EMPLOYEE, WORKSON Where EMPLOYEE.ESSN=WORKSON.ESSN and supervisorSSN='333445555' Group By EMPLOYEE.ESSN, LName, FName, ESalary; Page 24 of 25 Page 24 of 25 THUYTTT THUYTTT SELECT * FROM ViewEmployee Tạo view chứa thông tin tất nhân viên người quản lý phòng ban bao gồm: mã nhân viên, họ tên, tiền lương, tên phòng ban quản lý, tổng số nhân viên làm việc phịng ban Create View ViewManager as Select e2.ESSN, e2.LName, e2.FName, e2.ESalary, d.DName, Count (*) num_of_emp From Employee e1, Employee e2, Department d Where e2.ESSN=d.mgrSSN And e1.DNum=d.DNumber Group By e2.ESSN, e2.LName, e2.FName, e2.ESalary, d.Dname Page 25 of 25 Page 25 of 25 ... UNIQUE: khóa 3. 3 Ngôn ngữ điều khiển liệu 3. 3.1 Cấp phát quyền 3. 3.2 Thu hồi quyền 3. 4 Ngôn ngữ truy vấn liệu 3. 4.1 Truy vấn 3. 4.2 Truy vấn tập hợp 3. 4 .3 Hàm kết hợp 3. 4.4 Phép gom nhóm BONUS Cơ chế... REFERENCES DEPARTMENT (DNumber) 3. 1 .3 Xóa bảng, view, mục DROP TABLE EMPLOYEE DROP VIEW view_name DROP INDEX table_name index_name 3. 2 Ngôn ngữ thao tác liệu 3. 2.1 Thêm liệu Lệnh INSERT dùng để thêm... trữ liệu Như vậy, ta quan sát liệu sở liệu cách thực truy vấn bảng liệu Ngồi ra, SQL cịn cho phép quan sát liệu thông qua việc định nghĩa khung nhìn (view) Một khung nhìn xem bảng “ảo” sở liệu

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

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

Tài liệu liên quan