Chào mừng bạn đến với Việt Cảnh.

» Tài khoản trên diễn đàn khác tài khoản tại Trang chủ, Tài khoản trên Trang chủ dành cho khách hàng. Click vào "Tạo tài khoản mới" để đăng ký.

Trả lời Viết bài mới Công cụ bài viết Kiểu hiển thị
Cũ 09-10-2011, 05:19 PM   #1
[L][E][O] [L][E][O] đang ẩn
Nghệ nhân bàn tay sắt
 
Avatar của [L][E][O]
 
Tham gia tháng: May 2011
Bài gửi: 958 

Cấp độ: 27 [♥ VietCanh ♥♥ VietCanh ♥♥ VietCanh ♥]
Sức mạnh: 66 / 662
Nội công: 319 / 6601
Kinh nghiệm: 49%

Cảm ơn: 37
Được cảm ơn 124 lần trong 104 bài viết
Mặc định Các câu lệnh căn bản trong ngôn ngữ truy vấn có cấu trúc sql phần 1

Ngôn ngữ truy vấn có cấu trúc - SQL (Structured Query Language) là ngôn ngữ được đặc biệt thiết kế để giao tiếp với cơ sở dữ liệu. Đa số các nhà lập trình đều phải làm việc với SQL Server thông qua các câu lệnh SQL. Vì thế hiểu được cú pháp SQL sẽ là một trong những thuận lợi lớn khi xây dựng ứng dụng kết hợp giữa Visual Basic và SQL Server.
SQL chuẩn - hay còn gọi là ANSI SQL - được viện chuẩn hóa quốc tế của Mỹ (American National Standards Institute- ANSI) quản lý. Ủy bản này bảo đảm ngôn ngữ SQL được chuẩn hóa và sẽ chịu trách nhiệm kiểm duyệt khi có sự thay đổi. Ngôn ngữ SQL được hầu hết các hệ quản trị cơ sở dữ liệu hỗ trợ. Tuy nhiên mỗi hãng phát triển mở rộng ngôn ngữ SQL để phù hợp với hệ quản trị cơ sở dữ liệu đặc biệt của họ. Phiên bản mở rộng ngôn ngữ SQL của SQL Server được gọi là Transact-SQL (T-SQL). Nếu người dùng tuân theo cú pháp SQL chuẩn thì ứng dụng hầu như tương thích với mọi hệ quản trị cơ sở dữ liệu.
Truy vấn dữ liệu
Truy vấn dữ liệu từ SQL Server là tác vụ cơ sở dữ liệu thường được sử dụng. Câu lệnh SELECT được dùng để phát sinh câu truy vấn đến SQL Server và dữ liệu trả về được chứa trong một bộ kết quả (Result Set). Câu lệnh SELECT được thành lập từ nhiều mệnh đề:
• Mệnh đề SELECT
• Mệnh đề FROM
• Mệnh đề WHERE
• Mệnh đề GROUP BY
• Mệnh đề HAVING
• Mệnh đề ORDER BY
Những mệnh đề này cho phép tạo một câu truy vấn nhận dữ liệu từ nhiều bảng, sắp xếp hoặc nhóm những dữ liệu nhận được hoặc tổng hợp các dữ liệu.
Mệnh đề SELECT
Đây là thành phần đầu tiên của một câu truy vấn và mệnh đề này quy định những thông tin sẽ nhận về từ cơ sở dữ liệu. Cú pháp vắn tắc của mệnh đề SELECT như sau:
Code:
SELECT [ ALL | DISTINCT ]
[ TOP n [PERCENT] [ WITH TIES] ]

Diễn giải select_list
::=
{* | {tên bảng | tên view | table_alias}.*
| { tên cột | biểu thức | IDENTITYCOL | ROWGUIDCOL }
[ [AS] tên bí danh của cột ]
| tên bí danh của cột = biểu thức
} [,...n]Câu lệnh SELECT có thể chứa nhiều mệnh đề kết hợp với nhau để tạo một câu truy vấn phức tạp. Sau đây là những tùy biến khác nhau về cách sử dụng câu lệnh SELECT để nhận dữ liệu từ bảng Orders của cơ sở dữ liệu Northwind:
Cú pháp căn bản để nhận về tất cả dòng và cột trong một bảng như sau:
SELECT * FROM Orders
Ký tự "*" có nghĩa là tất cả các cột trong bảng đều được chọn. Người dùng cũng có thể chỉ định các cột được trả về từ câu truy vấn
SELECT OrderID, CustomerID, ShippedDate FROM Orders
Mệnh đề SELECT có rất nhiều tùy chọn. Ví dụ, người dùng có thể dùng tên bí danh cho một cột. Tên bí danh này sẽ là tên của cột trong bộ kết quả trả về cho client
SELECT OrderID, OrderDate, ShipCity AS City
FROM Orders

Ngoài ra, có thể sử dụng các biểu thức của SQL Server để tạo một cột là kết quả tổng hợp từ một hoặc nhiều cột khác. Câu truy vấn sau kết hợp hai trường ShipCity và ShipRegion. Nếu một trong hai
cột này chứa giá trị nu LL thì kết quả tổng hợp sẽ có giá trị nu LL. Câu truy vấn này sử dụng hai hàm RTRIM và ISNULL để trả về giá trị phù hợp
[/code]
SELECT OrderID,
RTRIM(ShipCity) + ', ' + ISNULL(RTRIM(ShipRegion),' ') AS ShipArea FROM Orders
[/code]
Câu truy vấn sau sử dụng các kết quả tính toán của toán học để tổng hợp kết quả của một trường. Điểm chú ý trong câu này là phải sử dụng dấu "[]" để chứa các tên bảng có ký tự không hợp lệ (trường hợp này là ký tự khoảng trắng)
SELECT OrderID, ProductID, (UnitPrice * Quantity) AS LineItemTotal
FROM [Order Details]
Có thể dùng các hàm của SQL để trả về giá trị tổng hợp trong câu lệnh SELECT. Những hàm này là:
• AVG
• COUNT
• MAX
• MIN
• SUM

SELECT MAX(ShippedDate) as MostRecentShipment
FROM Orders
Từ khóa ALL chỉ định sẽ trả về tất cả các cột phù hợp với câu truy vấn và tùy chọn DISTINCT sẽ loại bỏ những mẩu tin trùng nhau trong bộ kết quả.
SELECT ALL OrderID, RequiredDate, ShippedDate
FROM Orders
SELECT DISTINCT OrderID, RequiredDate, ShippedDate
FROM Orders

Mệnh đề FROM
Mệnh đề FROM chỉ định các bảng hoặc view tham gia trong câu truy vấn
Cú pháp:
[ FROM {} [,...n] ]
::=
tên bảng [ [AS] tên bí danh ] [ WITH ( [,...n]) ]
| tên view[ [AS] tên bí danh của bảng ]
| rowset_function [ [AS] table_alias ]
| derived_table [AS] table_alias [ (column_alias [,...n] ) ]
|
Mệnh đề FROM đơn giản nhất chỉ đơn giản chỉ định tên bảng:
SELECT * FROM Orders
Mệnh đề này cho phép định nghĩa tên bí dang cho một bảng:
SELECT * FROM Orders O
Sau khi định nghĩa tên bí danh của một cột, người dùng có thể sử dụng tên bí danh này trong mệnh đề SELECT. Điều này sẽ làm câu truy vấn được gọn gàng hơn:
SELECT O.OrderID, O.CustomerID, O.OrderDate
FROM Orders O
Khi muốn nhận dữ liệu từ hai bảng, thì người dùng phải dùng lệnh inner join. Đoạn lệnh sau chọn tất cả cột trong bảng Orders và trong bảng Order Details nếu những mẩu tin này có cùng giá trị OrderID
SELECT * FROM Orders O
INNER JOIN [Order Details] OD ' Phải sử dụng dấu
' "[]" vì tên bảng này có khoảng trắng ở giữa
ON O.OrderID = OD.OrderID

Nếu chúng ta muốn kết hai bảng mà một trong hai bảng này có thể có giá trị không khớp với bảng còn lại nhưng chúng ta vẫn muốn thể hiện chúng, hãy sử dụng phép kết ngoài. Có ba loại kết ngoài:
Kết trái (left outer join)
Kết phải (right outer join)
Kết hoàn toàn (full outerjoin)
Phép kết trái trả về tất cả dòng trong bảng phía bên trái của phép kết và các dòng của bảng bên phải khớp với bảng bên trái. Vì thế, thứ tự khi viết câu lệnh SELECT rất quan trọng trong phép kết ngoại. Câu truy vấn sau trả về tất cả khách hàng (customer) và những đơn đặt hàng (order) phù hợp:
Code:
SELECT * FROM Customers C
LEFT OUTER JOIN Orders O
ON C.CustomerID = O.CustomerIDPhép kết trái trả về tất cả dòng trong bảng phía bên phải của phép kết và các dòng của bảng bên trái khớp với bảng bên phải. Câu truy vấn sau trả về tất cả đơn đặt hàng và những khách hàng (customer) phù hợp:
Code:
SELECT * FROM Customers C
RIGHT OUTER JOIN Orders O
ON C.CustomerID = O.CustomerIDNgười dùng cũng có thể sử dụng phép kết full outer join để thực hiện câu truy vấn trả về tất cả dòng trong hai bảng bất chấp dữ liệu có khớp hay không:
Code:
SELECT * FROM Customers C

FULL OUTER JOIN Orders O
ON C.CustomerID = O.CustomerIDCó thể kết hợp mệnh đề join với các hàm tổng hợp. Câu truy vấn dưới đây trả về tất cả khách hàng có trong cơ sở dữ liệu - bao gồm cả những người không có đơn đặt hành - và hiển thị số đơn đặt hành của từng khách hàng.
Code:
SELECT C.CustomerID, COUNT(O.OrderID) AS NumOfOrders
FROM Customers C LEFT OUTER JOIN Orders O
ON C.CustomerID = O.CustomerID
GROUP BY C.CustomerID

Xem các bài viết tương tự:



  Trả lời với trích dẫn
Cũ 09-10-2011, 05:19 PM   #2
[L][E][O] [L][E][O] đang ẩn
Nghệ nhân bàn tay sắt
 
Avatar của [L][E][O]
 
Tham gia tháng: May 2011
Bài gửi: 958 

Cấp độ: 27 [♥ VietCanh ♥♥ VietCanh ♥♥ VietCanh ♥]
Sức mạnh: 66 / 662
Nội công: 319 / 6601
Kinh nghiệm: 49%

Cảm ơn: 37
Được cảm ơn 124 lần trong 104 bài viết
Mặc định

Mệnh đề WHERE
Trong hầu hết trường hợp, người dùng đều muốn lấy về một tập hợp con các mẩu tin thay vì phải lấy toàn bộ mẩu tin trong bảng. Mệnh đề WHERE cho phép tìm kiếm theo tiêu chuẩn để lọc lấy những mẩu tin cần trả về.
WHERE
Câu lệnh dưới đây trả về tất cả mẩu tin trong bảng Orders của một khách hàng được chỉ định:
SELECT * FROM Orders
WHERE CustomerID = 'CACTU'

Mệnh đề WHERE tạo một bộ lọc dựa trên những điều kiện do người dùng cung cấp. Những toán tử sau đây được sử dụng trong mệnh đề WHERE.
Toán tử Diễn giải
Code:
= Toán tử bằng.
So sánh không bằng.
!= So sánh không bằng.
< Toán tử nhỏ hơn
> Toán tử lớn hơn
<= Toán tử nhỏ hơn hoặc bằng.
>= Nhỏ hơn hoặc bằng.
!> So sánh không lớn hơn.
!< So sánh không nhỏ hơn.
BETWEEN Giá trị nằm giữa một miền giá trị.
LIKE Khớp với một giá trị được chỉ định.
IS nu LL Giá trị là nu LL
IN Giá trị thuộc một danh sách được chỉ định.
NOT Toán tử so sánh phủ định.
AND Toán tử kết hợp các tiêu chuẩn tìm kiếm.
OR Miền tìm kiếm được được xác định bằng cách loại trừ.Để trả về tất cả đơn đặt hàng của các khách hàng ngoại trừ một người nào đó, người dùng có thể sử dụng toán tử hoặc !=
SELECT * FROM Orders
WHERE CustomerID 'CACTU'
Có thể sử dụng toán tử AND để kết hợp các tiêu chuẩn tìm kiếm và trả về những mẩu tin phù hợp với điều kiện:

SELECT * FROM Orders
WHERE OrderDate >= '07/01/2002' AND OrderDate <= '08/31/2002'
Câu truy vấn trên có thể được viết lại bằng cách sử dụng từ khóa BETWEEN. Toán tử này tìm những mẩu tin rơi vào khoảng giữa của hai giá trị được chỉ định. Nó so sánh cả những giá trị bắt đầu và kết thúc giống như toán tử >= và <= .
Code:
SELECT * FROM Orders
WHERE OrderDate BETWEEN '07/01/96' AND '08/31/96'Toán tử IN được sử dụng để trả về những mẩu tin có giá trị của trường so sánh thuộc một danh sách được chỉ định:
SELECT * FROM Orders
WHERE EmployeeID IN (1,2,3)
Mệnh đề GROUP BY
Mệnh đề GROUP BY tổng hợp dữ liệu từ bộ kết quả. Mệnh đề này cho phép nhóm lại dữ liệu, sử dụng các hàm tính toán tổng hợp, đếm số dòng trả về hoặc tính giá trị trung bình.
GROUP BY [ALL] [,...n]
Câu lệnh dưới đây trả về cột Employee ID và số đơn đặt hàng cho mỗi khách hàng:
SELECT EmployeeID, Count(*) AS Orders FROM Orders
GROUP BY EmployeeID
Phải có ít nhất một cột trong mệnh đề SELECT có mặt trong mệnh đề GROUP BY hoặc phải có một hàm tổng hợp. Câu truy vấn sau đây trả về những mẩu tin có giá tiền lớn nhất và nhỏ nhất trong mỗi đơn đặt hàng của bảng Order Details:
Code:
SELECT OrderID, MAX(UnitPrice * Quantity) AS HiOrderAmt,MIN(UnitPrice * Quantity) AS LoOrderAmt
FROM [Order Details]
GROUP BY OrderIDMệnh đề GROUP BY hỗ trợ các hàm tổng hợp của SQL Server được liệt kê trong bảng sau:
Code:
Hàm Diễn giải
AVG Tính giá trị trung bình.
COUNT Giá trị tổng cộng của một cột.
MAX Giá trị lớn nhất.

MIN Giá trị nhỏ nhất.
SUM Giá trị tổng (hàm tính tổng)
STDEV Độ lệch chuẩn của một giá trị.
VAR Sự khác biệt của tất cả giá trị (Variance of all values)
VARP Population variance of all valuesCâu truy vấn dưới đây nhóm theo cột CategoryID của bảng Products và trả về số lượng products tìm thấy trong mỗi category
SELECT CategoryID, COUNT(*) as NumberOfProducts
FROM Products
GROUP BY CategoryID

Mệnh đề HAVING
Mệnh đề HAVING được dùng với câu truy vấn chứa mệnh đề GROUP BY và nó cho phép tạo bộ lọc (tương tự mệnh đề WHERE). Câu truy vấn sau đây đã được thay đổi để trả về từng category và đếm số product có trong nó nhưng chỉ trình bày những category có nhiều hơn 10 product.
SELECT CategoryID, COUNT(*) as NumberOfProducts
FROM Products
GROUP BY Categoryid
HAVING COUNT(*) > 10

Mệnh đề ORDER BY
Khi thực hiện một câu truy vấn, SQL Server mặc định trả về những mẩu tin theo thứ tự được lưu trong bảng. Mệnh đề ORDER BY chỉ định một hoặc nhiều cột tham gia làm tiêu chuẩn sắp xếp cho các mẩu tin. Cú pháp của mệnh đề này như sau:
[ORDER BY {cột tham gia sắp xếp [ ASC | DESC ] } [,...n] ]
" Nếu sử dụng từ khóa tùy chọn ASC thì bộ kết quả được sắp theo thứ tự tăng dần.
Nếu sử dụng từ khóa tùy chọn DESC thì bộ kết quả được sắp theo thứ tự giảm dần.
Sau đây là câu truy vấn chuẩn sử dụng mệnh đề ORDER BY:
SELECT OrderID, EmployeeID, OrderDate FROM Orders
ORDER BY EmployeeID
Thông thường, cột tham gia trong mệnh đề ORDER BY xuất hiện trong mệnh đề SELECT. Tuy nhiên, điều này không bắt buộc, người dùng có thể sắp xếp theo một cột không tồn tại trong mệnh đề SELECT.
Mệnh đề ORDER BY mặc định sắp xếp theo thứ tự từ A đến Z. Người dùng có thể sắp xếp theo thứ tự ngược lại nếu sử dụng từ khóa DESC. Trong một mệnh đề ORDER BY chỉ có thể sử dụng một trong hai từ khóa này.
SELECT * FROM Orders
ORDER BY EmployeeID DESC
Chú ý: Mệnh đề ORDER BY phải được đặt cuối cùng trong câu truy vấn
Nguồn sưu tầm


  Trả lời với trích dẫn
Trả lời
Công cụ bài viết
Kiểu hiển thị

Quyền viết bài
Bạn không thể gửi chủ đề mới
Bạn không thể gửi trả lời
Bạn không thể gửi file đính kèm
Bạn không thể sửa bài viết của mình

BB code đang Mở
Mặt cười đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến

sửa laptop uy tín hà nội