25 SQL Sorgu Alıştırması
Merhabalar! Üzerinde çalıştığım SQL sorgu örneklerini sizlerle de paylaşıyorum. Umarım incelerken keyif alır ve öğrenirsiniz :)

Sorgu 1
İsmi A harfiyle başlayan müşterileri getiren sorgu.
SELECT * FROM CUSTOMER
WHERE CUSTOMERNAME LIKE 'A%'

Sorgu 2
İsmi A harfiyle başlayan VE Cinsiyeti erkek olanların getiren sorgu.
SELECT * FROM CUSTOMER
WHERE CUSTOMERNAME LIKE 'A%' AND GENDER= 'E'

Sorgu 3
Doğum yılı 1990 ve 1995 arasında olan müşterileri getiren sorgu.
SELECT * FROM CUSTOMER
WHERE BIRTHDATE>='1990-01-01' AND BIRTHDATE <='1995-12-31'
--YA DA
SELECT * FROM CUSTOMER
WHERE BIRTHDATE BETWEEN '1990-01-01' AND '1995-12-31'
--YA DA
SELECT * FROM CUSTOMER
WHERE YEAR(BIRTHDATE) BETWEEN 1990 AND 1995

Sorgu 4
İstanbul'da yaşan müşterileri getiren sorgu.
SELECT C.* , CT.CITIES
FROM CUSTOMER C
INNER JOIN CITIES CT ON C.CITYID= CT.ID
WHERE CT.CITIES= 'İSTANBUL'
--SUBQUERY YÖNTEMİ İLE
SELECT
(SELECT CITIES FROM CITIES WHERE ID=C.CITYID) AS CITIES,
* FROM CUSTOMER C
WHERE (SELECT CITIES FROM CITIES WHERE ID=C.CITYID)='İSTANBUL'

Sorgu 5
Hangi şehirde kaç müşteri olduğu bilgisini getiren sorgu.
SELECT CT.CITIES, COUNT(C.ID) FROM CUSTOMER C
INNER JOIN CITIES CT ON CT.ID= C.CITYID
GROUP BY CT.CITIES

Sorgu 6
Hangi şehirde kaç erkek, kaç kadın olduğunu getiren sorgu.
SELECT CT.CITIES, C.GENDER, COUNT(C.ID) AS CUSTOMERCOUNT FROM CUSTOMER C
INNER JOIN CITIES CT ON CT.ID=C.CITYID
GROUP BY CT.CITIES, C.GENDER
ORDER BY CT.CITIES, C.GENDER

Sorgu 7
Erkek ve kadın müşteri sayısını sütunda yer alacak şekilde gösteren sorgu.
SELECT CITIES AS ŞEHİRADI,
(SELECT COUNT(*) FROM CUSTOMER WHERE CITYID=C.ID AND GENDER='E' ) AS ERKEKSAYISI,
(SELECT COUNT(*) FROM CUSTOMER WHERE CITYID=C.ID AND GENDER='K' ) AS KADINSAYISI
FROM CITIES C

Sorgu 8
Yaşları kriterlere göre gruplandıran sorgu.
SELECT * FROM CUSTOMER
UPDATE CUSTOMER SET AGEGROUP='25-35 YAŞ ARASI' WHERE DATEDIFF(YEAR,BIRTHDATE,GETDATE()) BETWEEN 25 AND 35
UPDATE CUSTOMER SET AGEGROUP='36-45 YAŞ ARASI' WHERE DATEDIFF(YEAR,BIRTHDATE,GETDATE()) BETWEEN 36 AND 45
UPDATE CUSTOMER SET AGEGROUP= '46-55 YAŞ ARASI' WHERE DATEDIFF(YEAR,BIRTHDATE,GETDATE()) BETWEEN 46 AND 55
UPDATE CUSTOMER SET AGEGROUP= '56-65 YAŞ ARASI' WHERE DATEDIFF(YEAR,BIRTHDATE,GETDATE()) BETWEEN 56 AND 65
UPDATE CUSTOMER SET AGEGROUP='65 YAŞ ÜSTÜ' WHERE DATEDIFF(YEAR,BIRTHDATE,GETDATE()) > 65

Sorgu 9
Müşteriler içinde İstanbul’da yaşayan ve Kadıköy ilçesi dışında yaşayanları getiren sorgu.
SELECT * FROM CUSTOMER C
INNER JOIN CITIES CT ON CT.ID=C.CITYID
INNER JOIN DISTRICTS D ON D.ID= C.DISTRICID
WHERE CT.CITIES= 'İSTANBUL' AND D.DISTRICT <> 'KADIKÖY'

Sorgu 10
Müşterilerin telefon operatör kodlarına erişmek için gereken sorgu.
SELECT CUSTOMERNAME,TELNR1,TELNR2,
SUBSTRING(TELNR1, 1,5) AS OPERATOR1,
SUBSTRING(TELNR2,1,5) AS OPERATOR2
FROM CUSTOMER

Sorgu 11
İlçe bazında müşteri sayısını çoktan aza doğru sıralayan sorgu.
SELECT CT.CITIES, D.DISTRICT, COUNT(C.ID) AS CUSTOMERCOUNT FROM CUSTOMER C
INNER JOIN CITIES CT ON CT.ID=C.CITYID
INNER JOIN DISTRICTS D ON D.ID=C.DISTRICID
GROUP BY CT.CITIES, D.DISTRICT
ORDER BY CT.CITIES, COUNT(C.ID) DESC

Sorgu 12
Müşterilerin doğum tarihine göre doğum günü bilgisini getiren sorgu.
SET LANGUAGE Turkish
SELECT
CUSTOMERNAME, DATENAME(DW, BIRTHDATE) AS DOGUMGUNU
FROM CUSTOMER

Sorgu 13
Sorgu yapılan gün (bugün) ile aynı tarihte doğan müşterileri getiren sorgu.
SELECT * FROM CUSTOMER
WHERE DATEPART(MONTH,BIRTHDATE) = DATEPART(MONTH, GETDATE())
AND DATEPART(DAY,BIRTHDATE) = DATEPART(DAY,GETDATE())

Sorgu 14
Araç sayılarını total araç sayısına göre yüzdelik cinsinde ifade eden sorgu.
SELECT BRAND, COUNT(*) AS COUNT_,
ROUND(
CONVERT(FLOAT, COUNT(*))/ (SELECT COUNT(*) FROM WEBOFFERS)*100,2) AS PERCENT_
FROM WEBOFFERS
GROUP BY BRAND
ORDER BY 2 DESC

Sorgu 15
Araç sayılarını iller bazında büyükten küçüğe listeleyen sorgu.
SELECT C.CITY, COUNT(O.ID) AS COUNT_ FROM WEBOFFERS O
INNER JOIN USER_ U ON U.ID=O.USERID
INNER JOIN CITY C ON C.ID=O.CITYID
INNER JOIN TOWN T ON T.ID=O.TOWNID
INNER JOIN DISTRICT D ON D.ID=O.DISTRICTID
GROUP BY C.CITY
ORDER BY 2 DESC

Sorgu 16
İstanbul’da Volkwagen markalı, modeli Passat olan, vites türü otomatik olan, model yılı 2014–2018 arası olan, yakıt türü dizel olan, Sahibinden üzerinden satılan araçları getiren sorgu.
SELECT U.NAMESURNAME, C.CITY, T.TOWN, D.DISTRICT, O.TITLE, O.BRAND,
O.MODEL,O.PRICE, O.YEAR_, O.KM, O.FUEL, O.SHIFTTYPE, O.COLOR, O.VARYANT
FROM WEBOFFERS O
INNER JOIN USER_ U ON U.ID=O.USERID
INNER JOIN CITY C ON C.ID=O.CITYID
INNER JOIN TOWN T ON T.ID=O.TOWNID
INNER JOIN DISTRICT D ON D.ID=O.DISTRICTID
WHERE C.CITY='İSTANBUL'
AND O.SHIFTTYPE IN ('Yarı Otomatik Vites', 'Otomatik Vites')
AND O.BRAND= 'Volkswagen' AND O.MODEL = 'Passat'
AND O.FUEL ='Dizel' AND O.FROMWHO = 'Sahibinden'
AND O.YEAR_ BETWEEN 2014 AND 2018
ORDER BY KM, PRICE

Sorgu 17
CUSTUMER tablosundan AGEGROUP sütununu silen sorgu.
ALTER TABLE CUSTOMER
DROP COLUMN AGEGROUP;
Sorgu 18
Şehirlerin, haftanın günlerine göre toplam satışlarını ekrana getiren sorgu.
SELECT CITY,
(SELECT SUM(LINETOTAl) FROM SALEORDERS WHERE CITY=S.CITY AND DAYOFWEEK_='01.PZT') AS PAZARTESI,
(SELECT SUM(LINETOTAl) FROM SALEORDERS WHERE CITY=S.CITY AND DAYOFWEEK_='02.SAL') AS SALI,
(SELECT SUM(LINETOTAl) FROM SALEORDERS WHERE CITY=S.CITY AND DAYOFWEEK_='03.ÇAR') AS CARSAMBA,
(SELECT SUM(LINETOTAl) FROM SALEORDERS WHERE CITY=S.CITY AND DAYOFWEEK_='04.PER') AS PERSEMBE,
(SELECT SUM(LINETOTAl) FROM SALEORDERS WHERE CITY=S.CITY AND DAYOFWEEK_='05.CUM') AS CUMA,
(SELECT SUM(LINETOTAl) FROM SALEORDERS WHERE CITY=S.CITY AND DAYOFWEEK_='06.CMT') AS CUMARTESI,
(SELECT SUM(LINETOTAl) FROM SALEORDERS WHERE CITY=S.CITY AND DAYOFWEEK_='07.PAZ') AS PAZAR
FROM SALEORDERS S
GROUP BY CITY
ORDER BY 1

Sorgu 19
Her şehirde, en çok satış yapılmış 5 kategorinin toplam satış miktarını getiren sorgu.
SELECT
S.CITY, S1.CATEGORY1, SUM(S.LINETOTAL) AS TOTALSALE
FROM SALEORDERS S
CROSS APPLY(SELECT TOP 5 CATEGORY1, SUM(LINETOTAL) AS TOTALSALE FROM SALEORDERS WHERE CITY=S.CITY GROUP BY CATEGORY1 ORDER BY 2 DESC) S1
GROUP BY S.CITY, S1.CATEGORY1
ORDER BY S.CITY, SUM(S1.TOTALSALE) DESC

Sorgu 20
Her şehirde en çok satış yapılan 3 kategoriyi ve onun altında en çok satış yapılan 3 alt kategoriyi getiren sorgu.
SELECT
S.CITY, S1.CATEGORY1,S2.CATEGORY2, SUM(S1.TOTALSALE)
FROM SALEORDERS S
CROSS APPLY(SELECT TOP 3 CATEGORY1, SUM(LINETOTAL) AS TOTALSALE FROM SALEORDERS WHERE CITY=S.CITY GROUP BY CATEGORY1 ORDER BY 2 DESC) S1
CROSS APPLY(SELECT TOP 3 CATEGORY2, SUM(LINETOTAL) AS TOTALSALE FROM SALEORDERS WHERE CITY=S.CITY AND CATEGORY1= S1.CATEGORY1 GROUP BY CATEGORY2 ORDER BY 2 DESC) S2
GROUP BY CITY, S1.CATEGORY1, S2.CATEGORY2
ORDER BY 1,2,4 DESC

Sorgu 21
Hangi şehirde ne kadarlık satış yapıldığını getiren sorgu.
SELECT CTY.CITY, SUM(O.TOTALPRICE) AS TOTALPRICE FROM ORDERS O
INNER JOIN ADDRESS ADR ON ADR.ID=O.ADDRESSID
INNER JOIN CITIES CTY ON CTY.ID=ADR.CITYID
GROUP BY CTY.CITY

Sorgu 22
Farklı tabloları ortak sütunlara göre birleştirmeye yarayan ve tarih bilgisinden yeni veriler oluşturmaya yarayan fonksiyonlar ve sorgu kodları.
SET LANGUAGE TURKİSH
SELECT TOP 100 OD.ID, U.USERNAME_, U.NAMESURNAME, U.TELNR1, U.TELNR2, O.*, ADR.*, C.COUNTRY, CT.CITY, T.TOWN, ADR.ADDRESSTEXT,O.ID, ITM.ITEMCODE, ITM.ITEMNAME, ITM.BRAND, ITM.CATEGORY1,
ITM.CATEGORY2,ITM.CATEGORY3, ITM.CATEGORY4,OD.AMOUNT,OD.UNITPRICE,OD.LINETOTAL, CONVERT(DATE, O.DATE_) AS ORDERDATE, CONVERT(time, O.DATE_) ORDERTIME,
YEAR(O.DATE_) AS YEAR_, DATENAME(MONTH,O.DATE_) AS MONTH_, DATENAME(DW, O.DATE_) AS DAYOFWEEK_
FROM ORDERS O
INNER JOIN ORDERDETAILS OD ON OD.ORDERID= O.ID
INNER JOIN ITEMS ITM ON ITM.ID=OD.ITEMID
INNER JOIN USERS U ON O.USERID=U.ID
INNER JOIN ADDRESS ADR ON ADR.ID=O.ADDRESSID
INNER JOIN COUNTRIES C ON C.ID= ADR.COUNTRYID
INNER JOIN CITIES CT ON CT.ID=ADR.CITYID
INNER JOIN TOWNS T ON T.ID=ADR.TOWNID




Sorgu 23
BRAND’lere göre CATEGORY1'in toplam satış miktarını getiren sorgu.
SELECT ITM.BRAND, ITM.CATEGORY1, SUM(OD.LINETOTAL) AS TOTALSALE
FROM ORDERDETAILS OD
INNER JOIN ITEMS ITM ON ITM.ID= OD.ITEMID
GROUP BY ITM.BRAND, ITM.CATEGORY1

Sorgu 24
Her kategorinin içinde en çok satan markayı getiren sorgu.
SELECT ITM.CATEGORY1, ITM.BRAND, SUM(OD.LINETOTAL) AS TOTALSALE
FROM ORDERDETAILS OD
INNER JOIN ITEMS ITM ON ITM.ID=OD.ITEMID
GROUP BY ITM.CATEGORY1, ITM.BRAND
ORDER BY ITM.CATEGORY1,SUM(OD.LINETOTAL) DESC

Sorgu 25
Her ürünün minimum, maksimum ve ortalama ne kadar fiyattan satıldığı bilgisini getiren
SELECT ITM.BRAND,ITM.CATEGORY1,ITM.ITEMCODE,ITM.ITEMNAME, COUNT(OD.ID) AS SALECOUNT,SUM(OD.AMOUNT) AS TOTALAMOUNT,
MIN(OD.UNITPRICE) AS MINPRICE, MAX(OD.UNITPRICE) AS MAXPRICE, AVG(OD.UNITPRICE) ASAVGPRICE FROM ITEMS ITM
INNER JOIN ORDERDETAILS OD ON OD.ITEMID=ITM.ID
GROUP BY ITM.BRAND,ITM.CATEGORY1,ITM.ITEMCODE,ITM.ITEMNAME
İlginiz için çok teşekkür ederim 💐 Herhangi bir sorunuz olursa iletişim kurmaktan çekinmeyim :)