MySQL Select : Sorgulama
Veritabanların da veriler üzerinde;
- yeni kayıt (insert),
- güncelleme (update)
- silme (delete)
dışında kayıtları görmek, kayıt saymak gibi ne yapılacaksa SORGU – SELECT akla gelmelidir.
Genel İfadesi:
SELECT gosterilecek bilgiAlanları
FROM tabloAdi[WHERE kosullar]
[GROUP BY alan1, alan2, …[HAVING kosul]]
[ORDER BY alan1, alan2, …]
[LIMIT baslangic, adet]
;
Örnek Tablomuz
Bilgi alanları/ sütunlar +----------+----------+-----------+------------+------------+-----------+ | ogrNo | adi | soyadi | mobil | dtarihi | bolumu | +----------+----------+-----------+------------+------------+-----------+
şeklindeydi.
En basit select ifadesi: select * from ogrenci;
* : tüm bilgi alanları (tüm sutunlar)
where : olmaması ise tüm kayıtlar anlamına gelir.
MariaDB [obs]> select * from ogrenci; +----------+----------+-----------+------------+------------+-----------+ | ogrNo | adi | soyadi | mobil | dtarihi | bolumu | +----------+----------+-----------+------------+------------+-----------+ | 03050095 | Ayşe | Güneş | NULL | 1998-03-01 | NULL | | 20220001 | Canan | Demirel | 5351234567 | 1940-03-10 | Astronomi | | 22050917 | Murat | Sulupınar | NULL | NULL | NULL | | 75050917 | Temel | Demir | 5557779777 | 1989-01-28 | Fizik | | 91050075 | Gülçin | Demircan | 532100011 | NULL | NULL | | 91050099 | Yahya | Demircan | 532100010 | 2022-03-10 | Matematik | .....Burada binlerce kayıt olduğunu varsayın, yazacağınız ifadeler sonucu başka kayıtlarda etkilenebilir.
soru: öğrencilerin adını ve soyadını görüntüleyiniz.
MariaDB [obs]> select adi,soyadi from ogrenci; +--------+-----------+ | adi | soyadi | +--------+-----------+ | Ayşe | Güneş | | Canan | Demirel | | Murat | Sulupınar | | Temel | Demir | | Gülçin | Demircan | | Yahya | Demircan | +--------+-----------+ 6 rows in set (0.000 sec)
Gösterilecek bilgilerde * yanında ilave bilgi alanı olarak kullanmak anlamsızdır.
MariaDB [obs]> select *,adi from ogrenci; +----------+--------+-----------+------------+------------+-----------+--------+ | ogrNo | adi | soyadi | mobil | dtarihi | bolumu | adi | +----------+--------+-----------+------------+------------+-----------+--------+ | 03050095 | Ayşe | Güneş | NULL | 1998-03-01 | NULL | Ayşe | | 20220001 | Canan | Demirel | 5351234567 | 1940-03-10 | Astronomi | Canan | | 22050917 | Murat | Sulupınar | NULL | NULL | NULL | Murat | | 75050917 | Temel | Demir | 5557779777 | 1989-01-28 | Fizik | Temel | | 91050075 | Gülçin | Demircan | 532100011 | NULL | NULL | Gülçin | | 91050099 | Yahya | Demircan | 532100010 | 2022-03-10 | Matematik | Yahya | +----------+--------+-----------+------------+------------+-----------+--------+ 6 rows in set (0.000 sec)
Koşul (where) olmadığı için tüm kayıtlar listelenmektedir.
Örn: tüm öğr.lerin adi, soyadi ve doğum tarihini görüntüleyiniz.
MariaDB [obs]> select adi,soyadi,dtarihi from ogrenci; +--------+-----------+------------+ | adi | soyadi | dtarihi | +--------+-----------+------------+ | Ayşe | Güneş | 1998-03-01 | | Canan | Demirel | 1940-03-10 | | Murat | Sulupınar | NULL | | Temel | Demir | 1989-01-28 | | Gülçin | Demircan | NULL | | Yahya | Demircan | 2022-03-10 | +--------+-----------+------------+ 6 rows in set (0.002 sec)
Select yanında mySQL fonksiyonları kullanılabilir.
Soru :Tüm ogrencilerin adinin ve soyadinin ilk harflerini görüntüleyen sql ifadesini yazınız.
MariaDB [obs]> select left(adi,1),left(soyadi,1) from ogrenci; +-------------+----------------+ | left(adi,1) | left(soyadi,1) | +-------------+----------------+ | A | G | | C | D | | M | S | | T | D | | G | D | | Y | D | +-------------+----------------+ 6 rows in set (0.000 sec)
soru: doğum tarihi ve adını görüntüleyiniz.
MariaDB [obs]> select dtarihi,adi from ogrenci; +------------+--------+ | dtarihi | adi | +------------+--------+ | 1998-03-01 | Ayşe | | 1940-03-10 | Canan | | NULL | Murat | | 1989-01-28 | Temel | | NULL | Gülçin | | 2022-03-10 | Yahya | +------------+--------+ 6 rows in set (0.000 sec)
soru:adı ve yaşları gösteren sql
MariaDB [obs]> select adi,year(now())-year(dtarihi) from ogrenci; +--------+---------------------------+ | adi | year(now())-year(dtarihi) | +--------+---------------------------+ | Ayşe | 24 | | Canan | 82 | | Murat | NULL | | Temel | 33 | | Gülçin | NULL | | Yahya | 0 | +--------+---------------------------+ 6 rows in set (0.001 sec)
soru: tum adların ilk harfi küçük, digerleri büyük yazdıran SQL ifadesi nedir?
MariaDB [obs]> select lcase(left(adi,1)), ucase(substring(adi,2)) from ogrenci; +--------------------+-------------------------+ | lcase(left(adi,1)) | ucase(substring(adi,2)) | +--------------------+-------------------------+ | a | YşE | | c | ANAN | | m | URAT | | t | EMEL | | g | üLçIN | | y | AHYA | +--------------------+-------------------------+ 6 rows in set (0.022 sec)
Birleşik yazdırmak için de CONCAT()
MariaDB [obs]> select concat(lcase(left(adi,1)),ucase(substring(adi,2))) from ogrenci; +----------------------------------------------------+ | concat(lcase(left(adi,1)),ucase(substring(adi,2))) | +----------------------------------------------------+ | aYşE | | cANAN | | mURAT | | tEMEL | | güLçIN | | yAHYA | +----------------------------------------------------+ 6 rows in set (0.001 sec)