3.4. Bir Tablonun Sorgulanması
Bir tablodan verileri almak için tablo sorgulanır. Bunun için bir SQL cümlesi olan SELECT
kullanılır. Cümle, bir seçim listesi (istenen sütunları içeren bir liste), bir tablo listesi (verilerin alınacağı tabloların listesi) ve isteğe bağlı bir niteleme (sınırlamaların belirtildiği kısım) içerir. Örneğin, hava_durumu
tablosundaki satırların tamamını almak için şunu yazın:
SELECT * FROM hava_durumu;
Burada *
, "tüm sütunlar" anlamına gelen bir kısayoldur.[65]
Yani, aynı sonuç böyle de alınacaktır:
SELECT il, asg_sck, azm_sck, yağış, tarih FROM hava_durumu;
Çıktı şöyle olmalıdır:
il | asg_sck | azm_sck | yağış | tarih ---------------+---------+---------+-------+------------ San Francisco | 46 | 50 | 0.25 | 1994-11-27 San Francisco | 43 | 57 | 0 | 1994-11-29 Hayward | 37 | 54 | | 1994-11-29 (3 satır)
Seçim listesinde sadece sütun isimlerini değil, ifadeleri de kullanabilirsiniz. Örnek:
SELECT il, (asg_sck+azm_sck)/2 AS ort_sck, tarih FROM hava_durumu;
Bunun çıktısı şöyle olacaktır:
il | ort_sck | tarih ---------------+---------+------------ San Francisco | 48 | 1994-11-27 San Francisco | 50 | 1994-11-29 Hayward | 45 | 1994-11-29 (3 satır)
AS
deyiminin çıktılanacak sütunu yeniden isimlendirmekte nasıl kullanıldığına dikkat edin. (AS
deyimi isteğe bağlıdır.)
Bir sorgu, istenen satırların yerini belirtmek üzere bir WHERE
deyimi eklenerek nitelikli yapılabilir. WHERE
deyimi bir mantıksal ifade içerir ve sadece mantıksal ifadeyi doğrulayan satırlar döndürülür. Niteleme amacıyla mantıksal işleçlere (AND
, OR
ve NOT
) izin verilir. Örneğin, San Francisco'nun yağışlı olduğu günleri bulalım:
SELECT * FROM hava_durumu WHERE il = 'San Francisco' AND yağış > 0.0;
Sonuç:
il | asg_sck | azm_sck | yağış | tarih ---------------+---------+---------+-------+------------ San Francisco | 46 | 50 | 0.25 | 1994-11-27 (1 satır)
Sorgu sonucunun sıralanmış olmasını da isteyebilirsiniz:
SELECT * FROM hava_durumu ORDER BY il;
Sonuç:
il | asg_sck | azm_sck | yağış | tarih ---------------+---------+---------+-------+------------ Hayward | 37 | 54 | | 1994-11-29 San Francisco | 46 | 50 | 0.25 | 1994-11-27 San Francisco | 43 | 57 | 0 | 1994-11-29 (3 satır)
Bu örnekte, sıralamanın nasıl yapılacağı tam olarak belirtilmemiştir, dolayısıyla hangi San Fransisco satırının önce geleceği belli olmaz. Fakat aşağıdaki sorgu daima bu sıralamayla dönecektir.
SELECT * FROM hava_durumu ORDER BY il, asg_sck;
Bir sorgunun sonucundan yinelenmiş satırların kaldırılmasını isteyebilirsiniz:
mydb=> SELECT DISTINCT il FROM hava_durumu;
Sonuç:
il --------------- Hayward San Francisco (2 satır)
Burada da yine satırların sırası her sorguda farklı olabilir. Sonucun istediğimiz sırada olmasını DISTINCT
ve ORDER BY
deyimlerini birlikte kullanarak sağlayabilirsiniz[66]:
SELECT DISTINCT il FROM hava_durumu ORDER BY il;
[65] SELECT *
kolay bir sorgulama olarak kullanışlı gibi görünse de, tabloya bir sütun eklemek sonuçları değiştireceğinden uygulamada çoğunlukla kötü bir tarz olarak kabul edilir.
[66]
Bazı veritabanı sistemlerinde ve PostgreSQL'in eski sürümlerinde DISTINCT
gerçeklenimi sıralamayı özdevimli yaptığından ORDER BY
gereksizdir. Fakat bunun böyle olması SQL standardının bir zorlaması değildir ve şimdiki PostgreSQL DISTINCT
deyiminin satırları sıralayacağını garanti etmemektedir.