Cách tạo truy vấn trong cơ sở dữ liệu SQL Server 2017.
Một trong những truy vấn cơ bản nhất mà bạn có thể thực hiện như sau:
SELECT * FROM TableName;
Truy vấn này trả về tất cả dữ liệu từ một bảng nhất định. TableName
là tên của bảng bạn muốn truy vấn. Tất cả những gì bạn cần làm là thay thế nó bằng tên của một bảng trong cơ sở dữ liệu của bạn, chạy truy vấn và nội dung của bảng đó sẽ được hiển thị.
Cơ sở dữ liệu của chúng tôi bao gồm ba bảng. Mỗi chứa dữ liệu. Hãy xem những gì trong mỗi bảng.
Artists
bảng:
SELECT * FROM Artists;Kết quả
ArtistId ArtistName ActiveFrom -------- ---------------------- ------------------------ 1 Iron Maiden 1975-12-25T00:00:00.000Z 2 AC/DC 1973-01-11T00:00:00.000Z 3 Allan Holdsworth 1969-01-01T00:00:00.000Z 4 Buddy Rich 1919-01-01T00:00:00.000Z 5 Devin Townsend 1993-01-01T00:00:00.000Z 6 Jim Reeves 1948-01-01T00:00:00.000Z 7 Tom Jones 1963-01-01T00:00:00.000Z 8 Maroon 5 1994-01-01T00:00:00.000Z 9 The Script 2001-01-01T00:00:00.000Z 10 Lit 1988-06-26T00:00:00.000Z 11 Black Sabbath 1968-01-01T00:00:00.000Z 12 Michael Learns to Rock 1988-03-15T00:00:00.000Z 13 Carabao 1981-01-01T00:00:00.000Z 14 Karnivool 1997-01-01T00:00:00.000Z 15 Birds of Tokyo 2004-01-01T00:00:00.000Z 16 Bodyjar 1990-01-01T00:00:00.000Z 16 row(s) returned Executed in 1 ms
Albums
bảng:
SELECT * FROM Albums;Kết quả
AlbumId AlbumName ReleaseDate ArtistId GenreId ------- ------------------------ ------------------------ -------- ------- 1 Powerslave 1984-09-03T00:00:00.000Z 1 1 2 Powerage 1978-05-05T00:00:00.000Z 2 1 3 Singing Down the Lane 1956-01-01T00:00:00.000Z 6 3 4 Ziltoid the Omniscient 2007-05-21T00:00:00.000Z 5 1 5 Casualties of Cool 2014-05-14T00:00:00.000Z 5 1 6 Epicloud 2012-09-18T00:00:00.000Z 5 1 31 Somewhere in Time 1986-09-29T00:00:00.000Z 1 1 32 Piece of Mind 1983-05-16T00:00:00.000Z 1 1 33 Killers 1981-02-02T00:00:00.000Z 1 1 34 No Prayer for the Dying 1990-10-01T00:00:00.000Z 1 1 35 No Sound Without Silence 2014-09-12T00:00:00.000Z 9 4 36 Big Swing Face 1967-06-01T00:00:00.000Z 4 2 37 Blue Night 2000-11-01T00:00:00.000Z 12 4 38 Eternity 2008-10-27T00:00:00.000Z 12 4 39 Scandinavia 2012-06-11T00:00:00.000Z 12 4 40 Long Lost Suitcase 2015-10-09T00:00:00.000Z 7 4 41 Praise and Blame 2010-06-26T00:00:00.000Z 7 4 42 Along Came Jones 1965-05-21T00:00:00.000Z 7 4 43 All Night Wrong 2002-05-05T00:00:00.000Z 3 2 44 The Sixteen Men of Tain 2000-03-20T00:00:00.000Z 3 2 20 row(s) returned Executed in 1 ms
Genres
bảng:
SELECT * FROM Genres;Kết quả
GenreId Genre ------- ------- 1 Rock 2 Jazz 3 Country 4 Pop 5 Blues 6 Hip Hop 7 Rap 8 Punk 8 row(s) returned Executed in 1 ms
Trong cả ba trường hợp, truy vấn của chúng tôi đều giống nhau. Điều duy nhất đã thay đổi là tên bảng.
Đây là một trong những truy vấn cơ bản nhất mà chúng tôi có thể thực hiện. Nó chỉ trả về tất cả các hàng và tất cả các cột từ một bảng.
Chúng tôi có thể sửa đổi truy vấn này theo một số cách để chỉ trả về dữ liệu mà chúng tôi muốn xem. Dưới đây là một số cách phổ biến mà chúng tôi có thể sửa đổi truy vấn để trả về chính xác kết quả mà chúng tôi cần.
Chỉ định các cột
Thay vì sử dụng dấu hoa thị (*
) để trả về tất cả các cột, bạn chỉ có thể nêu rõ ràng những cột bạn muốn được trả về.
SELECT AlbumId, AlbumName, ArtistId FROM Albums;Kết quả
AlbumId AlbumName ArtistId ------- ------------------------ -------- 1 Powerslave 1 2 Powerage 2 3 Singing Down the Lane 6 4 Ziltoid the Omniscient 5 5 Casualties of Cool 5 6 Epicloud 5 31 Somewhere in Time 1 32 Piece of Mind 1 33 Killers 1 34 No Prayer for the Dying 1 35 No Sound Without Silence 9 36 Big Swing Face 4 37 Blue Night 12 38 Eternity 12 39 Scandinavia 12 40 Long Lost Suitcase 7 41 Praise and Blame 7 42 Along Came Jones 7 43 All Night Wrong 3 44 The Sixteen Men of Tain 3 20 row(s) returned Executed in 1 ms
Thu hẹp tiêu chí
Bạn có thể thêm WHERE
để chỉ trả lại những hàng phù hợp với tiêu chí do bạn cung cấp.
SELECT AlbumId, AlbumName, ArtistId FROM Albums WHERE ArtistId = 1;Kết quả
AlbumId AlbumName ArtistId ------- ----------------------- -------- 1 Powerslave 1 31 Somewhere in Time 1 32 Piece of Mind 1 33 Killers 1 34 No Prayer for the Dying 1 5 row(s) returned Executed in 1 ms
Tham gia một bàn khác
Bạn có thể sử dụng một phép nối để trả về kết quả từ nhiều bảng chia sẻ dữ liệu. Đây là những gì các mối quan hệ là về tất cả. Cụ thể, một phép nối thường được sử dụng khi khóa ngoại của một bảng khớp với khóa chính của bảng khác.
SELECT AlbumId, AlbumName, ArtistName FROM Albums INNER JOIN Artists ON Albums.ArtistId = Artists.ArtistId WHERE ReleaseDate < '1980-01-01';Kết quả
AlbumId AlbumName ArtistName ------- --------------------- ---------- 2 Powerage AC/DC 3 Singing Down the Lane Jim Reeves 36 Big Swing Face Buddy Rich 42 Along Came Jones Tom Jones 4 row(s) returned Executed in 1 ms
Bạn sẽ thấy rằng WHERE
mệnh đề vẫn hoạt động trên các cột không thực sự được bao gồm trong đầu ra. Trong trường hợp này, nó đã được áp dụng cho ReleaseDate
, ngay cả khi chúng tôi không đưa cột đó vào kết quả.
Bạn cũng sẽ thấy rằng chúng tôi đủ điều kiện cho hai ArtistId
các cột có tên của bảng (tức là Albums.ArtistId
và Artists.ArtistId
). Chúng ta phải làm điều này để SQL Server biết bảng nào chúng ta đang đề cập đến khi tham chiếu cột đó. Một số nhà phát triển cơ sở dữ liệu coi đây là phương pháp hay để đủ điều kiện cho tất cả các tên cột trong tất cả các truy vấn SQL, tuy nhiên, đây là trường hợp sở thích cá nhân hoặc quy ước mã hóa dành riêng cho dự án.
Thêm bí danh
Bạn cũng có thể thêm bí danh bảng vào các truy vấn của mình để làm cho mã ngắn gọn hơn. Ví dụ:bạn có thể tặng Artists
bí danh của ar
và Albums
bí danh của al
(hoặc bất kỳ chuỗi nào khác mà bạn thích).
Bạn có thể sử dụng các bí danh này để xác định tên cột. Đây là truy vấn tương tự như trên, nhưng với tất cả các tên cột đủ điều kiện với bí danh bảng:
SELECT al.AlbumId, al.AlbumName, ar.ArtistName FROM Albums al INNER JOIN Artists ar ON al.ArtistId = ar.ArtistId WHERE al.ReleaseDate < '1980-01-01';Kết quả
AlbumId AlbumName ArtistName ------- --------------------- ---------- 2 Powerage AC/DC 3 Singing Down the Lane Jim Reeves 36 Big Swing Face Buddy Rich 42 Along Came Jones Tom Jones 4 row(s) returned Executed in 1 ms
Bạn cũng có thể gán bí danh cho các cột (không chỉ bảng). Chúng tôi làm điều này trong ví dụ tiếp theo.
Định dạng ngày
Có nhiều cách khác nhau để xử lý ngày và giờ trong cơ sở dữ liệu. Trong SQL Server có các kiểu dữ liệu khác nhau để lưu trữ ngày tháng (chẳng hạn như date
, time
, datetime
, smalldatetime
, v.v.) và có nhiều hàm khác nhau để xử lý ngày tháng (ví dụ:SYSDATETIME()
, GETDATE( )
, CURRENT_TIMESTAMP
, v.v.).
Trong ví dụ này, chúng tôi sẽ sử dụng YEAR()
hàm để chỉ trả về phần năm của ngày.
SELECT AlbumName, YEAR(ReleaseDate) AS Year FROM Albums;Kết quả
AlbumName Year ------------------------ ---- Powerslave 1984 Powerage 1978 Singing Down the Lane 1956 Ziltoid the Omniscient 2007 Casualties of Cool 2014 Epicloud 2012 Somewhere in Time 1986 Piece of Mind 1983 Killers 1981 No Prayer for the Dying 1990 No Sound Without Silence 2014 Big Swing Face 1967 Blue Night 2000 Eternity 2008 Scandinavia 2012 Long Lost Suitcase 2015 Praise and Blame 2010 Along Came Jones 1965 All Night Wrong 2002 The Sixteen Men of Tain 2000 20 row(s) returned Executed in 1 ms
Trong ví dụ này, chúng tôi cũng chỉ định một bí danh cho một cột. Cụ thể hơn, chúng tôi chỉ định một bí danh cho kết quả của YEAR()
, trong đó chúng tôi chuyển ReleaseDate
cột như một đối số.
Một điểm khác về ví dụ này là chúng tôi đã sử dụng AS
từ khóa khi gán bí danh. Đây là tùy chọn và chúng tôi cũng có thể đã sử dụng AS
từ khóa khi gán bí danh cho bảng trong ví dụ trước.
Giới thiệu về SQL và Transact-SQL
Các truy vấn trên (và các truy vấn khác trong hướng dẫn này) được viết bằng Ngôn ngữ truy vấn có cấu trúc (SQL). Cụ thể hơn, SQL Server sử dụng Transact-SQL (đôi khi được rút ngắn thành T-SQL ), là phần mở rộng độc quyền của Microsoft và Sybase cho SQL.
SQL là ngôn ngữ truy vấn tiêu chuẩn được sử dụng trên hầu hết các hệ quản trị cơ sở dữ liệu quan hệ. Đó là tiêu chuẩn của Viện Tiêu chuẩn Quốc gia Hoa Kỳ (ANSI) và của Tổ chức Tiêu chuẩn hóa Quốc tế (ISO).
Trong khi hầu hết các truy vấn cơ bản sẽ hoạt động trên hầu hết các cơ sở dữ liệu quan hệ, một số truy vấn có thể cần được sửa đổi một chút khi chuyển giữa hệ thống cơ sở dữ liệu này sang hệ thống cơ sở dữ liệu khác. Ví dụ:bạn có thể có một tập lệnh chạy trong SQL Server. Bạn cũng có thể sử dụng tập lệnh đó trong MySQL, tuy nhiên, bạn có thể thấy rằng mình cần phải thay đổi một số thứ trước khi nó chạy thành công.
Các tập lệnh SQL trong hướng dẫn này chỉ trình bày một số mẫu nhỏ về những thứ bạn có thể làm với SQL. Để biết thêm thông tin, hãy xem Hướng dẫn SQL của tôi hoặc truy cập Tài liệu tham khảo Microsoft Transact-SQL.