Aşağıdaki gibi birçok sorgu gördüm.
Select 1
From table
Bu ne anlama 1
geliyor, nasıl yürütülecek ve ne geri dönecek?
Ayrıca, bu ne tür senaryolarda kullanılabilir?
Aşağıdaki gibi birçok sorgu gördüm.
Select 1
From table
Bu ne anlama 1
geliyor, nasıl yürütülecek ve ne geri dönecek?
Ayrıca, bu ne tür senaryolarda kullanılabilir?
Yanıtlar:
SELECT 1 FROM TABLE_NAME
"Masadan 1 döndür" anlamına gelir. Kendi başına oldukça dikkate değer değildir, bu nedenle normalde birlikte WHERE
ve sıklıkla kullanılacaktır EXISTS
(@gbn notlarında olduğu gibi, bu mutlaka en iyi uygulama değildir, ancak gerçekten anlamlı olmasa bile not edilmesi yeterince yaygındır ( yani, bunu başkaları kullandığı için kullanacağım ve hemen "daha bariz" oluyor. Tabii bu viskoz bir tavuk-yumurta sorunu olabilir, ama ben genellikle durmuyorum)).
SELECT * FROM TABLE1 T1 WHERE EXISTS (
SELECT 1 FROM TABLE2 T2 WHERE T1.ID= T2.ID
);
Temel olarak, yukarıdaki tablo 2'deki karşılık gelen bir kimliği olan tablo 1'deki her şeyi döndürecektir. (Bu, açık bir şekilde uydurma bir örnektir, ancak fikri aktardığına inanıyorum. Şahsen, muhtemelen yukarıdakileri SELECT * FROM TABLE1 T1 WHERE ID IN (SELECT ID FROM TABLE2);
, FAR , yapmamak için son derece zorlayıcı bir neden olmadıkça okuyucu için daha açık.
Aslında şimdiye kadar unuttuğum bir durum var. Veritabanında bir dış dilden bir değerin varlığını belirlemeye çalıştığınız durumda, bazen SELECT 1 FROM TABLE_NAME
kullanılacaktır. Bu, tek bir sütun seçmeye göre önemli bir fayda sağlamaz, ancak uygulamaya bağlı olarak, a yapmaya göre önemli kazançlar sağlayabilir SELECT *
, çünkü genellikle DB bir dile ne kadar çok sütun döndürürse, veriler o kadar büyük olur. yapı, bu da daha fazla zaman alınacağı anlamına gelir.
...EXISTS (SELECT 1...
select 1 from table
tablonun her satırı için 1 sabitini döndürür. Kaydın sizin where
cümlenizle ve / veya ile eşleşip eşleşmediğini ucuza belirlemek istediğinizde kullanışlıdır join
.
Gibi bir şey demek istiyorsan
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1 FROM table WHERE...)
o zaman bir var efsane olduğunu 1
daha iyidir
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT * FROM table WHERE...)
1
Veya *
göz ardı edilir MEVCUT ve başına bu yazabilirsiniz içinde ANSI SQL 1992 Standardının Sayfa 191 :
SELECT * FROM AnotherTable
WHERE EXISTS (SELECT 1/0 FROM table WHERE...)
exists (select 1/0
bir cazibe gibi çalışıyor
söylediği şeyi yapar - her zaman tamsayı 1'i döndürür. Nerede cümlenizin var olup olmadığını kontrol etmek için kullanılır.
select 1 from table
bazı veritabanları tarafından bir bağlantının canlı olup olmadığını görmek için bir sorgu olarak kullanılır, genellikle bir bağlantı havuzundan / havuzundan bir bağlantı alırken veya geri döndürürken kullanılır.
Yaygın olarak bilinmemekle birlikte, bir sorgu, HAVING
cümleci olmayan bir GROUP BY
cümle içerebilir .
Bu gibi durumlarda, HAVING
cümle tüm sete uygulanır. Açıkçası, SELECT
cümle herhangi bir sütuna atıfta bulunamaz, aksi takdirde "Sütun, GROUP BY içinde yer almadığı için seçimde geçersiz" vb. Hatayı alırsınız (düzeltir).
Bu nedenle, değişmez bir değer olmalıdır (SQL sıfır sütunlu bir resultset izin vermediği için - neden ?!) kullanılabilir ve değişmez değer 1 ( INTEGER
) yaygın kullanılır: eğer HAVING
hüküm değerlendirir TRUE
sonra resultset biriyle bir satır olacak 1 değerini gösteren sütun, aksi takdirde boş küme elde edersiniz.
Örnek: bir sütunun birden fazla farklı değeri olup olmadığını bulmak için:
SELECT 1
FROM tableA
HAVING MIN(colA) < MAX(colA);
SELECT MIN(colA) < MAX(colA) FROM tableA
?
Biraz daha spesifik olmak gerekirse, bunu yapmak için kullanırsınız
SELECT 1 FROM MyUserTable WHERE user_id = 33487
yapmak yerine
SELECT * FROM MyUserTable WHERE user_id = 33487
çünkü sonuçlara bakmayı umursamıyorsun. Veri tabanı için 1 sayısını sormak çok kolaydır (çünkü herhangi bir arama yapmak zorunda değildir).
Tablonuzda herhangi bir veri olup olmadığını bilmiyorsanız, aşağıdaki sorguyu kullanabilirsiniz:
SELECT cons_value FROM table_name;
Örnek olarak:
SELECT 1 FROM employee;
Bu nedenle, tabloda herhangi bir veri olup olmadığını bilmek için bu SQL sorgusunu kullanırız ve satır sayısı bu tabloda kaç satır olduğunu gösterir.
WHERE cümlesine göre yalnızca doğru veya yanlışı kontrol etmek istiyorsanız, koşulun en ucuz yol olduğu tablodan 1'i seçin.
Bu , çıktı olarak " 1 " değerini istediğiniz anlamına gelir veya Çoğu zaman İç Sorgular olarak kullanılır, çünkü bazı nedenlerden dolayı dış sorguları iç sorguların sonucuna göre hesaplamak istersiniz .. her zaman 1'i değil, bazı özel değerlere sahip ...
Bu statik olarak size değer 1 olarak çıktı verecektir.
Her zaman SQL enjeksiyonunda kullanıldığını görüyorum, örneğin:
www.urlxxxxx.com/xxxx.asp?id=99 union select 1,2,3,4,5,6,7,8,9 from database;
Bu sayılar, veritabanının nerede olduğunu tahmin etmek ve belirttiğiniz veritabanının sütun adını ve tabloların değerlerini tahmin etmek için kullanılabilir.
bu basit, tablodan ilk sayı sütununu aldığınız anlamına gelir ,,,, Emply_num, Empl_no from Employees; burada Çalışanlar'dan 1'i seçiyorsunuz; bu, Emply_num sütununu aldığınız anlamına gelir. Teşekkürler
Nedeni, en azından MySQL için başka bir sebeptir. Bu MySQL kılavuzundan
InnoDB, bu tür değerleri tabloda depolamak yerine, bir tablo için başlangıçtan sonra bu tabloya ilk erişildiğinde endeks kardinalite değerlerini hesaplar. Bu adım, verileri birçok tabloya bölen sistemlerde önemli ölçüde zaman alabilir. Bu ek yük yalnızca ilk tablo açma işlemi için geçerli olduğundan, daha sonra kullanmak üzere bir tabloyu "ısıtmak" için, başlangıçtan hemen sonra SELECT 1 FROM tbl_name LIMIT 1 gibi bir ifade yayınlayarak ona erişin
Bu sadece IF EXISTS () ile kolaylık sağlamak için kullanılır. Aksi takdirde gidebilirsin
select * from [table_name]
Image 'IF EXISTS' durumunda, sadece belirtilen koşula sahip herhangi bir satırın var olduğunu veya satır içeriğinin ne olduğu önemli olmadığını bilmemiz gerekir.
select 1 from Users
yukarıdaki örnek kod, no döndürür. satır sayısı hayır'a eşittir. tek sütunda 1 olan kullanıcıların oranı