[COLOR=coral]Soru:birinci sorgum select tarih,kolon2,kolon3 from table1 where tarih=11.02.2006

ikinci sorgum select tarih,kolon4,kolon5 from table2 where tarih=10.02.2006

not:her iki sorgu daki tablolar farklı

[COLOR=coral]Cevap:
Soyle 2 tablo acalim.
USE [testdb] GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Table_1]
( [intID] [int] IDENTITY(1,1) NOT NULL,
[Date1] [datetime] NOT NULL,
[Col2] [int] NOT NULL,
[Col3] [int] NOT NULL )
ON [PRIMARY]

CREATE TABLE [dbo].[Table_2]
( [intID] [int] IDENTITY(1,1) NOT NULL,
[Date2] [datetime] NOT NULL,
[Col1] [int] NOT NULL,
[Col5] [int] NOT NULL )
ON [PRIMARY]

Tablolarin icine kayit atalim :
table_1 icin
intID Date1 Col2 Col3
----------- ----------------------- ----------- -----------
1 2005-01-01 00:00:00.000 1 1
2 2005-02-01 00:00:00.000 2 2
3 2005-03-01 00:00:00.000 3 3
4 2005-05-05 00:00:00.000 5 6
5 2005-07-06 00:00:00.000 4 6
6 2005-08-02 00:00:00.000 2 2

table_2 icin :
intID Date2 Col1 Col5
----------- ----------------------- ----------- -----------
1 2005-03-01 00:00:00.000 1 3
2 2005-05-02 00:00:00.000 3 5
3 2005-02-02 00:00:00.000 1 8
4 2005-04-04 00:00:00.000 4 4
5 2005-06-03 00:00:00.000 0 0
6 2005-07-03 00:00:00.000 1 1


SONRA
select t1.date1,t1.col2,t2.col1,t2.col5,t2.date2
from table_1 t1 inner join table_2 t2
on t1.intID = t2.intID
where t1.date1='01.01.2005' or t2.date2='03.07.2005'

SONUC :
date1 col2 col1 col5 date2
-------- ----- ----- ---- ------------
2005-01-01 1 1 3 2005-03-01

Beğeniler: 0
Favoriler: 0
İzlenmeler: 3329
favori
like
share
gorengozler Tarih: 31.03.2010 09:31
guzel olmus tsk
By_ergen Tarih: 08.12.2007 10:19
eLLerine saglık arkadasım
fiber_optic Tarih: 04.03.2007 22:08
[COLOR=coral]Hicbirsey2001 az bucuk deyinmis konuya ama ben yan tarafında SQL Server 2005 dedim SQL Server de sorgu birlestirmek icin yapılıyor yani veritabanı programlaması yapabiliyorsun nasıl asp ile websitesi programlıyabiliyorsan bununla da veritabanlarını programlıyorsun şu anda SQL hayatımızn her alanında var güvenli bir veritabanı sorgulama dilidir SQL

Teşekkürler Hiçbirşey2001 abi
hicbirsey2001 Tarih: 03.03.2007 01:12
SQL veritabanı sorgulama ve yönetim dilidir.

birçok alanda kullanılır, Unix sistemler altında ben çok kullandım

Şimdi kullanım alanı çok daha fazla genişledi, Microsoft Access te bile var




Kısaca bir alıntı yapıyorum senin için ama dediğim gibi konu çok geniştir;




SQL - Structured Query Language (Yapısal Sorgulama Dili) -I-

SQL Bir veritabanı sorgulama ve Yönetim Dilidir. Hemen hemen tüm ilişkisel veritabanı sistemleri SQL'i anlama yeteneğine sahiptir. İngilizceye olan yakınlığı bu dili veritabanı endüstrisinde hatrı sayılır bir yere getirmiştir. Her firma SQL'i kendine uygun bir şekle sokarak bazı eklentiler yaparak kendi veritabanı sistemlerinde kullanmaktadırlar. Mesela Interbase için ISQL Oracle için PL/SQL vs..Ancak hangi ilişkisel veritabanını kullanırsanız kullanın Standart SQL bu sistemler tarafından sorunsuz çalışacaktır.Çünkü SQL bir ANSI ve ISO standartıdır. SQL bilinenin aksine bir Programlama dili değildir. SQL veritabanı sorgulama ve yönetim dilidir. SQL komutları temelde iki alt grupta ele alınır.


DDL - Data definition Language (Veri tanımlama dili)
DML - Data manipulation Language (Veri İşleme dili)


Bu yazı dizisi PHP ve MySQL'e yeni başlayan ve orta düzeyde diyebileğimiz kullanıcılar içindir.

DML - Data manipulation Language (Veri işleme Dili)

- SELECT
- INSERT
- UPDATE
- DELETE

SELECT KOMUTU
Select komutu kullandığımız tablodan bizim belirlediğimiz kriterlere göre kayıtları seçer. Hangi alanlar görüntülenmek isteniyorsa o alanların ismi araya virgül koyularak yazılır.

SELECT name,surname FROM employee;
Bu sorgu deyimi employee tablosundaki name ve surname alanlarındaki tüm verileri görüntüler.

SELECT * FROM employee;
Eğer tablodaki tüm alanların görüntülenmesini istiyorsak * karakterini kullanırız.

Çoğu zaman tablodaki tüm kayıtları değilde bizim belirlediğimiz kriterlere göre görüntülenmesini isteriz. Mesela ismi'S' ile başlayan, adı Hatice olan, maaşı 1.000.000.000 dan az olan gibi. Bu durumda WHERE deyimini de gerekli operatörle birlikte kullanarak sorgumuza eklememiz gerekecektir.

SELECT name,surname,bolum FROM employee WHERE name='Sedat';
SELECT * FROM employee WHERE maas < 1000000000 ;

Eğer sorgusu yapılacak anahtar değer bir string ise o zaman ' ' yada " " içine almamız gerekecektir. Sayısal ifadeler için gerekli değildir.

WHERE ile kullanabilecek operatörler
< Küçük
> Büyük
>= Büyük veya eşit
Büyük değil
= Eşit
veya != veya # Eşit değil

Birden fazla kritere göre sorgu yapmak istediğimizde AND,OR,NOT operatörleri Sorgu içinde kullanılmalıdır.

SELECT * FROM employee WHERE cinsiyet='K' AND maas > 600000000 AND bolum='Bilgi İşlem';

Yukarıdaki sorgu bilgi işlem bölümünde çalışan maaşı 600.000.000 dan fazla bayan personel yada personellerin tüm versisini görüntüler.

SELECT * from employee WHERE bolum='Satın Alma' OR bolum='Bilgi İşlem';

Yukarıdaki sorgu bölümü satın alma yada bilgi işlem olan personel yada personellerin tüm versini görüntüler.

Sorgularımızda bazen verilerin artan yada azalan bir sıralamada listelenmesini isteyebilirsiniz. O zaman ASC ve DESC ifadelerini kullanmamız gerekecektir.

SELECT * FROM employee ORDER BY tarih DESC;

Yukarıdaki sorgu kayıtları tarih alanı baz alınarak azalan bir sırada listelenecektir.

SELECT * FROM employee ORDER BY maas ASC;

Yukarıdaki sorgu kayıtları maaş alanı baz alınarak artan bir sırada listeleyecektir.

SELECT * FROM employee WHERE maas >= 900000000 AND bolum ='Bilgi İşlem' ORDER BY maas DESC;

Yukarıdaki sorgu ifadesi bilgi işlem de çalışan maaşı 900.000.000 a eşit veya fazla olan personeli maaş bilgisi baz alınarak azalan sırada listeler.

Buraya kadar yazdıklarımı eğer usta bir programcı okuduysa şöyle bir eleştiri de bulunabilir. Performans açısından veritabanında bolum alanına Bilgi işlem,satın alma,halkla ilişkiler gibi bellekte fazla yer kaplayacak stringlerin bulunması iyi olmayabilir. Bu durumda MySQL de Enum Tipi tanımlanarak her bölüme bir numara verilebilir.

Tekrarlı kayıtları bir seferde listelemek :

Bazen kullanıdığımız sorgu aynı kaydı birden fazla listeleyebilir.
Bu birebir aynı olan kayıtları bir kez listelemek istiyorsak DISTINCT deyimini kullanabiliriz.

SELECT bolum FROM employee WHERE maas > 50000000;

Sorgusu sonucunda mesela bilgi işlem bolumunda çalışan ve maaşı 500 milyondan fazla olan kişiler buluancağı için sorgu sonucunda bilgi işlem bölümü bir den fazla listelenecektir.Bunu önlemek için Sorgu aşağıdaki gibi düzenlenebilir.

SELECT DISTICT bolum FROM employee WHERE maas>500000000;



Eğer bir kriter belirli bir aralığın içinde yer almasını isterseniz BETWEEN operatörü kullanbilirsiniz.

SELECT * FROM employee WHERE maas BETWEEN 600000000 AND 2000000000;

Yukarıdaki sorgu maaşı 600 milyon ile 2 milyar arasındaki personellerin tüm bilgisini görüntülecektir.

SELECT * FROM employee WHERE is_bas_tar BETWEEN {1980-06-01} AND {2002-06-01};

Yukaridaki sorgu ise işe başlama tarihini baz alarak iki tarih arasındaki değerleri sorgulayacaktır. Ancak burada Küme parentezleri dikkatinizi çekmiş olabilir. Eğer sorgu yapacağımız alan bir tarih (Date) tipinde ise küme parentezlerini kullanıyoruz.

AVG(),SUM(),MIN(),MAX(),COUNT()
SELECT MIN(maas) AS enazmaas FROM employee WHERE bolum='Bilgi İşlem';

Yukarıdaki sorgu bilgi işlem bölümünda çalışan ve en düşük maaşı alan personeli görünütüler. Ancak AS enazmaas eklentisi ile tabloda var olmayan harici bir alan oluşturuyoruz.Kullanmazsak sorgu yine çalışırdı ben yer gelmişken bu konuyada yer vermek istedim sadece.

SELECT MAX(maas) FROM employee WHERE bolum='Bilgi İşlem';

Bu sorgunun ne yaptığını sanırım tahmin ediyorsunuzdur

SELECT SUM(maas) FROM employee WHERE bolum='Bilgi İşlem';

Yukarıdaki sorgu bilgi işlem bölümünde çalışan tüm personelin maaşlarının toplamını görüntüler. Eğer bir alandaki tüm kayıtların toplamını bulmamız gerekirse SUM() fonksiyonu işimize yarayacaktır.

SELECT AVG(yas) FROM employee where bolum='Halkla İlişkiler';

Yukarıdaki sorgu halkla ilişkiler bölümünde çalışan personelin yaş ortalamasını verecetir.AVG() fonksiyonu istenen alandaki verilerin aritmetik ortasını görüntüler.

SELECT COUNT(*) fROM employee;

Yukarıdaki sorgu tablodaki kayıt sayısını görüntüler;

Eğer şirketin basın yayın bölümünde çalışan evli ve maaşı 500 milyondan az olan kişilerin sayısını öğrenmek istiyorsak aşağıdaki sorgu işimizi görecektir.


SELECT COUNT(*) FROM employee WHERE maas 1000000000 ;
dagl!_04 Tarih: 27.02.2007 20:08

fiber_optic ellerine saglik, harika yapmissin ama benim bir sorum olacak ?
bu nedir ? ne i$e yarar ? bu pascal-delphi-c dillerinden hangisi oluyor ? bunun nasil bir $ey oldugunu nereden ve nasil bakabiliyorum ? [ornek olarak :: html kodu bir notepad dokumanin icinde .html uzantili olursa bakabiliyoruz... senin verdigin bu $eyleri nereden nasil bakabilirim ? ]