SELECTBir olan SQL komutu bundan ekstreler veri tabloları bir de ilişkisel veritabanı .
Bir komut SELECTsıfır veya daha fazla alabilirsiniz dizilerini gelen tablolar ve görünümler . SQL'in bildirimsel doğası nedeniyle , bir komut SELECT, bunların nasıl elde edileceğini değil, istenen sonuç kümesini açıklar. Bu nedenle veritabanı , sorguyu, sunucunun sürümüne veya kullanılan sunucuya bağlı olarak zamanla değişebilen bir sorgu yürütme planına dönüştürür .
Komut SELECT, geleneksel olarak aşağıdaki sözdizimine sahiptir:
SELECT expr [, expr ...] FROM tables WHERE conditions GROUP BY expr HAVING conditions ORDER BY expr LIMITHer ilişkisel veritabanı uygulaması belirli özellikler ve varyasyonlar ekler, bu nedenle bu sözdizimi özellikle eksiktir. Ayrıntılı bir sözdizimi elde etmek için kullanılan uygulamanın belgelerine başvurmak gerekir.
Aşağıdakileri my_tableiçeren tabloyu kullanan sorgu örnekleri :
col1 | col2 | col3 |
---|---|---|
foo | bar | 42 |
foo | baz | 84 |
İstek | Sonuç | Açıklama | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
SELECT * FROM my_table |
|
Joker karakter '*' tüm sütunları temsil eder. Sorgunun koşulu olmadığından tüm satırlar alınır. | |||||||||
SELECT col2 FROM my_table |
|
Sütunun tüm demetleri col2alınır. | |||||||||
SELECT col1, col2 FROM my_table WHERE col3 > 50 |
|
Bu sorgu bir koşul kullanır WHERE col3 > 50, bu nedenle yalnızca demet (foo, baz, 84) alınır. Ayrıca, yalnızca col1 ve col2'yi seçer, bu nedenle sonuçta col3 görüntülenmez. | |||||||||
SELECT SUM(col3) * 3 FROM my_table |
|
Seçilen sütunlara işlem ve fonksiyon uygulamak mümkündür. |
Bir sorgu sözdiziminin ilk bölümü, SELECTtablolardan hangi sütunların çıkarılması gerektiğini ve muhtemelen bu sütunların değerlerinin nasıl toplanması gerektiğini tanımlamanıza olanak tanır. Bu seçime matematiksel işleçler veya hatta SUM veya AVG gibi veritabanı motoru tarafından sunulan işlevler uygulamak mümkündür . Son olarak, bir seçim sırasında, bir tablonun tüm sütunlarını seçmeye izin veren '*' joker karakterini kullanmak mümkündür. Birkaç tablo talep edildiğinde, örneğin bir tablo adının jokerinin önüne ekleyerek, joker tabloların neyin geçerli olduğunu belirtmek mümkündür SELECT T1.*, T2.foo.
İstek | Sonuç | Açıklama | ||||||
---|---|---|---|---|---|---|---|---|
SELECT 1 |
|
Bu sorgu herhangi bir tabloyu değil, doğrudan bir değeri kullanır, dolayısıyla sonuç '1' adlı tek bir sütun dizisinden oluşur: ilk satırdır ve tek bir değeri olan 1: ikinci satırdır. | ||||||
SELECT 1 AS "Colonne1" |
|
Bu sefer sütuna "Sütun1" takma adı verildi, bu nedenle sonuç tablosu daha belirgindir. | ||||||
SELECT 1 * 2, 3 + 4, CONCAT("Hello ", "World") |
|
Sorgu sırasında işlemler ve işlevler uygulamak mümkündür SELECT. |
Anahtar kelime, FROMveri kaynağı olarak hangi tabloların, görünümlerin veya alt sorguların kullanılacağını tanımlamak için kullanılır. FROMTablolar arasında birleşimleri tanımlamanın da mümkün olduğu maddede de yer almaktadır .
Örnekler:
SELECT * FROM table1, table2Bu sorgu, tablo1 ve tablo2 tablolarının tüm olası kombinasyonlarını döndürür , yani, tablo1 1000 demet içeriyorsa ve tablo2 , 2000 içeriyorsa, sonuç 2.000.000 demet olacaktır. Bu nedenle, tabloları JOIN anahtar sözcüğünü kullanarak birleştirmek daha yaygındır ve koşulların iki tablo arasındaki birleştirmeye uygulanmasına izin verir.
SELECT table1.a, table2.b FROM table1 JOIN table2 ON table1.a = table2.aBu sorgu ile sadece table1.a = table2.a koşuluna uyan tuplelar seçilecektir.
Anahtar kelime, WHEREdemetleri seçmek için koşulları tanımlamak için kullanılır. Farklı koşullar ifade edilebilir ve böylece farklı koşulları AND veya OR anahtar sözcükleriyle birleştirerek bir denklem oluşturulabilir . Farklı koşulların uygulanma sırasını belirlemek için parantezler kullanılabilir.
Misal:
SELECT field1 FROM table1 WHERE table1.field2 > 42 AND table1.field3 = "Gonzo"Anahtar kelime, GROUP BYsütun adları veya ifadeler aracılığıyla sonuçların nasıl gruplandırılması gerektiğini tanımlamak için kullanılır. Sorguda GROUP BY varlığı genellikle gibi toplama işlevleri, varlığını ima eder SUM(expr), AGV(expr)ya da COUNT(expr)içinde SELECT.
Aşağıdakileri içeren my_table tablosunu kullanan örnek:
col1 | col2 | col3 |
---|---|---|
foo | bar | 1 |
foo | baz | 2 |
bar | bar | 4 |
bar | baz | 8 |
İstek | Sonuç | Açıklama | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
SELECT col2, COUNT(1), AVG(col3) FROM my_table GROUP BY col2 |
|
Burada iki grup oluşturulmuştur, çubuk değeri grubu ve baz değeri grubu . | |||||||||
SELECT COUNT(1), AVG(col3) FROM my_table GROUP BY col3 < 3; |
|
Burada demetleri gruplamak için bir ifade kullanılmıştır, bu nedenle biri ifadenin doğru olduğu, diğeri ifadenin yanlış olduğu durum için olmak üzere iki grup oluşturulur. |
Anahtar kelime, HAVINGbir GROUP BY. Bu nedenle, farklı WHEREolmasından WHEREönce dizilerini seçimi için kullanılır GROUP BYve bu HAVINGile agregasyon sonra dizilerini seçimi için kullanılır GROUP BY.
Aşağıdakileri içeren my_table tablosunu kullanan örnek:
col1 | col2 | col3 |
---|---|---|
foo | bar | 1 |
foo | baz | 2 |
bar | bar | 4 |
bar | baz | 8 |
bar | foo | 16 |
İstek | Sonuç | Açıklama | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
SELECT col2, COUNT(1), AVG(col3) FROM my_table GROUP BY col2 HAVING COUNT(1) > 1 |
|
Burada üç grup oluşturulmuştur; değer için grup ve değer bariçin grup ve değer baziçin grup foo, ancak HAVINGseçilen yalnızca ilk ikisi, çünkü grup fooyalnızca bir demet içerir. | |||||||||
SELECT col2, COUNT(1) AS count, SUM(col3) AS sum FROM my_table GROUP BY col2 HAVING sum = 10 |
|
Burada da üç grup oluşturuldu, ancak sadece biri HAVING cümlesiyle tutuldu. |
Anahtar kelime, ORDER BYsonuçları sıralamak için kullanılır. Sıralama varsayılan olarak artan şeklindedir, ancak DESC anahtar kelimesi kullanılarak azalan olabilir . Birkaç alanda atış yapmak mümkündür, ilk sahada eşitlik olması durumunda ikincisi kullanılır vb.
Misal:
SELECT * FROM my_table ORDER BY field1 ASC, field2 DESC;Bir sorgunun sonuç sayısını sınırlamanın yolu kullanılan motora bağlıdır, ancak SQL: 2008 standardı aşağıdaki sözdizimini tanımlar:
SELECT * FROM table1 FETCH FIRST 10 ROWS ONLY