Üye Kayıt Üye Giriş

MYSQL Komutları-4


MYSQL Komutları-4

Grup sorgular ve maksimum değer atama

Bir çok kişide görülen soru şu;

"group by ile fieldi grupluyorum ve order by ile tersten sona listeliyorum yanliz şu şekilde bir problem var listelerken gruplanan fielde bagli ilk kayidi aliyor. yani username e gore gruplarsak bu kullanici 2004 yilinda ilk yazisini girmis 2007 de son yazisini girmis ama 2004 dekini baz alarak listeliyor. nasil cozum uretebilirim."

bu soruya karşı herkes binbirturlu akrobatliklarla yardimci olmaya calismis. yok efendim while icinde kontrol, tekrardan sorgu, array a yazdir kontrol et. gereksiz.

bu gibi durumlarda max tam bizim işimize göre. seçilen fielde bağlı en yüksek yani maximum kayidi getirecektir.

örneğin:
tablo makale
-id--yazar--veri

kayitlar
-1--caesar--ehe
-2--caesar--hoho
-3--yns--hobele
-4--savvy-yeap
-5--hunter-ok
-6--caesar-slm
-7--yns--hello world
-8--hunter-hypertext

sorgumuz:

plaın textphp:
$sorgu=mysql_query("select max(id) as id, yazar, text,count(id) as sayi from makale group by yazar order by id desc");

olsun. while icinde bu donguden yazar ,text ve sayiyi cektigimiz zaman sonu su olacaktir.

hunter - hypertext (2)
yns - hello world (2)
caesar - slm (3)
savvy - yeap (1)

bu sekilde son yani maximum kayit degerlerine göre verilen fieldden listeleme yapmis olacağız

 

HAVING gruplama sorgusuna şart koymak

SELECT category, type , count( * ) as total FROM `documents` GROUP BY category, type HAVING total < 3

 

İki Tablodan Veri Almak

SELECT Tablo1.Alan1, Tablo1.Alan2, Tablo2.Alan1, Tablo2.Alan2
FROM Tablo1, Tablo2
WHERE Tablo1.Alan1=Tablo2.Alan1

 

IN komutu

IN (liste) : Liste olarak tanımlanan değerleri alır. Yani bir şekilde OR ifadesine denktir. Örneğin yaşı 18, 25 ile 30 olan personeller;
SELECT ad ||' ' ||soyad FROM Personel_Table
WHERE yas=18 OR yas=25 OR yas=30;
Veya
SELECT ad ||' ' ||soyad FROM Personel_Table
WHERE yas IN(18,25,30);
 

IN Komutu

SELECT EMPNO,ENAME,SAl,MGR FROM EMP WHERE MGR IN (7902, 7566, 7788);
MGR 7902 yada 7566 yada 7788 olan kayıtlar seçilir.

 

Indeksler

 

* İndeksler, belirli bir değeri olan satırları daha hızlı bulmak için kullanılırlar.
* İndeks olmazsa, MySQL birinci kayıttan başlayarak, ilgili kayıtları bulana kadar tablonun sonuna kadar gitmek zorunda kalır. Indeksler sayesinde rasgele tarama yapılabilir.
* İstenirse, kolonun tamamı değil sadece belirli bir kısmı da indekslenebilir.
* Text/Blob tipi alanların tamamı değil sadece bir kısmı indekslenebilir.
* Text/Blob alanların tamamını indekslemek için fulltext isimli özel bir indeks tipi kullanılabilir.
* Bir tabloda en fazla 32 kolonda indeks oluşturulabilir.
* Bir indeks birden fazla kolonu kapsayacak şekilde de yapılabilir. Bir indeks en fazla 15 kolonu kapsayabilir. Çoklu indeks, içerdiği kolonları kapsayan AND işlemleri sırasında kullanılır.
* MySQL'in indeksi kullanması tablonun %30'undan fazlasına erişmesini gerektirecekse, o zaman MySQL var olmasına karşın indeksi kullanmamayı tercih edecektir. Çünkü böyle bir sorguda, sıralı arama yapmak büyük olasılıkla rasgele aramadan daha hızlı olacaktır.

INITCAP

Parametre olarak verilen karakter dizisi içerindeki her kelimenin baş harfini büyük harfe diğer harflerini küçük harfe dönüştürür.

 

Insert Into Deyimi

Bir tabloya kayit eklemek için kullanılır.

Kullanım şekli:

Insert Into Tablo adı (alan1,alan2,..,alanN) values ('değer1', 'değer2',.., 'değerN');


Örnekler:

Insert Into isim (ad,soyad) values ('ali','rizeli');

İsim adlı tabloya sadece ad ve soyad alanlarına olmak üzere kayıt yapar.
Insert Into isim values ('ali',null,'ali@rizeli.com');

Bu kullanım şeklinde alanlar belirtilmediğinden tüm alanların değeri belirtilmek zorundadır. Eğer girilecek alanlar belirtilmiş olsa idi boş kayıtlar belirtilmek zorunda kalmazdı.
 

INSTR

INSTR(kolonlsabit1'karakter dizisi') : Verilen kolon ya da sabit karakter dizisi
içerisinde istenilen karakter ya da karakter dizisinin ilk
geçtiği konumu döndürür.

IS NULL işleci

Bir kolon değerinin NUll olup olmadığını anlamanın tek yolu bu işleci kullanmaktır. '=NUll' işleci kullanmak aynı şey değildir ve hiçbir sonuç vermez.
SELECT ENAME,MGR FROM EMP WHERE MGR IS NULL;
Yukarıdaki ömek yöneticisi olmayan çalışanların Iistesini üretir.

kullanacagimiz database'i seçme

//kullanacagimiz database'i seçme
mysql_select_db (kullanicilar);

 

LAST_DAY

 

LAST_DAY(tarih) : Girilen tarihin ayının son gününün tarihini döndürür.

least

greatest ile aynı mantıkta, en küçük değeri döndürür.

PLAIN TEXTSQL:
least(163,34,546,1405,8723) "en küçük"
en küçük 34

 

LENGTH

LENGTH(kolonlsabit) : Verilen karakter dizisinin toplam kaç karakter uzunlukta
olduğunu döndürür.

 

LIKE alanın içinde aradığımız değeri olanları getirmek

 

SELECT * FROM öğrenci WHERE adi LIKE ('%hme%')

adi='ahmet'
adi like ('ahm%')
adi like ('%hmet')
adi like ('%hme%')

ahmet değeri getirilir
 

Like Komutu

LIKE : Benzerlik vermek için kullanılır. '%' karakteri tum karakterler yerine geçer. '_' karakteri ise tek karakter yerine geçer. Sadece _ işaretini çıkarmak için ' \_ ' işareti kullanılır. Küçük büyük harf ayrımı vardır.

'%t' t harfiyle başlayanlar.
'%t%' t harfi geçen tüm kayıtlar.
'B_K%' B baş harfi ile başlayan ve 3. Harfi K olan tüm kayıtlar.
karakterleri arasında değer girilirse kolon içinde Örneğin soyadı 'M' ile başlayan personeller;
SELECT ad ||' ' ||soyad FROM Personel_Table
WHERE soyad LIKE ' M% ' ;
 

LIMIT istenilen kayıttan başlayarak istenilen miktar kadar kayıt getirmek

SELECT * FROM `ogrenci` LIMIT 20, 10

öğrenci tablosunun
20.kayıtından itibaren 10 kayıt getirir

 

LOWER

Giriş olarak okuduğu karakter dizisini küçük harflere
önüştürür. 'kolonlsabit' şeklindeki gösterim bir tek parametre girileceğini ve bu parametrenin bir kolon adı ya da
bir sabit karakter dizisi olabileceğini gösterir.

SELECT LOWER(DNAME),LOWER('SQL') FROM DEPT;

lower ve upper

alan içindeki verileri küçük harfe çevirir

upper : lower ın tersi, yani küçük karakterleri büyüğe dönüştürüyor.

LPAD

LPAD(kolon/sabit,n,'karakter dizisi') : Parametre olarak verilen kolon ya da sabiti
yazmadan önce başına n adet istenilen karakter dizisinden basar. Eğer karakter dizisi verilmez ise boşluk ekler.

SELECT LPAD(DNAME,20,'*'),LPAD(DNAME, 15) FROM DEPT;
PAD(DNAME,20,'*') LPAD(DNAME,15)
***********ACCOUNTING ACCOUNTING
*************RESEARCH RESEARCH
*******************SALES SALES
**********OPERATIONS OPERATIONS

Bilgisayar Dershanesi Ders Sahibi;
Bilgisayar Dershanesi

Yorumlar

Yorum Yapabilmek İçin Üye Girişi Yapmanız Gerekmektedir.

ETİKETLER