Tôi đã thấy nhiều truy vấn với một cái gì đó như sau.
Select 1
From table
Điều này 1
có nghĩa là gì, nó sẽ được thực thi như thế nào và nó sẽ trả về cái gì?
Ngoài ra, trong các loại kịch bản, điều này có thể được sử dụng?
Tôi đã thấy nhiều truy vấn với một cái gì đó như sau.
Select 1
From table
Điều này 1
có nghĩa là gì, nó sẽ được thực thi như thế nào và nó sẽ trả về cái gì?
Ngoài ra, trong các loại kịch bản, điều này có thể được sử dụng?
Câu trả lời:
SELECT 1 FROM TABLE_NAME
có nghĩa là, "Trả về 1 từ bảng". Bản thân nó khá là không đáng kể, vì vậy thông thường nó sẽ được sử dụng WHERE
và thường xuyên EXISTS
(như ghi chú @gbn, đây không hẳn là cách thực hành tốt nhất, tuy nhiên, nó đủ phổ biến để được lưu ý, ngay cả khi nó không thực sự có ý nghĩa ( Điều đó nói rằng, tôi sẽ sử dụng nó bởi vì những người khác sử dụng nó và nó "rõ ràng hơn" ngay lập tức. Tất nhiên, đó có thể là một con gà nhớt so với vấn đề trứng, nhưng tôi thường không sống)).
SELECT * FROM TABLE1 T1 WHERE EXISTS (
SELECT 1 FROM TABLE2 T2 WHERE T1.ID= T2.ID
);
Về cơ bản, ở trên sẽ trả về mọi thứ từ bảng 1 có ID tương ứng từ bảng 2. (Đây rõ ràng là một ví dụ giả định, nhưng tôi tin rằng nó truyền đạt ý tưởng. Cá nhân tôi có thể làm như trên SELECT * FROM TABLE1 T1 WHERE ID IN (SELECT ID FROM TABLE2);
vì tôi thấy như vậy FAR rõ ràng hơn cho người đọc trừ khi có một lý do thuyết phục hoàn cảnh không).
Thực sự có một trường hợp mà tôi đã quên cho đến tận bây giờ. Trong trường hợp bạn đang cố gắng xác định sự tồn tại của một giá trị trong cơ sở dữ liệu từ một ngôn ngữ bên ngoài, đôi khi SELECT 1 FROM TABLE_NAME
sẽ được sử dụng. Điều này không mang lại lợi ích đáng kể so với việc chọn một cột riêng lẻ, nhưng, tùy thuộc vào việc triển khai, nó có thể mang lại lợi ích đáng kể khi thực hiện SELECT *
, đơn giản là vì thường càng nhiều cột mà DB trả về ngôn ngữ, dữ liệu càng lớn cấu trúc, điều đó có nghĩa là sẽ mất nhiều thời gian hơn.
...EXISTS (SELECT 1...
select 1 from table
sẽ trả về hằng số 1 cho mỗi hàng của bảng. Nó hữu ích khi bạn muốn xác định giá rẻ nếu bản ghi khớp với where
mệnh đề của bạn và / hoặc join
.
Nếu bạn có ý gì đó như
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1 FROM table WHERE...)
sau đó nó là một huyền thoại rằng 1
tốt hơn
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT * FROM table WHERE...)
Các 1
hoặc *
trong EXISTS bị bỏ qua và bạn có thể viết phần này theo tiêu chuẩn ANSI SQL 1992 :
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1/0 FROM table WHERE...)
exists (select 1/0
hoạt động như một cơ duyên
nó thực hiện những gì nó nói - nó sẽ luôn trả về số nguyên 1. Nó được sử dụng để kiểm tra xem một bản ghi có khớp với mệnh đề where của bạn không.
select 1 from table
được một số cơ sở dữ liệu sử dụng làm truy vấn để kiểm tra kết nối để xem nó còn sống hay không, thường được sử dụng khi truy xuất hoặc trả lại kết nối đến / từ nhóm kết nối.
Mặc dù nó không được biết đến rộng rãi, một truy vấn có thể có một HAVING
mệnh đề mà không có GROUP BY
mệnh đề.
Trong trường hợp như vậy, HAVING
mệnh đề được áp dụng cho toàn bộ tập hợp. Rõ ràng, SELECT
mệnh đề không thể đề cập đến bất kỳ cột nào, nếu không, bạn sẽ (chính xác) nhận được lỗi, "Cột không hợp lệ trong lựa chọn vì nó không được chứa trong NHÓM THEO", v.v.
Do đó, phải sử dụng giá trị bằng chữ (vì SQL không cho phép tập kết quả có cột bằng 0 - tại sao?!) Và giá trị bằng chữ 1 ( INTEGER
) thường được sử dụng: nếu HAVING
mệnh đề đánh giá TRUE
thì tập kết quả sẽ là một hàng với một cột hiển thị giá trị 1, nếu không, bạn nhận được tập hợp trống.
Ví dụ: để tìm xem một cột có nhiều hơn một giá trị riêng biệt hay không:
SELECT 1
FROM tableA
HAVING MIN(colA) < MAX(colA);
SELECT MIN(colA) < MAX(colA) FROM tableA
?
Để cụ thể hơn một chút, bạn sẽ sử dụng điều này để làm
SELECT 1 FROM MyUserTable WHERE user_id = 33487
thay vì làm
SELECT * FROM MyUserTable WHERE user_id = 33487
bởi vì bạn không quan tâm đến việc nhìn vào kết quả. Yêu cầu số 1 là rất dễ dàng cho cơ sở dữ liệu (vì nó không phải thực hiện bất kỳ tra cứu nào).
Nếu bạn không biết có tồn tại bất kỳ dữ liệu nào trong bảng của mình hay không, bạn có thể sử dụng truy vấn sau:
SELECT cons_value FROM table_name;
Ví dụ:
SELECT 1 FROM employee;
Vì vậy, chúng tôi sử dụng truy vấn SQL này để biết liệu có bất kỳ dữ liệu nào trong bảng không và số lượng hàng cho biết có bao nhiêu hàng tồn tại trong bảng này.
Điều này có nghĩa là Bạn muốn giá trị " 1 " là đầu ra hoặc Hầu hết thời gian được sử dụng làm Truy vấn Nội bộ vì một số lý do bạn muốn tính toán các truy vấn bên ngoài dựa trên kết quả của các truy vấn bên trong .. không phải tất cả thời gian bạn sử dụng 1 mà là bạn có một số giá trị cụ thể ...
Điều này sẽ cung cấp cho bạn đầu ra dưới dạng giá trị 1.
Nếu bạn chỉ muốn kiểm tra đúng hay sai dựa trên mệnh đề WHERE, hãy chọn 1 từ bảng trong đó điều kiện là cách rẻ nhất.
Tôi thấy nó luôn được sử dụng trong SQL tiêm, chẳng hạn như:
www.urlxxxxx.com/xxxx.asp?id=99 union select 1,2,3,4,5,6,7,8,9 from database;
Các số này có thể được sử dụng để đoán nơi cơ sở dữ liệu tồn tại và đoán tên cột của cơ sở dữ liệu bạn đã chỉ định. Và các giá trị của các bảng.
nó đơn giản có nghĩa là bạn đang truy xuất cột số đầu tiên từ bảng ,,,, có nghĩa là chọn Emply_num, Empl_no từ nhân viên; Ở đây bạn đang sử dụng chọn 1 từ Nhân viên; điều đó có nghĩa là bạn đang truy xuất cột Emply_num. Cảm ơn
Lý do là một lý do khác, ít nhất là cho MySQL. Đây là từ hướng dẫn sử dụng MySQL
InnoDB tính toán các giá trị cardinality chỉ mục cho một bảng trong lần đầu tiên bảng đó được truy cập sau khi khởi động, thay vì lưu trữ các giá trị đó trong bảng. Bước này có thể mất thời gian đáng kể trên các hệ thống phân vùng dữ liệu thành nhiều bảng. Vì chi phí này chỉ áp dụng cho hoạt động mở bảng ban đầu, để khởi động lại một bảng để sử dụng sau, hãy truy cập ngay sau khi khởi động bằng cách đưa ra câu lệnh như CHỌN 1 TỪ Tbl_name GIỚI HẠN 1
Điều này chỉ được sử dụng để thuận tiện với IF EXISTS (). Nếu không bạn có thể đi với
select * from [table_name]
Hình ảnh Trong trường hợp 'NẾU EXISTS', chúng ta chỉ cần biết rằng bất kỳ hàng nào có điều kiện được chỉ định tồn tại hay không không quan trọng nội dung của hàng là gì.
select 1 from Users
mã ví dụ trên, trả về không. của hàng bằng không. của người dùng có 1 trong một cột