hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Cấu trúc dữ liệu và giải thuật
    • Lập Trình C# Cơ Bản
    • Machine Learning
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • Micrsoft SQL Server
Lệnh SELECT trong SQL Server và các mệnh đề truy vấn dữ liệu

Lệnh SELECT trong SQL Server và các mệnh đề truy vấn dữ liệu

  • 25-05-2022
  • Toanngo92
  • 0 Comments

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

Mục lục

  • Câu lệnh SELECT
    • Select không có FROM
    •  Hiển thị toàn bộ cột
  • Các biểu thức khác với SELECT
    • Sử dụng hằng số (constants) trong tập kết quả (result sets)
    • Đổi tên cột trong tập kết quả
    • Tính toán giá trị trong tập kết quả
    • Sử dụng DISTINCT
    • Sử dụng TOP và PERCENT trong SELECT
    • SELECT kết hợp cùng INTO
    • SELECT kết hợp cùng WHERE
    • Mệnh đề GROUP BY
    • Mệnh đề ORDER BY
  • Làm việc với XML
    • Kiểu dữ liệu XML

Câu lệnh SELECT

Một bảng với dữ liệu của 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 cần thiết trong một bảng. Câu lệnh SELECT truy xuất các 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 các cột từ một hoặc nhiều bảng. Câu lệnh SELECT xác định các cột được sử dụng cho một truy vấn. Cú pháp của câu lệnh SELECT có thể bao gồm một loạt các 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 xuất hiện 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 các hàng từ cơ sở dữ liệu và cho phép chọn một hoặc nhiều hàng.

Về tuần tự thực hiện, mệnh đề SELECT sẽ được thực thi cuối cùng, mặc dù được viết ở đầu câu

Cú pháp:

SELECT <column_name1> [,column_name2] FROM <table_name>

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 tất cả các phiên bản từ SQL Server 2005, bao gồm cả SQL Server2019, 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 dữ liệu của toàn bộ cột trong bảng. Nó được sử dụng như cách viết tắt thay cho việc viết ra danh sách của toàn bộ cột trong bảng.

Cú pháp:

SELECT * FROM <table_name>

Ví dụ:

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

Dấu * rất tiện lợi trong trường hợp có quá nhiều column và bạn không thể 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 tế bạn không nên lạm dụng dấu * quá bởi như vậy hệ thống sẽ chạy rất nặng vì dữ liệu sẽ bị dư thừa.  Ví dụ bạn xây dựng chức nă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 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 các tên khác nhau cho các cột trong tập kết quả, tính toán các giá trị và loại bỏ các 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 các cột ký tự được nối với nhau. Chúng giúp định dạng hoặc khả năng đọc thích hợp. Các hằng số này không được chỉ định như một cột riêng biệt trong tập kết quả. Thông thường ứng dụng xây dựng các giá trị không đổi vào kết quả khi chúng được hiển thị sẽ hiệu quả hơn thay vì sử dụng máy chủ để kết hợp các giá trị không đổi. Ví dụ: để bao gồm ‘:’ và ‘->’ trong tập kết quả để hiển thị tên quốc gia, mã vùng quốc gia 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 các truy vấn có tiêu đề tương ứng có thể được thay đổi, đổi tên hoặc 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 các 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 có thể chứa các biểu thức toán học bằng cách áp dụng các toán tử cho một hoặc nhiều cột. Nó cho phép tập kết quả chứa các giá trị không tồn tại trong bảng cơ sở, nhưng được tính toán từ các giá trị được lưu 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 chặn việc truy xuất các bản ghi trùng lặp. Nó loại bỏ các 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à PERCENT 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 các bảng ghi sẽ được giới hạn bằng số hoặc phần trăm (%), Biểu thức TOP cũng có thể sử dụng với các câu lệnh như INSERT, UPDATE, DELETE.

Cú pháp:

SELECT [ALL|DISTINCT] [TOP expression [PERCENT] [NUMER]] FROM <table_name>

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 <column_name1>,[, <column_name2> ...] INTO <new_table> 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 giới hạn có điều kiện ( dễ hiểu hơn là lọc bản ghi) các 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 các 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ị loại bỏ nếu sai.

Cú pháp:

SELECT <column_name1> [, <column_name2> ...] FROM <table_name> WHERE <search_condition> 

Các toán tử quan hệ trong SELECT:

Ví dụ sử dụng mệnh đề WHERE để hiển thị dữ liệu voiws Endate là ngày xác định

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.Person 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ể

WildcardMô 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.Person 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.Person where LastName 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ó các 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 các giá trị đơn lẻ cho mỗi tổng hợp

Từ khóa GROUP BY được theo sau bởi một danh sách các 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 có thể có nhiều hơn một grouped column.

SELECT <column_name1>, [, column_name2 , ...] FROM <table_name> GROUP BY <column_name>

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 các 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 có thể theo thứ tự tăng dần (ASC) hoặc giảm dần (DESC). Theo mặc định, các bản ghi được sắp xếp theo thứ tự ASC. Để chuyển sang 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 <column_name> FROM <table_name> ORDER BY <column_name> (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à phát triển các thẻ theo ý nghĩa riêng và các chương trình khác có thể hieuer ý nghĩa của các thẻ này ( tương tự thẻ HTML nhưng nhằm mục đích lưu trữ dữ liệu, không phải để trình duyệt đọc). XML là phương tiện ưu tiên cho các nhà phát triển để lưu trữ, định dạng, quản lý dữ liệu trên web. Các ứng dụng ngày nay có sự kết hợp của các công nghệ như ASP, công nghệ .NET, XML, SQL server hoạt động song song với nhau. Trong một số tình huống, lưu trữ dữ liệu XML trong SQL Server là giải pháp hợp lý.

Cơ sở dữ liệu XML nguyên gốc trong SQL Server có một số ư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 hỗ trợ lưu trữ nguyên bản dữ liệu XML bằng cách sử dụng kiểu dữ liệu xml. Cơ sở dữ liệu XML nguyên gốc xác định một mô hình logic cho một tài liệu XML – như là mô tả cho dữ liệu trong tài liệu đó – và lưu trữ và truy xuất tài liệu theo mô hình đó. Tối thiểu, mô hình phải bao gồm các phần tử, thuộc tính, PCDATA và thứ tự tài liệu.

Kiểu dữ liệu XML

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

Cú pháp:

CREATE TABLE <table_name> ([column_list,] <column_name> 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 có thể được thêm vào một bảng vào một bảng tại thời điểm tạo. Các cột kiểu dữ liệu XML hỗ trợ các từ ngữ DEFAULT cũng như ràng buộc NOT NULL.

Ví dụ:

AdventureWorks2019
INSERT INTO Person.PhoneBilling VALUES (100,98326505,'<Info><Call>Local</Call><Times>45 minuetes</Times><Charges>200</Charges></Info>')
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 bắt đầu 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ị ban đầu cho biến trong quá trình khai báo. Nếu bạn không chỉ định bất kỳ giá trị ban đầ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='<Employee name="Toan"/>'

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 để lưu trữ tài liệu XML trong cột có kiểu dữ liệu xml tên là typed (định kiểu) và untyped (không định kiểu) XML. Một cá thể XML có một lược đồ được liên kết với nó được gọi là cá thể 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ó mô tả cấu trúc và giới hạn nội dung của tài liệu XML bằng cách liên kết các lược đồ XML với các phiên bản hoặc tài liệu XML được khuyến nghị vì dữ liệu có thể được xác thực khi nó đang được lưu trữ trong cột kiểu dữ liệu xml.

SQL Server không thực hiện bất kỳ xác thực nào cho dữ liệu được nhập vào cột xml. Tuy nhiên, nó đảm bảo rằng dữ liệu được lưu trữ với một quy chuẩn tốt. Dữ liệu XML không định kiểu có thể được tạo và lưu trữ trong các cột hoặc biến của bảng tùy thuộc vào nhu cầu và phạm vi của dữ liệu.

Docs: https://docs.microsoft.com/en-us/sql/relational-databases/xml/xml-schema-collections-sql-server?view=sql-server-ver16

Bước đầu tiên khi sử dụng typed XML là đăng ký schema. Cú pháp:

CREATE XML SCHEMA COLLECTION <Schema_Collection_name> AS '[xmldefine]'

Ví dụ:

CREATE XML SCHEMA COLLECTION OrderSchemaCollection1
AS N'<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="Customer"  />
</xsd:schema>'
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 ('<Customer></Customer>')

Ngoài ra, chúng ta hooà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 = '<Customer></Customer>'
select @order
GO

Bài tập

Bài 1: Sử dụng database studentManagement để thực hiện các truy vấn sau:

Link bài studentManagement: https://hocvietcode.com/constraint-rang-buoc-table-strong-sql-server/#content_baitap

  • Lấy ra toàn bộ student.
  • Lấy ra top 3 student.
  • Lấy ra top 3 student, sắp xếp theo điểm từ trên xuống.
  • Tìm kiếm student có BirthDate nằm giữa '01/01/1993' và '31/12/1998'
  • Sử dụng hàm count(), đếm số lượng sinh viên và hiển thị ra bảng biểu diễn có tên: ClassID, ClassNAme, TotalStudent
  • Tính điểm trung bình của student và hiển thị ra các bản ghi bao  gồm các cột: studentId,StudentName,ClassName,StudentAvarageMark
  •  Tính tổng tất cả điểm của student, và chỉ hiển thị ra student có tổng điểm lớn hơn 10.

Bài 2: Sử dụng bảng Sales.Customer của AdventureWorks2019, xử lý các tác vụ:

  • Viết câu lệnh SELECT hiể thị ra những bản ghi not null và không bị trùng lặp (non-duplicate) lưu trữ trong đơn hàng
  • Viếtế câu lệh SELECT hiển thị ra toàn bộ khách hàng chi tiếtế trong cộtTerrioryID thỏa mãn yêu cầu nhỏ hơn 10.

Bài 3: Sử dụng bảng Sales.SalesOrderHeader, thực thi yêi cầu:

SELECt ra tất cả các customderID và orderID

Bài 4: Viết câu lệnh hiển thị toàn bộ cột của bảng Production.ProductionCostHistory được chỉnh sửa vào ngày 17/06/2003

Bài 5: Sử dụng bảng Production.Product thực thi các tác vụ:

  • Viết câ truy vấn hiển thị productID và tên cho mỗi sản phẩm trong bảng mà tên bắt đầu bằng Chain
  • Viết câu truy vấn hiển thị productID và tên cho mỗi sản phẩm trong bảng mà có chứa từ khóa Lock trong tên sản phẩm
  • Viết câu truy vấn hiển thị productID và tên cho mỗi sản phẩm trong bảng mà không chứa từ khóa Lock trong tên sản phẩm

Bài 6: Viết câu query hiển thị toàn bộ bản ghi đuợc cập nhật sau ngày 29 tháng 12 năm 2009. Hiển thị ra các cột: business Entity ID, cột name, cột hiển thị ngày chỉnh sửa Person.Person.

Bài 7: Viết câu truy vấn hiển thị  ProductID,Name,Color từ bản ghi trong bảng Production.Product. Chỉ hiển thị những bản ghi mà không có màu nào được gán.

Bài 8: Viết câu truy vấn trả ra business entity ID và cột name trong bảng Person.Person và sắp xếp theo LastName,FirstName,MiddleName

Bài 9: Viết câu truy vấn trong bảng Sales.SpecialOffer. Hiển thị phép hiệu của cột MinQty và MaxQty cùng với cột SpecialOfferId và cột Description

Bài 10:

1. Đọc hiểu bài toán quản lý Học viên và Điểm thi sau:

Có một Cơ sở dữ liệu (CSDL) như hình trên.

Bảng Test lưu danh sách các môn học.

Bảng Student lưu danh sách các học viên.

Bảng StudentTest lưu danh sách điểm thi và ngày thi của mỗi học viên với môn thi.

Một học viên chưa thi môn nào nếu như mã học viên (RN) không xuất hiện trong bảng StudentTest. Một môn học chưa có ai thi nếu mã môn học (TestID) không xuất hiện trong bảng StudentTest.

2. Tạo một file có tên Lab2.sql.

3. Tạo một CSDL đặt tên là ‘Baitap’ và thực hiện các yêu cầu dưới đây.

Tạo 3 bảng và chèn dữ liệu như yêu cầu dưới đây:

Student (Lưu danh sách các học viên gồm mã học viên(RN), tên(Name), tuổi(Age)).

RN (int primary key)

Name (VarChar (20))

Age (tinyint)

1

Nguyen Van BADC

20

2

Nguyen Van Tien

30

3

Tran Minh Dung

25

4

Toi La DEFG

22

Test (Lưu danh sách môn học gồm mã môn học (TestID, tên môn học(Name)).

TestID (int primary key)

Name (Varchar(20))

1

EPC

2

HTML

3

SQL

4

PHP

StudentTest (Lưu điểm thi của học viên với từng môn thi, gồm mã học viên (RN), mã môn học (TestID), ngày thi(Date), điểm thi(Mark)).

RN (int foreign key tham chiếu tới RN của Student)

TestID (int foreign key tham chiếu tới TestID của Test)

Date (Date)

Mark (Float)

1

1

7/17/2006

8

1

2

7/18/2006

5

1

3

7/19/2006

7

2

1

7/17/2006

7

2

2

7/18/2006

4

2

3

7/19/2006

2

3

1

7/17/2006

10

3

3

7/18/2006

1

a. Đưa ra điểm của học viên dưới dạng 4 chữ số, 2 chữ số sau dấu phảy.

b. Hiển thị những học viên có tuổi >25.

c. Hiển thị những học viên có tuổi là 20 hoặc 30.

d. Hiển thị những môn học có chứa ký tự ‘s’.

e. Hiển thị tất cả những bản ghi có điểm số >5 trong bảng StudentTest.

f. Hiển thị những học viên có tên gồm 4 ký tự.

g. Hiển thị những học viên có họ gồm 6 ký tự.

h. Hiển thị những học viên có họ gồm 6 ký tự nhưng không chứa ký tự ‘r’.

i. Thêm trường (cột) tên là Status có kiểu varchar(10) và giá trị mặc định là ‘Young’ vào bảng Student .

k. Xóa các ràng buộc khóa ngoại.

l. Xóa các ràng buộc khóa chính.

m. Xóa các bảng.

n. Xóa CSDL.

Extra:

1. Đưa ra tuổi trung bình của các học viên.

2. Tìm những học viên có tuổi cao nhất.

3. Tìm những học viên có tuổi thấp nhất.

4. Tìm những môn học có điểm cao nhất.

5. Tìm những môn học có điểm thấp nhất.

6. Tìm những học viên đã thi gần đây nhất.

7. Tìm những học viên đã thi đầu tiên.

8. Tính tổng tuổi của các học viên.

9. Tính xem đến thời điểm này mỗi môn học đã thi được bao nhiêu ngày rồi.

10. Tìm những học viên đạt điểm cao nhất.

11. Tìm những học viên có điểm thấp nhất.

12. Tính điểm trung bình cho mỗi học viên, điểm phải được sắp xếp giảm dần và được hiển thị dưới dạng 4 số, 2 chữ số sau dấu phảy.

13. Hiển thị danh sách các học viên đã tham gia thi, các môn thi được thi bởi các học viên đó.

14. Hiển thị danh sách các bạn học viên chưa thi môn nào.

15. Hiển thị danh sách học viên phải thi lại, tên môn học phải thi lại và điểm thi (điểm phải thi lại là điểm nhỏ hơn 5).

16. Hiển thị tên và điểm trung bình của học viên có điểm trung bình lớn nhất.

17. Hiển thị tên và điểm trung bình của học viên có điểm trung bình nhỏ nhất.

18. Hiển thị điểm thi cao nhất của từng môn học.

19. Hiển thị danh sách tất cả các học viên và môn học mà các học viên đó đã thi, nếu học viên chưa thi môn nào thì phần tên môn học để Null (LEft join, right join, full join)

Bài viết liên quan:

PolyBase, Query Store, và Stretch Database trong SQL Server
Dữ liệu JSON trong SQL Server
Các tính năng nâng cao SQL trong SQL Server 2019
Giới thiệu Azure SQL
Xử lý lỗi và TRY CATCH trong SQL Server
Transaction trong SQL Server
FUNCTION (hàm) trong SQL Server
Lập trình và control of flow trong Transact SQL
Trigger trong SQL Server
Index trong SQL Server
Truy vấn metadata và Dynamyic Management Object trong SQL Server
Stored Procedure trong SQL Server

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

2. PHÂN TÍCH VÀ ĐẶC TẢ HỆ THỐNG

1. TỔNG QUAN KIẾN THỨC THỰC HÀNH TRIỂN KHAI DỰ ÁN CÔNG NGHỆ THÔNG TIN

Hướng dẫn tự cài đặt n8n comunity trên CyberPanel, trỏ tên miền

Mẫu prompt tạo mô tả chi tiết bối cảnh

Một số cải tiến trong ASP.NET Core, Razor Page, Model Binding, Gabbage collection

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×