Để bắt đầu hành trình với câu lệnh SELECT COUNT(*) yêu cầu rất đơn giản, chúng ta cần cài đặt môi trường SQL Server với đầy đủ đồ chơi hoặc có thể cài thêm bất cứ công cụ gì mà không bị giới hạn. Trong các bài viết tới sẽ có những câu lệnh demo ảnh hưởng đến hoạt động của SQL Server nên không khuyến khích thử nghiệm trực tiếp trên production. Do vậy chúng ta hãy xây dựng một môi trường độc lập để thực hành, ở đây tôi nghĩ máy tính cá nhân là phù hợp nhất, có thể là PC, laptop, hoặc nếu đủ lực bạn có thể sắm một con workstation hay thậm chí một con server riêng về vọc cho hết mình, vì một số tính tính năng đòi hỏi phải có ít nhất 16 CPUs mới chạy được. Tùy thuộc vào câu hỏi, vấn đề kĩ thuật ta đang tìm hiểu mà cần các công cụ hỗ trợ khác nhau, nhưng nhìn chung tối thiểu phải có 3 thứ sau:
- Dịch vụ SQL Server
- Trình soạn thảo SQL
- Cơ sở dữ liệu mẫu
Dịch vụ SQL Server
SQL Server services, rõ ràng là phải có dịch vụ máy chủ SQL Server rồi vì các câu lệnh SQL của ta được thực thi ở trên đó mà, ý của mình ở đây là ngoài phiên bản mà chúng ta làm việc hằng ngày (thường là phiên bản công việc ty mình đang làm) nên cài thêm những phiên bản khác hoặc là có liên quan trong công việc hoặc là những phiên bản mới hơn, có sự thay đổi lớn về chức năng hoặc kiến trúc của SQL Server (ví dụ SQL Server 2012 OS có sự thay đổi về chức năng quản lý bộ nhớ, hoặc SQL Server 2014 có sự thay đổi về Cardinality estimator, hoặc thêm tính năng in-memory, SQL Server 2017 chạy trên linux,..). Việc cùng lúc có nhiều phiên khác nhau trên môi trường của mình sẽ giúp chúng ta dễ dàng và nhanh chóng thử nghiệm một câu lệnh SQL bất kỳ trên các phiên bản khác nhau để thấy sự ảnh hưởng của chúng đến việc thưc thi một câu truy vấn như thế nào. Điều này sẽ giúp chúng ta hiểu rõ hơn về hành vi của SQL Server để có những quyết định phù hợp. Hiện tại tôi sử dụng chính phiên bản SQL Server 2017 trên máy tính cá nhân của mình, ngoài ra tôi còn cài đặt các named instances của SQL Server 2014, SQL Server 2008R2 và tất cả các đều là ấn bản Developer. Có rất nhiều trang chỉ dẫn cách cài đặt SQL Server cả default instance lẫn named instance bạn có thể dễ dàng tìm thấy trên internet nên tôi sẽ không hướng dẫn ở đây.
Trình soạn thảo SQL
Trình soạn thảo SQL là nơi để gõ những câu lệnh truy vấn, sau đó gửi đến SQL Server service đề cập ở trên để thực thi, rồi nhận kết quả trả về và hiển thị ra màn hình. Nói dài dòng vậy chứ cái ta cần là SSMS (SQL Server Management Studio), bạn có thể chọn cài đặt công cụ này khi cài SQL Server service hoặc tải bản riêng và mới nhất tại đây. SSMS được dùng để quản lý các hạ tầng SQL Server và SQL Azure Database, Nó cung cấp các công cụ để cấu hình, giám sát và quản trị các phiên bản của SQL Server. Nó cũng được sử dụng để truy vấn, thiết kế và quản lý cơ sở dữ liệu, đặc biệt hơn là nó hoàn toàn miễn phí.

Cơ sở dữ liệu mẫu
Chúng ta thường sử dụng các cơ sở dữ liệu mẫu phổ biến như AdventureWorks của Microsoft để có thể thử nghiệm những câu lệnh SQL tìm thấy trên internet khi đang tìm kiếm giải đáp nào đó. Và thật sự các cơ sở dữ liệu này không thật sự mang lại cảm giác tò mò để chúng ta tìm hiểu. Vì vậy để giúp việc thực hành gõ các câu lệnh SQL trở nên thách thức và thú vị hơn tôi giới thiệu với các bạn một cơ sở dữ liệu người thật việc thật trăm phần trăm, đang sử dụng trên website của người ta luôn, đó chính là cơ sở dữ liệu của trang stackoverflow.com, hoàn toàn miễn phí cho học thuật (nhưng sử dụng cho mục đích thương mại thì sẽ khác, cần liên hệ với người sở hữu). Nếu các bạn chưa biết trang này hay chưa hình dung ra thì hãy dành vài phút để dạo quanh trang đó xem thế nào, truy cập vào và gõ SQL Server ở ô tìm kiếm rồi enter. Các bạn sẽ thấy nó là trang hỏi đáp các vấn đề chuyên về lập trình với hơn 20 triệu câu hỏi, 30 triệu câu trả lời (tham khảo thêm ở đây). Thật ra cũng không có gì đặc biệt, chỉ là chúng ta sẽ cảm thấy hứng thú khi dùng các câu lệnh SQL để trả lời những thắc mắc như “có tất cả bao nhiêu người dùng?”, “quốc gia nào có số lượng nhiều nhất?”, “Việt Nam mình có bao nhiêu thành viên tham gia?”, hoặc “không biết ở TP.HCM có bao nhiêu người đăng ký tài khoản và hỏi một lần rồi thôi?”, “tỉnh thành nào ở VN mình hoạt động sôi nổi nhất trên trang này?”,… Tất tần tật mọi thứ đều có ở trong đó đang đợi khám phá bằng các câu lệnh SQL của bạn.
Các bạn có thể vào link này để tải cơ sở dữ liệu về máy, trang này được duy trì thường xuyên để cập nhật các bản dump (có thể xem như là bản backup, dù chỉ có một vài bảng chính nhưng mình nghĩ là đủ xài) từ production của trang stackoverflow.com. Sẽ có nhiều lựa chọn bản dump cho các bạn và phiên bản càng mới thì kích thước càng lớn, vậy nên nếu bạn đã làm việc quen thuộc với SQL Server và máy tính của bạn còn đủ kích thước đĩa trống để chứa thì có thể chọn lấy bản dump mới nhất để có cơ hội thực hành thao tác trên dữ liệu lớn. Tài nguyên máy tính của tôi không được mạnh lắm nên tôi sẽ chọn bản small, 1GB download file và 10GB khi attach vào SQL Server (các bạn chú ý dữ liệu trong file này chỉ đến cuối năm 2010).
Sau khi tải về và giải nén bạn sẽ thấy file Readme_2010.txt, trong này mô tả vài thông tin về bản dump cùng với một số ghi chú cho cơ sở dữ liệu đi kèm. Bên cạnh file txt chính là hai file cơ sở dữ liệu của StackOverlow .mdf và .ldf. Các bạn hãy copy những files này vào thư mục mong muốn và làm thao tác attach vào SQL Server như sau. Mở SSMS, connect vào SQL Server (phiên bản nào tùy bạn, tôi sẽ attach vào SQL Server 2017), trong phần Object Explorer, chuột phải vào mục Databases và chọn Attach, click vào nút Add, đến thư mục bạn vừa copy các files và chọn file có đuôi .mdf, chọn OK đặt lại tên cơ sở dữ liệu nếu cần, cuối cùng click OK.



Vậy là chúng ta đã có cơ sở dữ liệu của StackOverflow trên môi trường mới cài đặt rồi, giờ hãy thử gõ vài câu SQL và thưởng thức thành quả thôi nào. Câu lệnh sau lấy ra 1000 users bất kì mà cột location có chứa từ ‘Vietnam’.
use StackOverflow2010
go
select top 1000*
from Users
where location like '%Vietnam%'



Chỉ có 213 kết quả trả về, chắc là do mọi người đăng ký “location” không nhất quán nhau? Có khi nào tìm theo từ ‘Viet Nam’ kết quả sẽ nhiều hơn không? hoặc theo tỉnh thành ở Việt Nam mình? Các bạn hãy tìm xem có user nào khác ở VN nữa không nhé.
Bây giờ thử xem userId 607 đã hỏi những câu gì trong database này.
select top 10*
from Posts
where OwnerUserId = 607 and PostTypeId = 1
Câu truy vấn trên chạy cũng khá lâu đó các bạn, trên máy của tôi (4 CPUs 8 threads, 16GB RAM, SSD) phải mất 20 giây hơn. Các bạn lưu ý giá trị PostTypeId = 1 để chỉ định bài post đó là câu hỏi, nếu PostTypeId = 2 thì đó là câu trả lời. Vậy giờ hãy tìm xem userId này có những câu trả lời nào.
select top 10*
from Posts
where OwnerUserId = 607 and PostTypeId = 2
Nếu các bạn thắc mắc làm sao biết câu trả lời này là cho câu hỏi nào hoặc ngược lại, từ một câu hỏi làm sao biết có những câu trả lời nào thì hãy tự mình khám phá xem. Bên cạnh đó còn có bảng comments chứa các bình luận của người dùng cũng cần các bạn tìm hiểu xem nó quan hệ thế nào với bảng Post. Đây là link cho các bạn tham khảo thêm thông tin về bảng, cột và ý nghĩa của nó trong cơ sở dữ liệu này.
Như vậy là ở bài này chúng ta đã thiết lập xong một môi trường SQL Server để có thể bước vào hành trình đếm sao rồi. Hi vọng các bạn thấy thú vị hơn khi thực hành các câu lệnh SQL với cơ sở dữ liệu mẫu từ trang stackoverflow.com này. Hẹn gặp lại các bạn ở những bài viết sau.
Pingback: Hành trình đếm sao – 3. Thứ tự thực hiện câu lệnh SELECT trong SQL Server | QUẢN TRỊ CƠ SỞ DỮ LIỆU
Pingback: Hành trình đếm sao - 7. Điều khiển execution plan như ý? - QUẢN TRỊ CƠ SỞ DỮ LIỆU
Pingback: Tìm hiểu SQL Server Activity Monitor (phần 1) - QUẢN TRỊ CƠ SỞ DỮ LIỆU
Pingback: Tìm hiểu SQL Server Activity Monitor (phần 1) – cuonghv1521
Pingback: Tìm hiểu SQL Server Activity Monitor (phần 3) - Wait statistics - QUẢN TRỊ CƠ SỞ DỮ LIỆU
Pingback: 2. Cài đặt môi trường SQL Server – cuonghv1521