Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
1-One to Many
2-One to One
3-Many to Many
One to Many
Products | Category
|
id Name Price catid | id name
1 rolex 2000 1 | 1 saat
2 mi 6 500 | 2 telefon
3 samsung s6 5000 2 |
-- Not: rolex bir saat olduğu için catid sayesinde onu saat ketgorisine alabildim yani category verisindeki saat yapısına onu bağladım temel olarak rolex artık bir saat yani 1 ürünü çoklu kategoriye bağladık
Many to Many
Products | ProductCategory | Category
| |
id Name Price | productid categoryid | id name
1 rolex 2000 | 1 1 | 1 saat
2 casio 500 | 1 3 | 2 telefon
3 samsung s6 5000 | 2 1 | 3 elektronik
-- Not: artık saat ve telefon bi yandan elektronik parçalarda yani samsung hem telefon hemde elektronik olarak geçiyor
One to One
Products | Product_Details
|
id Name Price | id color kg
1 rolex 2000 | 1 red 150gr
2 mi 6 500 | 2 black 100gr
3 samsung s6 5000 | 3 black 350gr
-- Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
select * --bütün kolonlar bize gelsin diyoruz
select * from shopapp.products --burda sadece shopp daki products kolonunu alır
select Name from shopapp.products --products daki sadece name kolonunu seçtik
select Name as ProductName, price as fiyat from ShopApp.Product
-- üst tarafda Name kolonun un adını ProductName olarak değşitirdik ve price adını
-- fiyat olarak değiştirdik as kodu burda bize isim değiştirmede yaradı
-- Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
select * from ShopApp.Prdocut where Id = 1 -- bu bir sorgulamadır yani burda
-- sadece Id 1 i almak istediğimizi belirttik
select * from ShopApp.Product Where Price > 2000 And 4000 -- fiyat 2000 den büyük
-- 2000 ve 4000 arası sayıları göster
select * from ShopApp.Product Where Name = 'samsung s6' --istersek sadece tek bir
-- alanı isteyebiliriz
-- Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
select * from ShopApp.Product Where Price Between 2000 and 4000
-- 2000 4000 arası bütün kayıtları getirir
select * from ShopApp.Product Where Category IN ('telefon','bilgisayar')
--bütün telefon ve bilgisayarları sıralar
select * from ShopApp.Product Where Name LIKE '%Samsung%'
-- verideki sadece içinde samsung adı geçen tüm verileri gösterir sonunda
-- s6 veya s7. olması farketmez hepsini getirir
-- Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
select * from ShopApp.Product order by Price --fiyata göre en düşükden en büyüğe
-- sıralar
select * from ShopApp.Product order by name DESC --azalandan artana sıralar
select * from ShopApp.Product order by Price ASC -- artandan azalana sıralar
-- Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
-- min(), max(), count(), avg(), sum()
select min(price) from ShopApp.Product --minumum fiyat bilgisini bize. getirir
select max(price) from ShopApp.Product --maximum fiyat biligisni bize getirir
select count(*) from ShopApp.Product --bize toplam kaç ürün olduğunu gösterir
select avg(price) from ShopApp.Product --bütün ürünlerin ortalamasını verdi
select sum(price) from ShopApp.Product --bütün ürünlerin toplamını verdi
-- Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
-- String fonksiyonlar
select length(name) from ShopApp.Product --name deki isimlerin karakterlerini gös
--terir
select right('escan',3) -- sağdan ücüncü karakteri alır
select lower(name) from ShopApp.Product --bütün karakterleri küçük yapar
select upper(name) from ShopApp.Product --bütün karakterleri büyütür
select name replace(name,' ','-') from ShopApp.Product --bütün boşlukları - yapar
select trim(name) from ShopApp.Product -- name deki boşlukları siler
-- Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
select distinct Category from shopapp.product -- tekrarlayan alanlar bize tek
-- alanda gelir
select category from shopapp.product group by category
-- aslında distinct la. aynı görevi görüyor aralarında pek bir fark yok
-- Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
select * from shopapp.product
INSERT INTO shopapp.product (Name,Price,ImageUrl,Category,Description)
VALUES ("samsung s10",2000,"1.jpg","telefon","süper telefon s7 gibi patlamıyor");
-- burda ilk önce tüm kolonları yazdırdık sonra Insert ile yeni bir alan ekledik
-- Values bölümünde üstteki ile aynı hizada değerleri girdik
-- Not: NN yani not null seçili alanları boş bırakamazsınız
-- Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
UPDATE shopapp.product
SET Name = 'samsung s7'
WHERE id = 1
-- Eğer where komutu ile id 1 i seçmez iseniz namedeki herşeyi samsung s7 yapar
SET SQL_SAFE_UPDATES = 0;
UPDATE shopapp.product
SET Price = Price + 1000
-- veritabanındaki tüm price lara 1000 ekler kodun. başında çalıştırdığımız kod
-- aslında bir güvenlik önlemi normalde bu set kodunu yazmasaydık program bize
-- hata vericekdi çünkü böyle büyük bir değişikliği yanlışlıkla yapmak gerçekden
-- üzücü olurdu oyüzden en başta bu güvenlik önleyiciyi kapattık ve kodu yolladık
-- Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
DELETE FROM shopapp.product --bütün veri tabanını siler
DELETE FROM shopapp.product WHERE Id = 1
DELETE FROM shopapp.product WHERE Price > 2000
DELETE FROM shopapp.product WHERE description is NUll --içi boş olan descripton
-- silinir
--gördüğünüz gibi kullanımı aşırı basit
-- Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
Öncelikle modelleri öğrenelim mysql tarafında ev butonuna tıklayın ardından ikinci sıradaki model iconuna tıklayın
Burdaki 1:1 = One to One bunu dersin başında anlatmıştık bu çizgiler bunları temsil ediyor iki. tane table olsun biri film diğeri director bir director birden çok filmde bulunabilir buyüzden one to many çizgisini kullanacağız
Farkettiyseniz aynı One to one dan iki adet var bunlardan biri çizgili biri çizgisiz bunun anlamı ise bir film için yönetmen olması gerekiyorsa burdaki ilişki tipi düz çizgi olmalı bunu isterseniz internetten daha detaylı öğrenebilirsiniz
En üst de bulunan "Database" tuşuna bastığımıza önümüze iki adet seçenek çıkıyor "reverse engineer" ve "Forward engineer" elimizde bir model yoksa reverse seçmelisiniz fakat biz önceki notumuzda bir model oluşturmuştuk o yüzden forward diyoruz connection bilgilerini tamamlıyoruz ileri diyoruz ileri diyoruz tekrar ileri diyoruz ve diagram ile yaptığımız tüm işlemlerin kodlarını bize gösteriyor sonra birdaha ileri diyoruz ve kendi localhostumuza geldiğimizde yaptığımız şema ve diagram gelmiş bulunuyor -- Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
Model alanına geliyoruz ve en sondaki yani 3. ok iconuna tıklıyoruz ve en baştakine tıklıyoruz ileri diyoruz ileri diyoruz ve bize databaselerimi gösteriyor burda hangisini seçmek isterseniz önceki derslerimizde kullandığımız shopapp i seçiyorum ben tekrar ileri diyoruz ileri diyoruz ve modelimiz oluşturuluyor ve artık shopapp adında bir modelimiz var -- Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
üst tarafdan server ardından data export ve ordan istediğiniz database i seçiyorsunuz ve alt tarafdan Dump data only i seçiyoruz ki sadece dataları exportlayalım sağ üstten advanced options gelip en aşağıdaki complete -insert onaylıyoruz ve start export dediğimizde tüm scriptler indirilmiş oldu -- Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
https://github.com/dalers/mywind Öncelikle database e buradan ulaşabilirsiniz
northwind.sql ve northwind-data.sql i sağ üstten Raw diyip çıkan sayfadan control+s diyerek kaydedin
ardından workbench e girip file open sql scripts e tıklayın bunu çalıştırdığınızda bütün tablolar geliyor -- Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
select * from orders inner join customers --burda oreders ile customers ı
-- inner joinledik
on order.customer_id = customers.id --burdada bir sorgu yaptık order daki
-- customer_id ile customers daki id nin inner joinlerini aldık
-- Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
select * from customers
left join orders --customers.id deki sadece kesişen bilgiler gelirken
on order.customer_id = customers.id --customer_id deki tüm bilgiler gelir
-- Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
select * from orders right join employees
on employees.id = employee_id
-- Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
select * from orders inner join customers
on order.customer_id = customers.id
inner join order_details on order_details.order_id = order.id --order_details ın
-- order_id si ile order ın id sini birleştirdik önceden de customer_id ile
-- customer ın id sini birleştirmiştik yani 2 adet birleştirme yapmış olduk
-- Notlar tamamen Escan Dönmez e aittir izinsiz kullanmayınız
Bir Database imiz olsun CoreBlogDbText adında içerisinde Tbl1 ve Tbl2 adında iki adet tablomuz olsun Tbl1 de Id ve CategoryName olsun Tbl2 de ise Toplam adında int bir kolon Category arttıkca bizim toplamımızada +1 sayı ekliyicek bunu şu kodlar ile sağlayabilirsiniz
Create Trigger TestArttir
On Tbl1 //Nerde çalışıcak
After Insert //Insert edildikden sonra
As
Update Tbl2 Set Toplam=Toplam+1 //Tbl2 deki toplamın değerine bir ekle
Bu sefer Tbl1 tablomuza Puan adında bir kolon daha ekliyelim ve Tbl3 adında bir tablo daha oluşturalım içerisine Id,Yorum,Puan ve Kategori adında 4 adet kolon girelim sonrasında Tbl1 deki Kategori ile Tbl3 deki kategoriyi ilişkili hale getiriyoruz ardından Tbl3 e değerler giriyoruz
Id Yorum Puan Kategori
1 Yorum1 7 1
2 Yorum2 3 3
3 Yorum3 8 3
4 Yorum4 2 2
Biz buradaki Puanları Tbl1 tablosundaki Puan lara eklemesini istiyoruz null bir değeri arttıramıyacağımızdan dolayı tüm puanları 0 olarak ayarlıyorum ve trigger ı aşağıdaki gibi ekliyoruz.
Create Trigger PuanArttir
On Tbl3
After Insert
As
Declare @p int, //Değişken tanımlıyoruz - Puan
Declare @k int //Kategori
Select @p=puan/*Tbl3 deki puan*/,@k=Kategori from inserted
Update Tbl1 Set Puan = Puan+@p Where Id = @k /*Eğer kategori uyuyorsa
Tbl1 deki Puana Tbl3 deki Puanı kadar ekle*/
//Anlamayanlar için
Id Yorum Puan Kategori
1 Yorum1 7 1
2 Yorum2 3 3
3 Yorum3 8 3
4 Yorum4 2 2
/* eğer biz Yorum 5 yazıp 9 puan 3. kategori yaparsak artık
Tbl1 deki 3. kategorinin Puanı 3+8+9 yani 20 olur tüm kategori 3 e ait
Yorumların puanını ekler*/