Tải bản đầy đủ (.pdf) (6 trang)

Programming HandBook part 116 pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (163.53 KB, 6 trang )

SQL CREATE VIEW Statement

Một view có thể coi như là một "bảng ảo" có nội dụng được xác định từ một truy
vẫn. Một truy vấn (query) chỉ là một tập hợp các chỉ dẫn (intruction) nhằm truy
vẫn và hiển thị dữ liệu từ các bảng CSDL . Các truy vấn được thực hiện bằng các
sử dụng câu lệnh SELECT.

Using VIEW :

Một VIEW (khung nhìn) trông giống như một bảng với một tập hợp các tên cột và
các dòng dữ liệu.Tuy nhiên ,khung nhìn ko tồn tại như là một cấu trúc lưu trữ dữ
liệu trong CSDL. Dữ liệu bên trong khung nhìn thực chất là dữ liệu được xác định
từ một hay nhiều bảng cơ sở và do đó phụ thuộc vào các bảng cơ sở.

Các VIEW được sử dụng trong CSDL nhằm các mục đích sau :
- Sử dụng khung nhìn để tập trung trên dữ liệu xác định
- Sử dụng khung nhìn để đơn giản hoá thao tác dữ liệu
- Sử dụng khung nhìn để tuỳ biến dữ liệu
- Sử dụng khung nhìn để xuất dữ liệu
- Sử dụng khung nhìn để bảo mật dữ liệu

Cú pháp :
Trích:
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition



Ví dụ sau về cách tạo 1 VIEW tên [Current Product List] với dữ liệu trong 2 cột


ProductID,ProductName của table Products .
Trích:
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No

Chúng ta có thể truy vấn VIEW bằng câu lệnh sau :
Trích:
SELECT * FROM [Current Product List]

Một số ví dụ khác về VIEW :

Tạo một VIEW với tên [Products Above Average Price] có chứa data của 2 cột
ProductName,UnitPrice trong table Products mà giá trị UnitPrice lớn hơn số lượng
trung bình trong Products .
Trích:
CREATE VIEW [Products Above Average Price] AS
SELECT ProductName,UnitPrice
FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products)

Query view trên :
Trích:
SELECT * FROM [Products Above Average Price]

Ví dụ sau view trong database tên Northwind và tính tổng số sản phẩm được bán
năm 1997 :
Trích:
CREATE VIEW [Category Sales For 1997] AS

SELECT DISTINCT CategoryName,Sum(ProductSales) AS CategorySales
FROM [Product Sales for 1997]
GROUP BY CategoryName

Query VIEW :
Trích:
SELECT * FROM [Category Sales For 1997]

Bạn cũng có thể thêm điều kiện và câu truy vấn .Ví dụ như ở đây là view trong
CategoryName='Beverages' :
Trích:
SELECT * FROM [Category Sales For 1997]
WHERE CategoryName='Beverages'


Link của phần index giúp bạn tổng hợp những kiến thức cơ bản :


dondoc (vniss)

Phần 2 SQL Advanced (bài 15)


Với một số kiến thức cơ bản về SQL ở trên bạn có thể làm gì nào ?
Bây giờ ta sẽ thử xét với phương diện của người lập trình web :
Tạo 1 database tên hacker với các trường như sau :
Trích:
create database hacker
use hacker


Create table admin(
[id] numeric not null,
username nvarchar(10) not null,
[password] nvarchar(10) not null,
address nvarchar(30),
phone numeric(10)
)

select * from admin



Insert vào một số data :
Trích:
insert into admin ([id],username,[password],address,phone)
values (1,'admin',12345,'Ha Noi',048324245)
go
insert into admin ([id],username,[password],address,phone)
values (2,'Neo',12345,'Ha Noi',048324245)

Rồi okie ta thấy table admin như sau :



Giờ muốn select những username trong table admin mà có address tại Hà Nội thì
câu query sẽ như sau : (tất cả những giá trị là character thì phải được bao trong dấu
quote ')
Trích:
select username from admin where address='Ha Noi'




Vậy nếu ta viết thế này thì sẽ có chuyện gì xảy ra nhỉ
Trích:
select username from admin where address=''or 1=1 '



Kết quả cũng show ra như trên.

Như trên ta thấy đáng lẽ ra address mang giá trị là Ha Noi nhưng nếu ta thay giá trị
đó bằng 'or 1=1 thì dấu quote đằng trước sẽ là 2 dấu '' có nghĩa giá trị trong đó
rỗng . Và sau nó là or 1=1 , như ta đã biết or là câu lệnh điều kiện và ở đây có
nghĩa là hoặc.
Mà giá trị đằng trước là rỗng nên SQL sẽ chạy tiếp theo gặp điều kiện or thì tất
nhiên sẽ thực thi lệnh này mà or 1=1 , 1=1 thì luôn đúng , còn dấu sẽ biến tất
cả những thứ đằng sau thành chú thích (trong SQL quy định sau dấu là câu chú
thích). Như vậy câu truy vấn hoàn toàn hợp lệ và ko có lỗi gì cả và nó sẽ show cho
ta toàn bộ username của admin , đến đây chắc bạn đã hiểu rồi chứ

Còn về câu lệnh UNION :

Như đã biết câu lệnh UNION dùng để gộp chuỗi lại với nhau và các giá trị trong 2
chuỗi đó phải là tương ứng .
Ví dụ :
Trích:
select username from admin
UNION
select [password] from admin


Câu lệnh trên sẽ show cho ta thấy các username và password trong table admin.
Khi tạo table bạn để ý thấy username ta gán thuộc tính là nvarchar , vậy nếu khi
truy vấn bằng UNION , dòng thứ 2 bạn thay [password] thành số bất kì (ví dụ 1)
thì sẽ báo lỗi sau :

Câu truy vấn :
Trích:
select username from admin
UNION
select 1 from admin

Error :
Trích:
Syntax error converting the nvarchar value 'admin' to a column of data type int.

Hô hô error báo sai cú pháp ,ko thể chuyển từ kiểu dữ liệu nvarchar (chuỗi) sang
int (số) được vì dòng thứ 2 ta thay thế giá trị là kiểu int > ko cùng loại dữ liệu
>error và show ra cái table admin . Còn khi áp dụng trên web thì đây là dấu hiệu
cho thấy table admin là có tồn tại .

Đây chỉ là một số ví dụ để các bạn có thể hiểu về SQL injection ,mong giúp được

×