SQL.DOC

11 889 0
SQL.DOC

Đ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

SQL

Trang 1

1.1 Vài nét về lịch sử

SQL ra đời vào năm 1970 tại phòng thí nghiệm của IBM,san jose, California Là một ngôn ngư phi thủ tục – declarative, non procedural language.

Các câu lệnh mô tả yêu cầu cần làm gì - WHAT chứ không cần nêu từng bước tiến hành làm như thế nào – HOW.

Thực chất không không chỉ có Query Language còn thực hiện nhiều chức năng khác như bổ xung thêm dữ liệu, sửa đổi cập nhật thông tin, huỷ thông tin, huỷ thông tin, lien kết lưu trữ thông tin.

1.2 Sử dụng SQL.

Ngôn ngữ SQL được dùng trong ứng dụng CSDL theo mô hình Client – Server Các chương trình khách gửi yêu cầu truy vấn thông tin dưới dạng các câu lệnh SQL Chương trình chủ dịch vụ - Server CSDL - sẽ thực hiện yêu cầu và gửi lại kết quả cho chương trình khách.

Ba kiểu tương tác với ứng dụng.

- Modun: Các thủ tục làm sẵn thông qua các tham số, gọi và trả kết quả về - Nhúng trực tiếp: Các câu lệnh SQL trong chương trình.

- Gọi trực tiếp: Tương tác.

Nhúng là hình thức làm việc tĩnh – Static: câu lệnh được biên dịch ra, không thay đổi được khi chạy.

Hiện nay Dynamic SQL: cho phép chuẩn bị câu lệnh SQL trong khi chạy các thành phần của câu lệnh SQL được ghép nối lại trong thời gian chạy cho phép mức linh hoạt rất linh hoạt rất cao trong khai thác CSDL Giống như chuyển từ Compiler sang Interpreter.

bộ kí tự của SQL.

- Các chữ cái thường a – z , chữ cái hoa A – Z - Các chư số 0 – 9

- Các kí tự khác: “ % & ‘ () * / + - , ; < >= ? _ và khoảng trống tên: - Không phân biệt chư hoa chữ thường.

- Không quá 128 ký tự

- Không trùng với các từ khoá, từ dành riêng, tên có tách riêng

- Bất kỳ sâu ký tự nào(không nhất thiết phải thuộc bộ kí tự của SQL, có trùng với từ khoá) đặt trong cặp dấu ngoặc kép và không quá 128 kí tự, kể cả cặp dấu ngoặc kép.

2 Câu vấn tin SQL.

Một câu lệnh SQL thường gọi là một Query Như trên đã nêu, Query không chỉ đơn giản là hỏ – truy vấn thông tin từ CSDL để phục vụ người dùng

một SQL query có thể

- Tạo lập hay huỷ một bảng.

- Thêm, xoá, cập nhật một dòng, một trường - Tìm kiếm trong nhiều bảng có liên quan - Thay đổi chế độ an toàn

trước hết ta tập trung vào chức năng hay sử dụng nhất của một SQL query là truy vấn

Trang 2

SửDụng(MãCB: Xâu kí tự, MãXM: Xâu kí tự, Ngàybắtđầu: Ngày tháng, Ngàykếtthúc:

Ngày Tháng).

2.1 Cú pháp chung – câu lệnh SELECT.

- Câu lệnh SQL không phân biệt chữ in hoa, viết thường (Nhưng kiểu dữ liệu Char = sâu kí tự thì có phân biệt)

- Dấu cách có thể là các khoảng trắng, dấu table, dấu xuống dòng.

- Kết thúc câu lệnh có thể là: dấu chấm phẩy hoặc khoảng trắng tuỳ hệ thống.

Các từ khoá + các biểu thức -> các điều khoản các điều khoản tạo thành câu lệnh SQL

SELECT <danh sách tên cột> điều khoản Select FROM <danh sách tên bảng> điều khoản From WHERE <điều kiện tìm kiếm> điều khoản Where

+ Danh sách tên bảng

Các tên bảng cách nhau dấu phẩy Một tên bảng có thể kèm tên biến bảng (biến phạm vi) đại diện cho bảng đó Tên biến bảng đặc biệt có ích khi hai bảng có trung tên cột.

+ Danh sách tên cột

Các tên cột cách nhau dấu phẩy

Thứ tự giống như đã liệt kê, có thể khác với thứ tự vố có trong bảng Kí tự đại diện * = tất cả các cột theo thứ tự vốn có.

+ Điều kiện tìm kiếm

Điều kiện tìm kiếm là một biểu thức logic một biểu thức điều kiện được dung với từ khoá Where để tạo thành điều khoản Where, ấn định tiêu chuẩn tìm kiếm thông tin xuất ra Chỉ những dữ liệu thoả điều kiện đã nêu mới được đưa vào kết quả truy vấn

Biểu thức điều kiện trong điều khoản Where là liên kết bằng các phép toán logic

AND, OR, NOT có của các biểu thức so sánh dạng biểu thức op biểu thức

ở đây op là là một trong các phép toán <,<=,>,>=,=,<> còn biểu thức là biểu thức số học hay xâu kí tự với các toán hạng là các tên cột trong các bảng hoặc giá trị hằng.

Có thể hình dung cách tính kết quả của câu lệnh Select như sau 1- Lấy tích đề các các bảng có trong điều khoản From 2- Xoá những dòng trong quan hệ tích không thoả điều kiện 3- Xoá những cột không có trong danh sách tên cột

4- Nếu có lựa chọn DISTINCT thì loại bỏ các dòng trùng nhau, chỉ giữ lại một 2.3 Từ khóa DISTINCT/ALL

DISTINCT = chỉ lấy những dòng khác nhau

Nghĩa là nếu có nhiều dòng giống nhau chỉ lấy một đại diện ALL = tất cả các dòng, kể cả trùng nhau

Đây là mặc định, không cần gõ ALL Cú pháp

Select DISTINCT <danh sách tên cột> … Select ALL <danh sách tên cột>…………

Trang 3

Các phép toán bao gồm phép toán số học, phép toán xâu kí tự, phép so sánh Biểu thức có kết quả là một số, xâu kí tự hay giá trị logic.

Ví dụ:

Biểu thức số : (luong*1.05)

Biểu thức logic: (họvàtên Nguyễn văn A’,Lương <=500) Biểu thức xâu: Họ và tên + điện thoại.

Các biểu thức được sử dụng trong câu lệnh SQL:

- Trong điều khoản Select để kết xuất thông tin trực tiếp: Trong danh sách tên cột có thể dùng không chỉ các tên cột mà cả một biểu thức mà cả các toán hạng là các tên cột.

- Làm điều kiện tìm kiếm trong điều khoản WHERE, HAVING… Biểu thức số học.

Toán tử số học: Cộng, nhân , trừ , chia, modulo(a%b hoặc mod(a,b)).

Các biểu thức số học, biểu thức xâu có thể sử dụng trong điều khoản Select để kết xuất thông tin trực tiếp.

Ví dụ: Giả sử mọi người đều được phụ cấp thêm 5% lương Có thể hiện thị mức thực lĩnh như sau:

Select hovaten, luong *1.05 From canbo_1

ALIAS – Tên hiệu

Trong các ví dụ trên tên cột sẽ được hiện thị là lương*1.05 hoặc giá bán buôn + 0,15 SELECT hovaten, luong*1.05 sothuclinh

Khi không biết thật chính xác một phần của xâu hoặc chỉ quan tâm đến mnột phần nào đó của xâu có thể dùng LIKE với các ký tự đại diện %, _

Ký tự đại diện % thay cho một xâu con bất kỳ.

Trang 4

Ký tự đại diện _ thay cho một ký tự bất kỳ Toán tử logic

AND, OR, NOT

Các phép toán logic có thể dùng để xây dựng các biểu thức điều kiện phức tạp hơn trong điều khoản Where.

Ví dụ: SELECT * FROM employee

WHERE phongban= “ kinh doanh”

OR phongban= “hanhchinh” Or phongban=” taivu” Toán tử tập hợp

BEWEEN để xác định một đoạn con trong vùng giá trị có thể của một cột IN để xác định một danh sách các giá trị có thể.

Vi dụ:

SELECT column_name_1, column_name_n FROM table_name_1, ,table_name_n

WHERE column_name IN(value_1, .,value_n) Các hàm thao tác dữ liệu

Các câu lệnh SQL thông thường kết xuất dữ liệu lần lượt theo từng dòng của bảng.

Các hàm xử lý nhóm Aggegate function – Xử lý dữ liệu toàn bộ các dòng của bảng hoặc một nhóm dòng thoả mãn điều kiện nào đó và cho ra chỉ một kết quả Đôi khi cũng gọi là hàm nhóm – GROUP FUNCTION.

Dưới đay sẽ giới thiệu các hàm đó.,

COUNT: Đếm số dòng thảo mãn điều khoản WHERE Ví dụ: Đếm số nhân viên của phòng kinh doanh.

Trang 5

Có thể áp dụng cho một kiểu số và cả cột kiểu xâu tự Vi dụ:

SELECT MAX(luong) FROM canbo_1

MIN: Cho giá trị cực tiểu trong cột.

Có thể áp dụng cho cột kiểu số và cả cột kiểu xâu ký tự.

SYSDATE: Thời gian hệ thống.

Dùng để so sánh: tìm các công việc chưa bắt đầu, đã kết thúc ADD_MONTHS:

Dịch lùi lại cộng thêm một số tháng từ một ngày cho trước Ví dụ:

Giả sử có bảng dự án về quản lý dự án gồm các trường ngay bắt đầu ngày kết thúc

Nếu có sự cố làm dự án chậm mất hai tháng để hiện thị các công việc còn chưa kết thúc ABS giá trị tuyệt đối

CELL : Số trần- số nguyên nhỏ nhất hay bằng đối số FLOOR: Số sàn - số nguyên bé nhất hay bằng đối số Và một số các hàm sử lý khác và các hàm xâu ký tự khác XỬ LÝ TẬP KẾT QUẢ.

Trang 6

Các phép toán tập hợp

Nêu hai câu lệnh SELECT trả về hai bảng kết quả cùng kiểu , nghĩa là có danh sách các cột giống nhau thì có thể dùng các phép toán tập hợp đối với hai tập kết quả đó.

UNION: Hợp hai kết quả SELECT có loại bó trùng nhau.

UNION ALL: Hợp hai kết quả SELECT , không loại bỏ trùng nhau INTERSECT: Giao hai kết quả SELECT

EXCEPT: Hiệu hai kết quả.

Điều khoản ORDER BY dùng để kết xuất thông tin theo thứ tự của một cột được chọn làm khoá xắp xếp.

Có thể xắp theo nhiều, trước hết xắp theo cột thứ nhất trong danh sách khoá, sau đó trong từng nhóm cùng cột thứ nhất lại xắp theo cột thứ hai.

Ví dụ: SELECT * FROM canbo_1

ORDER BY phongban,namsinh DESC ASC: tăng dần ,là lựa chọn mặc định DESC: giảm dần

Có thể thay tên cột bằng số thứ tự cột trong bảng Điều khoản GROUP BY

Khác với ORDER BY là in ra mọi dòng sau đó không loại bỏ các giá trị trùng hợp, xử lý cả nhóm dòng cùng giá trị như một đơn vị.

SELECT phongban, COUNT(*) songuoi FROM canbo_1

GROUP BY phongban Điều khoản HAVING

WHERE không làm việc với điều khoản GROUP BY khi dùng các hàm xử lý như nhóm AVG, SUM., phải dùng HAVING.

SELECT phongban, SUM(luong) FROM canbo_1

GROUP BY phongban HAVING SUM(luong)> .

Có thể phối hợp nhiều điều khoản để thực hiện các truy vấn tin tuỳ ý thóat thoả mãn nhu cầu của người dùng.

Ví dụ:

Có bảng chiséc (người nhận, số tiền) Câu lệnh sau sẽ xuất ra từng người nhận séc với tổng

số tiền và số lần nhận nhưng loại bỏ những người mà có tổng số tiền rất nhỏ(<=50) SELECT NgườiNhận,

SUM (SốTiền) Tổng,

COUT (NgườiNhận) SốLần FROM ChiSéc

Trang 7

FROM Bang_1, Bang_2

Đây là phép nối không có điều kiện gi điều khoản WHERE không có mặt kết quả sẽ xuất ra tích Đề các của hai bảng Bang_1 X Bang_2.

nếu bảng 1 có m dòng, bảng 2 có n dòng thì kết quả sẽ gồm m*n dòng + Nối có điều kiện

Việc chuẩn hoá loại bỏ dư thừa dữ liệu làm cho bảng nhỏ hơn và cơ sở dữ liệu gồm nhiều bảng hơn Các câu vấn tin, trái lại cần tổng hợp dữ liệu từ nhiều bảng Điều khoản Where thể hiện mối liên kết giữa các bảng Rất thông thường, điều kiện liên kết các bảng là bằng nhau ở các cột chung Ta có phép nối tự nhiên.

nhập dữ liệu trực tiếp từ câu lệnh.

Câu lệnh INSERT … VALUES INSERT INTO tên bảng

Một số hệ quản trị CSDL cho phép tạo bảng tạm bảng tạm sẽ tự động bị xoá khi kết nối kết thúc Ta đã biết rằng các câu lệnh truy vấn thông tin thường phải nối nhiều bảng Quá trình này mất thì giờ nếu có nhiều câu truy vấn khác nhau cần nối nhiều bảng thì viếc tạo bảng thì việc tạo bảng tạm thời một lần sẽ làm tốc độ xử lí.

cập nhật dữ liệu – câu lệnh UPDATE

SET phongBan = ‘kinh doanh’, luong = 6000 WHERE HoVaTen = ‘Pham Quang B’

Xoá dữ liệu – câu lệnh DELETE

Có thể xoá nhiều một dòng, nhiều dòng, mọi dòng

Trang 8

Không thể xoá chỉ một vài cột DELETE FROM TênBảng WHERE Biểuthứcđiềukiện + Tạo lập và quản lí CSDL Những khái niệm chung.

Việc tạo lập CSDL phụ thuộc nhiều vào từng hệ quản trị CSDL cụ thể cần tham khảo kĩ tài liệu hướng dẫn dưới đây là một số khái niệm chính cần biết về hệ quản trị CSDL SQL Sever.

Devies

Devices là tệp vật lí trên đĩa để lưu dữ liệu và tập nhật kí Nó phải được tạo lập trước khi tạo CSDL.

Một database device là để chứa dữ liệu, dump device để lưu nhật kí giao tác.

Có thể tạo device bằng công cụ quản trị với giao diện đồ hoạ Cũng có thể dùng dòng lệnh.

câu lệnh – CREAT TABLE create table tênbảng

Têncột_1 Kiểudữliệu [ not NULL], Têncột_2 Kiểudữliệu [ not NULL], ……

[ constraint….]

ở đây constraint là các ràng buộc toàn vẹn dữ liệu Các tên trường, tên bảng phải theo đúng quy định Ví dụ:

- Dài không quá 30 kí tự

- Không phân biệt chữ hoa chữ, thường - Không trùng với từ khoá

- Kiểu dữ liệu, tuỳ quy định của từng hệ thống Giá trị NULL.

Null nghĩa là không chứa giá trị nào, khác với khoảng trắng, số không.

Lựa chọn NOTNULL bắt buộc phải cung cấp giá trị cho cột đó mỗi khi thêm một bản ghi mới.

Thêm cột, sửa đổi cột

Câu lệnh ALTER TABLE Thêm cột

ALTER TABLE tênbảng ADD têncột_1 KiểuDữLiệu, Têncột_2 KiểuDữLiệu, …

Sửa đổi bảng

Trang 9

ALTER TABLE TênBảng

MODIFY Têncột_1 KiểuDữLiệu, Têncột_2 KiểuDữLiệu,… [ constraint ]

Huỷ bảng và huỷ CSDL

+ Ràng buộc toàn vẹn dữ liệu Các loại ràng buộc toàn vẹn dữ liệu

Một cơ sở dữ liệu chỉ hữu ích nếu dữ liệu lưu trong đó là phù hợp và đúng đắn.

Ràng buộc toàn vẹn dữ liệu ngăn không cho phép nhập và lưu trữ các thông tin không phù hợp vào cơ sở dữ liệu một thể hiện cụ thể của cơ sở dữ liệu sẽ gọi là hợp lệ nếu thoả mãn tất cả các ràng buộc toàn vẹn dữ liệu đã thiết lập

Các ràng buộc toàn vẹn được thiết lập khi thiết lập các cơ sở dữ liệu và kiểm tra khi một ứng dụng cập nhật CSDL, không cho phép tạo ra một thể hiện không hợp lệ.

+Ràng buộc miền xác định.

Mỗi trường thuộc tính chỉ có thể nhận gía trị trong một miền xác định Đây là những ràng buộc tự nhiên, ví dụ Ngày sinh phải là một giá trị ngày tháng.

Ràng buộc này phải được thiết lập khi tạo bảng, bằng cách chỉ rõ miền xác định sau mỗi tên trường.

+ Ràng buộc liên quan đến nhiều bảng.

Nếu ràng buộc phức tạp, điều kiện kiểm tra liên quan đến nhiều hơn một vấn bảng, thì nên tạo một điều khoản xác nhận – ASSERTION.

CREATE ASSERTION tên điều khoản xác nhận CHECK biểu thức điều kiện

Giải pháp này sẽ hợp lý hơn viết trực tiếp điều kiện kiểm tra vào cấu lệnh vào bảng bởi vì.

- Chọn kèm điều kiện kiểm tra vào bảng nào trong số các bảng có dính líu.

- Hơn nữa quan trọng hơn, nếu bảng chứa điều kiện kiểm tra là rỗng thì điều kiện được coi là luôn đúng.

Ràng buộc khoá.

Trong mỗi quan hệ phải chỉ rõ một trường là khoá Ràng buộc chính đảm bảo rằng không thể có cùng giá trị trên khoá chính.

Ràng buộc này được thiết lập khi tạo bảng, dùng từ khoá PRYMARY KEY cho khoá chính, UNIQUE cho các khoá dự bị kèm tên trường tương ứng.

Ví dụ:

CREATE TABLE Canbo( …

CONSTRAINT Khoachinh PRYMARY KEY (MaCB) CREATE TABLE Bandoc(

PRYMARY KEY (Mabandoc)

Trang 10

Ràng buộc với khoá ngoài

Khi hai quan hệ có mối liên hệ với nhau thì dữ liệu trong một quan hệ biến đổi sẽ kéo theo việc cập nhật dữ liệu trong quan hệ kia để đảm bảo tính tương thích một ràng buộc toàn vẹn dữ liệu liên quan đến hai quan hệ cần được thiết lập trong trường này Thông thường đây là ràng buộc với khoá ngoài.

Ràng buộc khoá ngoài được thiết lập khi tạo bảng chứa khoá ngoài bằng từ khoá FOREIGN KEY kèm tên trường khoá ngoài và REFERENCES kèm tên bảng chứa khoá chính.

Ví dụ:

CREATE TABLE mượn Trả( …

FOREIGN KEY (Mãbanđọc) REFERENCES Bạnđọc FOREIGN KEY (Mãsách) REFERENCES Khosách)

Đảm bảo toàn vẹn dữ liệu

Ràng buộc khoá chính được đảm bảo đơn giản bằng cách từ chối không cho phép thêm vào hay cập nhật một bộ có các giá trị trên trường khoá chính trùng với một bộ đã có trong quan hệ.

Ràng buộc tham chiếu đối với khoá ngoài phải xử lý phức tạp hơn hệ quản trị không đơn giản từ chối các thao tác vi phạm ràng buộc tham chiếu.

Khi thêm một bộ mà giá trị của trường khoá ngoài không có mặt trong quan hệ gốc : hệ quản trị từ chối.

Khi xoá bỏ một bộ trong quan hệ được tham chiếu(quan hệ gốc), hệ quản trị có thể lựa chọn một trong 3 cách xử lý sau:

1, Xoá bỏ tất cả các bộ thuộc quan hệ tham chiếu mà giá trị của trường khoá ngoài trùng với giá trị khoá gốc đã bị xoá

2, Không cho phép xoá bỏ bộ này nếu còn các bộ trong quan hệ tham chiếu đang tham chiếu đến nó

3, Sửa đổi giá trị của trường khoá ngoài của các bộ tham chiếu đến bộ bị xoá thành một giá trị mặc định nào đó quy định trước.

- Khi cập nhật lại trường khoá chính của một bộ trong quan hệ được tham chiếu: cũng có 3 lựa chọn tương tự như trên.

An toàn dữ liệu – View và quyền thâm nhập View

Khác với các bảng còn gọi là bảng cơ sở, được lưu trong tệp CSDL, View cũng là một bảng nhưng các dòng của nó được tính nhờ cấu lệnh SELECT trong định nghĩa View CREATE VIEW Canbotre

AS SELECT HovaTen, Gioitinh, namsinh FROM Canbo

WHERE Namsinh > 1980

Một khi được tạo ra, có thể sử dụng View hoàn toàn giống như một bảng thông thường View được sử dụng để đảm bảo tính độc lập logic của dữ liệu Có thể thay đổi các bảng cơ sở nhưng vẫn giữ nguyên View, nghĩa là các ứng dụng không cần phải sửa đổi lại.

View cũng được dùng trong mục đích an toàn dữ liệu.

một số người dùng có thể cấp các quyền đối với View nhưng có không có quyền gì đối với các bảng cơ sở dùng để tạo lên View.

Phân cấp quyền truy cập CSDL.

Ngày đăng: 25/08/2012, 10:24

Từ khóa liên quan

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

Tài liệu liên quan