dap an sql

Màu nền
Font chữ
Font size
Chiều cao dòng

Đáp án tham khảo:

Câu 1:

ĐN: SQL là ngôn ngữ lập trình có cấu trúc truy vấn CSDL được dung để truy cập dữ liệu, truy vấn, cập nhật và quản trị hệ CSDL quan hệ.

Sự khác nhau giữa DDL và DML

DDL: Được dùng để định nghĩa và quản lý các đối tượng CSDL như CSDL, bảng, view. Các phát biểu DDL thường bao gồm các lệnh CREATE, ALTER và DROP cho từng đối tượng.

DML: Được dùng để tương tác dữ liệu chứa trong các đối tượng của CSDL dùng các phát biểu như INSERT, SELECT, UPDATE, DELETE. Những phát biểu náy cho phép thêm dòng dữ liệu mới, chọn dòng dữ liệu bằng cách thực hiện truy vấn, cập  nhật dòng dữ liệu đang tồn tại và xóa dòng dữ liệu không dùng nữa.

VÍ DỤ:

 Dùng DDL để tạo bảng KHACHHANG

Tạo bảng KHACHHANG

USE QUANLIKHACHHANG

GO

CREATE TABLE KHACHHANG

 ( MA_KH INT NOTNULL,

    HO_KH NVARCHAR(50),

    TEN_KH NVARCHAR(20),

     DIEN_THOAI CHAR (20)

CONSTRAINT MA_KH_PK PRIMARY KEY(MA_KH))

Dùng DML thêm dữ liệu vào bảng KHACHHANG

INSERT INTO KHACHHANG

(MA_KH, HO_KH, TEN_KH, DIEN_THOAI)

VALUES (111, ‘TRAN MINH’, ‘THU’, ‘0847838’)

Câu 2:

Cú pháp:

            CREATE TABLE tên_bảng

                         tên_cột   thuộc_tính_cột  các_ràng_buộc

                        [,...

                        ,tên_cột_n thuộc_tính_cột_n  các_ràng_buộc_cột_n]

                        [,các_ràng_buộc_trên_bảng]

Giải thích các thành phần trong cú pháp câu lệnh CREATE TABLE

tên_bảng

Tên của bảng cần tạo. Tên phải tuân theo qui tắc định danh và không được vượt quá 128 ký tự.

tên_cột

Là tên của cột (trường) cần định nghĩa, tên cột phải tuân theo qui tắc định danh và không được trùng nhau trong mỗi một bảng.  Mỗi một bảng phải có ít nhất một cột. Nếu bảng có nhiều cột thì định nghĩa của các cột (tên cột, thuộc tính và các ràng buộc) phải phân cách nhau bởi dấu phẩy.

thuộc_tính_cột

Mỗi một cột trong một bảng ngoài tên cột còn có các thuộc tính bao gồm:

·        Kiểu dữ liệu của cột. Đây là thuộc tính bắt buộc phải có đối với mỗi cột.

·        Giá trị mặc định của cột: là giá trị được tự động gán cho cột nếu như người sử dụng không nhập dữ liệu cho cột một cách tường minh. Mỗi một cột chỉ có thể có nhiều nhất một giá trị mặc định.

·        Cột có tính chất IDENTITY hay không? tức là giá trị của cột có được tự động tăng mỗi khi có bản ghi mới được bổ sung hay không. Tính chất này chỉ có thể sử dụng đối với các trường kiểu số.

·        Cột có chấp nhận giá trị NULL hay không

các_ràng_buộc

Các ràng buộc được sử dụng trên mỗi cột hoặc trên bảng nhằm các mục đích sau:

·        Quy định khuôn dạng hay giá trị dữ liệu được cho phép trên cột (chẳng hạn qui định tuổi của một học sinh phải lớn hơn 6 và nhỏ hơn 20, số điện thoại phải là một chuỗi bao gồm 6 chữ số,...). Những ràng buộc kiểu này được gọi là ràng buộc CHECK

·        Đảm bảo tính toàn vẹn dữ liệu trong một bảng và toàn vẹn tham chiếu giữa các bảng trong cơ sở dữ liệu. Những loại ràng buộc này nhằm đảm bảo tính đúng của dữ liệu như: số chứng minh nhân dân của mỗi một người phải duy nhất, nếu sinh viên học một lớp nào đó thì lớp đó phải tồn tại,... Liên quan đến những loại ràng buộc này bao gồm các ràng buộc PRIMARY KEY (khoá chính), UNIQUE (khóa dự tuyển) và FOREIGN KEY (khoá ngoài)

ÁP DỤNG TẠO BẢNG:

CREATE TABLE DSSV

       ( MASV             INT  CONSTRAINT pk_sinhvien_masv PRIMARY KEY,

         HODEM          VARCHAR(20),

         TEN                VARCHAR(20),

          NGAYSINH   DATETIME,

          PHAI              BIT,

          DTB               NUMBER

INSERT INTO DSSV VALUES (01010001, ‘

Nguyễn Văn’, ‘Hùng’, 01/11/1985, 1, 5.5)

INSERT INTO DSSV VALUES (01010002, ‘Huỳnh Phong’, ‘Nhã’, 01/08/1984, 1, 7.5)

Câu 3:

Cú pháp lệnh Update

UPDATE tên_bảng

                        SET     tên_cột = biểu_thức

                                    [, ..., tên_cột_k = biểu_thức_k]

                        [FROM  danh_sách_bảng]

                        [WHERE điều_kiện]

Sau UPDATE là tên của bảng cần cập nhật dữ liệu.

Sau từ khoá SET có thể cập nhật dữ liệu cho nhiều cột bằng cách chỉ định các danh sách tên cột và biểu thức tương ứng.

Sau WHERE được sử dụng để chỉ định các dòng dữ liệu chịu tác động của câu lệnh (nếu không chỉ định, phạm vi tác động của câu lệnh  được hiểu là toàn bộ các dòng trong bảng)

Ví dụ: Câu lệnh dưới đây cập nhật lại số đơn vị học trình của các môn học có số đơn vị học trình nhỏ hơn 2

            UPDATE monhoc

            SET sodvht = 3

            WHERE sodvht <= 2

Câu 4: 

Cú pháp chung của câu lệnh SELECT có dạng:

            SELECT [DISTINCT] <biểu thức> [AS <tên 1>] [,…] / *

            FROM <bảng 1> [<bí danh>] [,…]

            [INTO <bảng đích>]

            [WHERE  <điều kiện nối> [AND /OR <điều kiện lọc>]]

            [GROUP BY <cột nhóm 1> [,…]

                [HAVING <điều kiện nhóm>]/

           [ORDER BY <biểu thức sắp xếp 1> [ASC/DESC][,..] ]

            [UNION/ INTERSECT/MINUS <câu truy vấn khác> ]

Giải thích các thành phần cơ bản trong câu lệnh:

- Biểu thức sau SELECT có thể bao gồm:

§         Từ khóa DISTINCT dùng liệt kê những giá trị duy nhất tránh trùng lặp.

§         Danh sách các biểu thức ngăn cách nhau dấu phẩy (,) và có thể đổi tên bằng AS <tên>

§         * có nghĩa là lấy tất cả các thuộc tính sau FROM

§         Các hàm tính toán: COUNT, SUM, AVG, MIN, MAX

- Biểu thức sau FROM gồm một hoặc danh sách các bảng quan hệ (có thể đặt bí danh)

- Biểu thức sau WHERE bao gồm:

§         Các thuộc tính của các bảng quan hệ sau FROM

§         Các toán tử số học: +, -, *, /

§         Các toán tử so sánh: >=, =<, =, >, <

§         Các toán tử Boolean: AND, OR, NOT

§         Các toán tử tập hợp: UNION (hợp), INTERSECT (giao), MINUS (hiệu)

§         Các quan hệ bao hàm: IN, NOT IN,

§         Điều kiện tồn tại: EXISTS, NOT EXISTS

§         Các vấn tin con kiểu SELECT … FROM … WHERE…

Câu 5:

ĐN:  Constraints là những thuộc tính (property) mà ta áp đặt lên một table hay một cột để tránh việc lưu dữ liệu không chính xác vào database.

Trình bày 4 loại Constraint:

 CHECK CONSTRAINT: Ràng buộc CHECK được sử dụng nhằm chỉ định điều kiện hợp lệ đối với dữ liệu. Mỗi khi có sự thay đổi dữ liệu trên bảng (INSERT, UPDATE), những ràng buộc này sẽ được sử dụng nhằm kiểm tra xem dữ liệu mới có hợp lệ hay không.

Cú pháp:

              [CONSTRAINT tên_ràng_buộc]

              CHECK (điều_kiện)

Ví dụ  : Câu lệnh dưới đây tạo bảng DIEMTOTNGHIEP trong đó qui định giá trị của cột DIEMVAN và DIEMTOAN phải lớn hơn hoặc bằng 0 và nhỏ hơn hoặc bằng 10.

CREATE TABLE diemtotnghiep

hoten    NVARCHAR(30) NOT NULL,

ngaysinh           DATETIME,

diemvan            DECIMAL(4,2)

                        CONSTRAINT chk_diemvan

          CHECK(diemvan>=0 AND diemvan<=10),

diemtoan          DECIMAL(4,2)

                        CONSTRAINT chk_diemtoan

          CHECK(diemtoan>=0 AND diemtoan<=10),

PRIMARY KEY CONSTRAINT  :Ràng buộc PRIMARY KEY được sử dụng để định nghĩa khoá chính của bảng.

Cú pháp như sau:

             [CONSTRAINT tên_ràng_buộc]

             PRIMARY KEY [(danh_sách_cột)]

Ví dụ:

CREATE TABLE sinhvien

masv    NVARCHAR(10)

                        CONSTRAINT pk_sinhvien_masv PRIMARY KEY,

hodem  NVARCHAR(25)        NOT NULL ,

ten                    NVARCHAR(10)        NOT NULL ,

ngaysinh           DATETIME,

gioitinh BIT,

noisinh NVARCHAR(255),

malop   NVARCHAR(10)

UNIQUE CONSTRAINT: Tạo Unique Constraint để đảm bảo giá trị của một cột nào đó không bị trùng lập.

Cú pháp:

            [CONSTRAINT tên_ràng_buộc]

             UNIQUE [(danh_sách_cột)]

Ví dụ:

CREATE TABLE lop

malop     NVARCHAR(10)      NOT NULL,

tenlop     NVARCHAR(30)      NOT NULL,

khoa       SMALLINT               NULL,

hedaotao            NVARCHAR(25)      NULL,

namnhaphoc  INT                                 NULL,

makhoa              NVARCHAR(5),

CONSTRAINT pk_lop PRIMARY KEY (malop),

CONSTRAINT unique_lop_tenlop UNIQUE(tenlop)

FOREIGN KEY CONSTRAINT: Foreign Key là một cột hay một sự kết hợp của nhiều cột được sử dụng để áp đặt mối liên kết dữ liệu giữa hai table. Foreign key của một table sẽ giữ giá trị của Primary key của một table khác và chúng ta có thể tạo ra nhiều Foreign key trong một table.

Cú pháp:

[CONSTRAINT tên_ràng_buộc]

 FOREIGN KEY [(danh_sách_cột)]

 REFERENCES tên_bảng_tham_chiếu(danh_sách_cột_tham_chiếu)

 [ON DELETE CASCADE | NO ACTION | SET NULL | SET DEFAULT]

 [ON UPDATE CASCADE | NO ACTION | SET NULL | SET DEFAULT]

Ví dụ:

CREATE TABLE diemthi

mamonhoc  NVARCHAR(10)  NOT NULL ,

masv      NVARCHAR(10)  NOT NULL ,

diemlan1NUMERIC(4, 2),

diemlan2NUMERIC(4, 2),

CONSTRAINT pk_diemthi PRIMARY KEY(mamonhoc,masv)

Câu 6:

Cơ chế bảo mật trong SQL Server có hai mức: Cấp quyền trên đối tượng CSDL và quyền thực thi CSDL

a/ Quyền trên đối tượng CSDL:

       Các quyền trên đối tượng CSDL là lớp quyền được cấp phát để truy cập các đối tượng CSDL. Sử dụng các phát biểu SQL như SELECT, INSERT, UPDATE, DELETE và EXECUTE để thực thi store procedure. Có thể dung Enterprise Manager hoặc T-SQL để cấp quyền trên đối tượng.

Dùng T-SQL:

Cấp quyền:

Use Tên CSDL

Grant   All hoặc danh sách các quyền   To  Account

Trong đó Account có thể là tên người dùng CSDL hoặc vai trò.

Ví dụ:   Grant  Create table, create view  to  role1, role2 

Câu lệnh trên gán quyền tạo bảng và tạo view cho vai trò role1 và role2

Grant All to [VIDU\test]

Câu lệnh này gán tất cả các quyền trong một CSDL cho VIDU\test

Gở bỏ:

Use Tên CSDL

Revoke  All hoặc danh sách các câu lệnh   To  Account

Trong đó Account tương tự như trên

Ví dụ:  Revoke  Create table, create view  to  role1, role2

Câu lệnh này gở bỏ quyền tạo bảng và tạo view của role1 và role2

Revoke  All  to [VIDU\test]

Câu lệnh này gở bỏ tất cả các quyền của VIDU\test   trong CSDL

Vô hiệu:

Use Tên CSDL

Deny  All hoặc danh sách các câu lệnh   To  Account

Trong đó Account tương tự như trên

Ví dụ:  deny  Create table, create view  to  role1, role2

Giả sử ta có VIDU\test là một thành viên của vai trò Role3

Câu lệnh:  Grant create table, create view  to Role3

Lúc này hiển nhiên là VIDU\test có hai quyền  create table và create view, nếu ta không muốn VIDU\test  có quyền tạo bảng ta dùng câu lệnh 

deny create table to VIDU\test

b/ Quyền thực thi CSDL:

Quyền thực thi cho phép người dùng tạo các đối tượng CSDL. Các quyền thực thi được liệt kê sau đây:

BACKUP DATABASE: Cho phép thực thi lệnh backup database

BACKUP LOG: Cho phép thực thi lệnh backup log

CREATE DATABASE: Cho phép tạo CSDL

CREATE DEFAULT: Cho phép tạo giá trị mặc định kết với cột trong bảng

CREATE PROCEDURE: Cho phép tạo Stored procedure

CREATE RULE: Cho phép tạo các quy tắc

CREATE TABLE: Cho phép tạo bảng

CREATE VIEW: Cho phép tạo View

Ví dụ: Để cấp quyền thực thi tạo bảng và view cho người dùng userA trên cơ sở dữ liệu quanlihocsinh, thực hiện:

      USE quanlihocsinh

      GRANT CREATE TABLE, CREATE VIEW

      TO USERA

Ví dụ: Để lấy lại quyền thực thi tạo bảng cho người dùng userA trên cơ sở dữ liệu quanlihocsinh, thực hiện:

      USE quanlihocsinh

      GRANT CREATE TABLE

      TO USERA

Câu 7: Có. Vì: Có  một số bảng cần phải lưu cùng một kiểu dữ liệu trong cột và người dùng cần thống nhất kiểu dữ liệu cho các cột tương ứng đó trong mỗi bảng.

Trình bày các kiểu dữ liệu:

•         Loại String:  Bao gồm các kiểu dữ liệu như char(n), varchar(n), text, nchar, nvarchar, ntext. Trong đó nchar, nvarchar, ntext lưu trữ dữ liệu theo dạng Unicode (mỗi dữ liệu được lưu trữ trong 2 byte).

•         Kiểu dữ liệu số chính xác: Bao gồm các kiểu dữ liệu như bit, tinyint, smallint, int, bigint trong đó bit có chiều dài là 1 byte nhận hai giá trị là 0 hoặc 1, tinyint có chiều dài là 1 byte (0 – 255), smallint chiều dài là 2 bytes (+ – 32767), int có độ dài là 4 bytes (+ – 214783657), bigint  có chiều dài là 8 bytes (+ – 2^63).

•         Kiểu dữ liệu số gần đúng: Bao gồm các kiểu dữ liệu real, float, trong đó real yêu cầu 4 bytes nên lưu trữ 7 ký số, còn float 8 bytes nên có thể lưu trữ lên tới 38 ký số.

•         Kiểu dữ liệu Date và Time: Bao gồm hai loại Datetime và Smalldatetime. Trong đó Datetime gồm 8 bytes lưu trữ phạm vi từ 1/1/1753 – 12/31/9999, Smalldatetime gồm 4 bytes lưu trữ phạm vi từ 1/1/1900 đến 6/6/2079.

•         Kiểu tiền tệ: Bao gồm hai loại là money và smallmoney, cả hai đều lưu trữ bốn chữ số ở bên phải dấu thập phân, khi nhập dữ liệu tiền tệ phải nhập ở trước dấu $. Trong đó money gồm 8 byte lưu trữ phạm vi từ + - 922337203685447.5808, smallmoney gồm 4 byte lưu trữ phạm vi từ + - 214748.3647.

•         Kiểu dữ liệu người dùng: Người dùng có thể tự tạo kiểu dữ liệu do mình muốn dựa vào những dữ liệu do hệ thống cung cấp.

Một số quy tắc thông thường phải tuân theo khi thao tác với dữ liệu kiểu ký tự

Khi sử dụng kiểu kí tự thì chỉ rõ độ dài lớn nhất của chuỗi đó . Nếu không chỉ rõ thì chiều dài của chuỗi là tự tăng khi các ký tự trong chuỗi tăng lên làm giảm  tốc độ xử lí, tốn kém dung lượng. Nếu chiều dài của chuỗi mà vượt quá 8000 ký tự thì phải dùng kiểu text.

Khi tạo bảng cần chú ý: (Tên cột khác tên bảng, tên cột giống nhau phải cùng kiểu dữ liệu cùng độ dài.)

Đảm bảo ba loại toàn vẹn:

•         Toàn vẹn trên miền:  Các loại dữ liệu giúp xác định các giá trị gì là hợp lệ cho một cột riêng biệt nào đó điều này được gọi là toàn vẹn miền (domain integrity). Miền đơn giản là một tập các giá trị hợp lệ cho một cột riêng biệt.

•         Toàn vẹn tham chiếu:  Toàn vẹn tham chiếu liên quan đến việc quản lý các mối quan hệ giữa các dòng dữ liệu trong nhiều bảng.

•         Toàn vẹn thực thể:  Có nghĩa là bạn có thể nhận diện duy nhất mỗi dòng dữ liệu trong một bảng, đây chính là ràng buộc khóa chính.

Câu 8:

View là một bảng ảo được định nghĩa bởi một truy vấn với phát biểu Select. Bảng ảo được hình thành từ một hoặc nhiều bảng thật.

Thuận lợi View:

Cung cấp dữ liệu cập nhật nhất.

Có cấp bảo mật khác với bảo mật ở bảng: Truy vấn định nghĩa view được thực thi dưới cấp bảo mật  của người dùng đã tạo view.

Hạn chế:

Giới hạn cột: Một view có thể tham khỏa tối đa 1024 cột trong bảng

Giới hạn CSDL: Một view chỉ có thể được tạo trên bảng trong CSDL mà người tạo view có thể truy cập

Giới hạn bảo mật: Người tạo view phải có quyền truy cập tất cả các cột được tham khỏa trong view

Các quy tắc toàn vẹn dữ liệu: Bất kì cập nhật, sửa đổi trên view không thể vi phạm các quy tắc toàn vẹn.

Giới hạn số cấp view lồng nhau: Một view có tể được tạo từ các view khác

Giới hạn ở phát biểu Select: Phát biểu select của view không thể chứa các phát biểu ORDER BY, COMPUTER, COMPUTER BY hoặc từ khóa INTO.

Áp dụng:

Use quanlyhanghoa

Go

CREATE VIEW MAT_HANG

AS

SELECT *

FROM MATHANG

WHERE MA_LOAIHANG=’GẠO’

GO

Câu 9

Cú pháp câu lệnh alter table:

ALTER TABLE tên_bảng

  ADD định_nghĩa_cột |

  ALTER COLUMN tên_cột  kiểu_dữ_liêu [NULL | NOT NULL] |

  DROP COLUMN tên_cột |

  ADD CONSTRAINT tên_ràng_buộc  định_nghĩa_ràng_buộc |

  DROP CONSTRAINT tên_ràng_buộc

Viết lệnh alter table:

            + Tạo ràng buộc cho dienthoai

ALTER TABLE nhanvien

ADD

  dienthoai NVARCHAR(6)

  CONSTRAINT chk_nhanvien_dienthoai

  CHECK (dienthoai LIKE '[0-9][0-9][0-9][0-9][0-9][0-9]')

            + Định nghĩa khoá ngoài cho bảng NHANVIEN trên cột MADV tham chiếu đến cột MADV của bảng DONVI:

ALTER TABLE nhanvien

ADD

     CONSTRAINT fk_nhanvien_madv

     FOREIGN KEY(madv) REFERENCES donvi(madv)

     ON DELETE CASCADE

     ON UPDATE CASCADE

Bạn đang đọc truyện trên: Truyen2U.Pro

#sql