Học cơ sở dữ liệu SQL

[Học SQL cơ bản và nâng cao] SQL (là viết tắt của Structured Query Language – Ngôn ngữ truy vấn mang tính cấu trúc) được sử dụng để thực hiện các hoạt động trên các bản ghi được lưu trữ trong Database (Cơ sở dữ liệu), chẳng hạn như cập nhật các bản ghi, xóa các bản ghi, tạo và sửa đổi các bảng, …

SQL chỉ là một ngôn ngữ truy vấn, chứ không phải là một Cơ sở dữ liệu. Để thực hiện các truy vấn SQL, bạn cần cài đặt bất cứ Cơ sở dữ liệu nào, như Oracle, MySQL, MongoDB, PostGres SQL, SQL Server, DB2, …

Dưới đây là danh sách các bài hướng dẫn học SQL cơ bản và nâng cao:

MỤC LỤC

Cơ bản về SQL

SQL Database

SQL Table

Nhóm lệnh thao tác cơ bản

Mệnh đề trong SQL

Hoạt động SQL nâng cao

Ràng buộc trong SQL

SQL Join

Hàm trong SQL

Tài liệu SQL tham khảo

Loạt bài hướng dẫn của chúng tôi dựa một phần trên nguồn tài liệu của: Tutorialspoint.com

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Học cơ sở dữ liệu SQL

Học cơ sở dữ liệu SQL

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập Java. Khóa học có giá chỉ 300K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.

Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp a Tuyền, cựu sinh viên Bách Khoa K53, fb: https://www.facebook.com/tuyen.vietjack

Follow facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.

Danh sách các bài viết trong chuyên mục SQL Server căn bản, đây là những bài viết mới nhất được cập nhật trong mục SQL Server căn bản.

SQL Server là một hệ thống quản trị cơ sở dữ liệu quan hệ (RDBMS) được tập đoàn Microsoft phát triển, đây là một hệ thống CSDL rất có tiếng tăm và được kế thừa từ Oracle. 

SQL server được xây dựng cho nhiều đối tượng khác nhau, từ doanh nghiệp lớn cho tới doanh nghiệp nhỏ đều có thể sử dụng để lưu trữ và quản lý dữ liệu, nó có thể được chạy trên cùng một máy tính, một hệ thống mạng LAN hay thậm chí là điện toán đám mây, đương nhiên để làm được điều này ta phải sử dụng thêm các công nghệ khác.

Mục tiêu của loạt bài viết là gi?

Các bài viết hướng tới cách tiếp cận học SQL Server ở mức đơn giản và cơ bản nhất, bạn sẽ được học các câu lệnh thông dụng của SQL và được thể hiện trong SQL Server như: Tạo bảng, xóa bảng, tạo database, xóa database, ... hay các lệnh truy vấn và thao tác dữ liệu như thêm/xóa/sửa.

Mỗi bài học sẽ được giải thích bằng các ví dụ rất đơn giản giúp bạn đọc dễ dàng học hơn, đây cũng là cách học nhanh nhất để hiểu về SQL Server.

Đối tượng là ai?

Đối tượng học phần này là những bạn sinh viên, học sinh đang học bộ môn cơ sở dữ liệu ở các trường cao đẳng và đại học, hoặc những bạn đang đi làm muốn tìm lại cách sử dụng các câu truy vấn thì cũng có thể xem qua các bài viết ở đây.

Trong loạt bài này mình sẽ không giải thích các khái niệm căn bản như khóa ngoại, khóa chính, các mối quan hệ của bảng, ràng buộc toàn vẹn, ... mà các bạn sẽ phải tự học, hoặc các bạn cũng đã học ở trường rồi. 

SQL(Structured Query Language) là một ngôn ngữ tiêu chuẩn để lưu trữ, thao tác và truy xuất dữ liệu trong cơ sở dữ liệu. Series này sẽ dạy bạn cách sử dụng SQL trong các hệ quản trị cơ sở sau đây: MySQL, SQL Server, MS Access, Oracle, Sybase, Informix, Postgres, và các hệ thống cơ sở dữ liệu khác.

Trong series bao gồm:

  • Sách, video và tài liệu học SQL
  • Lộ trình học SQL từ cơ bản tới nâng cao
  • Bài tập với đầy đủ bài giải chi tiết
👉 Giới thiệu mọi thức về Cafedev tại đây

Các bài viết liên quan

Ở đây tôi sử dụng SQLServer Management Studio, một công cụ sẵn có sau khi bạn cài đặt SQLServer. Bạn có thể xem qua hướng dẫn cài đặt SQLServer tại:

  • Cài đặt SQL Server Express 2014 trên Windows

  • Cài đặt SQL Server Express 2012 trên Windows

  • Cài đặt SQL Server Express 2008 trên Windows

Học cơ sở dữ liệu SQL

3- Cơ sở dữ liệu học SQL (LearningSQL)

Tài liệu này sử dụng cơ sở dữ liệu LearningSQL (phiên bản SQLServer). Bạn cần tạo cơ sở dữ liệu đó để tiện cho việc học (Bạn chỉ mất không quá 5 phút để làm việc này).

Script tạo cơ sở dữ liệu và cấu trúc của cơ sở dữ liệu này bạn có thể xem tại:
 

  • Cơ sở dữ liệu SQL Server mẫu để học SQL

4- Các câu lệnh truy vấn (Query)

4.1- SQL Select

Câu lệnh Select là một câu lệnh cơ bản nhất trong SQL, mục đích là truy vấn dữ liệu trong các bảng (Table).

  • PRODUCT_TYPE: Bảng dữ liệu các kiểu sản phẩm (Service type of bank).

Học cơ sở dữ liệu SQL

Đây là câu lệnh truy vấn dữ liệu trên bảng PRODUCT_TYPE


-- Truy vấn dữ liệu trên bảng Product_Type
-- Truy vấn toàn bộ các cột.

Select * From Product_Type;

-- Câu lệnh truy vấn trên và câu lệnh dưới đây là tương đương nhau.
-- Pty là alias (tên bí danh đặt cho bảng Product_Type).

Select Pty.* From Product_Type Pty;

-- Truy vấn một vài cột
-- Có thể liệt kê ra.

Select Pty.Product_Type_Cd
     ,Pty.Name
From   Product_Type Pty;

Kết quả truy vấn:

Học cơ sở dữ liệu SQL

Truy vấn dữ liệu trên bảng EMPLOYEE:


-- Truy vấn 4 cột trên bảng Employee (Bảng nhân viên).
-- Sử dụng Emp là Alias (Tên bí danh) cho bảng Employee.

Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp;

Kết quả truy vấn:

Học cơ sở dữ liệu SQL

Đặt Alias cho cột:


-- Hàm Convert(Varchar, <intvalue>) chuyển một số thành chữ (Varchar) (Hàm của SQLServer)
-- Sử dụng toán tử + để nối hai chuỗi (Có thể không được hỗ trợ bởi DB khác)
-- Chúng ta có một cột mới sử dụng 'as' để định nghĩa tên cột cho cột mới này.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' +  Convert(Varchar,Emp.Emp_Id) As Emp_No2  -- Cột mới
From   Employee Emp;

-- Có thể không cần sử dụng 'as' trong định nghĩa Alias cho cột.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' + Convert(varchar,Emp.Emp_Id ) Emp_No2  -- Cột mới
From   Employee Emp;

Kết quả truy vấn:

Học cơ sở dữ liệu SQL

4.2- SQL Distinct

Câu lệnh distinct được sử dụng cùng với Select, dùng để select các dữ liệu, bỏ qua các dữ liệu trùng nhau. Cú pháp là:


Select distinct <column1>, <column2>  ....

Xem ví dụ:


-- Truy vấn sản phẩm (Sản phẩm dịch vụ của Ngân hàng)
-- Cột mã sản phẩm, tên và kiểu sản phẩm.
Select Pro.Product_Cd
    ,Pro.Name
    ,Pro.Product_Type_Cd
From   Product Pro;

-- Truy vấn các kiểu sản phẩm  (Product_Type_Cd) trong bảng Product.
-- Dữ liệu là nhiều, nhưng trùng nhau.
Select Pro.Product_Type_Cd from Product Pro;

-- Cần sử dụng Distinct để loại bỏ việc trùng lặp.
Select Distinct Pro.Product_Type_Cd from Product Pro;

Kết quả chạy các câu lệnh trên:

Học cơ sở dữ liệu SQL

4.3- SQL Where

Where là câu lệnh nhằm giới hạn phạm vi tìm kiếm. Chẳng hạn bạn muốn tìm kiếm những sản phẩm dịch vụ có kiểu "Cho vay cá nhân và kinh doanh".

  • Product_Type_Cd = 'LOAN'.
Bạn cần truy vấn trong bảng PRODUCT, tại các vị trí có Product_Type_Cd= 'LOAN'.


-- Truy vấn bảng Product tìm các sản phẩm dịch vụ có kiểu:
-- "Cho vay cá nhân và kinh doanh".
-- Ứng với cột Product_Type_Cd = 'LOAN'.
Select * From Product Pro Where Pro.Product_Type_Cd = 'LOAN';

Kết quả truy vấn:

Học cơ sở dữ liệu SQL

Một ví dụ khác sử dụng where và nhiều điều kiện kèm theo.

4.4- SQL And Or (Và, hoặc)

And và Or là 2 lệnh điều kiện sử dụng trong where:

Chẳng hạn bạn muốn tìm danh sách các nhân viên có tên bắt đầu bởi chữ 'S' và thuộc phòng điều hành (Operations).


-- Câu lệnh tìm kiếm các Nhân viên có tên bắt đầu bởi chữ S.
Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp
Where  Emp.First_Name Like 'S%';

-- Câu lệnh tìm kiếm các nhân viên có tên bắt đầu bởi chữ S
-- và thuộc phòng điều hành (Operations)  Dept_Id  = 1.

Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp
Where  Emp.First_Name Like 'S%'
And    Emp.Dept_Id = 1;

Kết quả chạy các câu truy vấn:

Học cơ sở dữ liệu SQL

Ví dụ:


-- Tìm kiếm các nhân viên có tên bắt đầu bởi chữ S hoặc P.
-- và trong phòng điều hành (Operations). (Dept_Id = 1)
Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp
Where  (Emp.First_Name Like 'S%' Or Emp.First_Name Like 'P%')
And    Emp.Dept_Id = 1;

Kết quả chạy câu lệnh:

Học cơ sở dữ liệu SQL

4.5- SQL IN (Trong phạm vi..)

Câu lệnh in trong where sử dụng trong tình huống tìm kiếm giá trị thuộc một tập hợp nhất định. 


-- Câu lệnh này tìm kiếm các nhân viên có tên
-- hoặc Susan hoặc Paula hoặc Helen.
Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp
Where  Emp.First_Name In ('Susan'
                        ,'Paula'
                        ,'Helen');

Kết quả chạy câu lệnh:

Học cơ sở dữ liệu SQL

4.6- SQL Between (Nằm giữa ...)


-- Tìm các nhân viên có Emp_Id trong khoảng từ 5 đến 10.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Start_Date
From   Employee Emp
Where  (Emp.Emp_Id Between 5 And 10);

-- Câu lệnh trên tương đương với:
Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Start_Date
From   Employee Emp
Where  Emp.Emp_Id >= 5
And    Emp.Emp_Id <= 10;

Kết quả câu lệnh:

Học cơ sở dữ liệu SQL

Câu lệnh BETWEEN cũng được sử dụng trong việc giới hạn thời gian. Chẳng hạn bạn tìm kiếm các nhân viên bắt đầu làm trong khoảng thời gian:

  • 03-05-2002 ==> 09-08-2002  (dd-MM-yyyy)


-- Truy vấn 4 cột trên bảng Employee (Bảng nhân viên).
-- Sử dụng Emp là Alias (Tên bí danh) cho bảng Employee.

Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp;
0

Kết quả chạy câu lệnh:

Học cơ sở dữ liệu SQL

4.7- SQL Wildcard

Có 2 ký tự đặc biệt trong SQL:

  1. Ký tự %
  2. Ký tự _
Ý nghĩa:
  • % mô tả 0, 1 hoặc nhiều ký tự bất kỳ.
  • _ mô tả chính xác một ký tự.
Hai ký tự này thường được sử dụng trong điều kiện LIKE.


-- Truy vấn 4 cột trên bảng Employee (Bảng nhân viên).
-- Sử dụng Emp là Alias (Tên bí danh) cho bảng Employee.

Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp;
1

Kết quả chạy ví dụ:

Học cơ sở dữ liệu SQL

4.8- SQL Like (Giống với ...)

Câu lệnh này bạn đã quen thuộc qua các ví dụ ở trên.

4.9- SQL Order By (Sắp xếp bởi)

Việc query dữ liệu cho một tập kết quả, mà có thể nó sắp xếp không như ý muốn, sử dụng Order by để sắp xếp kết quả trả về.


-- Truy vấn 4 cột trên bảng Employee (Bảng nhân viên).
-- Sử dụng Emp là Alias (Tên bí danh) cho bảng Employee.

Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp;
2

Ví dụ:


-- Truy vấn 4 cột trên bảng Employee (Bảng nhân viên).
-- Sử dụng Emp là Alias (Tên bí danh) cho bảng Employee.

Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp;
3

Kết quả chạy ví dụ:

Học cơ sở dữ liệu SQL

Order By bao giờ cũng đứng sau where.


-- Truy vấn 4 cột trên bảng Employee (Bảng nhân viên).
-- Sử dụng Emp là Alias (Tên bí danh) cho bảng Employee.

Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp;
4

Kết quả chạy câu lệnh:

Học cơ sở dữ liệu SQL

Hoặc:


-- Truy vấn 4 cột trên bảng Employee (Bảng nhân viên).
-- Sử dụng Emp là Alias (Tên bí danh) cho bảng Employee.

Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp;
5

4.10- SQL Group By (Nhóm bởi ...)

Trước hết chúng ta cần hiểu các hàm tổng hợp (Aggregate Functions) là gì:

  • Sum: Hàm tính tổng
  • Avg: Hàm lấy trung bình
  • Count: Hàm tính số lần
  • Min: Hàm tìm giá trị nhỏ nhất
  • Max: Hàm tìm giá trị lớn nhất
Đó là một số hàm tổng hợp (Aggregate) thông dụng. Chúng có thể tham gia vào câu lệnh nhóm (Group by).


-- Truy vấn 4 cột trên bảng Employee (Bảng nhân viên).
-- Sử dụng Emp là Alias (Tên bí danh) cho bảng Employee.

Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp;
6

Học cơ sở dữ liệu SQL

Câu hỏi đặt ra bạn muốn xem tổng số tiền có trong tài khoản, ứng với mỗi loại dịch vụ (Product_Cd) khác nhau. Điều đó có nghĩa là bạn cần nhóm trên các Product_Cd.


-- Truy vấn 4 cột trên bảng Employee (Bảng nhân viên).
-- Sử dụng Emp là Alias (Tên bí danh) cho bảng Employee.

Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp;
7

Kết quả:

Học cơ sở dữ liệu SQL

Như vậy bạn có một cái nhìn đánh giá:

  • Có 4 tài khoản tham gia dịch vụ "Tiền gửi tiết kiệm" (SAV) với tổng số tiền là 1855.76 và trung bình mỗi tài khoản có 463.94.
  • ...

4.11- SQL Having

Mệnh đề HAVING cho phép bạn chỉ định các điều kiện lọc kết quả nhóm nào sẽ xuất hiện trong kết quả cuối cùng.

Mệnh đề WHERE đặt các điều kiện vào các cột đã chọn, trong khi mệnh đề HAVING đưa ra các điều kiện đối với các nhóm được tạo bởi mệnh đề GROUP BY.

Giả sử bạn muốn nhóm các loại hình dịch vụ (Product_Cd) trên bảng Account, và chỉ hiển thị ra các loại hình nào có số người tham gia > 3.


-- Truy vấn 4 cột trên bảng Employee (Bảng nhân viên).
-- Sử dụng Emp là Alias (Tên bí danh) cho bảng Employee.

Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp;
8

Kết quả chạy ví dụ:

Học cơ sở dữ liệu SQL

Phân biệt Where & Having

Bạn cần phân biệt Where và Having trong cùng một câu lệnh.

  • Where là câu lệnh lọc bớt dữ liệu trước khi nhóm (Group)
  • Having là câu lệnh lọc bớt dữ liệu sau khi đã nhóm (Group)

Trường hợp bạn muốn có các thông tin tổng hợp của một chi nhánh ngân hàng (Bảng BRANCH). Bạn có thể sử dụng where để lọc bớt dữ liệu trước khi group.

Học cơ sở dữ liệu SQL


-- Truy vấn 4 cột trên bảng Employee (Bảng nhân viên).
-- Sử dụng Emp là Alias (Tên bí danh) cho bảng Employee.

Select Emp.Emp_Id
     ,Emp.First_Name
     ,Emp.Last_Name
     ,Emp.Dept_Id
From   Employee Emp;
9

Kết quả chạy ví dụ:

Học cơ sở dữ liệu SQL

5- Các câu lệnh trèn dữ liệu (Insert)

5.1- Câu lệnh Insert Into

Cú pháp:


-- Hàm Convert(Varchar, <intvalue>) chuyển một số thành chữ (Varchar) (Hàm của SQLServer)
-- Sử dụng toán tử + để nối hai chuỗi (Có thể không được hỗ trợ bởi DB khác)
-- Chúng ta có một cột mới sử dụng 'as' để định nghĩa tên cột cho cột mới này.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' +  Convert(Varchar,Emp.Emp_Id) As Emp_No2  -- Cột mới
From   Employee Emp;

-- Có thể không cần sử dụng 'as' trong định nghĩa Alias cho cột.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' + Convert(varchar,Emp.Emp_Id ) Emp_No2  -- Cột mới
From   Employee Emp;
0

Ví dụ bạn trèn thêm một giao dịch khách hàng vào bảng ACC_TRANSACTION:


-- Hàm Convert(Varchar, <intvalue>) chuyển một số thành chữ (Varchar) (Hàm của SQLServer)
-- Sử dụng toán tử + để nối hai chuỗi (Có thể không được hỗ trợ bởi DB khác)
-- Chúng ta có một cột mới sử dụng 'as' để định nghĩa tên cột cho cột mới này.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' +  Convert(Varchar,Emp.Emp_Id) As Emp_No2  -- Cột mới
From   Employee Emp;

-- Có thể không cần sử dụng 'as' trong định nghĩa Alias cho cột.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' + Convert(varchar,Emp.Emp_Id ) Emp_No2  -- Cột mới
From   Employee Emp;
1

5.2- Câu lệnh Insert Into Select

Bạn có thể sử dụng câu Select để cung cấp dữ liệu trèn vào bảng. Thông qua câu lệnh Insert Into ... Select.


-- Hàm Convert(Varchar, <intvalue>) chuyển một số thành chữ (Varchar) (Hàm của SQLServer)
-- Sử dụng toán tử + để nối hai chuỗi (Có thể không được hỗ trợ bởi DB khác)
-- Chúng ta có một cột mới sử dụng 'as' để định nghĩa tên cột cho cột mới này.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' +  Convert(Varchar,Emp.Emp_Id) As Emp_No2  -- Cột mới
From   Employee Emp;

-- Có thể không cần sử dụng 'as' trong định nghĩa Alias cho cột.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' + Convert(varchar,Emp.Emp_Id ) Emp_No2  -- Cột mới
From   Employee Emp;
2

Ví dụ:


-- Hàm Convert(Varchar, <intvalue>) chuyển một số thành chữ (Varchar) (Hàm của SQLServer)
-- Sử dụng toán tử + để nối hai chuỗi (Có thể không được hỗ trợ bởi DB khác)
-- Chúng ta có một cột mới sử dụng 'as' để định nghĩa tên cột cho cột mới này.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' +  Convert(Varchar,Emp.Emp_Id) As Emp_No2  -- Cột mới
From   Employee Emp;

-- Có thể không cần sử dụng 'as' trong định nghĩa Alias cho cột.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' + Convert(varchar,Emp.Emp_Id ) Emp_No2  -- Cột mới
From   Employee Emp;
3

6- Câu lệnh cập nhập (Update)


-- Hàm Convert(Varchar, <intvalue>) chuyển một số thành chữ (Varchar) (Hàm của SQLServer)
-- Sử dụng toán tử + để nối hai chuỗi (Có thể không được hỗ trợ bởi DB khác)
-- Chúng ta có một cột mới sử dụng 'as' để định nghĩa tên cột cho cột mới này.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' +  Convert(Varchar,Emp.Emp_Id) As Emp_No2  -- Cột mới
From   Employee Emp;

-- Có thể không cần sử dụng 'as' trong định nghĩa Alias cho cột.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' + Convert(varchar,Emp.Emp_Id ) Emp_No2  -- Cột mới
From   Employee Emp;
4

Ví dụ bạn muốn tăng tiền trong các tài khoản của khách hàng có CUST_ID = 1 lên 2%.

Học cơ sở dữ liệu SQL

Câu lệnh Update:


-- Hàm Convert(Varchar, <intvalue>) chuyển một số thành chữ (Varchar) (Hàm của SQLServer)
-- Sử dụng toán tử + để nối hai chuỗi (Có thể không được hỗ trợ bởi DB khác)
-- Chúng ta có một cột mới sử dụng 'as' để định nghĩa tên cột cho cột mới này.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' +  Convert(Varchar,Emp.Emp_Id) As Emp_No2  -- Cột mới
From   Employee Emp;

-- Có thể không cần sử dụng 'as' trong định nghĩa Alias cho cột.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' + Convert(varchar,Emp.Emp_Id ) Emp_No2  -- Cột mới
From   Employee Emp;
5

Truy vấn lại, sau khi Update.

Học cơ sở dữ liệu SQL

7- Câu lệnh xóa dữ liệu (Delete)

Cú pháp xóa dữ liệu trong bảng.


-- Hàm Convert(Varchar, <intvalue>) chuyển một số thành chữ (Varchar) (Hàm của SQLServer)
-- Sử dụng toán tử + để nối hai chuỗi (Có thể không được hỗ trợ bởi DB khác)
-- Chúng ta có một cột mới sử dụng 'as' để định nghĩa tên cột cho cột mới này.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' +  Convert(Varchar,Emp.Emp_Id) As Emp_No2  -- Cột mới
From   Employee Emp;

-- Có thể không cần sử dụng 'as' trong định nghĩa Alias cho cột.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' + Convert(varchar,Emp.Emp_Id ) Emp_No2  -- Cột mới
From   Employee Emp;
6

Học cơ sở dữ liệu SQL


-- Hàm Convert(Varchar, <intvalue>) chuyển một số thành chữ (Varchar) (Hàm của SQLServer)
-- Sử dụng toán tử + để nối hai chuỗi (Có thể không được hỗ trợ bởi DB khác)
-- Chúng ta có một cột mới sử dụng 'as' để định nghĩa tên cột cho cột mới này.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' +  Convert(Varchar,Emp.Emp_Id) As Emp_No2  -- Cột mới
From   Employee Emp;

-- Có thể không cần sử dụng 'as' trong định nghĩa Alias cho cột.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' + Convert(varchar,Emp.Emp_Id ) Emp_No2  -- Cột mới
From   Employee Emp;
7

8- SQL Functions

8.1- SQL Count

Count() là một hàm, đếm số dòng trong câu Query. Thông thường nó thường được sử dụng cùng với Group by.


-- Hàm Convert(Varchar, <intvalue>) chuyển một số thành chữ (Varchar) (Hàm của SQLServer)
-- Sử dụng toán tử + để nối hai chuỗi (Có thể không được hỗ trợ bởi DB khác)
-- Chúng ta có một cột mới sử dụng 'as' để định nghĩa tên cột cho cột mới này.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' +  Convert(Varchar,Emp.Emp_Id) As Emp_No2  -- Cột mới
From   Employee Emp;

-- Có thể không cần sử dụng 'as' trong định nghĩa Alias cho cột.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' + Convert(varchar,Emp.Emp_Id ) Emp_No2  -- Cột mới
From   Employee Emp;
8

Học cơ sở dữ liệu SQL

Đếm số tài khoản ngân hàng, có giao dịch với ngân hàng (Bảng Acc_Transaction)


-- Hàm Convert(Varchar, <intvalue>) chuyển một số thành chữ (Varchar) (Hàm của SQLServer)
-- Sử dụng toán tử + để nối hai chuỗi (Có thể không được hỗ trợ bởi DB khác)
-- Chúng ta có một cột mới sử dụng 'as' để định nghĩa tên cột cho cột mới này.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' +  Convert(Varchar,Emp.Emp_Id) As Emp_No2  -- Cột mới
From   Employee Emp;

-- Có thể không cần sử dụng 'as' trong định nghĩa Alias cho cột.
Select Emp.Emp_Id
    ,Emp.First_Name
    ,Emp.Last_Name
    ,Emp.Dept_Id
    ,'EMP' + Convert(varchar,Emp.Emp_Id ) Emp_No2  -- Cột mới
From   Employee Emp;
9

Học cơ sở dữ liệu SQL

Group by

Một khách hàng có thể mở nhiều tài khoản, mỗi tài khoản ứng với một sản phẩm (dịch vụ) của ngân hàng.

Học cơ sở dữ liệu SQL

Bạn muốn liệt kê các khách hàng (CUST_ID) và tương ứng là số tài khoản họ đã mở.


Select distinct <column1>, <column2>  ....
0

Học cơ sở dữ liệu SQL

8.2- SQL Sum

Sum() là hàm dùng để tính tổng giá trị một cột số.


Select distinct <column1>, <column2>  ....
1

Ví dụ:


Select distinct <column1>, <column2>  ....
2

Học cơ sở dữ liệu SQL

8.3- SQL AVG

AVG() là hàm tính trung bình trên cột số.


Select distinct <column1>, <column2>  ....
3

Ví dụ:


Select distinct <column1>, <column2>  ....
4

Học cơ sở dữ liệu SQL

8.4- SQL MIN

Min là hàm tìm giá trị nhỏ nhất trên cột số.


Select distinct <column1>, <column2>  ....
5

Ví dụ:


Select distinct <column1>, <column2>  ....
6

Học cơ sở dữ liệu SQL

8.5- SQL MAX

MAX() là hàm tìm giá trị lớn nhất trên một cột số. Cách sử dụng giống MIN, bạn có thể tham khảo các ví dụ tại mục MIN.


Select distinct <column1>, <column2>  ....
7

9- SQL Join

Đặt ra một tình huống bạn xem thông tin một nhân viên trong bảng EMPLOYEE. Bạn có thể thấy nhân viên biết ID phòng ban của nhân viên này. Nhưng đó là một con số vô nghĩa. Muốn biết tên phòng ban, bạn phải tra cứu sang bảng DEPARTMENT. Việc nối 2 bảng đó với nhau để có một thông tin đầy đủ được gọi là JOIN.

Học cơ sở dữ liệu SQL

Có 4 hình thức để Join 2 bảng:

  • INNER JOIN   (JOIN)
  • LEFT OUTER JOIN  (LEFT JOIN)
  • RIGHT OUTER JOIN (RIGHT JOIN)
  • FULL OUTER JOIN    (OUTER JOIN)
  • CROSS JOIN

9.1- INNER JOIN (Hoặc JOIN)

Từ khóa INNER JOIN để chọn tất cả các dòng từ hai bảng miễn là có sự ăn khớp dữ liệu giữa các cột trong cả hai bảng.

Học cơ sở dữ liệu SQL

Cú pháp:


Select distinct <column1>, <column2>  ....
8

Học cơ sở dữ liệu SQL

Ví dụ:


Select distinct <column1>, <column2>  ....
9

Cú pháp riêng của SQLServer:


-- Truy vấn sản phẩm (Sản phẩm dịch vụ của Ngân hàng)
-- Cột mã sản phẩm, tên và kiểu sản phẩm.
Select Pro.Product_Cd
    ,Pro.Name
    ,Pro.Product_Type_Cd
From   Product Pro;

-- Truy vấn các kiểu sản phẩm  (Product_Type_Cd) trong bảng Product.
-- Dữ liệu là nhiều, nhưng trùng nhau.
Select Pro.Product_Type_Cd from Product Pro;

-- Cần sử dụng Distinct để loại bỏ việc trùng lặp.
Select Distinct Pro.Product_Type_Cd from Product Pro;
0

9.2- LEFT OUTER JOIN (Hoặc LEFT JOIN)

Từ khóa LEFT OUTER JOIN trả về tất cả các hàng (rows) từ bảng bên trái (table1), với các hàng tương ứng trong bảng bên phải (table2). Chấp nhận cả dữ liệu NULL ở bảng 2 nếu nó không khớp.

Học cơ sở dữ liệu SQL

Hãy xem hình minh họa dưới đây:

Học cơ sở dữ liệu SQL

Ví dụ:


-- Truy vấn sản phẩm (Sản phẩm dịch vụ của Ngân hàng)
-- Cột mã sản phẩm, tên và kiểu sản phẩm.
Select Pro.Product_Cd
    ,Pro.Name
    ,Pro.Product_Type_Cd
From   Product Pro;

-- Truy vấn các kiểu sản phẩm  (Product_Type_Cd) trong bảng Product.
-- Dữ liệu là nhiều, nhưng trùng nhau.
Select Pro.Product_Type_Cd from Product Pro;

-- Cần sử dụng Distinct để loại bỏ việc trùng lặp.
Select Distinct Pro.Product_Type_Cd from Product Pro;
1

Kết quả:

Học cơ sở dữ liệu SQL

9.3- RIGHT OUTER JOIN (Hoặc RIGHT JOIN)

RIGHT OUTER JOIN khá giống với LEFT OUTER JOIN:

Học cơ sở dữ liệu SQL

9.4- FULL OUTER JOIN (Hoặc OUTER JOIN)

FULL OUTER JOIN là sự kết hợp của LEFT OUTER JOIN và RIGHT OUTER JOIN

Học cơ sở dữ liệu SQL


-- Truy vấn sản phẩm (Sản phẩm dịch vụ của Ngân hàng)
-- Cột mã sản phẩm, tên và kiểu sản phẩm.
Select Pro.Product_Cd
    ,Pro.Name
    ,Pro.Product_Type_Cd
From   Product Pro;

-- Truy vấn các kiểu sản phẩm  (Product_Type_Cd) trong bảng Product.
-- Dữ liệu là nhiều, nhưng trùng nhau.
Select Pro.Product_Type_Cd from Product Pro;

-- Cần sử dụng Distinct để loại bỏ việc trùng lặp.
Select Distinct Pro.Product_Type_Cd from Product Pro;
2

10- Câu truy vấn con (Subquery)

Trong SQLServer, một subquery là một truy vấn trong một truy vấn. Bạn có thể tạo các truy vấn con trong câu lệnh SQL của bạn. Những truy vấn con có thể nằm trong mệnh đề WHERE, mệnh đề FROM, hoặc mệnh đề SELECT.

10.1- Subquery trong mệnh đề Where

Khá thường xuyên, các subquery sẽ được tìm thấy trong mệnh đề WHERE. Những truy vấn con còn được gọi là truy vấn con lồng nhau.


-- Truy vấn sản phẩm (Sản phẩm dịch vụ của Ngân hàng)
-- Cột mã sản phẩm, tên và kiểu sản phẩm.
Select Pro.Product_Cd
    ,Pro.Name
    ,Pro.Product_Type_Cd
From   Product Pro;

-- Truy vấn các kiểu sản phẩm  (Product_Type_Cd) trong bảng Product.
-- Dữ liệu là nhiều, nhưng trùng nhau.
Select Pro.Product_Type_Cd from Product Pro;

-- Cần sử dụng Distinct để loại bỏ việc trùng lặp.
Select Distinct Pro.Product_Type_Cd from Product Pro;
3

10.2- Subquery trong mệnh đề From

Một truy vấn phụ cũng có thể được tìm thấy trong mệnh đề FROM. Chúng được gọi là inline views.


-- Truy vấn sản phẩm (Sản phẩm dịch vụ của Ngân hàng)
-- Cột mã sản phẩm, tên và kiểu sản phẩm.
Select Pro.Product_Cd
    ,Pro.Name
    ,Pro.Product_Type_Cd
From   Product Pro;

-- Truy vấn các kiểu sản phẩm  (Product_Type_Cd) trong bảng Product.
-- Dữ liệu là nhiều, nhưng trùng nhau.
Select Pro.Product_Type_Cd from Product Pro;

-- Cần sử dụng Distinct để loại bỏ việc trùng lặp.
Select Distinct Pro.Product_Type_Cd from Product Pro;
4

10.3- Subquery trong mệnh đề Select

Một subquery cũng có thể được tìm thấy trong mệnh đề SELECT.


-- Truy vấn sản phẩm (Sản phẩm dịch vụ của Ngân hàng)
-- Cột mã sản phẩm, tên và kiểu sản phẩm.
Select Pro.Product_Cd
    ,Pro.Name
    ,Pro.Product_Type_Cd
From   Product Pro;

-- Truy vấn các kiểu sản phẩm  (Product_Type_Cd) trong bảng Product.
-- Dữ liệu là nhiều, nhưng trùng nhau.
Select Pro.Product_Type_Cd from Product Pro;

-- Cần sử dụng Distinct để loại bỏ việc trùng lặp.
Select Distinct Pro.Product_Type_Cd from Product Pro;
5

Bí quyết để đặt một subquery trong mệnh đề select là subquery phải trả lại một giá trị duy nhất. Đây là lý do tại sao một các hàm tổng hợp như hàm SUM, COUNT, MIN, hoặc MAX thường được sử dụng trong subquery.