ilk hafta
Create database OgrenciIsleri;
Create table student
(
Name varchar(10),
StudentNumber int,
Class char(1),
Majör varchar(10),
Primary key(StudentNumber)
);
[Link]
--alter table student add adres varchar(50);
--alter table student drop column adres;
--alter table student alter column name varchar(20);
--alter table student add primary key (StudentNumber);
--insert into student (Name,StudentNumber,class,major) values('ali',15,1,'CS');
--insert into student
--values('ayşe',16,1,'CS');
--insert into student (StudentNumber,major)values(1,'CS');
--insert into student (StudentNumber)values(3),(2),(5);
--insert into student(StudentNumber,major)values(23,'CS'),(22,'CS'),(80,'CS');
--delete from student where StudentNumber=25;
--sadece 25 nolu öğrenci siler
--update student set major='CS'where StudentNumber=8;
--select Name,StudentNumber,class,major from student;
--select *from student;
--select Name,StudentNumber from student;
--select * from student where StudentNumber=8;
--select Name,StudentNumber from student where StudentNumber=8;
--select Course_Number from course where Department='CS' and
Course_Name='Database';
--select Course_Number from course where Department='CS' or Course_Name='Discrete
Mathematics';
--select Course_Number,Semester from SECTION where Year='07' or
Instructor='Knuth';--07 yılında açılan veya knuth tarafından verilen derslerin
ders kodlarını ve sömestr bilgisini listeleyiniz.
[Link]
--select * from student ;
--select * from SECTION where Course_Number = 'MATH2410' ;
select Course_Number from SECTION where Section_identifier=112 or Semester
='Spring';
--Fall dönemimde anderson tarafından verilen derslerin kodları
select Course_Number from SECTION where Semester='Fall' and Instructor='Anderson';
--karşılaştırma operatörleri < > <= >= <> =
--Section operatörleri 112 den küçük olan kayıtları listeleyiniz
select * from SECTION where Section_identifier<120;
--betweeen select * from tablo where sutunad between a and y;120 ve 100 arasını
yapalım örnek olarak
select * from SECTION where Section_identifier between 100 and 120;
select * from SECTION where Section_identifier>=100 and Section_identifier<=120;
--order by verileri sıralar
--select ... from ... where ... order by sutun ad ASC(küçükten büyüğe) DESC
(büyükten küçüğe)
--section tablo verileri sevtion identifier değerine göre büyükten küçüğe
sıralayınız.
select * from SECTION order by Section_identifier DESC ;
select * from SECTION order by Course_Number DESC ;
--fall döneminde okutulanları sectionidentifiere göre sıralayınız büyükten küçüğe.
select * from SECTION where Semester='Fall' order by Section_identifier DESC ;
--Count(* yada sutun adı)
--section tablosundaki kayıt sayısı nedi
select count(*)from SECTION;--6 kayıt var 1 satırda 1 tane dolu gerisi null olsa
bile yinede sayar.
select count(Course_Number)from SECTION;--course numbaerı Null olanı saymadı 5
döndürdü
select count(*) as Sayac from SECTION;--Sayaç isminde görüyoruz
select count(*) as 'Sayac' from SECTION;
select count(*) as [Sayac] from SECTION;
--Group by verileri gruplandırı[Link] dersten kaç tane verildiğini görelim.
--select ... from ... where ... group by ... order by ...;
select Course_Number,count(Course_Number) as 'DersSayısı' from SECTION group by
Course_Number;
--IN komutu select * from section;
select * from SECTION where Instructor in ('King','Knuth'); --içinde king ve
knuth olanları gösterir
select * from SECTION where Instructor not in ('King','Knuth'); -- olmayanları
gösterir.
--section identifier değeri 112 92 135 olan kayıtların semester ve ders kodunu
listeleyiniz.
select Semester,Course_Number from SECTION where Section_identifier
in(112,95,135);
-- Data Structures dersinin okutulduğu dönem ve hoca bilgisini listeleyiniz.
--courdse tablosuna geldik kurs adı Data structure olanın course numarasını aldı
sonra section tablosunda bu kurs numarası şartlarını sağlayan semester ve
ınstructoru döndürdü.
select Semester,Instructor from SECTION where Course_Number in (select
Course_Number from Course where Course_Name='Data Structure');
--1 Name alanı Smith olan öğrencilerin tüm bilgilerini Student tablosundan
listeleyiniz.
select * from student where Name='Smith';
--2 Course tablosundaki bütün değerleri listeleyiniz.
select * from Course;
--3 Section tablosunda Year alanı 07 olan veya Semester alanı Fall olan kayıtları
listeleyiniz.
select * from SECTION where YEAR=07 or Semester='Fall';
--4 Grade_Report tablosundan Grade alanı A olan kayıtları listeleyiniz.
select * from Grade_Report where Grade='A';
--5 Grade_Report tablosunda 85 Section_Identifier ve Grade değeri A olan
öğrencinin adını listeleyiniz.(Dikkat! adını STUDENT tablosundan bulacaksınız).
select Name from student where StudentNumber in (select Student_number from
Grade_Report where Section_identifier=85 and Grade='A');
[Link]
--superssn alanı null olan kayıtları döndüren sql cümlesi?
select * from employee where superssn is null;
select * from employee where superssn is not null; --Null olmayanları gösterir.
select top 3 * from employee; --baştan 3 taneyi gösterir
select top 3 fname,minit from employee;
--select top ? Percent ... --yüzde kaçını göstereceğimizi belirtiyoruz.
select top 50 percent * from employee;
--Örnek maaşı 25000'den büyük olan personelin %50'sini gösteriniz
select top 50 percent * from employee where salary>40000;
-- örnek maaşı 10000 ile 40000 arasında olacak personelini %25inin sadece adını
ve soyadını
select top 25 percent fname,lname from employee where salary >10000 and
salary<40000;
--****SQL LIKE komutları****
-- % Hiç veya daha çok karakter
-- _(AltÇizgi)bir karakter
-- [] Köşeli parantez içindeki her bir karakter
-- h[ea]p hep ve hap
-- ^Köşeli parantez içince olmayan karakterleri
-- h[^oa]t
-- -(tire) belirtilen aralıktaki her bir karakter
-- m[a-e]n
-- where ad='Ali'; where ad like '';
--Örnek adı j ile başlayan personeli listele;
select * from employee where fname like 'j%';
--Örnek adı y ile biten
select * from employee where fname like '%y';
--içerisinde o harfi geçen başında ve sonunda o olmayan personelleri listele.
select * from employee where fname like '[^o]%o%[^o]';
--adının ikinci karakteri h olan personeli listeleyiniz.
select * from employee where fname like '_h%';
--b ile başlamasın t ile bitmesin
select * from employee where fname not like 'b%t';
--j ile başlamayacak ve o ile bitmeyecek isimleri getirsin.
select * from employee where fname not like 'j%'and fname not like'%b';
-- Matematiksel operatörler Matematiksel Fonksiyonlar
-- +
Count (*) MIN()
-- -
SUM() toplama MAX()
-- /
AVG() ortalama ABS() Mutlak değer
-- *
--Örnek Maaşın kendisi ve %70 zamlı halini döndürün maaş ve 70zamlı olacak tablo
isminde.büyükten küçüğe
select salary as Maas ,salary*1.7 as '70Zamlı' from employee order by salary DESC;
--Örnek Maaşın kendisi ve %70 zamlı halini döndürün maaş ve 70zamlı olacak tablo
isminde maaşlar 10000 ve 40000 arasında olacak.
select salary as Maas ,salary*1.7 as '70Zamlı' from employee where salary between
10000 and 40000;
--Örnek tüm personellerin maaşları toplamı.
select SUM(salary) from employee;
--Örnek Departman numaralarına göre personellerin maaşları toplamı.
select dno as 'dno' , SUm(salary) as MaaşlarınToplamı from employee group by dno;
--Örnek tüm personelin maaşlarının ortalaması nedir.
select AVG(salary) from employee;
--Örnek en büyük maaş ile en küçük maaş arasındaki fark nedir.
select MAX(salary)-MIN(salary) as MaaşFarkı from employee;
--Örnek en küçükten en büyüğü çıkart mutlağını al.
select ABS(MIN(salary)-MAX(salary)) as MaaşFarkı from employee;
[Link]
-- join İşlemleri
--***Inner join***==tablolarının kesişiminde olanları alır 2 tablonun kesişimi 3
tablonun kesişimi
--employeedeki dno FK ile departmendeki dnumber PK aynı
--SORU 6 numaralı departmanda çalışan personel bilgilerini listeleyiniz
select * from employee where dno=6;
--SORU software(dname) departmanında çalışanların fname,lname,dno bilgilerini
gösteriniz.
--department ta Software dnumber ile ilişkili dnumber ise employeedeki dno ile
ilişkili bunları birbirine bağladık.
select fname,lname,dno from employee,department where dno=dnumber and
dname='Software';
--***Left join***==
--select sutunlar from tablo 1 inner join tablo 2 on tablo1= tablo2 inner join ...
on ... where...;
select fname,lname,dno from employee inner join department on dno=dnumber where
dname='Software';
--SORU ProductX isimli projenin ait olduğu departmanın adını gösteren SQL
cümlesi???
select dname from project,department where dnum=dnumber and pname='ProductX';
select dname from project inner join department on dnum=dnumber where
pname='ProductX';
--SORU ProductX isimli projenin ait olduğu departmanın adını ve bu projede çalışan
personelin ad soyadını listeleyen SQL;
select dname,fname,lname from project,department,employee where dnum=dnumber and
dnum=dno and pname='ProductX';
select dname,fname,lname from project inner join department on dnum=dnumber inner
join employee on dno=dnumber where pname='ProductX';
select dname,fname,lname from employee,department,works_on,project where
dnum=dnumber and pnumber=pno and essn=ssn and pname='ProductX';
--***Right join***==
--Self join
[Link]
-- join İşlemleri
--***Inner join***==tablolarının kesişiminde olanları alır 2 tablonun kesişimi 3
tablonun kesişimi
--employeedeki dno FK ile departmendeki dnumber PK aynı
--SORU 6 numaralı departmanda çalışan personel bilgilerini listeleyiniz
select * from employee where dno=6;
--SORU software(dname) departmanında çalışanların fname,lname,dno bilgilerini
gösteriniz.
--department ta Software dnumber ile ilişkili dnumber ise employeedeki dno ile
ilişkili bunları birbirine bağladık.
select fname,lname,dno from employee,department where dno=dnumber and
dname='Software';
--select sutunlar from tablo 1 inner join tablo 2 on tablo1= tablo2 inner join ...
on ... where...;
select fname,lname,dno from employee inner join department on dno=dnumber where
dname='Software';
--SORU ProductX isimli projenin ait olduğu departmanın adını gösteren SQL
cümlesi???
select dname from project,department where dnum=dnumber and pname='ProductX';
select dname from project inner join department on dnum=dnumber where
pname='ProductX';
--SORU ProductX isimli projenin ait olduğu departmanın adını ve bu projede çalışan
personelin ad soyadını listeleyen SQL;
select dname,fname,lname from project,department,employee where dnum=dnumber and
dnum=dno and pname='ProductX';
select dname,fname,lname from project inner join department on dnum=dnumber inner
join employee on dno=dnumber where pname='ProductX';
select dname,fname,lname from employee,department,works_on,project where
dnum=dnumber and pnumber=pno and essn=ssn and pname='ProductX';
--SORU Milwaukee'de çalışan personelin adı ve oğlunun adı
select fname,dependent_name from employee,dependent,dept_locations where
dnumber=dno and ssn=essn and relationship='Son'and dlocation='Milwaukee';
--***Left join***==
--select ... from tablo1 left join tablo 2 on bağlantı,sutunlar where ...;
--***Right join***==2 tablomuz var tablo 2nin tamamı gelecek
--select ... from tablo2 left join tablo1 on bağlantı,sutunlar where ...;
--***Self join***== kendi kendisini gösteren tablo inner join gibi görecez.
--Personel ve yöneticisinin ad ve soyadını istiyorum
--employe tablosu artık bi ri calısan biri yonetici
select [Link],[Link],[Link],[Link] from employee
yonetici,employee calisan where [Link]=[Link];
--***Full join*** bütün tablodaki [Link]ı veriler dönebilir.
--select sutunlar from tablo1 full join tablo2 on ... where ...;
--SORU Franklin Wong'un yöneticisinin adı ve personelin çalıştığı departmanın
adını listeleyiniz.
select [Link] as'yoneticiadi',dname as 'departmanadi' from
department,employee yonetici ,employee calisan where [Link]=[Link]
and [Link]=dnumber and [Link]='Franklin' and [Link]='Wong';
SELECT
[Link] as yoneticiadi,
[Link] AS departmanadi
FROM
employee calisan
inner JOIN
employee yonetici ON [Link] = [Link]
inner JOIN
department ON [Link] = [Link]
WHERE
[Link] = 'Franklin' AND
[Link] = 'Wong';