Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

SQL căn bản

4 posters

Go down

SQL căn bản Empty SQL căn bản

Bài gửi by nguyenduc 1/1/2010, 18:13

SQL là gì? SQL là một ngôn ngũ máy tính
chuẩn để truy nhập và thao tác xử lý hầu hết mọi hệ CSDL.


SQL
là viết tắt của chữ Structured
Query Language


  • SQL cho phép bạn truy nhập xử lý cơ sở dữ liệu.
  • SQL là một ngôn ngữ máy tính theo chuẩn ANSI
  • SQL có thể thực thi những truy vấn trên CSDL
  • SQL có thể dùng trích rút dữ liệu từ các bảng
  • SQL có thể chèn những mẫu tin hay dòng dữ liệu mới vào trong một
    bảng CSDL
  • SQL có thể xóa những dòng mẫu tin từ một bảng CSDL

Một bảng dữ liệu bao gồm

  • Trường dữ liệu (cột trong Excel)
  • Một một hàng dữ liệu bao gồm nhiều cột chúng ta gọi là một record
    (hàng trong Excel

Tập họp tất cả các hàng dữ liệu chúng ta gọi là bảng dữ
liệu.

Vậy trong Excel khi ta thực hiện việc lọc dữ liệu bằng
Auto Filter/Advanced Filter, điều này cũng giống như
việc chúng ta lọc dữ liệu trong bảng dữ liệu của MS Access.

Đối
với một dữ liệu lớn trong Excel (Ví dụ trên 10,000 dòng)
thì việc lọc dữ liệu đã gặp khó khăn về tốc độ. Đó cũng là một
trong lý do chúng ta xây dựng ứng dụng kết hợp
. Các bạn có thể
tham khảo tại đây.

Lệnh SELECT
SELECT [DISTINCT] cột dữ liệu
FROM tên bảng dữ liệu
WHERE điều kiện (*)
GROUP BY cột dữ liệu
ORDER BY cột dữ liệu [ASC] hoặc [DESC]
(*)Điều kiện chúng ta có thể dùng các toán tử sau:
= Bằng nhau
<> Không bằng nhau
> Lớn hơn
< Nhỏ hơn
>= Lớn hơn hoặc bằng
<= Nhỏ hơn hoặc bằng
BETWEEN Giữa một phạm vi giá trị
LIKE Tìm kiếm so khớp theo mẫu
AND/OR
Chú ý: Trong một số phiên bản SQL, toán tử
<> có thể được viết như sau: !=

Ví dụ: có một bảng dữ
liệu tên tbSanLuongSX gồm các trường:
Mã sản phẩm
(MSP), Mô tả (MoTa), Số lượng (SL), Nhập xuât (NX), Ngày sản xuất
(NgaySX), Ca sản xuất (CaSX)

Bây giờ muốn lọc sản
phẩm từ ngày A đến ngày B thì chúng ta làm sao?


Chúng ta
viết câu lệnh SQL sau:
SELECT MSP, MoTa, SL, NgaySX
FROM tbSanLuongSX
WHERE NgaySX BETWEEN #A# AND #B#
ORDER BY NgaySX;
Giải thích:
chọn Mã sản phẩm, Mô tả, Số lượng, Ngày sản xuất từ bảng tbSanLuongSX,
nếu Ngày sản xuất trong khoảng A và B, sắp xếp theo NgaySX.

Bây
giờ muốn tính tổng sản phẩm sản xuất từ ngày A đến ngày B thì chúng
ta làm sao?

Chúng ta viết câu lệnh SQL sau:SELECT MSP, MoTa, SUM(SL) AS [TONG]
FROM tbSanLuongSX
WHERE NgaySX BETWEEN #A# AND #B#
GROUP BY MSP, MoTa
ORDER BY NgaySX;
Chú ý: SUM(SL)
AS [TONG] có nghĩa trường SUM(SL) có tên bí danh (alias) là TONG.
Chúng
ta có thể sử dụng các hàm khác như Avg, Min, Max, Count

Giải thích: chọn Mã sản phẩm,
Mô tả, Tổng(Số lượng) từ bảng tbSanLuongSX, nếu Ngày sản xuất trong
khoảng A và B, sắp xếp theo NgaySX.

Giả sử các bạn muốn
chọn ra chỉ các mã sản phẩm không trùng nhau, các bạn phải dùng câu lệnh
như thế nào?

SELECT DISTINCT MSP, MoTa
FROM tbSanLuongSX;
SELECT DISTINCT: có nghĩa là chỉ chọn unique
record
(không trùng) mà thôi.

Giả sử có một bảng
khác là tbMaSanPham gồm các trường: Mã sản phẩm (MSP), Mô tả sản phẩm
(MoTa), Đơn vị tính (DVT)

Bây giờ muốn tính tổng các
sản phẩm sản xuất chỉ có trong bảng tbMaSanPham thì sao?

Chúng
ta viết câu lệnh SQL sau:SELECT MSP, MoTa, SUM(SL) AS [TONG]
FROM tbSanLuongSX
WHERE MSP IN (SELECT DISTINCT MSP FROM tbMaSanPham)
GROUP BY MSP, MoTa
ORDER BY NgaySX;
Các bạn thấy câu lệnh SELECT DISTINCT MSP FROM
tbMaSanPham

Trả về các giá trị unique của mã sản phẩm. Như
vậy chúng ta có thể dùng các câu lệnh SELECT lồng nhau như trên.

Chèn dòng dữ liệu
Chúng ta dùng
câu lệnh SQL sau:
INSERT INTO tên bảng dữ liệu(cột dữ liệu 1, cột dữ liệu 2,...)
VALUES (giá trị 1, giá trị 2,...)
Giả sử muốn chèn một dòng vào bảng tbMaSanPham thì chúng ta
dùng câu lệnh SQL sau:
INSERT INTO tbMaSanPham(MSP, MoTa, DVT)
VALUES('2200001245','Hàng đặc biệt', 'Cái');
Câp nhật dữ liệu
Chúng
ta dùng câu lệnh SQL sau:
UPDATE tên bảng dữ liệu
SET tên cột dữ liệu 1= giá trị mới
WHERE tên cột dữ liệu = giá trị điều kiện lọc
Bây giờ muốn cập nhật mã 2200001245, với
đơn vị tính là hộp
Chúng ta dùng câu lệnh SQL sau:
UPDATE tbMaSanPham
SET DVT = 'hộp'
WHERE MSP = '2200001245'
Xóa dữ liệu
Chúng
ta dùng câu lệnh SQL sau:
DELETE tên bảng dữ liệu
WHERE tên cột dữ liệu = giá trị điều kiện lọc
Bây giờ muốn xóa mã 2200001245
Chúng ta
dùng câu lệnh SQL sau:
DELETE tbMaSanPham
WHERE MSP = '2200001245'


Các hàm SQL
SQL
cung cấp rất nhiều hàm nội tại cho phép đếm, tính tổng, thống kê


pháp hàm:

SELECT hàm(cột)
FROM tên bảng dữ liệu
Các loại hàm:
Các
loại hàm trong SQL có thể phân loại theo nhóm như sau:
_Hàm
tổng (Aggregate function)
: đây là các hàm tính tổng trên tập
hợp và trả về một giá trị đơn duy nhất. Việc tính tổng có thể là phép
đếm COUNT, phép cộng SUM, trung bình AVG
Chú ý: Nếu sử dụng giữa
nhiều biểu thức khác trong danh sách của lệnh SELECT,
lệnh SELECT phải có mệnh đề nhóm GROUP BY
kèm theo (Giống ví dụ trên tôi đã đề cập).
_Hàm vô hướng
(scalar functions)
: hàm vô hướng thường dùng tính toán trên một
giá trị đơn. Ví dụ NOW(), LEN()

Mỗi hệ quản trị
CSDL đề có những hàm cài đặt cụ thể và có thể khác nhau.

Danh
sách các hàm tổng của SQL

Hàm Mô tả
AVG(cột) Trả về trị trung bình của các giá trị cột
COUNT(cột) Đếm số dòng (không tính giá trị NULL) của cột
COUNT(*) Trả về số dòng được chọn từ SELECT
MAX(cột) Trả về giá trị lớn nhất
MIN(cột) Trả về giá trị nhỏ nhất
SUM(cột) Trả về tổng các giá trị cột
Danh sách các hàm vô hướng trong MS Access và SQL Server
Hàm Mô tả
UCASE(c) Chuyển chữ thường thành chữ hoa
LCASE(c) Chuyển chuổi thành chữ thường
MID(c,bắt đầu, kết thúc) Copy chuổi con trong một chuổi
LEN(c) Trả về chiều dài chuổi
INSTR(c) Xác định vị trí ký tự trong chuổi
LEFT(c,số ký tự) Cắt chuổi từ bên trái
RIGHT(c, số ký tự) Cắt chuổi từ bên phải
ROUND(c, decimals) Hàm làm tròn
MOD(x,y) Hàm chia lấy phần dư
NOW(x,y) Hàm trả về ngày tháng hiện hành
FORMAT(c, format) Hàm định dạng
DATEDIFF(d, ngày1, ngày2) Hàm so sánh ngày tháng và thời gian
Như trên đã giới thiệu về GROUP BY
Giờ xin giới thiệu về HAVING.
Do mệnh đề WHERE
không thể sử dụng trong các hàm tổng, nên HAVING được
thêm vào cấu trúc lệnh SQL. Nếu không có HAVING chúng
ta không thể nào kiểm tra các kết quả trong từng nhóm.

Cú pháp HAVING
như sau:
SELECT cột dữ liệu 1, SUM(cột dữ liệu 2)
FROM tên bảng dữ liệu
GROUP BY cột dữ liệu
HAVING SUM(cột dữ liệu 2) Giá trị điều kiện

Giả sử muốn kiểm tra xem sản lượng sản xuất của một nhóm sản
phẩm nào đó lớn hơn 2000 của bảng sau:
tbSanLuongSanXuat:
Mã sản phẩm (MSP), Mô tả (MoTa), Số lượng (SL), Ngày sản xuất (NSX),
Nhóm sản phẩm

Câu lệnh SQL sẽ như sau:
SELECT MSP, MoTa, SUM(SL)
FROM tbSanLuongSanXuat
GROUP BY MSP, MoTa
HAVING SUM(SL)>2000

nguyenduc
Cống hiến
Cống hiến

Tổng số bài gửi : 312
Join date : 17/09/2009
Age : 44
Đến từ : Bến tre - Hồ chí minh

Về Đầu Trang Go down

SQL căn bản Empty Re: SQL căn bản

Bài gửi by nanaly 1/1/2010, 23:50

Cao thủ..!!
nanaly
nanaly
Cống hiến
Cống hiến

Tổng số bài gửi : 376
Join date : 18/09/2009
Age : 40
Đến từ : QNgai

Về Đầu Trang Go down

SQL căn bản Empty Re: SQL căn bản

Bài gửi by dang_trung_82 2/1/2010, 21:25

Anh Đức đúng là cao thủ võ lâm...Có dạy kèm không?Em xin 1 suất nha...(2 môn CSDL và tiếng anh)...hihi...

dang_trung_82
Khởi đầu
Khởi đầu

Tổng số bài gửi : 33
Join date : 19/09/2009

Về Đầu Trang Go down

SQL căn bản Empty Re: SQL căn bản

Bài gửi by thuyruoi013 8/1/2015, 23:11

hihi. Đang cần cái này để mai đi test đây, chữ thầy trả thầy, chán mình quá Sad

thuyruoi013

Tổng số bài gửi : 1
Join date : 08/01/2015

Về Đầu Trang Go down

SQL căn bản Empty Re: SQL căn bản

Bài gửi by Sponsored content


Sponsored content


Về Đầu Trang Go down

Về Đầu Trang


 
Permissions in this forum:
Bạn không có quyền trả lời bài viết