25 SQL Sorgu Alıştırması

Yasemin Derya Dilli
7 min readFeb 7, 2024

--

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 :)

--

--

Yasemin Derya Dilli
Yasemin Derya Dilli

Written by Yasemin Derya Dilli

Data Analyst | Engineer | Content Writer

No responses yet