Lệnh SELECT trong SQL Server và các mệnh đề truy vấn dữ liệu – Web888 chia sẻ kiến thức lập trình, kinh doanh, mmo

Nhiều phiên bản sql sử dụng FROM trong truy vấn của họ, nhưng trong toàn bộ những phiên bản từ SQL server 2005, gồm có cả SQL Server 2019, người ta hoàn toàn có thể sử dụng câu lệnh SELECT mà không cần sử dụng mệnh đề FROM .

Câu lệnh SELECT

Một bảng với tài liệu của nó hoàn toàn có thể được xem bằng cách sử dụng câu lệnh SELECT. Câu lệnh SELECT trong một truy vấn sẽ hiển thị thông tin thiết yếu trong một bảng. Câu lệnh SELECT truy xuất những hàng và cột cho một hoặc nhiều bảng. Đầu ra của câu lệnh SELECT là một bảng khác được gọi là tập kết quả. Câu lệnh SELECT cũng nối hai bảng hoặc lấy một tập hợp con những cột từ một hoặc nhiều bảng. Câu lệnh SELECT xác lập những cột được sử dụng cho một truy vấn. Cú pháp của câu lệnh SELECT hoàn toàn có thể gồm có một loạt những biểu thức được phân tách bằng dấu phẩy. Mỗi biểu thức trong câu lệnh là một cột trong tập kết quả. Các cột Open theo trình tự giống như thứ tự của biểu thức trong câu lệnh SELECt. Câu lệnh SELECT lấy những hàng từ cơ sở tài liệu và được cho phép chọn một hoặc nhiều hàng .
Về tuần tự triển khai, mệnh đề SELECT sẽ được thực thi ở đầu cuối, mặc dầu được viết ở đầu câu

Cú pháp:

SELECT  [,column_name2] FROM 

Ví dụ :

SELECT [BusinessEntityID]
      ,[PersonType]
      ,[NameStyle]
      ,[Title]
      ,[FirstName]
      ,[MiddleName]
      ,[LastName]
      ,[Suffix]
      ,[EmailPromotion]
      ,[AdditionalContactInfo]
      ,[Demographics]
      ,[rowguid]
      ,[ModifiedDate]
  FROM [AdventureWorks2019].[Person].[Person]

Select không có FROM

Nhiều phiên bản SQL sử dụng FROM trong truy vấn của họ, nhưng trong toàn bộ những phiên bản từ SQL Server 2005, gồm có cả SQL Server2019, hoàn toàn có thể sử dụng câu lệnh SELECT mà không cần sử dụng mệnh đề FROM .
Ví dụ :

SELECT LEFT ('Hello World',5)

 Hiển thị toàn bộ cột

Từ khóa hoa thị ( * ) sử dụng cho câu lệnh SELECT để lấy ra tài liệu của hàng loạt cột trong bảng. Nó được sử dụng như cách viết tắt thay cho việc viết ra list của hàng loạt cột trong bảng .
Cú pháp :

SELECT * FROM 

Ví dụ :

SELECT * FROM [AdventureWorks2019].[Person].[Person]

Dấu * rất thuận tiện trong trường hợp có quá nhiều column và bạn không hề nhớ hết tên column, hoặc viết ra thì quá dài dòng. Tuy nhiên khi làm thực tiễn bạn không nên lạm dụng dấu * quá bởi như vậy mạng lưới hệ thống sẽ chạy rất nặng vì tài liệu sẽ bị dư thừa. Ví dụ bạn kiến thiết xây dựng công dụng hiển thị tên người dùng thì chỉ cần viết select username là ok, không nhất thiết phải SELECT * vì lấy ra càng nhiều cột hiệu năng sẽ càng giảm và tốn nhiều ram .

Các biểu thức khác với SELECT

Câu lệnh SELECT được cho phép người dùng chỉ định biểu thức khác nhau để xem tập kết quả một cách có thứ tự. Các biểu thức này gán những tên khác nhau cho những cột trong tập kết quả, đo lường và thống kê những giá trị và vô hiệu những giá trị trùng lặp

Sử dụng hằng số (constants) trong tập kết quả (result sets)

Hằng số chuỗi ký tự được sử dụng khi những cột ký tự được nối với nhau. Chúng giúp định dạng hoặc năng lực đọc thích hợp. Các hằng số này không được chỉ định như một cột riêng không liên quan gì đến nhau trong tập kết quả. Thông thường ứng dụng kiến thiết xây dựng những giá trị không đổi vào kết quả khi chúng được hiển thị sẽ hiệu suất cao hơn thay vì sử dụng sever để phối hợp những giá trị không đổi. Ví dụ : để gồm có ‘ : ’ và ‘ -> ’ trong tập kết quả để hiển thị tên vương quốc, mã vùng vương quốc và nhóm tương ứng của nó, câu lệnh SELECT được hiển thị trong ví dụ sau :

USE AdventureWorks2019
SELECT Name+':'+CountryRegionCode+'->'+[Group] FROM Sales.SalesTerritory

Kết quả của câu lệnh SELECT

Đổi tên cột trong tập kết quả

Các cột được hiển thị trong tập kết quả của những truy vấn có tiêu đề tương ứng hoàn toàn có thể được đổi khác, đổi tên hoặc hoàn toàn có thể được gán một tên mới bằng cách sử dụng mệnh đề AS. Bằng cách tùy chỉnh những tiêu đề, chúng trở nên dễ hiểu và có ngữ nghĩa hơn .
Ví dụ :

USE AdventureWorks2019
SELECT Name+':'+CountryRegionCode+'->'+[Group] AS NameRegion FROM Sales.SalesTerritory

Tên cột mới trong tập kết quả

Tính toán giá trị trong tập kết quả

Câu lệnh SELECT hoàn toàn có thể chứa những biểu thức toán học bằng cách vận dụng những toán tử cho một hoặc nhiều cột. Nó được cho phép tập kết quả chứa những giá trị không sống sót trong bảng cơ sở, nhưng được thống kê giám sát từ những giá trị được tàng trữ trong bảng cơ sở .
Ví dụ giảm 15 % cho tập kết quả để sử dụng cho hiển thị khuyến mại :

USE AdventureWorks2019
SELECT ProductID,StandardCost,StandardCost*0.16 AS Discount FROM
Production.ProductCostHistory
GO

Tính toán giá trị của 15% cột StandardCost và tạo thành cột mới đặt tên là Discount

Sử dụng DISTINCT

Từ khóa DISTINCT ngăn ngừa việc truy xuất những bản ghi trùng lặp. Nó vô hiệu những hàng đang lặp lại khỏi tập kết quả của một câu lệnh SELECT. Ví dụ : nếu cột StandardCost được chọn mà không sử dụng từ khóa DISTINCT, nó sẽ hiển thị mọi bản ghi của StandardCost chỉ một lần như ví dụ :

USE AdventureWorks2019
SELECT DISTINCT ProductID,StandardCost,StandardCost*0.16 AS Discount FROM
Production.ProductCostHistory
GO

Sử dụng TOP và trong SELECT

Từ khóa TOP sẽ hiển thị chỉ một phần tập hợp trong tập kết quả. Tập hợp những bảng ghi sẽ đưojc số lượng giới hạn bằng số hoặc Phần Trăm ( % ), Biểu thức TOP cũng hoàn toàn có thể sử dụng với những câu lệnh như INSERT, UPDATE, DELETE.
Cú pháp :

SELECT [ALL|DISTINCT] [TOP expression [PERCENT] [NUMER]] FROM 

Ví dụ :

USE AdventureWorks2019
SELECT TOP 100 ProductID,StandardCost,StandardCost*0.16 AS Discount FROM
Production.ProductCostHistory
GO

SELECT kết hợp cùng INTO

Mệnh đề INTO tạo một bảng mới và chèn các hàng và cột được liệt kê trong câu lệnh SELECT vào đó.
Mệnh đề INTO cũng chèn các hàng hiện có vào bảng mới. Để thực hiện mệnh đề này với câu lệnh SELECT, người dùng phải có quyền CREATE TABLE trong cơ sở dữ liệu đích.

Cú pháp :

SELECT ,[,  ...] INTO  FROM table_list

Ví dụ :

USE AdventureWorks2019
SELECT ProductModelID, Name INTO Production.ProductName FROM production.ProductModel
GO

Sau khi chạy lệnh, bảng ProductName sẽ được tạo.

SELECT kết hợp cùng WHERE

Mệnh đề WHERE với câu lệnh SELECT được sử dụng để chọn hoặc số lượng giới hạn có điều kiện kèm theo ( dễ hiểu hơn là lọc bản ghi ) những bản ghi được truy xuất bởi truy vấn. Mệnh đề WHERE chỉ định Biểu thức Boolean để kiểm tra những hàng được trả về bởi truy vấn. Hàng được trả về nếu biểu thức là đúng và bị vô hiệu nếu sai .
Cú pháp :

SELECT  [,  ...] FROM  WHERE  

Các toán tử quan hệ trong SELECT :
Ví dụ sử dụng mệnh đề WHERE để hiển thị tài liệu voiws Endate là ngày xác lập

USE AdventureWorks2019
SELECT * FROM Production.ProductCostHistory WHERE EndDate ='2013-05-29'
GO

Kết quả tra ra khi sử dụng SELECT với mệnh đề WHERE và kiểm tra dữ liệu datetime

Tất cả các truy vấn trong SQL sử dụng dấu nháy đơn để bao các giá trị văn bản.

Ví dụ :

USE AdventureWorks2019
SELECT * FROM Person.Address WHERE City='Bothell'

Kết quả tra ra khi sử dụng SELECT với mệnh đề WHERE và kiểm tra dữ liệu text

Các giá trị số không cần sử dụng dấu nháy đơn để bao

Ví dụ :

USE AdventureWorks2019
SELECT * FROM HumanResources.Department WHERE DepartmentID < 10
GO

Kết quả tra ra khi sử dụng SELECT với mệnh đề WHERE và kiểm tra dữ liệu number

Mệnh đề WHERE có thể sử dụng với các kí tự wildcard, là khái niệm về kí tự sử dụng cho từ khóa LIKE để tạo một câu lệnh truy vấn chính xác và cụ thể

Wildcard tả Ví dụ
_ Biểu diễn một ký tự đơn
Docs: https://docs.microsoft.com/vi-vn/sql/t-sql/language-elements/wildcard-match-one-character-transact-sql?view=sql-server-2017
select * from Person.Contact where Suffix like ‘Jr_’
% Biểu diễn chuỗi với độ dài bất kỳ
Docs: https://docs.microsoft.com/vi-vn/sql/t-sql/language-elements/percent-character-wildcard-character-s-to-match-transact-sql?view=sql-server-2017
select * from Person.Contact where LastNam like ‘B%’
[ ] Biểu diễn một ký tự đơn nằm bên trong vùng được bao bởi dấu ngoặc vuông
Docs: https://docs.microsoft.com/vi-vn/sql/t-sql/language-elements/wildcard-character-s-to-match-transact-sql?view=sql-server-2017
select * from Sales.CurrencyRate where ToCurrencyCode like ‘C[AN][DY]’
[^] Biểu diễn một ký tự đơn phủ định các ký tự bên trong dấu ngoặc vuông.
Docs: https://docs.microsoft.com/vi-vn/sql/t-sql/language-elements/wildcard-character-s-not-to-match-transact-sql?view=sql-server-2017
select * from Sales.CurrencyRate where ToCurrencyCode like ‘A[^R][^S]’

Mệnh đề WHERE cũng có thể sử dụng với các toán tử logic như AND, OR, NOT. Các toán tử được sử dụng kết hợp cùng các điều kiện tìm kiếm trong mệnh đề WHERE

Toán tử AND kết hợp 2 hoặc nhiều điều kiện và trả về TRUE chỉ khi cả 2 điều kiện thỏa mãn, kết quả sẽ trả ra tooàn bộ các bản ghi nếu thỏa mãn điều kiện.

Ví dụ:

USE AdventureWorks2019
SELECT * FROM Person.Address WHERE AddressID > 900 AND City='Seattle'
GO

Toán tử OR trả về TRUE và hiển thị các bản ghi nếu nó thỏa mãn một trong các điều kiện trong mệnh đề WHERE.

Ví dụ :

USE AdventureWorks2019
SELECT * FROM Person.Address WHERE AddressID > 900 OR City='Seattle'
GO

Toán tử NOT là phủ định của điều kiện tìm kiếm

Ví dụ :

USE AdventureWorks2019
SELECT * FROM Person.Address WHERE NOT AddressID = 5

Mệnh đề GROUP BY

Mệnh đề GROUP BY phân vùng kết quả thành một hoặc nhiều tập hợp con. Mỗi tập hợp con có những giá trị và biểu thức chung. Nếu một hàm tổng hợp được sử dụng trong mệnh đề GROUP BY, thì tập kết quả sẽ tạo ra những giá trị đơn lẻ cho mỗi tổng hợp
Từ khóa GROUP BY được theo sau bởi một list những cột, được gọi là grouped column ( cột được nhóm lại ). Mỗi grouped column hạn chế số hàng của tập kết quả. Đối với mỗi grouped column, chỉ có một hàng .
Mệnh đề GROUP BY hoàn toàn có thể có nhiều hơn một grouped column .

SELECT , [, column_name2, ...] FROM  GROUP BY 

Ví dụ :

USE AdventureWorks2019
SELECT WorkOrderID,SUM(ActualResourceHrs) FROM Production.WorkOrderRouting GROUP BY WorkOrderID
HAVING WorkOrderID < 50
GO

Kết quả sẽ trả ra một bảng nhóm WorkOrderID lại, và tính tổng của cột ActualResourceHrs dựa theo WorkOrderID với WorkOrderID < 50

Mệnh đề ORDER BY

Nó chỉ định thứ tự sắp xếp những cột trong một tập kết quả. Nó sắp xếp truy vấn theo một hoặc nhiều cột. Sắp xếp hoàn toàn có thể theo thứ tự tăng dần ( ASC ) hoặc giảm dần ( DESC ). Theo mặc định, những bản ghi được sắp xếp theo thứ tự ASC. Để chuyển sang chính sách giảm dần, hãy sử dụng từ khóa tùy chọn DESC, Khi sử dụng nhiều trường, SQL Server coi trường ngoài cùng bên trái là cấp sắp xếp chính và những trường khác là cấp sắp xếp thấp hơn .
Cú pháp :

SELECT  FROM  ORDER BY  (ASC|DESC)

Ví dụ :

SELECT * FROM Sales.SalesTerritory ORDER BY SalesLastYear
GO

Làm việc với XML

Extensible Markup Language ( XML ) cho phép nhà tăng trưởng những thẻ theo ý nghĩa riêng và những chương trình khác hoàn toàn có thể hieuer ý nghĩa của những thẻ này ( tựa như thẻ HTML nhưng nhằm mục đích mục tiêu tàng trữ tài liệu, không phải để trình duyệt đọc ). XML là phương tiện đi lại ưu tiên cho những nhà tăng trưởng để tàng trữ, định dạng, quản trị tài liệu trên web. Các ứng dụng ngày này có sự phối hợp của những công nghệ tiên tiến như ASP, công nghệ tiên tiến. NET, XML, SQL server hoạt động giải trí song song với nhau. Trong 1 số ít trường hợp, tàng trữ tài liệu XML trong SQL Server là giải pháp hài hòa và hợp lý .
Cơ sở tài liệu XML nguyên gốc trong SQL Server có một số ít ưu điểm như sau :

  • Hiệu năng tốt hơn: Các truy vấn từ cơ sở dữ liệu XML được triển khai tốt nhanh hơn các truy vấn trên tài liệu được lưu trữ trong hệ thống tệp. Ngoài ra, cơ sở dữ liệu thường phân tích cú pháp từng tài liệu khi lưu trữ nó.
  • Xử lý dữ liệu dễ dàng: Tài liệu kích thớc lớn có thể xử lý dễ dàng ( vì XML có cấu trúc)

Máy chủ SQL tương hỗ tàng trữ nguyên bản tài liệu XML bằng cách sử dụng kiểu tài liệu xml. Cơ sở tài liệu XML nguyên gốc xác lập một quy mô logic cho một tài liệu XML – như là miêu tả cho tài liệu trong tài liệu đó – và tàng trữ và truy xuất tài liệu theo quy mô đó. Tối thiểu, quy mô phải gồm có những thành phần, thuộc tính, PCDATA và thứ tự tài liệu .

Kiểu dữ liệu XML

Ngoài những kiểu tài liệu thường được sử dụng thường thì, SQL Server 2019 tương hỗ kiểu tài liệu XML. Kiểu dữ liệu XML được sử dụng để tàng trữ những tài liệu và phân đoạn XML trong cơ sở tài liệu SQL Server. Một phân đoạn XML là một biểu lộ XML với thành phần cấp cao nhất bị thiếu trong cấu trúc của nó .
Cú pháp :

CREATE TABLE  ([column_list,]  xml [, column_list])

Ví dụ :

USE AdventureWorks2019
CREATE TABLE Person.PhoneBilling (Bill_ID int PRIMARY KEY, MobileNumber bigint UNIQUE, CallDetails xml)
GO

Cột kiểu XML cũng hoàn toàn có thể được thêm vào một bảng vào một bảng tại thời gian tạo. Các cột kiểu tài liệu XML tương hỗ những từ ngữ DEFAULT cũng như ràng buộc NOT NULL .
Ví dụ :

AdventureWorks2019
INSERT INTO Person.PhoneBilling VALUES (100,98326505,'Local45 minuetes200')
SELECT CallDetails FROM Person.PhoneBilling
GO

Kết quả trả ra khi Select cột có dữ liệu XML

Câu lệnh DECLARE được sử dụng để tạo các biến kiểu XML. Mục đích của câu lệnh DECLARE được sử dụng để khai báo một biến trong SQL Server.

Cú pháp :

DECLARE @LOCAL_VẢIABLE datatype [= value]

Tên biến cục bộ phải mở màn bằng dấu @. Tham số giá trị được chỉ ra trong cú pháp là một tham số tùy chọn giúp gán giá trị khởi đầu cho biến trong quy trình khai báo. Nếu bạn không chỉ định bất kể giá trị khởi đầu nào được gán cho một biến, nó sẽ được khởi tạo dưới dạng NULL
Ví dụ :

DECLARE @xmlvar xml
SELECT @xmlvar=''

Lưu ý: Kiểu dữ liệu xml không được sử dụng làm khóa chính, khóa ngoại hoặc sử dụng ràng buộc UNIQUE.

Có 2 cách để tàng trữ tài liệu XML trong cột có kiểu tài liệu xml tên là typed ( định kiểu ) và untyped ( không định kiểu ) XML. Một thành viên XML có một lược đồ được link với nó được gọi là thành viên XML đã định kiểu. Một lược đồ là một tiêu đề cho một phiên bản hoặc tài liệu XML. Nó miêu tả cấu trúc và số lượng giới hạn nội dung của tài liệu XML bằng cách link những lược đồ XML với những phiên bản hoặc tài liệu XML được khuyến nghị vì tài liệu hoàn toàn có thể được xác nhận khi nó đang được tàng trữ trong cột kiểu tài liệu xml .
SQL Server không triển khai bất kể xác nhận nào cho tài liệu được nhập vào cột xml. Tuy nhiên, nó bảo vệ rằng tài liệu được tàng trữ với một quy chuẩn tốt. Dữ liệu XML không định kiểu hoàn toàn có thể được tạo và tàng trữ trong những cột hoặc biến của bảng tùy thuộc vào nhu yếu và khoanh vùng phạm vi của tài liệu .
Docs : https://docs.microsoft.com/en-us/sql/relational-databases/xml/xml-schema-collections-sql-server?view=sql-server-ver16
Bước tiên phong khi sử dụng typed XML là ĐK schema. Cú pháp :

CREATE XML SCHEMA COLLECTION  AS '[xmldefine]'

Ví dụ :

CREATE XML SCHEMA COLLECTION OrderSchemaCollection1
AS N'

  
'
GO

Tạo một bảng vơ kiểu dữ liệu Order như ví dụ:

CREATE TABLE myOrder (orderID int identity not null, orderInfo xml (OrderSchemaCollection))

Nhập liệu vào kiểu XML vừa tạo :

insert into myOrder values ('')

Ngoài ra, tất cả chúng ta hooàn toàn hoàn toàn có thể tạo một biến XML bằng cách sử dụng Schema Collaction. Ví dụ :

use myDB
DECLARE @order xml (OrderSchemaCollection1)
SET @order = ''
select @order
GO