background img

Bài Viết Mới

Hiển thị các bài đăng có nhãn Cơ Sở Dữ Liệu. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Cơ Sở Dữ Liệu. Hiển thị tất cả bài đăng
Trong bài này, chúng ta tìm hiểu những khái niệm khái quát, giản đơn để bạn có thể nắm rõ Entity Framework nhanh chóng nếu bạn là người mới.

  • EF với version đầu tiên đi kèm với .NET 3.5 trong bộ Visual Studio 2008, phát hành 11/2008. Ở lần đầu ra mắt này, nó nhận được đánh giá không mấy tốt đẹp của các nhà phát triển.

  • Version tiếp theo là EF4.0 phát hành cùng .NET 4.0 vào 12/04/2010. Cập nhật một số hạn chế ở phiên bản đầu tiên.

  • Version thứ 3 của EF là version 4.1,phát hành vào 12/04/2011. Lần phát hành này có dấu ấn quan trọng là hỗ trợ Code First (Sử dụng code để làm việc với EF không dùng Tools)

  • Cứ thế các phiên bản khác ra đời v4.1, v4.3.1,v5.0,v6.0 và bây giờ là version 6.1

  • Tham khảo thêm tại: Wikipedia


 Entity Framework Dùng Làm Gì ?


- Chúng ta dùng EF để truy xuất dữ liệu (Accessing Data).

Trước đó để truy xuất dữ liệu các nhà phát triển thường sử dụng:Raw Data, Driect APIs,OLEDB, ODBC, Embedded SQL, ADO, Stored Procedure, ADO.NET, Datasets, DataReade, LINQ Và bây giờ với EF là O/RM

- Mục đích che dấu sự phức tạp bên dưới và đưa ra cách làm việc thống nhất, hiện đại, nhanh gọn.

 

Lợi Ích Sử Dụng Entity Framework ?


- Năng suất làm việc được đẩy nhanh hơn

- Giữ tính độc lập cho cơ sở dữ liệu

(Điều đó không có nghĩa EF là giải pháp duy nhất tốt trong các vấn đề cũng như nó không phải là nhanh nhất trong công việc. Trong một số trường hợp bạn cần có các thiết lập đúng đắn )

- Cho phép làm việc với nhiều hệ quản trị cơ sở dữ liệu SQL Server, MySQL, DB, Oracle ....

 

Vậy Entity Framework Là Gì ?


- Entity Framework là O/RM  (Object Relational Mapping )  trong .NET Framwork . Có thể nói là tốt nhất trong việc truy xuất dữ liệu trên .NET

- Là công nghệ  Microsoft thường được sử dụng trong : WCF Data services,
Azure Table Storage, Sharepoint 2010, SQL Server Reporting Services and
PowerPivot for Excel, …

- EF là công nghệ cho phép bạn làm việc với CSDL quan hệ.

Một Số Khái Niệm Cần Lưu Ý Khi Làm Việc Với Entity Framework


Entity Data Model


Được phát minh bởi TS. Peter Chen năm  1970 và được đặt tên là ERM (Entity Relationship Model).

Sau này trong Entity FrameWork được gọi là EDM (Entity Data Model)

- Conceptual model: (Phần mở rộng *.CSDL) là các các class model và các relationships của chúng. Nó độc lập với thiết kế Table trong cơ sở dữ liệu của bạn.

- Mapping: (Phần mở rộng *.MSL) nó bao gồm các thông tin về Conceptual model ánh xạ lên Storage model.

- Storage model: (Phần mở rộng *.SSDL) là mô hình thiết kế cơ sở dữ liệu của bạn nó bao gồm các Tables, Views, Stored Procedures, Relationships, Keys

Object Relation Mapping


- Thứ nhất ORM là một công cụ được áp dụng trong Entity Framework

- ORM sử dụng thông tin Metadata để giao tiếp với cơ sở dữ liệu. Nhờ vậy, bạn không cần biết cấu trúc bên dưới của cơ sở dữ liệu. ORM là công cụ trung gian để che dấu đi sự phức tạp đó cho bạn.

- Nó là cơ chế anh xạ nên phần quan trọng nhất của ORM chính là mapping. Hiểu đơn giản ORM là trung gian cho việc ánh xạ từ bản thiết kế EDM xuống Database


Quy Trình Làm Việc Với Entity FrameWork ?


Tòm tắt lại, có ba cách làm việc với Entity Framework:

- Database First: Trong trường hợp bạn muốn làm việc với database đã có sẵn. Dùng công cụ thiết kế có sẵn trong Visual Studio để generated từ database ra bản thiết kế model.

- Model First: Trong trường hợp này, chúng ta sẽ làm việc trên visual studio và tạo ra database mới tại đây. Dùng công cụ để generated code từ bản thiết kế model ra database

- Code First: Riêng với cách này bạn có 2 lựa chọn, làm việc với database có sẵn hoặc sẽ tạo mới. Nhưng dù làm với cách nào, chúng ta cũng dùng codebehind để xử lý là chính. Không dùng các tool, giao diện trực quan giống như 2 cách bên trên.

References:

[1] http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx

[2] http://entityframework.codeplex.com/

[3] http://msdn.microsoft.com/en-us/library/bb399567%28v=vs.110%29.aspx




 
Nguồn: Tự Học IT Online - http://tuhocit.net

ADO.NET Entity Framework: Tìm Hiểu Khái Quát

Trong bài này, chúng ta tìm hiểu những khái niệm khái quát, giản đơn để bạn có thể nắm rõ Entity Framework nhanh chóng nếu bạn là người mới.

  • EF với version đầu tiên đi kèm với .NET 3.5 trong bộ Visual Studio 2008, phát hành 11/2008. Ở lần đầu ra mắt này, nó nhận được đánh giá không mấy tốt đẹp của các nhà phát triển.

  • Version tiếp theo là EF4.0 phát hành cùng .NET 4.0 vào 12/04/2010. Cập nhật một số hạn chế ở phiên bản đầu tiên.

  • Version thứ 3 của EF là version 4.1,phát hành vào 12/04/2011. Lần phát hành này có dấu ấn quan trọng là hỗ trợ Code First (Sử dụng code để làm việc với EF không dùng Tools)

  • Cứ thế các phiên bản khác ra đời v4.1, v4.3.1,v5.0,v6.0 và bây giờ là version 6.1

  • Tham khảo thêm tại: Wikipedia


 Entity Framework Dùng Làm Gì ?


- Chúng ta dùng EF để truy xuất dữ liệu (Accessing Data).

Trước đó để truy xuất dữ liệu các nhà phát triển thường sử dụng:Raw Data, Driect APIs,OLEDB, ODBC, Embedded SQL, ADO, Stored Procedure, ADO.NET, Datasets, DataReade, LINQ Và bây giờ với EF là O/RM

- Mục đích che dấu sự phức tạp bên dưới và đưa ra cách làm việc thống nhất, hiện đại, nhanh gọn.

 

Lợi Ích Sử Dụng Entity Framework ?


- Năng suất làm việc được đẩy nhanh hơn

- Giữ tính độc lập cho cơ sở dữ liệu

(Điều đó không có nghĩa EF là giải pháp duy nhất tốt trong các vấn đề cũng như nó không phải là nhanh nhất trong công việc. Trong một số trường hợp bạn cần có các thiết lập đúng đắn )

- Cho phép làm việc với nhiều hệ quản trị cơ sở dữ liệu SQL Server, MySQL, DB, Oracle ....

 

Vậy Entity Framework Là Gì ?


- Entity Framework là O/RM  (Object Relational Mapping )  trong .NET Framwork . Có thể nói là tốt nhất trong việc truy xuất dữ liệu trên .NET

- Là công nghệ  Microsoft thường được sử dụng trong : WCF Data services,
Azure Table Storage, Sharepoint 2010, SQL Server Reporting Services and
PowerPivot for Excel, …

- EF là công nghệ cho phép bạn làm việc với CSDL quan hệ.

Một Số Khái Niệm Cần Lưu Ý Khi Làm Việc Với Entity Framework


Entity Data Model


Được phát minh bởi TS. Peter Chen năm  1970 và được đặt tên là ERM (Entity Relationship Model).

Sau này trong Entity FrameWork được gọi là EDM (Entity Data Model)

- Conceptual model: (Phần mở rộng *.CSDL) là các các class model và các relationships của chúng. Nó độc lập với thiết kế Table trong cơ sở dữ liệu của bạn.

- Mapping: (Phần mở rộng *.MSL) nó bao gồm các thông tin về Conceptual model ánh xạ lên Storage model.

- Storage model: (Phần mở rộng *.SSDL) là mô hình thiết kế cơ sở dữ liệu của bạn nó bao gồm các Tables, Views, Stored Procedures, Relationships, Keys

Object Relation Mapping


- Thứ nhất ORM là một công cụ được áp dụng trong Entity Framework

- ORM sử dụng thông tin Metadata để giao tiếp với cơ sở dữ liệu. Nhờ vậy, bạn không cần biết cấu trúc bên dưới của cơ sở dữ liệu. ORM là công cụ trung gian để che dấu đi sự phức tạp đó cho bạn.

- Nó là cơ chế anh xạ nên phần quan trọng nhất của ORM chính là mapping. Hiểu đơn giản ORM là trung gian cho việc ánh xạ từ bản thiết kế EDM xuống Database


Quy Trình Làm Việc Với Entity FrameWork ?


Tòm tắt lại, có ba cách làm việc với Entity Framework:

- Database First: Trong trường hợp bạn muốn làm việc với database đã có sẵn. Dùng công cụ thiết kế có sẵn trong Visual Studio để generated từ database ra bản thiết kế model.

- Model First: Trong trường hợp này, chúng ta sẽ làm việc trên visual studio và tạo ra database mới tại đây. Dùng công cụ để generated code từ bản thiết kế model ra database

- Code First: Riêng với cách này bạn có 2 lựa chọn, làm việc với database có sẵn hoặc sẽ tạo mới. Nhưng dù làm với cách nào, chúng ta cũng dùng codebehind để xử lý là chính. Không dùng các tool, giao diện trực quan giống như 2 cách bên trên.

References:

[1] http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx

[2] http://entityframework.codeplex.com/

[3] http://msdn.microsoft.com/en-us/library/bb399567%28v=vs.110%29.aspx




 
Nguồn: Tự Học IT Online - http://tuhocit.net

Phần này, chúng ta bước vào phần chính của ADO.NET. Đó là làm việc với mô hình phi kết nối nhưng trước hết trong ví dụ dưới đây ta sẽ bỏ qua việc lưu trữ vào XML mà tạm thời dùng bộ nhớ tạm thôi.

Có nghĩa là, dữ liệu từ database được lấy lên và đổ vào Dataset. Sau đó ta có thể ngắt kết nối tới database, lúc này dữ liệu tạm thời nằm ở dataset và ta sẽ thao tác với nó (Thêm, Sửa, Xóa). Sau khi thao tác xong, bạn có thể đồng bộ với database vẫn thông qua DataApdater nhưng trong ví dụ dưới đây chúng ta dùng SqlCommandBuilder để làm việc ngầm cho chúng ta, giảm bớt thao tác code.

Mã Code trong mô hình phi kết nối dưới đây bao gồm các bước.

  • Kết nối với SQL Server

  • Tạo Dataset bao gồm một hoặc nhiểu Table tương ứng để chứa dữ liệu được tải lên.

  • Tải dữ liệu từ database lên và đổ chúng vào dataset với các Table tương ứng.

  • Ngắt kết nối với SQL Server

  • Thao tác thêm, sửa, xóa trên dataset. Hiển thị thông qua Gridview.

  • Lưu dữ liệu từ Dataset vào XML

  • Đồng bộ xuống database. Done !


 

Data Apdater

Đối với DataApdater là cầu nối giữa dataset và database nhưng với mỗi đối tượng data apdater chỉ xử lý 1 bảng trong dataset.
Bạn cần lưu ý điểm này, không dùng chung trên các bảng dữ liệu khác nhau. Vẫn có phương pháp để sử dụng một đối tượng Data apdater nhưng chúng ta sẽ tạm thời không tìm hiểu tại ví dụ này. Enjoy !


1. Kết Nối Server

- Trong các ví dụ trước ta đã biết cách kết nối tới database. Ở đây vẫn dùng cách đó, bạn hãy tham khảo lại.

2. Khởi Tạo Dataset

Trước đó trong class của chúng ta đã khai báo lớp dataset dùng cho toàn class.

private DataSet _dataset;

 
private void ManualDataset()
{
// B1: Tạo mới đối tượng Dataset. Với tên do bạn chỉ định hoặc để trống
_dataset = new DataSet("MyDataClient");

// B2: Tạo mới một bảng để thêm vào dataset ở trên
var table1 = new DataTable("SinhVien");

// B3: Add table SinhVien vừa tạo vào dataset MyDataClient
_dataset.Tables.Add(table1);

// B4: Tạo cột (column). Riêng hàng (row) dùng để làm việc với dữ liệu, vì nó đại diện cho một hàng. Ta dùng nó để thao tác Insert, Update, Delete
var col11 = new DataColumn("MaSV", typeof(string));
var col12 = new DataColumn("HoTenSV", typeof(string));
var col13 = new DataColumn("NgaySinh", typeof(DateTime));
var col14 = new DataColumn("QueQuan", typeof(string));
var col15 = new DataColumn("MaKhoa", typeof(string));

// B5: Add column vào table SinhVien trong dataset: MyDataClient
table1.Columns.Add(col11);
table1.Columns.Add(col12);
table1.Columns.Add(col13);
table1.Columns.Add(col14);
table1.Columns.Add(col15);
//table.Columns.Add("MaSV", Type.GetType("System.String"));

/*************************************************************************************************/
//Tương tự ta tạo tiếp bảng Khoa và add vào dataset MyDataClient
var table2 = new DataTable("Khoa");
_dataset.Tables.Add(table2);
var col21 = new DataColumn("MaKhoa", typeof(string));
var col22 = new DataColumn("TenKhoa", typeof(string));

table2.Columns.Add(col21);
table2.Columns.Add(col22);
}

Hàm trên là một cách tùy chỉnh cho bạn hiểu dataset gồm những gì. Hãy đặt vào hàm Form_Load để nó được khởi tạo luôn lúc chương trình khởi động hoặc thực thi trước khi tải dữ liệu từ database lên.

3. Tải Dữ Liệu Lên Và Đổ Vào Dataset

Ta sẽ tải cả hai bảng SinhVien, Khoa. Riêng bảng SinhVien cần thêm, sửa, xóa nên ta dùng thêm SqlCommandbuilder. Nếu bảng khoa thao tác, bạn làm tương tự.
private void GetAllTableToDataset()
{
/* Phần A: Xử lý với bảng SinhVien
* B1: Thông qua SqlDataApdater và SqlConnection lấy dữ liệu lên
* B2: Nạp đối tượng SqlDataApdater mà chúng ta đã khởi tạo dành riêng cho SinhVien vào SqlCommandBuilder ...
* ...để nó làm việc ngầm cho ta. Như thế việc đồng bộ từ dataset <=> database sẽ đơn giản hơn.
* B3: Đổ dữ liệu đã lấy được vào _dataset.Table["SinhVien"]. Trước đó ta đã khởi tạo 2 table trong dataset thứ tự 0,1.....
* B4: Có thể đổ dữ liệu từ Table trong Dataset ra GridView để xem cụ thể
*/

_dasinhvien = new SqlDataAdapter
{
SelectCommand = new SqlCommand("SELECT * FROM SinhVien", _con)
};
_cmdbdsinhvien = new SqlCommandBuilder(_dasinhvien);

_dasinhvien.Fill(_dataset.Tables["SinhVien"]);
gvSinhVien.DataSource = _dataset.Tables[0]; // Table[0] tương đương Table["SinhVien"]

/* Phần B: Xử lý với bảng Khoa*/
_dakhoa = new SqlDataAdapter
{
SelectCommand = new SqlCommand("SELECT * FROM Khoa", _con)
};
_dakhoa.Fill(_dataset, "Khoa");
//Đổ ra Combbobox
cbbMakhoa.DataSource = _dataset.Tables[1];
cbbMakhoa.ValueMember = _dataset.Tables[1].Columns[0].ColumnName; //MaKhoa
cbbMakhoa.DisplayMember = "TenKhoa"; // Tương tự lệnh trên ;))
// Đổ ra Gridview
gvKhoa.DataSource = _dataset.Tables[1]; // Table[1] tương đương Table["Khoa"]
}

4. Ngắt Kết Nối Tới Server

Sau khi tải dữ liệu xong và đổ vào dataset thì ngắt kết nối. Gọi hàm ngắt kết nối, OK

5. Thao Tác Dữ Liệu Trên Dataset

Bao gồm các thao tác cơ bản: Insert, Update, Delete.

Yên tâm là bạn có thể thêm, bớt thoải mái nhiểu record trước khi qua bước cập nhật xuống database.

Ở bước này, bạn có thể code thêm mã xử lý việc hoàn nguyên dataset nếu như ta ko muốn lưu bằng cách đơn giản nhất là Clear() Table đó trong dataset và tải lại.

a. hàm thêm mới dữ liệu.
private void InsertDataset()
{
var datarow = _dataset.Tables["SinhVien"].NewRow();
datarow[0] = txtMasv.Text;
datarow[1] = txtHoten.Text;
datarow[2] = dtpNgaysinh.Text;
datarow[3] = txtQuequan.Text;
datarow[4] = cbbMakhoa.SelectedValue;
_dataset.Tables[0].Rows.Add(datarow);

}

Đầu vào từ các control : Textbox, Combbobox.....

b. sửa dữ liệu ban đầu
private void UpdateDataset()
{

var temp = txtMasv.Text;
var datarows = _dataset.Tables[0].Select("MaSV =" + "'" + temp + "'");
datarows[0][1] = txtHoten.Text;
datarows[0][2] = dtpNgaysinh.Text;
datarows[0][3] = txtQuequan.Text;
datarows[0][4] = cbbMakhoa.SelectedValue;
// Gán như vậy có nghĩa. Row[vị trí hàng][vị trí cột] của Table[vị trí] của Dataset đã được thay đổi.

}

c. xóa dữ liệu
private void DeleteDataset()
{
if (gvSinhVien.CurrentRow != null)
_dataset.Tables[0].Rows[gvSinhVien.CurrentRow.Index].Delete();
}

Cách này lấy vị trí record trên Gridview của bạn và xóa nó trong Table của Dataset.

Cách khác bạn xác định vị trí index của record trong table thông qua MaSV nhập vào.
var temp = txtMasv.Text;
var datarows = _dataset.Tables[0].Select("MaSV =" + "'" + temp + "'");
foreach (var datarow in datarows)
{
var index = _dataset.Tables[0].Rows.IndexOf(datarow);
_dataset.Tables[0].Rows[index].Delete();
}

6. Đồng Bộ Dataset Với Databbase

Dùng lệnh update của Data Apdater:
 _dasinhvien.Update(_dataset, "SinhVien");

Như vậy quá trình thực thi của mô hình này đã hoàn tất.

Demo

DemoDisconnectModel




Cập nhật: 03/03/2014

Hãy tải về mã nguồn của ví dụ 2.2.1 này để thực hành.  Database vẫn dùng ở các ví dụ trước.
Nguồn: Tự Học IT Online - http://tuhocit.net

ADO.NET Mô Hình Phi Kết Nối Với SQL Server – Phần 2.2.1

Phần này, chúng ta bước vào phần chính của ADO.NET. Đó là làm việc với mô hình phi kết nối nhưng trước hết trong ví dụ dưới đây ta sẽ bỏ qua việc lưu trữ vào XML mà tạm thời dùng bộ nhớ tạm thôi.

Có nghĩa là, dữ liệu từ database được lấy lên và đổ vào Dataset. Sau đó ta có thể ngắt kết nối tới database, lúc này dữ liệu tạm thời nằm ở dataset và ta sẽ thao tác với nó (Thêm, Sửa, Xóa). Sau khi thao tác xong, bạn có thể đồng bộ với database vẫn thông qua DataApdater nhưng trong ví dụ dưới đây chúng ta dùng SqlCommandBuilder để làm việc ngầm cho chúng ta, giảm bớt thao tác code.

Mã Code trong mô hình phi kết nối dưới đây bao gồm các bước.

  • Kết nối với SQL Server

  • Tạo Dataset bao gồm một hoặc nhiểu Table tương ứng để chứa dữ liệu được tải lên.

  • Tải dữ liệu từ database lên và đổ chúng vào dataset với các Table tương ứng.

  • Ngắt kết nối với SQL Server

  • Thao tác thêm, sửa, xóa trên dataset. Hiển thị thông qua Gridview.

  • Lưu dữ liệu từ Dataset vào XML

  • Đồng bộ xuống database. Done !


 

Data Apdater

Đối với DataApdater là cầu nối giữa dataset và database nhưng với mỗi đối tượng data apdater chỉ xử lý 1 bảng trong dataset.
Bạn cần lưu ý điểm này, không dùng chung trên các bảng dữ liệu khác nhau. Vẫn có phương pháp để sử dụng một đối tượng Data apdater nhưng chúng ta sẽ tạm thời không tìm hiểu tại ví dụ này. Enjoy !


1. Kết Nối Server

- Trong các ví dụ trước ta đã biết cách kết nối tới database. Ở đây vẫn dùng cách đó, bạn hãy tham khảo lại.

2. Khởi Tạo Dataset

Trước đó trong class của chúng ta đã khai báo lớp dataset dùng cho toàn class.

private DataSet _dataset;

 
private void ManualDataset()
{
// B1: Tạo mới đối tượng Dataset. Với tên do bạn chỉ định hoặc để trống
_dataset = new DataSet("MyDataClient");

// B2: Tạo mới một bảng để thêm vào dataset ở trên
var table1 = new DataTable("SinhVien");

// B3: Add table SinhVien vừa tạo vào dataset MyDataClient
_dataset.Tables.Add(table1);

// B4: Tạo cột (column). Riêng hàng (row) dùng để làm việc với dữ liệu, vì nó đại diện cho một hàng. Ta dùng nó để thao tác Insert, Update, Delete
var col11 = new DataColumn("MaSV", typeof(string));
var col12 = new DataColumn("HoTenSV", typeof(string));
var col13 = new DataColumn("NgaySinh", typeof(DateTime));
var col14 = new DataColumn("QueQuan", typeof(string));
var col15 = new DataColumn("MaKhoa", typeof(string));

// B5: Add column vào table SinhVien trong dataset: MyDataClient
table1.Columns.Add(col11);
table1.Columns.Add(col12);
table1.Columns.Add(col13);
table1.Columns.Add(col14);
table1.Columns.Add(col15);
//table.Columns.Add("MaSV", Type.GetType("System.String"));

/*************************************************************************************************/
//Tương tự ta tạo tiếp bảng Khoa và add vào dataset MyDataClient
var table2 = new DataTable("Khoa");
_dataset.Tables.Add(table2);
var col21 = new DataColumn("MaKhoa", typeof(string));
var col22 = new DataColumn("TenKhoa", typeof(string));

table2.Columns.Add(col21);
table2.Columns.Add(col22);
}

Hàm trên là một cách tùy chỉnh cho bạn hiểu dataset gồm những gì. Hãy đặt vào hàm Form_Load để nó được khởi tạo luôn lúc chương trình khởi động hoặc thực thi trước khi tải dữ liệu từ database lên.

3. Tải Dữ Liệu Lên Và Đổ Vào Dataset

Ta sẽ tải cả hai bảng SinhVien, Khoa. Riêng bảng SinhVien cần thêm, sửa, xóa nên ta dùng thêm SqlCommandbuilder. Nếu bảng khoa thao tác, bạn làm tương tự.
private void GetAllTableToDataset()
{
/* Phần A: Xử lý với bảng SinhVien
* B1: Thông qua SqlDataApdater và SqlConnection lấy dữ liệu lên
* B2: Nạp đối tượng SqlDataApdater mà chúng ta đã khởi tạo dành riêng cho SinhVien vào SqlCommandBuilder ...
* ...để nó làm việc ngầm cho ta. Như thế việc đồng bộ từ dataset <=> database sẽ đơn giản hơn.
* B3: Đổ dữ liệu đã lấy được vào _dataset.Table["SinhVien"]. Trước đó ta đã khởi tạo 2 table trong dataset thứ tự 0,1.....
* B4: Có thể đổ dữ liệu từ Table trong Dataset ra GridView để xem cụ thể
*/

_dasinhvien = new SqlDataAdapter
{
SelectCommand = new SqlCommand("SELECT * FROM SinhVien", _con)
};
_cmdbdsinhvien = new SqlCommandBuilder(_dasinhvien);

_dasinhvien.Fill(_dataset.Tables["SinhVien"]);
gvSinhVien.DataSource = _dataset.Tables[0]; // Table[0] tương đương Table["SinhVien"]

/* Phần B: Xử lý với bảng Khoa*/
_dakhoa = new SqlDataAdapter
{
SelectCommand = new SqlCommand("SELECT * FROM Khoa", _con)
};
_dakhoa.Fill(_dataset, "Khoa");
//Đổ ra Combbobox
cbbMakhoa.DataSource = _dataset.Tables[1];
cbbMakhoa.ValueMember = _dataset.Tables[1].Columns[0].ColumnName; //MaKhoa
cbbMakhoa.DisplayMember = "TenKhoa"; // Tương tự lệnh trên ;))
// Đổ ra Gridview
gvKhoa.DataSource = _dataset.Tables[1]; // Table[1] tương đương Table["Khoa"]
}

4. Ngắt Kết Nối Tới Server

Sau khi tải dữ liệu xong và đổ vào dataset thì ngắt kết nối. Gọi hàm ngắt kết nối, OK

5. Thao Tác Dữ Liệu Trên Dataset

Bao gồm các thao tác cơ bản: Insert, Update, Delete.

Yên tâm là bạn có thể thêm, bớt thoải mái nhiểu record trước khi qua bước cập nhật xuống database.

Ở bước này, bạn có thể code thêm mã xử lý việc hoàn nguyên dataset nếu như ta ko muốn lưu bằng cách đơn giản nhất là Clear() Table đó trong dataset và tải lại.

a. hàm thêm mới dữ liệu.
private void InsertDataset()
{
var datarow = _dataset.Tables["SinhVien"].NewRow();
datarow[0] = txtMasv.Text;
datarow[1] = txtHoten.Text;
datarow[2] = dtpNgaysinh.Text;
datarow[3] = txtQuequan.Text;
datarow[4] = cbbMakhoa.SelectedValue;
_dataset.Tables[0].Rows.Add(datarow);

}

Đầu vào từ các control : Textbox, Combbobox.....

b. sửa dữ liệu ban đầu
private void UpdateDataset()
{

var temp = txtMasv.Text;
var datarows = _dataset.Tables[0].Select("MaSV =" + "'" + temp + "'");
datarows[0][1] = txtHoten.Text;
datarows[0][2] = dtpNgaysinh.Text;
datarows[0][3] = txtQuequan.Text;
datarows[0][4] = cbbMakhoa.SelectedValue;
// Gán như vậy có nghĩa. Row[vị trí hàng][vị trí cột] của Table[vị trí] của Dataset đã được thay đổi.

}

c. xóa dữ liệu
private void DeleteDataset()
{
if (gvSinhVien.CurrentRow != null)
_dataset.Tables[0].Rows[gvSinhVien.CurrentRow.Index].Delete();
}

Cách này lấy vị trí record trên Gridview của bạn và xóa nó trong Table của Dataset.

Cách khác bạn xác định vị trí index của record trong table thông qua MaSV nhập vào.
var temp = txtMasv.Text;
var datarows = _dataset.Tables[0].Select("MaSV =" + "'" + temp + "'");
foreach (var datarow in datarows)
{
var index = _dataset.Tables[0].Rows.IndexOf(datarow);
_dataset.Tables[0].Rows[index].Delete();
}

6. Đồng Bộ Dataset Với Databbase

Dùng lệnh update của Data Apdater:
 _dasinhvien.Update(_dataset, "SinhVien");

Như vậy quá trình thực thi của mô hình này đã hoàn tất.

Demo

DemoDisconnectModel




Cập nhật: 03/03/2014

Hãy tải về mã nguồn của ví dụ 2.2.1 này để thực hành.  Database vẫn dùng ở các ví dụ trước.
Nguồn: Tự Học IT Online - http://tuhocit.net


Như đã nói, với ADO.NET có hai mô hình sử dụng phổ biến là: Kết Nối & Phi Kết Nối. Hôm nay, chúng ta sẽ tìm hiểu phần mô hình kết Nối.

Phần 2: CÁCH THỨC SỬ DỤNG ADO.NET 


2.1 - Mô Hình Kết Nối
 

   Phần này, chúng ta sẽ tìm hiểu cách thức sử dụng ADO.NET trong mô hình kết nối CSDL. Điều đó có nghĩa, ứng dụng của bạn phải luôn kết nối tới CSDL để thực hiện các thao tác (Chọn, thêm, sửa xóa ...). Và hãy nhớ chúng ta sẽ không sử dụng Datasets, DataApdater trong này, mà chỉ dùng các thành phần cơ bản như: Connection, Command, DataReader.
  

ADO.NET Mô Hình Kết Nối Với SQL Server - Phần 2.1.1


Như đã nói, với ADO.NET có hai mô hình sử dụng phổ biến là: Kết Nối & Phi Kết Nối. Hôm nay, chúng ta sẽ tìm hiểu phần mô hình kết Nối.

Phần 2: CÁCH THỨC SỬ DỤNG ADO.NET 


2.1 - Mô Hình Kết Nối
 

   Phần này, chúng ta sẽ tìm hiểu cách thức sử dụng ADO.NET trong mô hình kết nối CSDL. Điều đó có nghĩa, ứng dụng của bạn phải luôn kết nối tới CSDL để thực hiện các thao tác (Chọn, thêm, sửa xóa ...). Và hãy nhớ chúng ta sẽ không sử dụng Datasets, DataApdater trong này, mà chỉ dùng các thành phần cơ bản như: Connection, Command, DataReader.
  



Phần 1: GIỚI THIỆU


Trong phần đầu này chúng ta sẽ cùng nhau đi tìm hiểu công nghệ ADO.NET của Microsoft. Nội dung thì bao la nên chúng ta sẽ chỉ tìm hiểu sơ lược để cho bạn có thể nắm rõ chức năng cũng như cách thức sử dụng vào thực tế.


1.1. ADO.NET Là Gì ?


ActiveX Data Object.NET (ADO.NET) là một thư viện phần mềm .NET Framework. Bao gồm các thành phần phần mềm cung cấp dịch vụ truy cập dữ liệu. ADO.NET được thiết kế để cho phép các nhà phát triển viết mã được quản lý cho việc tiếp cận các nguồn dữ liệu bị ngắt kết nối, có thể có quan hệ hoặc không quan hệ (như XML hoặc dữ liệu ứng dụng). Tính năng này của ADO.NET giúp ứng dụng có thể chia sẻ dữ liệu hay các ứng dụng phân tán.

ADO.NET Cơ Bản - Phần 1


Phần 1: GIỚI THIỆU


Trong phần đầu này chúng ta sẽ cùng nhau đi tìm hiểu công nghệ ADO.NET của Microsoft. Nội dung thì bao la nên chúng ta sẽ chỉ tìm hiểu sơ lược để cho bạn có thể nắm rõ chức năng cũng như cách thức sử dụng vào thực tế.


1.1. ADO.NET Là Gì ?


ActiveX Data Object.NET (ADO.NET) là một thư viện phần mềm .NET Framework. Bao gồm các thành phần phần mềm cung cấp dịch vụ truy cập dữ liệu. ADO.NET được thiết kế để cho phép các nhà phát triển viết mã được quản lý cho việc tiếp cận các nguồn dữ liệu bị ngắt kết nối, có thể có quan hệ hoặc không quan hệ (như XML hoặc dữ liệu ứng dụng). Tính năng này của ADO.NET giúp ứng dụng có thể chia sẻ dữ liệu hay các ứng dụng phân tán.


Hướng dẫn lập trình ASP.Net và SQL căn bản


Hướng dẫn lập trình ASP.NET và CSDL SQL Server


Nhằm đáp ứng nhu cầu học tập, nghiên cứu, cũng như lưu trữ lại kiến thức tôi đã quyết định quay lại tuts video này nhằm hỗ trợ các bạn mới bắt đầu học lập trình asp.net. Mong muốn góp được 1 phần nào đó giúp các bạn bới khó khăn trong việc học tập

Tất các các bài video tôi sẽ post tại bài viết này

Bài 1: Tạo Lớp dùng chung trong ASP


httpv://www.youtube.com/watch?v=96elxs-eyqc



Bài 2: Hướng dẫn tạo lớp Bus


httpv://www.youtube.com/watch?v=JjSM26on4GI



Bài 3: Hướng dẫn tạo trang đăng nhập


httpv://www.youtube.com/watch?v=EDfxzLzCUhw
Còn tiếp.....


Nguồn: Tự Học IT Online - http://tuhocit.net

Hướng dẫn lập trình ASP.NET và CSDL SQL Server

Hướng dẫn lập trình ASP.Net và SQL căn bản


Hướng dẫn lập trình ASP.NET và CSDL SQL Server


Nhằm đáp ứng nhu cầu học tập, nghiên cứu, cũng như lưu trữ lại kiến thức tôi đã quyết định quay lại tuts video này nhằm hỗ trợ các bạn mới bắt đầu học lập trình asp.net. Mong muốn góp được 1 phần nào đó giúp các bạn bới khó khăn trong việc học tập

Tất các các bài video tôi sẽ post tại bài viết này

Bài 1: Tạo Lớp dùng chung trong ASP


httpv://www.youtube.com/watch?v=96elxs-eyqc



Bài 2: Hướng dẫn tạo lớp Bus


httpv://www.youtube.com/watch?v=JjSM26on4GI



Bài 3: Hướng dẫn tạo trang đăng nhập


httpv://www.youtube.com/watch?v=EDfxzLzCUhw
Còn tiếp.....


Nguồn: Tự Học IT Online - http://tuhocit.net

Linq in .NET

Introduction

Có thể khái quát về LINQ qua các ý chính sau đây, trong những bài tới bạn có thể nắm rõ nó hơn với những ví dụ cụ thể . . .

- LINQ ( Language-Integrated Query ) :  là tập hợp các tính năng công nghệ được giới thiệu trong Visual Studio 2008 mở rộng khả năng truy vấn mạnh mẽ với cú pháp ngôn ngữ C #Visual Basic. Bắt đầu từ phiên bản .NET Framework này LINQ như là một cầu nối mạnh mẽ giữa các Object và Dữ liệu.
(LINQ được sử dụng từ .NET FW 3.5 và cao hơn)
- Trước đây, các truy vấn đối với dữ liệu được thể hiện như các chuỗi đơn giản mà không cần kiểm tra kiểu thời gian biên dịch hoặc hỗ trợ IntelliSense. Hơn nữa, bạn phải học một ngôn ngữ khác nhau truy vấn cho từng loại nguồn dữ liệu: cơ sở dữ liệu SQL, các tài liệu XML, các dịch vụ web khác nhau. LINQ giúp bạn xây dựng các truy vấn trên tất cả các loại hình đó. Các tính năng nổi bật giúp nó vươn lên đứng đầu trong khái niệm truy vấn.
- Bạn viết truy vấn  mạnh mẽ cho các đối tượng bằng cách sử dụng các từ từ khóa (keywords C# / VB.NET)  và Toán Tử quen thuộc ( Operators).


- LINQ với mã code trong sáng, hướng đối tượng cho thấy một cái nhìn rất một phú.

Ví dụ mẫu code LINQ với C#
 var numbers = testDS.Tables["Numbers"].AsEnumerable();

var numberGroups =
from n in numbers
group n by n.Field<int>("number") % 5 into g
select new { Remainder = g.Key, Numbers = g };

foreach (var g in numberGroups)
{
Console.WriteLine("Numbers with a remainder of {0} when divided by 5:", g.Remainder);
foreach (var n in g.Numbers)
{
Console.WriteLine(n.Field<int>("number"));
}
}

 

- Cho bạn thấy phải làm gì với những hỗ trợ của LINQ, không phải mất thời gian cho việc phát triển nó


- Bạn có thể viết các truy vấn LINQ trong Visual Basic hoặc C # với cơ sở dữ liệu SQL Server, các tài liệu XML, ADO.NET Datasets, và bất kỳ đối tượng nào có hỗ trợ IEnumerable hoặc generic IEnumerable Interface.
- LINQ có thể biến đổi kết quả trả về từ các truy vấn đến dạng này sang dạng khác. (Truy vấn từ SQL Server xuất ra XML)
- Đặc biệt hơn, kết quả của truy vấn này có thể được dụng bởi truy vấn thứ 2. Một truy vấn có thể là truy vấn phụ của một truy vấn khác
- Bạn có thấy LINQ cực kỳ năng động với mã code đơn giản rành mạch mà lại truy vấn được nhiều loại dữ liệu khác nhau. Giúp bạn rút ngắn thời gian triển khai dự án, và rất nhiều lợi ích khác mà bạn sẽ biết sau khi tìm hiểu loạt bài giới thiệu về LINQ này. . . 

Hiện tại LINQ hỗ trợ các công nghệ sau







 

:bye:

Bài viết xin được kết thúc tại đây, vì hiện tại Microsoft đã không còn hỗ trợ Linq to SQL nên chúng ta chỉ tìm hiểu sơ qua như vậy thôi. Nếu bạn quan tâm hãy để lại bình luận, trong bài tới sẽ tập trung vào Entity Framework, đây là cũng là phương tiện truy xuất CSDL như LINQ dạng ORM nhưng nó thuần ORM hơn Linq và đang được MS khuyến khích sử dụng bởi các tính năng của nó . . .

 


Nguồn: Tự Học IT Online - http://tuhocit.net

LINQ : What is Linq in .NET

Linq in .NET

Introduction

Có thể khái quát về LINQ qua các ý chính sau đây, trong những bài tới bạn có thể nắm rõ nó hơn với những ví dụ cụ thể . . .

- LINQ ( Language-Integrated Query ) :  là tập hợp các tính năng công nghệ được giới thiệu trong Visual Studio 2008 mở rộng khả năng truy vấn mạnh mẽ với cú pháp ngôn ngữ C #Visual Basic. Bắt đầu từ phiên bản .NET Framework này LINQ như là một cầu nối mạnh mẽ giữa các Object và Dữ liệu.
(LINQ được sử dụng từ .NET FW 3.5 và cao hơn)
- Trước đây, các truy vấn đối với dữ liệu được thể hiện như các chuỗi đơn giản mà không cần kiểm tra kiểu thời gian biên dịch hoặc hỗ trợ IntelliSense. Hơn nữa, bạn phải học một ngôn ngữ khác nhau truy vấn cho từng loại nguồn dữ liệu: cơ sở dữ liệu SQL, các tài liệu XML, các dịch vụ web khác nhau. LINQ giúp bạn xây dựng các truy vấn trên tất cả các loại hình đó. Các tính năng nổi bật giúp nó vươn lên đứng đầu trong khái niệm truy vấn.
- Bạn viết truy vấn  mạnh mẽ cho các đối tượng bằng cách sử dụng các từ từ khóa (keywords C# / VB.NET)  và Toán Tử quen thuộc ( Operators).


- LINQ với mã code trong sáng, hướng đối tượng cho thấy một cái nhìn rất một phú.

Ví dụ mẫu code LINQ với C#
 var numbers = testDS.Tables["Numbers"].AsEnumerable();

var numberGroups =
from n in numbers
group n by n.Field<int>("number") % 5 into g
select new { Remainder = g.Key, Numbers = g };

foreach (var g in numberGroups)
{
Console.WriteLine("Numbers with a remainder of {0} when divided by 5:", g.Remainder);
foreach (var n in g.Numbers)
{
Console.WriteLine(n.Field<int>("number"));
}
}

 

- Cho bạn thấy phải làm gì với những hỗ trợ của LINQ, không phải mất thời gian cho việc phát triển nó


- Bạn có thể viết các truy vấn LINQ trong Visual Basic hoặc C # với cơ sở dữ liệu SQL Server, các tài liệu XML, ADO.NET Datasets, và bất kỳ đối tượng nào có hỗ trợ IEnumerable hoặc generic IEnumerable Interface.
- LINQ có thể biến đổi kết quả trả về từ các truy vấn đến dạng này sang dạng khác. (Truy vấn từ SQL Server xuất ra XML)
- Đặc biệt hơn, kết quả của truy vấn này có thể được dụng bởi truy vấn thứ 2. Một truy vấn có thể là truy vấn phụ của một truy vấn khác
- Bạn có thấy LINQ cực kỳ năng động với mã code đơn giản rành mạch mà lại truy vấn được nhiều loại dữ liệu khác nhau. Giúp bạn rút ngắn thời gian triển khai dự án, và rất nhiều lợi ích khác mà bạn sẽ biết sau khi tìm hiểu loạt bài giới thiệu về LINQ này. . . 

Hiện tại LINQ hỗ trợ các công nghệ sau







 

:bye:

Bài viết xin được kết thúc tại đây, vì hiện tại Microsoft đã không còn hỗ trợ Linq to SQL nên chúng ta chỉ tìm hiểu sơ qua như vậy thôi. Nếu bạn quan tâm hãy để lại bình luận, trong bài tới sẽ tập trung vào Entity Framework, đây là cũng là phương tiện truy xuất CSDL như LINQ dạng ORM nhưng nó thuần ORM hơn Linq và đang được MS khuyến khích sử dụng bởi các tính năng của nó . . .

 


Nguồn: Tự Học IT Online - http://tuhocit.net

Bài này sẽ giới thiệu cho các bạn cách sử dụng cơ sở dữ liệu mẫu Northwind trên SQL SERVER. Thì tập tin đính kèm có 3 loại, là *.BAK, *.SQL, *.MDF
- Chúng ta sẽ lần lượt đi qua từng loại để các bạn biết cách xử lý chúng như thế nào cho lần sau

- Video sau đây sẽ hướng dẫn các bạn Import cơ sở dữ liệu vào SQL Server . Các bạn nên để chế độ HD cho chất lượng tốt hơn khi xem . . .
httpv://www.youtube.com/watch?v=zVawgo21qLk







 








































































































































































































Các Lệnh SQL cần nhớ
0. WHERE- Mệnh đề WHERE dùng để ràng buộc các điều kiện
- Một điều bạn cần nhớ là WHERE không phát huy tác dụng khi bạn sử dụng các hàm tập hợp, bạn có thể dùng HAVING để thay thế
1. AND / ORCú Pháp:
SELECT Cột1, Cột2, Cột3 FROM Bảng1, Bảng2 WHERE Điều Kiện 1 AND/OR Điều Kiện 2 




Example:
SELECT * FROM Employees WHERE BirthDate='12/08/1948' OR FirstName= 'ANNE';
SELECT CompanyName FROM Customers,Orders WHERE Orders.ShipVia='3' AND Orders.CustomerID = Customers.CustomerID;
2. ALTER TABLECú Pháp:
ALTER TABLE table_name ADD column_name datatype
ALTER TABLE table_name DROP COLUMN column_name 




- Lệnh ADD dùng tạo mới Table
- Lệnh DROP COLUM dùng để xóa một cột
- datatype : Kiểu dữ liệu của cột mới (Char, Nvarchar, int, date . . .)
3. AS (alias)Cú Pháp:
SELECT column_name AS column_alias FROM table_name
SELECT column_name FROM table_name AS table_alias 




Example:
SELECT FirstName From Employees AS BangNhanVien WHERE BangNhanVien.City='london';
SELECT FirstName AS TEN From Employees;
AS: Được dùng tạo bí danh cho cột hoặc bảng, nhằm rút gọn tên hoặc đổi tên hiển thị cho cột
4. BETWEENCú Pháp:
SELECT column_name FROM table_name WHERE column_name BETWEEN value1 AND value2; 




Example:
SELECT FirstName FROM Employees WHERE BirthDate BETWEEN '01/01/1945' AND '01/01/1960';
BETWEEN: giới hạn từ giá trị thứ nhất đến giá trị thứ hai.
5. CREATE DATABASECú Pháp:
CREATE DATABASE database_name;
Tạo database mới !
6. CREATE TABLECú Pháp:
CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name2 data_type,
...





- Dạng lệnh thế này bạn xem mẫu Northwind.sql để biết cú pháp trên SQL SERVER
7. CREATE INDEXCú Pháp
CREATE INDEX index_name ON table_name (column_name) 

CREATE UNIQUE INDEX index_name ON table_name (column_name)




Index: Giúp SQL truy xuất dữ liệu nhanh hơn, tuy nhiên khiến hệ thống chậm chạp hơn một chút so với việc không dùng Index
Xem mẫu Northwind.sql để biết cú pháp trên SQL SERVER
8. CREATE VIEWCú Pháp:
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition 




- Chức năng của View là tạo một bảng giả lập lấy nguồn dữ liệu từ bảng gốc, đáp ứng xem theo yêu cầu của người dùng mà không cần tạo bảng mới
Xem mẫu Northwind.sql để biết cú pháp trên SQL SERVER
9. DELETECú Pháp:
DELETE FROM table_name WHERE some_column=some_value
- Xóa dữ liệu trong bảng theo điều kiện
DELETE FROM table_name
DELETE * FROM table_name
- 2 lệnh này xóa toàn bộ nội dung của bảng 




DELETE FROM Employees WHERE FirstName='TUAN'; // Chỉ xóa hàng có tên là "TUAN"
DELETE FROM Employees;
10. DROP DATABASECú Pháp:
DROP DATABASE database_name 




- Chỉ có chức năng duy nhất là xóa hẳn Database // Cần thận khi test lệnh này
11. DROP INDEXCú Pháp:
DROP INDEX table_name.index_name (SQL Server)
DROP INDEX index_name ON table_name (MS Access)
DROP INDEX index_name (DB2/Oracle)
ALTER TABLE table_name
DROP INDEX index_name (MySQL) 




- Lệnh này hủy Index
12. DROP TABLECú Pháp:
DROP TABLE table_name;
- Xóa hẳn một table // Cẩn thận khi dùng lệnh này
13. GROUP BYCú Pháp:
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name 




- Xem lại phần 3 của serial này !
- GROUP BY là một lệnh quan trọng nếu bạn sử dụng các hàm tập hợp
14. HAVING- Xem lại phần 3 của serial này !
- Bạn cần nhớ HAVING thay thế cho WHERE nếu chúng ta sử dụng các hàm tập hợp để tính,
15. INCú Pháp:
SELECT column_name FROM table_name WHERE column_name IN (value1,value2,..) 




Example:
SELECT FirstName FROM Employees WHERE Extension IN ('5467','3457');
- Dùng In tăng sức mạnh cho mệnh đề WHERE.
- Ở lệnh sql trên có điều kiện tại cột Extension chứa 2 giá trị(...) Nếu thỏa sẽ lấy ra FirstName
16. INSERT INTO- Lệnh này dùng để thêm mới dữ liệu vào bảng
- Các bạn xem lại Phần 1
17. INNER JOIN- Lệnh JOIN này lấy ra phần chung của 2 table
- Xem lại Phần 2
18. LEFT JOIN- Lệnh JOIN này lấy ra phần chung của Table 1,2 Và toàn bộ table 1
- Xem lại Phần 2
19. RIGHT JOIN- Lệnh JOIN này lấy ra phần chung của Table 1,2 Và toàn bộ table 2
- Xem lại Phần 2
20. FULL JOIN- Lấy ra các cột theo yêu cầu cho dù 2 table có Match hay không
- Nếu giá trị nào không match thì sẽ để trống
- Xem lại Phần 2
21. LIKE- Thêm ràng buộc cho mệnh đề WHERE
- Lấy ra các giá trị Match với yêu cầu đề ra 




SELECT FirstName FROM Employees WHERE LastName LIKE '%L%';
- Lệnh sql trên lấy ra FirstName Nếu LastName có chứa từ "L"
- Xem lại phần 2
22. ORDER BYNếu bạn muốn sắp xếp kết quả query ra thì cần phải sử dụng nó
- Nó có thể sắp xếp tăng dần hoặc giảm dần
23. SELECTLấy ra cái gì đó . . .
24. SELECT *Lấy ra tất cả ...
25. SELECT DISTINCT- Lấy ra các giá trị và bỏ qua các giá trị trùng
- Nếu 2 giá trị Match nhau thì chỉ lấy một
- Nếu 2 Row có các cột đều giống nhau thì chỉ lấy 1
- Phụ thuộc vào yêu cầu SELECT của chúng ta, nếu yêu cầu 1 cột thì nó sẽ so sánh 1 cột
26. SELECT INTO- Dùng để di chuyển dữ liệu từ bảng này sang bảng mới
27. SELECT TOP- Lấy ra dữ liệu trên cùng của Bảng
- Ví dụ ta lấy 20 hàng đầu tiên hoặc lấy các hàng đầu tiền 45% của tổng số hàng trong Bảng
- Xem lại Phần 2
28. TRUNCATE TABLEThay vì xóa luôn cả Bảng như DROP TABLE, lệnh này chỉ xóa toàn bộ nội dung của Bảng
29. UNION- Dùng để kết hợp các câu lệnh SELECT
- Xem lại Phần 2
30. UNION ALL- Xem lại ví dụ Phần 2
31. UPDATE- Dùng để cập nhật (sửa) lại dữ liệu trong Bảng

:hi:

BravoHex
Nguồn: Tự Học IT Online - http://tuhocit.net

SQL LANGUAGE : REFERENCE [Tips]

Bài này sẽ giới thiệu cho các bạn cách sử dụng cơ sở dữ liệu mẫu Northwind trên SQL SERVER. Thì tập tin đính kèm có 3 loại, là *.BAK, *.SQL, *.MDF
- Chúng ta sẽ lần lượt đi qua từng loại để các bạn biết cách xử lý chúng như thế nào cho lần sau

- Video sau đây sẽ hướng dẫn các bạn Import cơ sở dữ liệu vào SQL Server . Các bạn nên để chế độ HD cho chất lượng tốt hơn khi xem . . .
httpv://www.youtube.com/watch?v=zVawgo21qLk







 








































































































































































































Các Lệnh SQL cần nhớ
0. WHERE- Mệnh đề WHERE dùng để ràng buộc các điều kiện
- Một điều bạn cần nhớ là WHERE không phát huy tác dụng khi bạn sử dụng các hàm tập hợp, bạn có thể dùng HAVING để thay thế
1. AND / ORCú Pháp:
SELECT Cột1, Cột2, Cột3 FROM Bảng1, Bảng2 WHERE Điều Kiện 1 AND/OR Điều Kiện 2 




Example:
SELECT * FROM Employees WHERE BirthDate='12/08/1948' OR FirstName= 'ANNE';
SELECT CompanyName FROM Customers,Orders WHERE Orders.ShipVia='3' AND Orders.CustomerID = Customers.CustomerID;
2. ALTER TABLECú Pháp:
ALTER TABLE table_name ADD column_name datatype
ALTER TABLE table_name DROP COLUMN column_name 




- Lệnh ADD dùng tạo mới Table
- Lệnh DROP COLUM dùng để xóa một cột
- datatype : Kiểu dữ liệu của cột mới (Char, Nvarchar, int, date . . .)
3. AS (alias)Cú Pháp:
SELECT column_name AS column_alias FROM table_name
SELECT column_name FROM table_name AS table_alias 




Example:
SELECT FirstName From Employees AS BangNhanVien WHERE BangNhanVien.City='london';
SELECT FirstName AS TEN From Employees;
AS: Được dùng tạo bí danh cho cột hoặc bảng, nhằm rút gọn tên hoặc đổi tên hiển thị cho cột
4. BETWEENCú Pháp:
SELECT column_name FROM table_name WHERE column_name BETWEEN value1 AND value2; 




Example:
SELECT FirstName FROM Employees WHERE BirthDate BETWEEN '01/01/1945' AND '01/01/1960';
BETWEEN: giới hạn từ giá trị thứ nhất đến giá trị thứ hai.
5. CREATE DATABASECú Pháp:
CREATE DATABASE database_name;
Tạo database mới !
6. CREATE TABLECú Pháp:
CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name2 data_type,
...





- Dạng lệnh thế này bạn xem mẫu Northwind.sql để biết cú pháp trên SQL SERVER
7. CREATE INDEXCú Pháp
CREATE INDEX index_name ON table_name (column_name) 

CREATE UNIQUE INDEX index_name ON table_name (column_name)




Index: Giúp SQL truy xuất dữ liệu nhanh hơn, tuy nhiên khiến hệ thống chậm chạp hơn một chút so với việc không dùng Index
Xem mẫu Northwind.sql để biết cú pháp trên SQL SERVER
8. CREATE VIEWCú Pháp:
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition 




- Chức năng của View là tạo một bảng giả lập lấy nguồn dữ liệu từ bảng gốc, đáp ứng xem theo yêu cầu của người dùng mà không cần tạo bảng mới
Xem mẫu Northwind.sql để biết cú pháp trên SQL SERVER
9. DELETECú Pháp:
DELETE FROM table_name WHERE some_column=some_value
- Xóa dữ liệu trong bảng theo điều kiện
DELETE FROM table_name
DELETE * FROM table_name
- 2 lệnh này xóa toàn bộ nội dung của bảng 




DELETE FROM Employees WHERE FirstName='TUAN'; // Chỉ xóa hàng có tên là "TUAN"
DELETE FROM Employees;
10. DROP DATABASECú Pháp:
DROP DATABASE database_name 




- Chỉ có chức năng duy nhất là xóa hẳn Database // Cần thận khi test lệnh này
11. DROP INDEXCú Pháp:
DROP INDEX table_name.index_name (SQL Server)
DROP INDEX index_name ON table_name (MS Access)
DROP INDEX index_name (DB2/Oracle)
ALTER TABLE table_name
DROP INDEX index_name (MySQL) 




- Lệnh này hủy Index
12. DROP TABLECú Pháp:
DROP TABLE table_name;
- Xóa hẳn một table // Cẩn thận khi dùng lệnh này
13. GROUP BYCú Pháp:
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name 




- Xem lại phần 3 của serial này !
- GROUP BY là một lệnh quan trọng nếu bạn sử dụng các hàm tập hợp
14. HAVING- Xem lại phần 3 của serial này !
- Bạn cần nhớ HAVING thay thế cho WHERE nếu chúng ta sử dụng các hàm tập hợp để tính,
15. INCú Pháp:
SELECT column_name FROM table_name WHERE column_name IN (value1,value2,..) 




Example:
SELECT FirstName FROM Employees WHERE Extension IN ('5467','3457');
- Dùng In tăng sức mạnh cho mệnh đề WHERE.
- Ở lệnh sql trên có điều kiện tại cột Extension chứa 2 giá trị(...) Nếu thỏa sẽ lấy ra FirstName
16. INSERT INTO- Lệnh này dùng để thêm mới dữ liệu vào bảng
- Các bạn xem lại Phần 1
17. INNER JOIN- Lệnh JOIN này lấy ra phần chung của 2 table
- Xem lại Phần 2
18. LEFT JOIN- Lệnh JOIN này lấy ra phần chung của Table 1,2 Và toàn bộ table 1
- Xem lại Phần 2
19. RIGHT JOIN- Lệnh JOIN này lấy ra phần chung của Table 1,2 Và toàn bộ table 2
- Xem lại Phần 2
20. FULL JOIN- Lấy ra các cột theo yêu cầu cho dù 2 table có Match hay không
- Nếu giá trị nào không match thì sẽ để trống
- Xem lại Phần 2
21. LIKE- Thêm ràng buộc cho mệnh đề WHERE
- Lấy ra các giá trị Match với yêu cầu đề ra 




SELECT FirstName FROM Employees WHERE LastName LIKE '%L%';
- Lệnh sql trên lấy ra FirstName Nếu LastName có chứa từ "L"
- Xem lại phần 2
22. ORDER BYNếu bạn muốn sắp xếp kết quả query ra thì cần phải sử dụng nó
- Nó có thể sắp xếp tăng dần hoặc giảm dần
23. SELECTLấy ra cái gì đó . . .
24. SELECT *Lấy ra tất cả ...
25. SELECT DISTINCT- Lấy ra các giá trị và bỏ qua các giá trị trùng
- Nếu 2 giá trị Match nhau thì chỉ lấy một
- Nếu 2 Row có các cột đều giống nhau thì chỉ lấy 1
- Phụ thuộc vào yêu cầu SELECT của chúng ta, nếu yêu cầu 1 cột thì nó sẽ so sánh 1 cột
26. SELECT INTO- Dùng để di chuyển dữ liệu từ bảng này sang bảng mới
27. SELECT TOP- Lấy ra dữ liệu trên cùng của Bảng
- Ví dụ ta lấy 20 hàng đầu tiên hoặc lấy các hàng đầu tiền 45% của tổng số hàng trong Bảng
- Xem lại Phần 2
28. TRUNCATE TABLEThay vì xóa luôn cả Bảng như DROP TABLE, lệnh này chỉ xóa toàn bộ nội dung của Bảng
29. UNION- Dùng để kết hợp các câu lệnh SELECT
- Xem lại Phần 2
30. UNION ALL- Xem lại ví dụ Phần 2
31. UPDATE- Dùng để cập nhật (sửa) lại dữ liệu trong Bảng

:hi:

BravoHex
Nguồn: Tự Học IT Online - http://tuhocit.net

Phần này giới thiệu các hàm trong SQL, xin giới thiệu lại là cấu trúc, cú pháp của ngôn ngữ SQL chuẩn sẽ khác đôi chút với MySQL, SQL Server . . .(Điều đó có nghĩa là một số lệnh trình bày ở trên đây sẽ không thực thi được trên các hệ CSDL trên)

Tuy là các hệ csdl này dùng chuẩn SQL nhưng ngoài các thành phần chính có phát triển thêm vài thành phần mang nét riêng của nó, nói là vậy nhưng không có gì đáng lo ngại cả !

(Cuối bài sẽ cập nhật một video hướng dẫn thao tác với các  lệnh cụ thể)


SQL LANGUAGE: FUNCTION [3/3]

Phần này giới thiệu các hàm trong SQL, xin giới thiệu lại là cấu trúc, cú pháp của ngôn ngữ SQL chuẩn sẽ khác đôi chút với MySQL, SQL Server . . .(Điều đó có nghĩa là một số lệnh trình bày ở trên đây sẽ không thực thi được trên các hệ CSDL trên)

Tuy là các hệ csdl này dùng chuẩn SQL nhưng ngoài các thành phần chính có phát triển thêm vài thành phần mang nét riêng của nó, nói là vậy nhưng không có gì đáng lo ngại cả !

(Cuối bài sẽ cập nhật một video hướng dẫn thao tác với các  lệnh cụ thể)



Ở phần trước tôi đã giới thiệu với các bạn SQL cơ bản. Hôm nay xin tiếp tục

- Trong phần này giới thiệu các từ khóa nâng cao và cách thức sử dụng chúng trong một số Hệ quản trị CSDL . . .

- Cơ sở dữ liệu trong các ví dụ demo có thể tải về tại đây để thực hành: NorthWind






















































BookMark Express (Lựa chọn Nhanh)
SELECT TOP
LIKE and NOT LIKE
Wildcards - Ký Hiệu
IN
BETWEEN
Aliases - Bí Danh
JOIN {INNER JOIN / LEFT JOIN / RIGHT JOIN / FULL JOIN}
UNION
SELECT INTO
CREATE DATABASE & TABLE
CONSTRAINTS {NOT NULL / UNIQUE / PRIMARY KEY / FOREIGN KEY / CHECK / DEFAULT}
CREATE INDEX
DROP & TRUNCATE
ALTER
AUTO_INCREMENT / IDENTITY / AUTOINCREMENT
VIEWS

1. SQL SELECT TOP


Mệnh đề SELECT TOP được sử dụng để xác định số lượng Records trả về. Nó rất hữu ích nếu Table có rất nhiều dữ liệu
Cú Pháp
-SQL Server

Select Top 5 From tblStudent;// 5 là số hàng trả về, tính từ hàng đầu tiên.

 
Select Top 10 PERCENT From tblStudent  //10 PERCENT lấy về 10% dữ liệu, tính từ hàng đầu tiên.

 

-MySQL

Select * From tblStudent LIMIT 5;// LIMIT 5: là số hàng trả về, tính từ hàng đầu tiên.

 

-Oracle

Select * From tblStudent WHERE ROWNUM <=5;


2. SQL LIKE and NOT LIKE


Toán tử LIKE

-Được dùng trong mệnh đề WHERE để tìm kiếm một khuôn mẫu quy định trong một cột
Cú Pháp
- Sử dụng kèm theo ký tự  phần trăm "%"

- SELECT * FROM tblStudent WHERE FirstName LIKE '%Tuan';

- SELECT * FROM tblStudent WHERE FirstName LIKE 'Tran%';

- SELECT * FROM tblStudent WHERE FirstName LIKE '%Thi%';


Ký tự '%' được hiểu là tất cả kèm theo Ký tự xác định như trên

- Sử dụng NOT LIKE để phủ định lại các ví dụ trên

- SELECT * FROM tblStudent WHERE FirstName NOT LIKE '%Tuan';

- SELECT * FROM tblStudent WHERE FirstName NOT LIKE 'Tran%';

- SELECT * FROM tblStudent WHERE FirstName NOT LIKE '%Thi%';


3. SQL Wildcards - Ký Hiệu


- Các ký hiệu này thường được sử dụng kèm với toán tử LIKE để tìm kiếm dữ liệu trọng bảng

Cú Pháp

- Có 3 ký hiệu chính được sử dụng.

%: được hiểu là 1 chuỗi bất kỳ

_: duy nhất một ký tự bất kỳ

[xxxx] : xxx nằm trong khung [] là các chữ cái

EX:

- Sử dụng "_"

- Select * FROM tblStudent WHERE FirstName LIKE '_uan';

- Select * FROM tblStudent WHERE FirstName LIKE 'T_an';

- Select * FROM tblStudent WHERE FirstName LIKE 'H_o_g';


- Sử dụng [xxxx]

Select * FROM tblStudent WHERE FirstName LIKE '[TBN]%'

// Lấy tất cả records nếu FirstName có các chữ cái đầu T,B,N
Select * FROM tblStudent WHERE FirstName LIKE '[!TBN]%'

// Lấy tất cả records nếu FirstName Không có các chữ cái đầu T,B,N
Select * FROM tblStudent WHERE FirstName LIKE '[A-F]%'

// Lấy tất cả records nếu FirstName có các chữ cái đầu Từ A đến F

// [A-F] : Lấy thứ tự A B C D F

4. SQL IN


Toán tử IN

- Dùng để chỉ định nhiều giá trị trong mệnh đề WHERE.

Cú pháp
Select * FROM tblStudent WHERE FirstName IN ('Tuan','Minh');

// Lấy ra tất cả records  nếu FirstName có Tuan và Minh


5. SQL BETWEEN


Toán tử BETWEEN

- Dùng để lựa chọn các giá trị trong một phạm vi xác định. Các giá trị xác định có thể là số, văn bản hoặc ngày tháng

Cú pháp

Select * FROM tblStudent WHERE Birthday BETWEEN  #26/06/1990# AND #26/06/1979#;



Select * FROM tblStudent WHERE Birthday NOT BETWEEN  #26/06/1990# AND #26/06/1979#;// Phủ định lại ví dụ trên



Select * FROM tblStudent WHERE FirstName BETWEEN 'A' AND 'C';

// Lấy ra tất cả records nếu FirstName có chữ cái đầu giữa A và C.

// 'A' and 'C' : Là ký tự thứ tự kế tiếp A,B,C

- Ví dụ khác kết hợp với IN

Select * FROM tblStudent WHERE (FirstName BETWEEN 'A' AND 'C') AND StudentID IN ('SV01','SV02');

Select * FROM tblStudent WHERE (FirstName BETWEEN 'A' AND 'C') AND NOT StudentID IN ('SV01','SV02');


6. SQL Aliases - Bí Danh


Được dùng:

- Dùng để tạo một tên tạm thời sử dụng cho 1 bảng hoặc 1 colunm

- Có nhiều hơn một Bảng cần dùng trong một truy vấn

- Kết hợp 2 hoặc nhiều colunm với nhau

Cú pháp :

- Dùng Cho Colunm

Select FirstName AS Tên, LastName AS [Họ Lót] FROM tblStudent;

// Nếu có khoảng cách thì dùng "" hoặc []

// Kết quả trả về gồm 2 cột với tên mới đã set như trên


Select FirstName AS Tên, Address+', '+Birthday+', '+Sex+', '+Email AS [ Liên Hệ] FROM tblStudent;

// Kết quả trả về gồm 2 cột. Riêng cột thứ 2 với tên Liên Hệ chứa chuỗi bao gồm : Address,Birthday,Sex,Email

- Dùng Cho Table

Ví dụ sử dụng: CSDL Northwind

SELECT o.OrderID, o.OrderDate, c.CustomerName FROM Customers AS c, Orders AS o WHERE c.CustomerName='Alfreds Futterkiste';


Và câu không dùng bí danh:

SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName FROM Customers, Orders WHERE Customers.CustomerName='Alfreds Futterkiste';


7. SQL JOIN


Câu lệnh JOIN

- Được sử dụng để kết hợp các hàng từ hai hoặc nhiều bảng. Dựa trên một trường (field) chung giữa chúng

- Different SQL JOINs - Các loại SQL JOIN khác nhau thường sử dụng

Ví dụ sử dụng: CSDL Northwind

7.1 INNER JOIN:


Là loại phổ biến nhất. Dùng để lấy về tất cả các hàng từ nhiều Bảng nếu điều kiện tham gia được đáp ứng


SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate FROM Orders INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;



SELECT o.OrderID, c.CustomerName, o.OrderDate FROM Orders AS o INNER JOIN Customers AS c ON o.CustomerID = c.CustomerID;


// 2 Ví dụ trên là tương tương nhau

7.2 LEFT JOIN





Hiểu đơn giản là: Lấy ra tất dữ liệu Bảng 1 Và một phần dữ liệu Bảng 2 trùng với Bảng 1 thỏa với yêu cầu được đáp ứng

Nếu Bảng 2 không có dữ liệu nào thỏa với yêu cầu được đáp ứng. Câu lệnh vẫn lấy ra tất cả dữ liệu Bảng 1 và để NULL  giá trị thuộc Bảng 2

Ex:

SELECT Customers.CustomerName, Orders.OrderID// Chọn Cột CustomerName và OrderID

FROM Customers// Từ Bảng Customers(Bảng 1)

LEFT JOIN Orders// Và Bảng Orders(Bảng 2)

ON Customers.CustomerID=Orders.CustomerID// Điều kiện ID của Bảng 1 và 2 thỏa mãn

ORDER BY Customers.CustomerName;// Sắp Xếp tăng dần dựa vào CustomerName


Mã SQL trên có thể được viết lại như sau tùy vào các chương trình CSDL:

SELECT Customers.CustomerName, Orders.OrderID

FROM Customers

LEFT OUTER JOIN Orders// LEFT OUTER JOIN tương đương LEFT JOIN

ON Customers.CustomerID=Orders.CustomerID

ORDER BY Customers.CustomerName;


7.3 RIGHT JOIN



Hiểu đơn giản là: Lấy ra tất dữ liệu Bảng 2 Và một phần dữ liệu Bảng 1 trùng với Bảng 2 thỏa với yêu cầu được đáp ứng

Nếu Bảng 1 không có dữ liệu nào thỏa với yêu cầu được đáp ứng. Câu lệnh vẫn lấy ra tất cả dữ liệu Bảng 2 và để NULL  giá trị thuộc Bảng 1

Ex:

- Trong một vài hệ CSDL thì: RIGHT JOIN còn được gọi là RIGHT OUTER JOIN

SELECT Customers.CustomerName, Orders.OrderID

FROM Customers

RIGHT JOIN Orders

ON Customers.CustomerID=Orders.CustomerID

ORDER BY Customers.CustomerName;


7.4 FULL JOIN





Lấy ra tất cả dữ liệu Bang 1 và 2. Tuy nhiên nếu Row của Bảng 1 mà không Match ( Trùng lặp / Thỏa mãn điều kiện) với Bảng 2 hoặc ngược lại. Thì Row đó chỉ hiển thị giá trị hoặc Bảng 1 hoặc bảng 2.

Ex:

SELECT Customers.CustomerName, Orders.OrderID   // Lấy giá trị Cột CustomerName Và  OrderID

FROM Customers// Từ Bảng Customers (Bảng 1)

FULL OUTER JOIN Orders// Và Bảng Orders    (Bảng 2)

ON Customers.CustomerID=Orders.CustomerID    // 2 Bảng Macth khi CustomerID = CustomerID

ORDER BY Customers.CustomerName;    // Sắp xếp thứ tự tăng dần dựa vào CustomerName


8. SQL UNION


Toán Tử UNION

- Dùng để kết hợp 2 hoặc nhiều câu lệnh SELECT

- Dữ liệu lấy ra phải theo quy tắc sau:

Mỗi câu lệnh SELECT phải có số cột bằng nhau, Chung kiểu dữ liệu, Theo thứ tự

Có 2 lệnh được sử dụng là:

UNION: Lấy ra tất cả giá trị nhưng bỏ qua giá trị trùng lặp

UNION ALL: Lấy ra tất cả giá trị.

Ex:

SELECT City FROM Customers// Lấy giá trị của Cột City trong bảng Customers

UNION// Kết hợp nhưng loại bỏ giá trị trùng

SELECT City FROM Suppliers// Lấy giá trị của Cột City trong bảng Suppliers

ORDER BY City

// Kết quả nhận được là một bảng có cột City chứa dữ liệu của cả 2 Bảng trên



SELECT City FROM Customers

UNION ALL// Kết hợp và lấy ra tất cả ...

SELECT City FROM Suppliers

ORDER BY City;


9. SQL SELECT INTO


Lệnh SELECT INTO

- Dùng để sao chép một Bảng ra một Bảng mới. Có thể sao chép 1 hoặc tất cả Colunm trong Bảng đó

Cú Pháp:

SELECT * INTO Persons_New FROM Persons; // Sao chép toàn bộ Bảng Persons sang Bảng mới :Persons_New.



SELECT LastName,FirstName INTO Persons_Backup FROM Persons; // Chỉ sao chép 2 colunm:LastName và FirstName



SELECT LastName,Firstname INTO Persons_Backup FROM Persons WHERE City='Sandnes';// Sử dụng mệnh để WHERE


// Sử dụng với JOIN
SELECT Persons.LastName,Orders.OrderNo

INTO Persons_Order_Backup

FROM Persons

INNER JOIN Orders

ON Persons.P_Id=Orders.P_Id;


// Sử dụng mệnh đề IN để sao chép sang CSDL khác !!!
SELECT * INTO Persons_Backup

IN 'Backup.mdb'

FROM Persons;


10. SQL CREATE DATABASE & TABLE


Lệnh Create Database

- Dùng để tạp mới một CSDL

Cú Pháp:

CREATE DATABASE New_Database;// Tạo mới CSDL New_Database


Lệnh Create Table

- Dùng để tạo các Bảng mới trong một CSDL

Cú Pháp:

CREATE TABLE Persons// Tạo mới bảng Persons với 5 colunm

(

P_Id int,//Tên colunm - Kiểu dữ liệuLastName varchar(255),//-------------------------

FirstName varchar(255),//-------------------------

Address varchar(255),//-------------------------

City varchar(255)//-------------------------

)




// Kết quả là một bảng với dữ liệu trống

11. SQL CONSTRAINTS


Constraints - Các ràng buộc

- Dùng để hạn chế các loại dữ liệu nhất định được phép sử dụng trong CSDL

- Các ràng buộc này được tạo ra khi tạo một bảng mới trên hệ CSDL hoặc trong lệnh CREATE TABLE, sau khi tạo bảng với lệnh ALTER TABLE

Các ràng buộc cơ bản:

NOT NULL


UNIQUE


PRIMARY KEY


FOREIGN KEY


CHECK


DEFAULT


// Nhắc lại: Các ràng buộc có thể tùy chỉnh trực tiếp trên hệ CSDL

11.1 NOT NULL



- Ràng buộc NOT NULL được áp dụng cho Colunm để yêu cầu không được để trống giá trị

Ex:



CREATE TABLE Persons

(P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)



11.2. UNIQUE


- Ràng buộc này dùng để buộc các giá trị trong 1 cột không được trùng nhau: Ví dụ: Điện Thoại, Email, Account, CMND . . .
Ex:
// Với MySQL
CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

UNIQUE (P_Id)

)




// Với SQL Server / Oracle
CREATE TABLE Persons

(

P_Id int NOT NULL UNIQUE,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)




// Với MySQL / SQL Server / Oracle / MS Access:

// Áp dụng cùng lúc nhiều cột -  Cách này không cần phải quan tâm lắm
CREATE TABLE Persons

(P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CONSTRAINT uni_PersonID UNIQUE (P_Id,LastName)// uni_PersonID: là tên tùy ý, nó giống như tên gọi cho UNIQUE

)



- Sử dụng với tuyên bố ALTER, áp dụng khi muốn thêm vào sau khi bảng đã được tạo.


// VớiMySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons ADD UNIQUE (P_Id)





ALTER TABLE Persons ADD CONSTRAINT uni_PersonID UNIQUE (P_Id,LastName)// Áp dụng cùng lúc nhiều cột (Colunm)



- Loại bỏ ràng buộc UNIQUE

Như đã nói bạn có thể tùy chỉnh trực tiếp tại hệ CSDL thì có thể sử dụng các lệnh SQL:



ALTER TABLE Persons DROP INDEX uni_PersonID// Với MySQL





ALTER TABLE Persons DROP CONSTRAINT uni_PersonID// Với SQL Server / Oracle / MS Access





11.3. PRIMARY KEY



Ràng buộc Primary Key- Khóa Chính

- Là duy nhất trong mỗi Bảng

- Cột có khóa chính phải có giá trị là duy nhất, không trùng lặp (Giống UNIQUE)

- Cột khóa chính không thể rỗng (NOT NULL)

- Mỗi Bảng cần có 1 khóa chính và tối đa chỉ 1 khóa chính (Có thể không cần dùng khóa chính)




Cú Pháp:


// Với MySQL
CREATE TABLE Persons

(P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

PRIMARY KEY (P_Id)

)




// Với SQL Server/ Oracle
CREATE TABLE Persons

(

P_Id int NOT NULL PRIMARY KEY,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

 



// Đặt trên nhiều cột với: MySQL / SQL Server / Oracle . . .
CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)

)// Ví dụ này chỉ có 1 khóa chính: pk_PersonID dùng cho 2 colunm



- Dùng với ALTER sau khi đã tạo Bảng



// Với MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons ADD PRIMARY KEY (P_Id)

 




ALTER TABLE Persons ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)

 


Lưu ý: Nếu dùng ALTER thì Colunm lúc khởi tạo phải là NOT NULL


- Loại bỏ ràng buộc này



// Với MySQL
ALTER TABLE Persons DROP PRIMARY KEY

 



// Với SQL Server / Oracle / MS Access
ALTER TABLE Persons DROP CONSTRAINT pk_PersonID

 



11.4. FOREIGN KEY



Ràng buộc Foreign Key - Khóa Ngoại

- Chính là khóa chính được sử dụng ở Bảng khác

- Dùng để ngăn chặn việc phá hoại liên kết giữa 2 Bảng. (Ràng buộc giữa 2 bảng)

- Giá trị của khóa chính tương đương Khóa ngoại nằm ở Bảng khác, nên việc nhập dữ liệu phải hợp lệ !



 


Cú Pháp:

- Tạo khóa ngoại của colunm Bảng 1 cho Bảng 2.


// Với MySQL
CREATE TABLE Orders

(

O_Id int NOT NULL,

OrderNo int NOT NULL,

P_Id int,

PRIMARY KEY (O_Id),

FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)// Colunm: P_Id thuộc Table: Persons

)

 



// Với SQL Server / Oracle / MS Access
CREATE TABLE Orders

(

O_Id int NOT NULL PRIMARY KEY,

OrderNo int NOT NULL,

P_Id int FOREIGN KEY REFERENCES Persons(P_Id)

)

 



// Sử dụng cho nhiều cột

// Với MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders

(

O_Id int NOT NULL,

OrderNo int NOT NULL,

P_Id int,

PRIMARY KEY (O_Id),

CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)

REFERENCES Persons(P_Id)

)



- Sử dụng với ALTER



// Với MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders ADD FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)

 




ALTER TABLE Orders ADD CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)

 



- Loại bỏ ràng buộc này


// Với MySQL
ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders

 



// Với SQL Server / Oracle / MS Access:
ALTER TABLE Orders DROP CONSTRAINT fk_PerOrders

 



11.5. CHECK



Ràng buộc Check

- Dùng để giới hạn, quy định phạm vi giá trị được phép của một Colunm (Cột)


Ex:



// Với MySQL
CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CHECK (P_Id>0)// Quy định giá trị nhập vào cột P_Id phải > 0

)

 



// Với SQL Server / Oracle / MS Access
CREATE TABLE Persons

(

P_Id int NOT NULL CHECK (P_Id>0),

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)





// Thiết lập trên nhiều cột bằng cách đặt tên cho CHECK

//Với MySQL / SQL Server / Oracle / MS Access
CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')

)

 


- Sử dụng với ALTER sau khi đã tạo Bảng

// Với MySQL / SQL Server / Oracle / MS Access:



ALTER TABLE Persons ADD CHECK (P_Id>0)

ALTER TABLE Persons ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')

 


- Loại bỏ ràng buộc này


// Với MySQL:
ALTER TABLE Persons DROP CHECK chk_Person

 



// Với SQL Server / Oracle / MS Access:
ALTER TABLE Persons DROP CONSTRAINT chk_Person

 



11.6. DEFAULT



Ràng buộc Default

- Dùng để thiết lập giá trị mặc định của một cột

Ví dụ:  GiớiTính: được mặc định là "Nam", hoặc Email: mặc định là "Null"

- Sau khi thiết lập giá trị sẽ được thêm vào các records mới ngay sau đó


Ex:


// Với My SQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255) DEFAULT 'Sandnes'// Mặc định cột "City" là: Sandnes

)

 




// Lấy các giá trị của System như ngày, giờ áp dụng cho các colunm
CREATE TABLE Orders

(

O_Id int NOT NULL,// Kiểu giá trị INT

OrderNo int NOT NULL,// Kiểu giá trị INT

P_Id int,// Kiểu giá trị INT

OrderDate date DEFAULT GETDATE()// Mặc định cột "OrderDate" là : Ngày hiện tại của hệ thống(Lấy qua hàm GETDATE() )

)

 



- Sử dụng với ALTER sau khi đã tạo Bảng

Ex:


// Với MySQL:
ALTER TABLE Persons ALTER City SET DEFAULT 'SANDNES'

 



// Với SQL Server / MS Access:
ALTER TABLE Persons ALTER COLUMN City SET DEFAULT 'SANDNES'

 



// Với Oracle:
ALTER TABLE Persons MODIFY City DEFAULT 'SANDNES'

 



- Loại bỏ ràng buộc này


// Với MySQL:
ALTER TABLE Persons ALTER City DROP DEFAULT

 



// Với SQL Server / Oracle / MS Access:
ALTER TABLE Persons ALTER COLUMN City DROP DEFAULT

 



12. SQL CREATE INDEX


Lệnh Create Index

- Dùng để tạo ra chỉ mục (indexes) trong một Bảng

- Nó giống như tạo đầu mục sách trong thư viện vậy

- Cho phép các ứng dụng CSDL tìm ra dữ liệu nhanh chóng mà không cần lọc tất cả Bảng

- Tất nhiên là bạn sẽ không nhìn thấy giá trị Index này, chỉ có ứng dụng sử dụng nó để tăng tốc độ tìm kiếm

- Tuy nhiên một hạn chế của việc sử dụng giá trị Index là tốc độ load  Bảng sẽ chậm hơn ban đầu. Do đó bạn nên sử dụng Index cho cột nào được tìm kiếm thường xuyên

Cú Pháp:

CREATE INDEX nameIndex ON Persons (LastName)

CREATE INDEX nameIndex ON Persons (LastName, FirstName)


// Tạo giá trị Index duy nhất trên Bảng
CREATE UNIQUE INDEX nameIndex ON Persons (LastName)

 

13. SQL DROP & TRUNCATE


Lệnh DROP

- Dùng để xóa Indexes, Table, Database

- INDEX- Xóa chỉ mục ra khỏi Table

Cú Pháp:
//MS Access:
DROP INDEX TênIndex ON TênBảng


//MS SQL Server:
DROP INDEX TênBảng.TênIndex


//DB2/Oracle:
DROP INDEX TênIndex


//MySQL:
ALTER TABLE TênBảng DROP INDEX TênIndex


- TABLE- Xóa bảng khỏi CSDL

DROP TABLE TênBảng


- DATABASE - Xóa Database

DROP DATABASE TênDatabase


Lệnh TRUNCATE

- Dùng để xóa toàn bộ dữ liệu của Bảng nhưng không xóa Bảng đó

TRUNCATE TABLE TênBảng


14. SQL ALTER


Lệnh Alter

- Dùng để Thêm, Xóa Và sửa đổi kiểu dữ liệu các cột trong Bảng đã tạo

Cú Pháp:
// Thêm
ALTER TABLE table_name ADD column_name datatype

 

// Xóa
ALTER TABLE table_name DROP COLUMN column_name

 

- Sửa đổi kiểu dữ liệu *( Thường được dùng cho Bảng mới được tạo, chưa nhập dữ liệu)
// VớiSQL Server / MS Access:
ALTER TABLE table_name ALTER COLUMN column_name datatype

 

// Với My SQL / Oracle:
ALTER TABLE table_name MODIFY column_name datatype

 

15. SQL AUTO_INCREMENT / IDENTITY / AUTOINCREMENT


Field Auto Increment

- Sử dụng để tự động tăng một số duy nhất khi thêm mới 1 record

+ Với MySQL

CREATE TABLE Persons

(

P_Id int NOT NULL AUTO_INCREMENT,// Tự tăng cột: P_Id

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

PRIMARY KEY (P_Id)

)

 

- Giá Trị tự động tăng khởi đầu trong MySQL là: 1

để thay đổi dùng lệnh sau:

ALTER TABLE Persons AUTO_INCREMENT = 7

 

+ Với SQL Server

CREATE TABLE Persons

(

P_Id int PRIMARY KEY IDENTITY,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

 

- Giá Trị tự động tăng khởi đầu trong SQL Server là: 1

để thay đổi số bắt đầu và số giá trị mỗi lần tăng chỉ cần thêm:
IDENTITY(1,2)

+ Với Access

CREATE TABLE Persons

(

P_Id PRIMARY KEY AUTOINCREMENT,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

 

- Thay đổi từ khóa AUTOINCREMENT thành AUTOINCREMENT(1,2) để tùy chỉnh giá trị tăng

+ Với Oracle

CREATE SEQUENCE seq_person

// seq_person: là tên của đối tượng có chức năng sau:

MINVALUE 1// Giá trị nhỏ nhất là 1

START WITH 1// Bắt đầu tăng với : 1

INCREMENT BY 1// Mỗi lần tăng : 1

CACHE 10  // Bộ nhớ cache : 10(Tùy chọn này giúp tăng tốc độ truy cập)

 

16. SQL VIEWS


Bảng ảo - Virtual Table

- Tạo ra một Table ảo từ 1 hoặc nhiều Table Join với nhau

- Ảo nghĩa là không thật, dữ liệu của nó hoàn toàn được chứa từ Table khác.

- Trong 1 views chứa nhiều lệnh Query để tạo ra một Table ảo với dữ liệu mà người dùng cần sử dụng nhất từ các Table khác

- Bạn đã sử dụng Accsess thì Views tương tự như tạo mới Query trong Accsess vậy !!

- Tốc độ truy vấn từ Bảng Views nhanh hay chậm hơn truy vấn trực tiếp vào Table gốc phụ thuộc vào nhiều yếu tố. Không thể nói bên nào nhanh hơn !

- Ưu điểm không thể phủ nhận của Views là sự tiện dụng.

- Dùng che dấu những Colunm dữ liệu quan trọng trong các Bảng. Tạo Views để hạn chế số Colunm,Row được xem, truy cập

Cú Pháp:

CREATE VIEW view_name AS

SELECT column_name(s)// (s) : Có thể nhiều Colunm

FROM table_name

WHERE condition

 

Ví dụ với CSDL NorthWind
// Tạo mới 1 Views lấy tất cả dữ liệu từ : ProductID, ProductName
CREATE VIEW [Current Product List] AS

SELECT ProductID,ProductName

FROM Products

WHERE Discontinued=No  // Điều kiện Discontinued = No (Dữ liệu từ Products không ngắt quãng)

 

// Xem dữ liệu từ Views mà ta đã tạo ra
SELECT * FROM [Current Product List]

 

- Bạn có thể tạo các điều kiện WHERE khác nhau để tạo Views theo mong muốn !

Ex:

CREATE VIEW [Category Sales For Year] AS

SELECT DISTINCT CategoryName,Sum(ProductSales) AS CategorySales

FROM [Product Sales for Year]

GROUP BY CategoryName

 

// Xem dữ liệu từ Views này:
SELECT * FROM [Category Sales For Year] WHERE CategoryName='Beverages';

 

-Thêm một clounm vào Views đã tạo

Ex:

CREATE VIEW [Current Product List] AS

SELECT ProductID,ProductName,Category// Ở đây thêm Colunm: Category vào Views: [Current Product List]

FROM Products

WHERE Discontinued=No

 

- Bạn có thể dùng lệnh ALTER

- Xóa một Views

DROP VIEW view_name

 



Nguồn: Tự Học IT Online - http://tuhocit.net

SQL LANGUAGE: ADVANCED [2/3]

Ở phần trước tôi đã giới thiệu với các bạn SQL cơ bản. Hôm nay xin tiếp tục

- Trong phần này giới thiệu các từ khóa nâng cao và cách thức sử dụng chúng trong một số Hệ quản trị CSDL . . .

- Cơ sở dữ liệu trong các ví dụ demo có thể tải về tại đây để thực hành: NorthWind






















































BookMark Express (Lựa chọn Nhanh)
SELECT TOP
LIKE and NOT LIKE
Wildcards - Ký Hiệu
IN
BETWEEN
Aliases - Bí Danh
JOIN {INNER JOIN / LEFT JOIN / RIGHT JOIN / FULL JOIN}
UNION
SELECT INTO
CREATE DATABASE & TABLE
CONSTRAINTS {NOT NULL / UNIQUE / PRIMARY KEY / FOREIGN KEY / CHECK / DEFAULT}
CREATE INDEX
DROP & TRUNCATE
ALTER
AUTO_INCREMENT / IDENTITY / AUTOINCREMENT
VIEWS

1. SQL SELECT TOP


Mệnh đề SELECT TOP được sử dụng để xác định số lượng Records trả về. Nó rất hữu ích nếu Table có rất nhiều dữ liệu
Cú Pháp
-SQL Server

Select Top 5 From tblStudent;// 5 là số hàng trả về, tính từ hàng đầu tiên.

 
Select Top 10 PERCENT From tblStudent  //10 PERCENT lấy về 10% dữ liệu, tính từ hàng đầu tiên.

 

-MySQL

Select * From tblStudent LIMIT 5;// LIMIT 5: là số hàng trả về, tính từ hàng đầu tiên.

 

-Oracle

Select * From tblStudent WHERE ROWNUM <=5;


2. SQL LIKE and NOT LIKE


Toán tử LIKE

-Được dùng trong mệnh đề WHERE để tìm kiếm một khuôn mẫu quy định trong một cột
Cú Pháp
- Sử dụng kèm theo ký tự  phần trăm "%"

- SELECT * FROM tblStudent WHERE FirstName LIKE '%Tuan';

- SELECT * FROM tblStudent WHERE FirstName LIKE 'Tran%';

- SELECT * FROM tblStudent WHERE FirstName LIKE '%Thi%';


Ký tự '%' được hiểu là tất cả kèm theo Ký tự xác định như trên

- Sử dụng NOT LIKE để phủ định lại các ví dụ trên

- SELECT * FROM tblStudent WHERE FirstName NOT LIKE '%Tuan';

- SELECT * FROM tblStudent WHERE FirstName NOT LIKE 'Tran%';

- SELECT * FROM tblStudent WHERE FirstName NOT LIKE '%Thi%';


3. SQL Wildcards - Ký Hiệu


- Các ký hiệu này thường được sử dụng kèm với toán tử LIKE để tìm kiếm dữ liệu trọng bảng

Cú Pháp

- Có 3 ký hiệu chính được sử dụng.

%: được hiểu là 1 chuỗi bất kỳ

_: duy nhất một ký tự bất kỳ

[xxxx] : xxx nằm trong khung [] là các chữ cái

EX:

- Sử dụng "_"

- Select * FROM tblStudent WHERE FirstName LIKE '_uan';

- Select * FROM tblStudent WHERE FirstName LIKE 'T_an';

- Select * FROM tblStudent WHERE FirstName LIKE 'H_o_g';


- Sử dụng [xxxx]

Select * FROM tblStudent WHERE FirstName LIKE '[TBN]%'

// Lấy tất cả records nếu FirstName có các chữ cái đầu T,B,N
Select * FROM tblStudent WHERE FirstName LIKE '[!TBN]%'

// Lấy tất cả records nếu FirstName Không có các chữ cái đầu T,B,N
Select * FROM tblStudent WHERE FirstName LIKE '[A-F]%'

// Lấy tất cả records nếu FirstName có các chữ cái đầu Từ A đến F

// [A-F] : Lấy thứ tự A B C D F

4. SQL IN


Toán tử IN

- Dùng để chỉ định nhiều giá trị trong mệnh đề WHERE.

Cú pháp
Select * FROM tblStudent WHERE FirstName IN ('Tuan','Minh');

// Lấy ra tất cả records  nếu FirstName có Tuan và Minh


5. SQL BETWEEN


Toán tử BETWEEN

- Dùng để lựa chọn các giá trị trong một phạm vi xác định. Các giá trị xác định có thể là số, văn bản hoặc ngày tháng

Cú pháp

Select * FROM tblStudent WHERE Birthday BETWEEN  #26/06/1990# AND #26/06/1979#;



Select * FROM tblStudent WHERE Birthday NOT BETWEEN  #26/06/1990# AND #26/06/1979#;// Phủ định lại ví dụ trên



Select * FROM tblStudent WHERE FirstName BETWEEN 'A' AND 'C';

// Lấy ra tất cả records nếu FirstName có chữ cái đầu giữa A và C.

// 'A' and 'C' : Là ký tự thứ tự kế tiếp A,B,C

- Ví dụ khác kết hợp với IN

Select * FROM tblStudent WHERE (FirstName BETWEEN 'A' AND 'C') AND StudentID IN ('SV01','SV02');

Select * FROM tblStudent WHERE (FirstName BETWEEN 'A' AND 'C') AND NOT StudentID IN ('SV01','SV02');


6. SQL Aliases - Bí Danh


Được dùng:

- Dùng để tạo một tên tạm thời sử dụng cho 1 bảng hoặc 1 colunm

- Có nhiều hơn một Bảng cần dùng trong một truy vấn

- Kết hợp 2 hoặc nhiều colunm với nhau

Cú pháp :

- Dùng Cho Colunm

Select FirstName AS Tên, LastName AS [Họ Lót] FROM tblStudent;

// Nếu có khoảng cách thì dùng "" hoặc []

// Kết quả trả về gồm 2 cột với tên mới đã set như trên


Select FirstName AS Tên, Address+', '+Birthday+', '+Sex+', '+Email AS [ Liên Hệ] FROM tblStudent;

// Kết quả trả về gồm 2 cột. Riêng cột thứ 2 với tên Liên Hệ chứa chuỗi bao gồm : Address,Birthday,Sex,Email

- Dùng Cho Table

Ví dụ sử dụng: CSDL Northwind

SELECT o.OrderID, o.OrderDate, c.CustomerName FROM Customers AS c, Orders AS o WHERE c.CustomerName='Alfreds Futterkiste';


Và câu không dùng bí danh:

SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName FROM Customers, Orders WHERE Customers.CustomerName='Alfreds Futterkiste';


7. SQL JOIN


Câu lệnh JOIN

- Được sử dụng để kết hợp các hàng từ hai hoặc nhiều bảng. Dựa trên một trường (field) chung giữa chúng

- Different SQL JOINs - Các loại SQL JOIN khác nhau thường sử dụng

Ví dụ sử dụng: CSDL Northwind

7.1 INNER JOIN:


Là loại phổ biến nhất. Dùng để lấy về tất cả các hàng từ nhiều Bảng nếu điều kiện tham gia được đáp ứng


SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate FROM Orders INNER JOIN Customers ON Orders.CustomerID=Customers.CustomerID;



SELECT o.OrderID, c.CustomerName, o.OrderDate FROM Orders AS o INNER JOIN Customers AS c ON o.CustomerID = c.CustomerID;


// 2 Ví dụ trên là tương tương nhau

7.2 LEFT JOIN





Hiểu đơn giản là: Lấy ra tất dữ liệu Bảng 1 Và một phần dữ liệu Bảng 2 trùng với Bảng 1 thỏa với yêu cầu được đáp ứng

Nếu Bảng 2 không có dữ liệu nào thỏa với yêu cầu được đáp ứng. Câu lệnh vẫn lấy ra tất cả dữ liệu Bảng 1 và để NULL  giá trị thuộc Bảng 2

Ex:

SELECT Customers.CustomerName, Orders.OrderID// Chọn Cột CustomerName và OrderID

FROM Customers// Từ Bảng Customers(Bảng 1)

LEFT JOIN Orders// Và Bảng Orders(Bảng 2)

ON Customers.CustomerID=Orders.CustomerID// Điều kiện ID của Bảng 1 và 2 thỏa mãn

ORDER BY Customers.CustomerName;// Sắp Xếp tăng dần dựa vào CustomerName


Mã SQL trên có thể được viết lại như sau tùy vào các chương trình CSDL:

SELECT Customers.CustomerName, Orders.OrderID

FROM Customers

LEFT OUTER JOIN Orders// LEFT OUTER JOIN tương đương LEFT JOIN

ON Customers.CustomerID=Orders.CustomerID

ORDER BY Customers.CustomerName;


7.3 RIGHT JOIN



Hiểu đơn giản là: Lấy ra tất dữ liệu Bảng 2 Và một phần dữ liệu Bảng 1 trùng với Bảng 2 thỏa với yêu cầu được đáp ứng

Nếu Bảng 1 không có dữ liệu nào thỏa với yêu cầu được đáp ứng. Câu lệnh vẫn lấy ra tất cả dữ liệu Bảng 2 và để NULL  giá trị thuộc Bảng 1

Ex:

- Trong một vài hệ CSDL thì: RIGHT JOIN còn được gọi là RIGHT OUTER JOIN

SELECT Customers.CustomerName, Orders.OrderID

FROM Customers

RIGHT JOIN Orders

ON Customers.CustomerID=Orders.CustomerID

ORDER BY Customers.CustomerName;


7.4 FULL JOIN





Lấy ra tất cả dữ liệu Bang 1 và 2. Tuy nhiên nếu Row của Bảng 1 mà không Match ( Trùng lặp / Thỏa mãn điều kiện) với Bảng 2 hoặc ngược lại. Thì Row đó chỉ hiển thị giá trị hoặc Bảng 1 hoặc bảng 2.

Ex:

SELECT Customers.CustomerName, Orders.OrderID   // Lấy giá trị Cột CustomerName Và  OrderID

FROM Customers// Từ Bảng Customers (Bảng 1)

FULL OUTER JOIN Orders// Và Bảng Orders    (Bảng 2)

ON Customers.CustomerID=Orders.CustomerID    // 2 Bảng Macth khi CustomerID = CustomerID

ORDER BY Customers.CustomerName;    // Sắp xếp thứ tự tăng dần dựa vào CustomerName


8. SQL UNION


Toán Tử UNION

- Dùng để kết hợp 2 hoặc nhiều câu lệnh SELECT

- Dữ liệu lấy ra phải theo quy tắc sau:

Mỗi câu lệnh SELECT phải có số cột bằng nhau, Chung kiểu dữ liệu, Theo thứ tự

Có 2 lệnh được sử dụng là:

UNION: Lấy ra tất cả giá trị nhưng bỏ qua giá trị trùng lặp

UNION ALL: Lấy ra tất cả giá trị.

Ex:

SELECT City FROM Customers// Lấy giá trị của Cột City trong bảng Customers

UNION// Kết hợp nhưng loại bỏ giá trị trùng

SELECT City FROM Suppliers// Lấy giá trị của Cột City trong bảng Suppliers

ORDER BY City

// Kết quả nhận được là một bảng có cột City chứa dữ liệu của cả 2 Bảng trên



SELECT City FROM Customers

UNION ALL// Kết hợp và lấy ra tất cả ...

SELECT City FROM Suppliers

ORDER BY City;


9. SQL SELECT INTO


Lệnh SELECT INTO

- Dùng để sao chép một Bảng ra một Bảng mới. Có thể sao chép 1 hoặc tất cả Colunm trong Bảng đó

Cú Pháp:

SELECT * INTO Persons_New FROM Persons; // Sao chép toàn bộ Bảng Persons sang Bảng mới :Persons_New.



SELECT LastName,FirstName INTO Persons_Backup FROM Persons; // Chỉ sao chép 2 colunm:LastName và FirstName



SELECT LastName,Firstname INTO Persons_Backup FROM Persons WHERE City='Sandnes';// Sử dụng mệnh để WHERE


// Sử dụng với JOIN
SELECT Persons.LastName,Orders.OrderNo

INTO Persons_Order_Backup

FROM Persons

INNER JOIN Orders

ON Persons.P_Id=Orders.P_Id;


// Sử dụng mệnh đề IN để sao chép sang CSDL khác !!!
SELECT * INTO Persons_Backup

IN 'Backup.mdb'

FROM Persons;


10. SQL CREATE DATABASE & TABLE


Lệnh Create Database

- Dùng để tạp mới một CSDL

Cú Pháp:

CREATE DATABASE New_Database;// Tạo mới CSDL New_Database


Lệnh Create Table

- Dùng để tạo các Bảng mới trong một CSDL

Cú Pháp:

CREATE TABLE Persons// Tạo mới bảng Persons với 5 colunm

(

P_Id int,//Tên colunm - Kiểu dữ liệuLastName varchar(255),//-------------------------

FirstName varchar(255),//-------------------------

Address varchar(255),//-------------------------

City varchar(255)//-------------------------

)




// Kết quả là một bảng với dữ liệu trống

11. SQL CONSTRAINTS


Constraints - Các ràng buộc

- Dùng để hạn chế các loại dữ liệu nhất định được phép sử dụng trong CSDL

- Các ràng buộc này được tạo ra khi tạo một bảng mới trên hệ CSDL hoặc trong lệnh CREATE TABLE, sau khi tạo bảng với lệnh ALTER TABLE

Các ràng buộc cơ bản:

NOT NULL


UNIQUE


PRIMARY KEY


FOREIGN KEY


CHECK


DEFAULT


// Nhắc lại: Các ràng buộc có thể tùy chỉnh trực tiếp trên hệ CSDL

11.1 NOT NULL



- Ràng buộc NOT NULL được áp dụng cho Colunm để yêu cầu không được để trống giá trị

Ex:



CREATE TABLE Persons

(P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)



11.2. UNIQUE


- Ràng buộc này dùng để buộc các giá trị trong 1 cột không được trùng nhau: Ví dụ: Điện Thoại, Email, Account, CMND . . .
Ex:
// Với MySQL
CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

UNIQUE (P_Id)

)




// Với SQL Server / Oracle
CREATE TABLE Persons

(

P_Id int NOT NULL UNIQUE,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)




// Với MySQL / SQL Server / Oracle / MS Access:

// Áp dụng cùng lúc nhiều cột -  Cách này không cần phải quan tâm lắm
CREATE TABLE Persons

(P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CONSTRAINT uni_PersonID UNIQUE (P_Id,LastName)// uni_PersonID: là tên tùy ý, nó giống như tên gọi cho UNIQUE

)



- Sử dụng với tuyên bố ALTER, áp dụng khi muốn thêm vào sau khi bảng đã được tạo.


// VớiMySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons ADD UNIQUE (P_Id)





ALTER TABLE Persons ADD CONSTRAINT uni_PersonID UNIQUE (P_Id,LastName)// Áp dụng cùng lúc nhiều cột (Colunm)



- Loại bỏ ràng buộc UNIQUE

Như đã nói bạn có thể tùy chỉnh trực tiếp tại hệ CSDL thì có thể sử dụng các lệnh SQL:



ALTER TABLE Persons DROP INDEX uni_PersonID// Với MySQL





ALTER TABLE Persons DROP CONSTRAINT uni_PersonID// Với SQL Server / Oracle / MS Access





11.3. PRIMARY KEY



Ràng buộc Primary Key- Khóa Chính

- Là duy nhất trong mỗi Bảng

- Cột có khóa chính phải có giá trị là duy nhất, không trùng lặp (Giống UNIQUE)

- Cột khóa chính không thể rỗng (NOT NULL)

- Mỗi Bảng cần có 1 khóa chính và tối đa chỉ 1 khóa chính (Có thể không cần dùng khóa chính)




Cú Pháp:


// Với MySQL
CREATE TABLE Persons

(P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

PRIMARY KEY (P_Id)

)




// Với SQL Server/ Oracle
CREATE TABLE Persons

(

P_Id int NOT NULL PRIMARY KEY,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

 



// Đặt trên nhiều cột với: MySQL / SQL Server / Oracle . . .
CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)

)// Ví dụ này chỉ có 1 khóa chính: pk_PersonID dùng cho 2 colunm



- Dùng với ALTER sau khi đã tạo Bảng



// Với MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons ADD PRIMARY KEY (P_Id)

 




ALTER TABLE Persons ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)

 


Lưu ý: Nếu dùng ALTER thì Colunm lúc khởi tạo phải là NOT NULL


- Loại bỏ ràng buộc này



// Với MySQL
ALTER TABLE Persons DROP PRIMARY KEY

 



// Với SQL Server / Oracle / MS Access
ALTER TABLE Persons DROP CONSTRAINT pk_PersonID

 



11.4. FOREIGN KEY



Ràng buộc Foreign Key - Khóa Ngoại

- Chính là khóa chính được sử dụng ở Bảng khác

- Dùng để ngăn chặn việc phá hoại liên kết giữa 2 Bảng. (Ràng buộc giữa 2 bảng)

- Giá trị của khóa chính tương đương Khóa ngoại nằm ở Bảng khác, nên việc nhập dữ liệu phải hợp lệ !



 


Cú Pháp:

- Tạo khóa ngoại của colunm Bảng 1 cho Bảng 2.


// Với MySQL
CREATE TABLE Orders

(

O_Id int NOT NULL,

OrderNo int NOT NULL,

P_Id int,

PRIMARY KEY (O_Id),

FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)// Colunm: P_Id thuộc Table: Persons

)

 



// Với SQL Server / Oracle / MS Access
CREATE TABLE Orders

(

O_Id int NOT NULL PRIMARY KEY,

OrderNo int NOT NULL,

P_Id int FOREIGN KEY REFERENCES Persons(P_Id)

)

 



// Sử dụng cho nhiều cột

// Với MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Orders

(

O_Id int NOT NULL,

OrderNo int NOT NULL,

P_Id int,

PRIMARY KEY (O_Id),

CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)

REFERENCES Persons(P_Id)

)



- Sử dụng với ALTER



// Với MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Orders ADD FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)

 




ALTER TABLE Orders ADD CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)

 



- Loại bỏ ràng buộc này


// Với MySQL
ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders

 



// Với SQL Server / Oracle / MS Access:
ALTER TABLE Orders DROP CONSTRAINT fk_PerOrders

 



11.5. CHECK



Ràng buộc Check

- Dùng để giới hạn, quy định phạm vi giá trị được phép của một Colunm (Cột)


Ex:



// Với MySQL
CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CHECK (P_Id>0)// Quy định giá trị nhập vào cột P_Id phải > 0

)

 



// Với SQL Server / Oracle / MS Access
CREATE TABLE Persons

(

P_Id int NOT NULL CHECK (P_Id>0),

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)





// Thiết lập trên nhiều cột bằng cách đặt tên cho CHECK

//Với MySQL / SQL Server / Oracle / MS Access
CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')

)

 


- Sử dụng với ALTER sau khi đã tạo Bảng

// Với MySQL / SQL Server / Oracle / MS Access:



ALTER TABLE Persons ADD CHECK (P_Id>0)

ALTER TABLE Persons ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')

 


- Loại bỏ ràng buộc này


// Với MySQL:
ALTER TABLE Persons DROP CHECK chk_Person

 



// Với SQL Server / Oracle / MS Access:
ALTER TABLE Persons DROP CONSTRAINT chk_Person

 



11.6. DEFAULT



Ràng buộc Default

- Dùng để thiết lập giá trị mặc định của một cột

Ví dụ:  GiớiTính: được mặc định là "Nam", hoặc Email: mặc định là "Null"

- Sau khi thiết lập giá trị sẽ được thêm vào các records mới ngay sau đó


Ex:


// Với My SQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255) DEFAULT 'Sandnes'// Mặc định cột "City" là: Sandnes

)

 




// Lấy các giá trị của System như ngày, giờ áp dụng cho các colunm
CREATE TABLE Orders

(

O_Id int NOT NULL,// Kiểu giá trị INT

OrderNo int NOT NULL,// Kiểu giá trị INT

P_Id int,// Kiểu giá trị INT

OrderDate date DEFAULT GETDATE()// Mặc định cột "OrderDate" là : Ngày hiện tại của hệ thống(Lấy qua hàm GETDATE() )

)

 



- Sử dụng với ALTER sau khi đã tạo Bảng

Ex:


// Với MySQL:
ALTER TABLE Persons ALTER City SET DEFAULT 'SANDNES'

 



// Với SQL Server / MS Access:
ALTER TABLE Persons ALTER COLUMN City SET DEFAULT 'SANDNES'

 



// Với Oracle:
ALTER TABLE Persons MODIFY City DEFAULT 'SANDNES'

 



- Loại bỏ ràng buộc này


// Với MySQL:
ALTER TABLE Persons ALTER City DROP DEFAULT

 



// Với SQL Server / Oracle / MS Access:
ALTER TABLE Persons ALTER COLUMN City DROP DEFAULT

 



12. SQL CREATE INDEX


Lệnh Create Index

- Dùng để tạo ra chỉ mục (indexes) trong một Bảng

- Nó giống như tạo đầu mục sách trong thư viện vậy

- Cho phép các ứng dụng CSDL tìm ra dữ liệu nhanh chóng mà không cần lọc tất cả Bảng

- Tất nhiên là bạn sẽ không nhìn thấy giá trị Index này, chỉ có ứng dụng sử dụng nó để tăng tốc độ tìm kiếm

- Tuy nhiên một hạn chế của việc sử dụng giá trị Index là tốc độ load  Bảng sẽ chậm hơn ban đầu. Do đó bạn nên sử dụng Index cho cột nào được tìm kiếm thường xuyên

Cú Pháp:

CREATE INDEX nameIndex ON Persons (LastName)

CREATE INDEX nameIndex ON Persons (LastName, FirstName)


// Tạo giá trị Index duy nhất trên Bảng
CREATE UNIQUE INDEX nameIndex ON Persons (LastName)

 

13. SQL DROP & TRUNCATE


Lệnh DROP

- Dùng để xóa Indexes, Table, Database

- INDEX- Xóa chỉ mục ra khỏi Table

Cú Pháp:
//MS Access:
DROP INDEX TênIndex ON TênBảng


//MS SQL Server:
DROP INDEX TênBảng.TênIndex


//DB2/Oracle:
DROP INDEX TênIndex


//MySQL:
ALTER TABLE TênBảng DROP INDEX TênIndex


- TABLE- Xóa bảng khỏi CSDL

DROP TABLE TênBảng


- DATABASE - Xóa Database

DROP DATABASE TênDatabase


Lệnh TRUNCATE

- Dùng để xóa toàn bộ dữ liệu của Bảng nhưng không xóa Bảng đó

TRUNCATE TABLE TênBảng


14. SQL ALTER


Lệnh Alter

- Dùng để Thêm, Xóa Và sửa đổi kiểu dữ liệu các cột trong Bảng đã tạo

Cú Pháp:
// Thêm
ALTER TABLE table_name ADD column_name datatype

 

// Xóa
ALTER TABLE table_name DROP COLUMN column_name

 

- Sửa đổi kiểu dữ liệu *( Thường được dùng cho Bảng mới được tạo, chưa nhập dữ liệu)
// VớiSQL Server / MS Access:
ALTER TABLE table_name ALTER COLUMN column_name datatype

 

// Với My SQL / Oracle:
ALTER TABLE table_name MODIFY column_name datatype

 

15. SQL AUTO_INCREMENT / IDENTITY / AUTOINCREMENT


Field Auto Increment

- Sử dụng để tự động tăng một số duy nhất khi thêm mới 1 record

+ Với MySQL

CREATE TABLE Persons

(

P_Id int NOT NULL AUTO_INCREMENT,// Tự tăng cột: P_Id

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

PRIMARY KEY (P_Id)

)

 

- Giá Trị tự động tăng khởi đầu trong MySQL là: 1

để thay đổi dùng lệnh sau:

ALTER TABLE Persons AUTO_INCREMENT = 7

 

+ Với SQL Server

CREATE TABLE Persons

(

P_Id int PRIMARY KEY IDENTITY,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

 

- Giá Trị tự động tăng khởi đầu trong SQL Server là: 1

để thay đổi số bắt đầu và số giá trị mỗi lần tăng chỉ cần thêm:
IDENTITY(1,2)

+ Với Access

CREATE TABLE Persons

(

P_Id PRIMARY KEY AUTOINCREMENT,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

 

- Thay đổi từ khóa AUTOINCREMENT thành AUTOINCREMENT(1,2) để tùy chỉnh giá trị tăng

+ Với Oracle

CREATE SEQUENCE seq_person

// seq_person: là tên của đối tượng có chức năng sau:

MINVALUE 1// Giá trị nhỏ nhất là 1

START WITH 1// Bắt đầu tăng với : 1

INCREMENT BY 1// Mỗi lần tăng : 1

CACHE 10  // Bộ nhớ cache : 10(Tùy chọn này giúp tăng tốc độ truy cập)

 

16. SQL VIEWS


Bảng ảo - Virtual Table

- Tạo ra một Table ảo từ 1 hoặc nhiều Table Join với nhau

- Ảo nghĩa là không thật, dữ liệu của nó hoàn toàn được chứa từ Table khác.

- Trong 1 views chứa nhiều lệnh Query để tạo ra một Table ảo với dữ liệu mà người dùng cần sử dụng nhất từ các Table khác

- Bạn đã sử dụng Accsess thì Views tương tự như tạo mới Query trong Accsess vậy !!

- Tốc độ truy vấn từ Bảng Views nhanh hay chậm hơn truy vấn trực tiếp vào Table gốc phụ thuộc vào nhiều yếu tố. Không thể nói bên nào nhanh hơn !

- Ưu điểm không thể phủ nhận của Views là sự tiện dụng.

- Dùng che dấu những Colunm dữ liệu quan trọng trong các Bảng. Tạo Views để hạn chế số Colunm,Row được xem, truy cập

Cú Pháp:

CREATE VIEW view_name AS

SELECT column_name(s)// (s) : Có thể nhiều Colunm

FROM table_name

WHERE condition

 

Ví dụ với CSDL NorthWind
// Tạo mới 1 Views lấy tất cả dữ liệu từ : ProductID, ProductName
CREATE VIEW [Current Product List] AS

SELECT ProductID,ProductName

FROM Products

WHERE Discontinued=No  // Điều kiện Discontinued = No (Dữ liệu từ Products không ngắt quãng)

 

// Xem dữ liệu từ Views mà ta đã tạo ra
SELECT * FROM [Current Product List]

 

- Bạn có thể tạo các điều kiện WHERE khác nhau để tạo Views theo mong muốn !

Ex:

CREATE VIEW [Category Sales For Year] AS

SELECT DISTINCT CategoryName,Sum(ProductSales) AS CategorySales

FROM [Product Sales for Year]

GROUP BY CategoryName

 

// Xem dữ liệu từ Views này:
SELECT * FROM [Category Sales For Year] WHERE CategoryName='Beverages';

 

-Thêm một clounm vào Views đã tạo

Ex:

CREATE VIEW [Current Product List] AS

SELECT ProductID,ProductName,Category// Ở đây thêm Colunm: Category vào Views: [Current Product List]

FROM Products

WHERE Discontinued=No

 

- Bạn có thể dùng lệnh ALTER

- Xóa một Views

DROP VIEW view_name

 



Nguồn: Tự Học IT Online - http://tuhocit.net

Phần đầu này, giới thiệu các lệnh cơ bản nhất và cũng quan trọng nhất trong SQL. Việc học nó quả thực không khó vì cấu trúc cú pháp không nhiều. Vấn đề là các bạn sẽ dùng nó như thế nào, áp dụng ra sao. Điều này tùy thuộc vào khả năng nhạy bén của từng cá nhân. Hy vọng qua loạt bài giới thiệu về ngôn ngữ SQL này, các bạn thấy nó  là thông tin bổ ích cho mình.



SQL LANGUAGE : BASIC [1/3]

Phần đầu này, giới thiệu các lệnh cơ bản nhất và cũng quan trọng nhất trong SQL. Việc học nó quả thực không khó vì cấu trúc cú pháp không nhiều. Vấn đề là các bạn sẽ dùng nó như thế nào, áp dụng ra sao. Điều này tùy thuộc vào khả năng nhạy bén của từng cá nhân. Hy vọng qua loạt bài giới thiệu về ngôn ngữ SQL này, các bạn thấy nó  là thông tin bổ ích cho mình.




Xem Nhiều