mysql - 從表中選擇1是什麼意思?




plsql (10)

我看過很多這樣的問題

Select 1  
From table

這是什麼意思?它將如何執行,它會返回什麼? 請同時指導我可以使用哪種類型的情況?

提前致謝


SELECT 1 FROM TABLE_NAME表示“從表中返回1”。 它本身非常不起眼,所以通常它將與WHERE一起使用並經常存在(正如@gbn所指出的那樣,這不一定是最佳實踐,然而,即使它不是真的有意義的(也就是說,我會使用它,因為其他人使用它,並立即“更明顯”。當然,這可能是一個粘性雞與蛋問題,但我通常不會居住))。

 SELECT * FROM TABLE1 T1 WHERE EXISTS (
     SELECT 1 FROM TABLE2 T2 WHERE T1.ID= T2.ID
 );

基本上,上面將返回表1中的所有內容,表1中有相應的ID。(這顯然是一個人為的例子,但我相信它表達了這個想法。就我個人而言,我可能會將上述內容作為SELECT * FROM TABLE1 T1 WHERE ID IN (SELECT ID FROM TABLE2);因為我認為FAR對讀者更為明確,除非有一個非常有說服力的理由)。

編輯

實際上有一個我剛才忘記的案例。 在您試圖從外部語言確定數據庫中存在值的情況下,有時會使用SELECT 1 FROM TABLE_NAME 。 與選擇單個列相比,這不會帶來顯著的好處,但根據實現情況,它可能會比提供SELECT *提供更多的好處,僅僅是因為通常情況下,數據庫返回的語言越多,數據結構意味著需要更多的時間。


select 1 from table將為表的每一行返回常量1。 當你想便宜地確定記錄是否與你的where子句和/或join相匹配時,這很有用。


儘管它並不廣為人知,但查詢可以有一個沒有GROUP BY子句的HAVING子句。

在這種情況下, HAVING子句適用於整個集合。 顯然, SELECT子句不能引用任何列,否則你會(正確)得到錯誤,“列在選擇中無效,因為它不包含在GROUP BY中”等。

因此, 必須使用字面值(因為SQL不允許帶有零列的結果集 - 為什麼?!),並且通常使用字面值1( INTEGER ):如果HAVING子句求值為TRUE則結果集為1行中有一列顯示值1,否則您將獲得空集。

示例:查找列是否具有多個不同的值:

SELECT 1
  FROM tableA
HAVING MIN(colA) < MAX(colA);

原因是另一個,至少對於MySQL而言。 這是來自MySQL手冊

InnoDB在啟動後第一次訪問表時計算表的索引基數值,而不是將這些值存儲在表中。 在將數據分割成多個表的系統上,此步驟可能會花費大量時間。 由於此開銷僅適用於初始表打開操作,要“預熱”表供以後使用,請在啟動後立即通過發出諸如SELECT 1 FROM tbl_name LIMIT 1


如果你的意思是類似的話

SELECT * FROM AnotherTable
  WHERE EXISTS (SELECT 1 FROM table WHERE...) 

那麼1就比1

SELECT * FROM AnotherTable
  WHERE EXISTS (SELECT * FROM table WHERE...) 

在EXISTS中的1*被忽略,你可以按照ANSI SQL 1992標準的第191頁來寫:

SELECT * FROM AnotherTable
  WHERE EXISTS (SELECT 1/0 FROM table WHERE...) 

如果您只想根據WHERE子句檢查true或false,請從表中選擇1,其中condition是最便宜的方法。


它簡單意味著你正在從表中檢索第一列的數字,,,,意味著選擇Emply_num,僱員Empl_no; 在這裡您使用來自員工的select 1; 這意味著您正在檢索Emply_num列。 謝謝


我發現它總是用在SQL注入中,比如:

www.urlxxxxx.com/xxxx.asp?id=99 union select 1,2,3,4,5,6,7,8,9 from database;

這些數字可用於猜測數據庫的存在位置,並猜測您指定的數據庫的列名。以及表的值。


表中的每個記錄的結果都是1


這意味著你想要一個值“ 1 ”作為輸出或大多數時間用作內部查詢,因為由於某種原因,你想根據內部查詢的結果來計算外部查詢..並非所有的時間你使用1但你有一些具體的價值...

這將靜態地給你輸出值為1。





plsql