Hỏi Đáp SQL------------ Không có câu hỏi nào là sơ đẳng --------

Update bảng từ Join và những điều cần lưu tâm

Khi ứng dụng ngày càng lớn và phức tạp, bạn sẽ gặp những trường hợp phải Update bảng với dữ liệu từ bảng nào đó, chứ không chỉ đơn thuần là những giá trị cố định. Khi ấy bạn không thể thực hiện câu lệnh Update truyền thống như "update bangA set c=1 where id=2". Trong trường hợp này bạn phải Join các bảng lại rồi sau đó mới Update bảng cần Update.

Chuyển chuỗi thành dòng với hàm parsename()

Chuyển chuỗi thành dòng là nhu cầu khá phổ biến trong lập trình CSDL. Và có lẽ các bạn cũng đã biết giải pháp cho yêu cầu này, đó là sử dụng hàm phụ trợ để cắt chuỗi, chuyển thành bảng cho từng chuỗi. Hàm này có rất nhiều trên mạng với nhiều cách thức khác nhau, mà tên phổ biến là "split".

Sử dụng SELECT INTO trong việc copy dữ liệu

Có nhiều cách thức dùng để copy hay di chuyển dữ liệu từ nơi này sang nơi khác, tùy yêu cầu ta chọn cách thức sử dụng cho thích hợp. Với những yêu cầu phức tạp, nhiều điều kiện đi kèm, Integration Service là là sự lựa chọn số 1. Nhưng với những yêu cầu đơn giản, bạn có thể sử dụng các phương pháp giản dị khác. Trong bài viết này tôi chỉ đề cập đến SELECT INTO, tôi sẽ trình bày các phương pháp khác vào các bài viết sau.

Phục hồi CSDL với tập tin MDF

Cách tốt nhất để phục hồi cơ sở dữ liệu vẫn là Backup and Restore. Nhưng trong thực tế, nhiều khi bạn chỉ muốn phục hồi những CSDL mẫu hoặc những CSDL đơn giản mà không có tập tin bak.
 

Vấn đề liên quan đến tính liên tục

Giả sử bạn có bảng sau đây

 
Trường a  là nhóm, trường b có giá trị tăng dần ứng với mỗi nhóm, trường c là giá trị cần tính toán như số lượng, số tiền v.v. Bây giờ bạn muốn biểu thị dựa vào tính liên tục của trường b, ứng với mỗi nhóm của trường a, cho tổng số của trường c như sau


Kết quả bao gồm : nhóm dựa vào trường a, bắt đầu của trường b, kết thúc của trường b, và tổng số giá trị của trường c.
 
Vấn đề được giải quyết thế nào ?
 

Một vài điều căn bản cần lưu ý về UNPIVOT

UNPIVOT là phương pháp chuyển cách thức biểu thị dữ liệu từ cột sang dòng. Giả thử bạn có bảng sau đây:

Giống và khác nhau giữa JOIN và APPLY

JOIN và APPLY có khả năng gần giống nhau, nhưng do JOIN là mệnh đề chính thống nên được sử dụng rộng rãi hơn. Tuy nhiên, APPLY có thể ứng dụng vào rất nhiều trường hợp mà ta không thể dùng JOIN, hoặc nếu có thể dùng thì cũng rối rắm và không hiệu quả. Cũng vì đặc tính gần giống nhau này mà nhiều lập trình viên không tìm hiểu kỹ cách thức hoạt động của APPLY một cách thấu đáo để có thể sử dụng nó tốt hơn.

Giả thử bạn có 2 bảng KhachHang và HoaDon như sau:

Chọn những dòng không tồn tại ở bảng nào đó

Đây là yêu cầu khá phổ biến, nhất là trong lãnh vực Data Warehouse.

Giả thử bạn có 2 bảng A và B, liên hệ bởi trường Id. Bây giờ bạn muốn lấy tất cả các dòng ở bảng A với điều kiện trường Id của nó không tồn tại ở bảng B.
 

Những khái niệm căn bản cần hiểu rõ khi sử dụng PIVOT

Pivot là phương pháp để chuyển biểu thị từ dòng sang cột, với 1 dạng tính toán nào đó. 

Trước hết, hãy xét bảng ví dụ dưới đây: 

declare @temp table (id int identity(1,1), a int, b int, c int) 
insert into @temp values 
(1,1,7),(4,1,6),(3,2,8),(1,2,1),(2,1,3),(3,2,5), 
(1,1,2),(4,1,7),(3,4,9),(4,2,2),(1,1,3),(1,2,4), 
(3,3,2),(2,3,5),(4,2,9),(4,3,7),(1,3,1),(4,2,6); 

Cách thức sử dụng lệnh MERGE

MERGE là lệnh dùng để sửa đổi (update/insert/delete) dữ liệu của 1 bảng dựa vào kết quà so sánh với 1 bảng nào đó. Câu lệnh sử dụng MERGE thường ngắn gọn và hiệu quả hơn các câu lệnh thông thường cho cùng 1 điều kiện.

Những câu hỏi thường gặp khi sử dụng GROUP BY

Một trong những câu hỏi khá phổ biến trên các diễn đàn là Group By.

Hãy xét ví dụ dưới đây.

Đặt câu hỏi và trả lời cho PL/SQL 1

Đây là nơi các bạn có thể đặt tất cả các câu hỏi liên quan đến PL/SQL. Không có câu hỏi nào là quá dễ, tất cả đều được hoan nghênh. Với những câu hỏi liên quan đến các đoạn mã bạn gởi lên, xin gởi đoạn mã trong thẻ [code] và [/code].

Ví dụ : 
[code]
select * from bang1
[/code]

Đặt câu hỏi và trả lời cho T-SQL 1

Đây là nơi các bạn có thể đặt tất cả các câu hỏi liên quan đến T-SQL. Không có câu hỏi nào là quá dễ, tất cả đều được hoan nghênh. Với những câu hỏi liên quan đến các đoạn mã bạn gởi lên, xin gởi đoạn mã trong thẻ [code] và [/code].

Ví dụ : 
[code]
select * from bang1
[/code]

Báo cáo nhanh với PIVOT và GROUPING

Bạn làm việc cho 1 công ty bán hàng qua mạng. Ngày kia buồn tình, sếp của bạn bảo "tôi muốn có 1 bản báo cáo với số lượng sản phẩm mà công ty mình bán được, tại các thành phố khác nhau, trong mỗi năm khác nhau, và toàn bộ từ trước tới nay, ứng với mỗi tháng từ 1-12."

Đặt câu hỏi và trả lời cho PL/SQL

Đây là nơi các bạn có thể đặt tất cả các câu hỏi liên quan đến  PL/SQL. Không có câu hỏi nào là quá dễ, tất cả đều được hoan nghênh.

Đặt câu hỏi và trả lời cho T-SQL

Đây là nơi các bạn có thể đặt tất cả các câu hỏi liên quan dến- T-SQL. Không có câu hỏi nào là quá dễ, tất cả đều được hoan nghênh.

Một mẹo nhỏ trong việc sử dụng OUTPUT

Một trong những công việc khá phổ biến là nhập dữ liệu vào nhiều bảng cho cùng 1 yêu cầu

Một vài lưu ý khi sử dụng TOP và ORDER BY

TOP và ORDER BY là 2 trong nhiều mệnh đề được sử dụng rộng rãi nhất trong lập trình CSDL. Nhưng chúng cũng là những mệnh đề mà ít người chịu khó tìm hiểu cách thức hoạt động, dẫn đến nhiều hiểu lầm, nhiều cách sử dụng sai.

Sử dụng CASE cho mệnh đề WHERE

Một trong những công việc khá phổ biến trong các ứng dụng là biểu thị danh sách với chức năng tìm kiếm. Ví dụ, bạn có ứng dụng biểu thị danh sách khách hàng của công ty, và bạn cung cấp chức năng tìm kiếm cho các trường, tên, họ, nơi cư ngụ, giới tính v.v. Lúc đó, tùy vào sự lựa chọn của người dùng mà bạn phải chọn câu lệnh SQL cho thích hợp.

Vài lưu ý khi sử dụng DISTINCT

DISTINCT được sử dụng để loại bỏ sự trùng lặp. Nó được sử dụng khá phổ biến, nhưng lại ít được lưu tâm đúng mức về cách thức nó hoạt động, dẫn đến trường hợp câu lệnh trả về "khi đúng khi sai"