Máy vi tínhLoại tệp

SQL khác biệt: mô tả, ví dụ, thuộc tính

Thông thường, khi sử dụng SQL để lấy thông tin từ các bảng, người dùng nhận được dữ liệu dự phòng, bao gồm các hàng trùng lặp hoàn toàn giống hệt nhau. Để loại trừ tình huống này, sử dụng đối số riêng SQL trong mệnh đề Select. Trong bài báo này, chúng ta sẽ xem xét các ví dụ về việc sử dụng lập luận này, cũng như các tình huống mà trong đó tốt hơn là nên từ bỏ đối số.

Trước khi chúng ta bắt đầu xem xét các ví dụ cụ thể, chúng ta sẽ tạo ra một vài bảng cần thiết trong cơ sở dữ liệu.

Chuẩn bị bàn

Hãy tưởng tượng rằng chúng tôi có trong cơ sở dữ liệu được lưu trữ thông tin về hình nền, được trình bày trong hai bảng. Đây là bảng Oboi (hình nền) với các trường id (số nhận dạng duy nhất), loại (loại giấy dán tường, vinyl, vv), màu sắc, cấu trúc và giá cả. Và bảng Ostatki (các phần còn lại) với các trường id_oboi (tham chiếu đến số nhận dạng duy nhất trong bảng Oboi) và đếm (số cuộn trong kho).

Điền vào các bảng với dữ liệu. Trong bảng với hình nền chúng ta thêm 9 mục:

Oboi

Id

Loại

Màu

Cấu trúc

Giá

1

Giấy

Nhiều màu

Nổi

56,9

2

Giấy hai lớp

Beige

Mượt

114,8

3

Vinyl

Da cam

Nổi

504

4

Vải không dệt

Beige

Nổi

1020,9

5

Giấy hai lớp

Beige

Mượt

150,6

Lần thứ 6

Giấy

Nhiều màu

Mượt

95,4

Thứ 7

Vinyl

Màu nâu

Mượt

372

Thứ 8

Vải không dệt

Trắng

Nổi

980,1

Thứ 9

Vải

Màu hồng

Mượt

1166,5

Trong bảng với số còn lại còn có 9 bản ghi:

Ostatki

Id_oboi

Đếm

1

Thứ 8

2

12

3

24

4

Thứ 9

5

Ngày 16

Lần thứ 6

Thứ 7

Thứ 7

24

Thứ 8

32

Thứ 9

Thứ 11

Hãy bắt đầu bằng cách mô tả cách sử dụng khác biệt trong SQL.

Đặt khác biệt trong mệnh đề Select

Đối số riêng biệt nên được đặt ngay sau khi chọn Từ khoá trong các truy vấn. Nó được áp dụng ngay cho tất cả các cột được chỉ định trong mệnh đề Select vì nó sẽ loại trừ các hàng hoàn toàn giống nhau từ kết quả của truy vấn. Do đó, chỉ cần xác định "select distinct" khi viết một truy vấn SQL. Ngoại lệ duy nhất là việc sử dụng sự khác biệt bên trong các chức năng tổng hợp, mà sẽ được xem xét một chút sau đó.

Cần nhớ rằng hầu hết DBMS không nhận dạng được yêu cầu của bạn như sau:

SELECT Ostatki.Count khác biệt, Oboi khác biệt. *

T FROM Oboi

INNER JOIN Ostatki Về Oboi.id = Ostatki.id_oboi

Ở đây, đối số được chỉ định nhiều lần hoặc được xác định một lần, nhưng trước cột thứ hai, thứ ba hoặc cột có thể chọn khác. Bạn sẽ nhận được một lỗi với một tham chiếu đến không chính xác trong cú pháp.

Sử dụng các truy vấn chuẩn khác biệt

Rõ ràng là với việc xây dựng đúng cấu trúc của bảng và điền, trong cùng một tình huống bảng được loại trừ khi dây hoàn toàn giống hệt nhau gặp phải. Do đó, việc thực hiện truy vấn "Select distinct *" với một sự lựa chọn từ một bảng thực tế là không khả thi.

Hãy tưởng tượng một tình huống mà chúng ta cần phải tìm ra loại hình nền mà chúng ta có, chỉ để tiện lợi, sắp xếp theo loại:

SELECT Oboi.type

FROM lệnh Oboi theo loại

Và chúng tôi nhận được kết quả:

Loại

Giấy

Giấy

Giấy hai lớp

Giấy hai lớp

Vinyl

Vinyl

Vải

Vải không dệt

Vải không dệt

Như bạn thấy, có hàng trùng lặp trong bảng. Nếu chúng ta thêm vào mệnh đề Chọn mệnh đề khác biệt:

Chọn Oboi.type khác biệt

FROM lệnh Oboi theo loại

Sau đó, chúng tôi nhận được kết quả mà không lặp lại:

Loại

Giấy

Giấy hai lớp

Vinyl

Vải

Vải không dệt

Vì vậy, nếu dữ liệu đã được nhập chính xác vào bảng, ngay lập tức sau khi cuộc gọi hoặc yêu cầu của người mua chúng tôi sẽ có thể trả lời rằng không có hình nền chất lỏng, mặt đường kính và hình nền acrylic trong cửa hàng. Cho rằng phân loại trong các cửa hàng thường không giới hạn ở một trăm hình nền, nó sẽ là khá tốn kém để xem xét thông qua danh sách các loại không độc đáo.

Sử dụng khác biệt bên trong các chức năng tổng hợp

SQL khác biệt có thể được sử dụng với bất kỳ chức năng tổng hợp. Nhưng đối với Min và Max, việc sử dụng nó sẽ không có hiệu quả, và khi tính tổng hoặc giá trị trung bình, hiếm khi nào có thể tưởng tượng được tình huống mà nó không cần thiết phải tính đến sự lặp lại.

Giả sử chúng ta muốn biết nhà kho của chúng tôi có đầy đủ bao nhiêu, và chúng tôi gửi yêu cầu tính tổng số cuộn trong nhà kho:

Tổng hợp SELECT (Ostatki.count)

FROM Ostatki

Truy vấn sẽ trả về một phản ứng 143. Nếu chúng ta thay đổi thành:

Tổng kết SELECT (Ostatki.count khác biệt)

FROM Ostatki

Sau đó, chúng tôi chỉ nhận được 119 điểm, bởi vì hình nền trong các điều 3 và 7 đang có trong cùng một số lượng. Tuy nhiên, rõ ràng là câu trả lời này là không chính xác.

Thông thường nhất, SQL được sử dụng với chức năng Count. Vì vậy, không gặp khó khăn, chúng ta có thể tìm ra bao nhiêu loại hình nền độc đáo mà chúng ta thường có:

Số lượng SELECT (khác biệt Oboi.type)

T FROM Oboi

Và nhận được kết quả 5 - giấy bình thường và hai lớp, vinyl, vải và không dệt. Chắc chắn mọi người đã nhìn thấy một quảng cáo như: "Chỉ có chúng tôi có hơn 20 loại hình nền khác nhau!", Theo đó có nghĩa là trong cửa hàng này không có một vài chục của tất cả mọi thứ, nhưng hình nền của các loại hiện đại đa dạng nhất.

Thật thú vị, trong một yêu cầu, bạn có thể chỉ định một vài chức năng Count có hoặc không có thuộc tính riêng biệt. Đó là, đây là tình huống duy nhất mà khác biệt trong Chọn có thể có mặt nhiều lần.

Khi nào tôi nên từ chối việc sử dụng một đối số

Việc sử dụng đối số riêng biệt SQL nên được loại bỏ theo một trong hai cách sau:

  1. Bạn chọn từ bảng và chắc chắn về tính duy nhất của các giá trị trong mỗi. Trong trường hợp này, việc sử dụng các đối số là không thích hợp, bởi vì đây là một tải bổ sung trên máy chủ hoặc máy khách (tùy thuộc vào loại DBMS).
  2. Bạn sợ mất dữ liệu cần thiết. Hãy để chúng tôi giải thích.

Giả sử ông chủ yêu cầu bạn hiển thị một danh sách các hình nền mà bạn có, với chỉ có hai cột - loại và màu sắc. Theo thói quen, bạn xác định đối số riêng biệt:

SELECT khác biệt Oboi.type, Oboi.color

T FROM Oboi

ORDER BY Oboi.type

Và - bạn mất một số dữ liệu:

Loại

Màu

Giấy

Nhiều màu

Giấy hai lớp

Beige

Vinyl

Màu nâu

Vinyl

Da cam

Vải

Màu hồng

Vải không dệt

Beige

Vải không dệt

Trắng

Dường như chúng ta chỉ có một loại giấy nền (thông thường và hai lớp), mặc dù ngay cả trong bảng nhỏ của chúng ta cũng có hai bài báo (kết quả mà không có sự khác biệt):

Loại

Màu

Giấy

Nhiều màu

Giấy

Nhiều màu

Giấy hai lớp

Beige

Giấy hai lớp

Beige

Vinyl

Màu nâu

Vinyl

Da cam

Vải

Màu hồng

Vải không dệt

Trắng

Vải không dệt

Beige

Vì vậy, như với bất kỳ truy vấn nào, với đối số riêng biệt, chúng ta phải cẩn thận và giải quyết đúng vấn đề với ứng dụng của nó tùy thuộc vào nhiệm vụ đang có trong tay.

Thay thế khác biệt

Ngược lại đối số riêng biệt là đối số All. Khi bạn sử dụng nó, các dòng trùng lặp sẽ được lưu. Nhưng vì mặc định DBMS nghĩ rằng nó là cần thiết để in tất cả các giá trị, tất cả các đối số nhiều hơn một specifier hơn một đối số thực tế chức năng. Chúng tôi hy vọng rằng bạn bây giờ hiểu khi sử dụng khác biệt (SQL). Bản mô tả cung cấp cho bạn thông tin đầy đủ về tính hữu dụng của việc áp dụng lập luận này trong việc giải quyết các vấn đề khác nhau. Rốt cuộc, ngay cả những lập luận đơn giản trong ứng dụng của nó cũng che giấu một xác suất rất rõ ràng về việc mất một số dữ liệu và đưa ra thông tin chính xác.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 vi.birmiss.com. Theme powered by WordPress.