Merhaba, ve SQL dersimize hoş geldiniz.
Bu,
SQL'e çok ama çok kısa bir giriş.
SQL'i seviyorum.
Geçen gün bir öğrenciyle konuşuyordum ve
“SQL benim en sevdiğim dildir.” dediler.
Ben de dedim ki, “
SQL'in benim de en sevdiğim dil olduğu konusunda hemfikir olmalıyım.”
SQL çok güzel olduğu için,
SQL'de döngüler yazmanıza bile gerek yok,
Python gibi dillerde döngüler yazıyoruz çünkü biz mecburuz.
Sorun şu ki, SQL mükemmel,
ancak
Linux veya Python gibi karmaşık bir şey yazabiliriz.
Yani SQL, bilgisayarların düşündüğü gibi değil.
Veritabanı motorları denen şeylere sahibiz
ve bu veritabanı motorları
işleri gerçekten çok iyi yapıyor.
Böylece SQL, verileri organize etmenin harika bir yoludur,
ancak
bu verilerin düzenli tutulması ve basitleştirilmesi için çok fazla çalışma yapılmıştır.
Yani bu soyutlama var
ve soyutlamanın işe yaraması için çok fazla iş var.
Veritabanlarından önce biraz geçmişle başlamak istiyorum.
Siz de “Veritabanlarından önce,
bu nasıl olabilir? “diye düşünebilirsiniz.
Eski günlerde,
ve bilgisayarların olduğu eski filmleri izlerseniz
arka planda kaset makineleri olan resimleri görürsünüz ve dönerler.
Ve bant makinesinin döndürülmesi,
bir hesaplamanın fiziksel bir tezahürüdür.
Ve eski günlerde,
bilgisayarların tüm verilerini bellekte veya bir diskte depolamak için yeterli veriye
sahip olmamasıyla ilgisi vardı, ilk günlerde disklerimiz bile yoktu.
İlk günlerde, kasetler sahip olduğumuz şeydi
ve bir çeşit ses kaseti kullandık
ve ses yerine
veri, sıfırlar ve birler içeriyordu.
Ve böylece işler eski günlerde işe yarayacak,
böylece bir veritabanına sahip
olabilecekti, olduğu gibi,
veri tabanı tüm verilerinizin bir kasete kaydedilmesiydi.
Ve bir kasetin kilit noktası
fiziksel bir şey olması,
ve onu geri sarmak zorunda kaldınız,
ileri ve geri gidin.
Çoğunuz muhtemelen
hiç kaset bandı ya da sekiz şeritli bir bant
ya da makaradan makara bant görmediniz.
Ama bu fiziksel uzun bir plastik parçası
ve sonunda verileri elde etmek için
oraya varana kadar döndürmek zorunda kaldınız.
Rastgele erişim dediğimiz şey değildi,
yani rastgele erişimde,
ister bellek ister disk sürücüsü olsun,
rastgele erişim,
kabaca herhangi bir yere sabit bir süre içinde ulaşmanızı sağlar.
Oysa, eğer bir kasette bir şeye
yakınsanız, çok hızlı bir şekilde ulaşabilirsiniz.
Eğer uzaktaysan, gitmelisin,
sonra bekleyip sonra geri dönmelisin.
Yani bu durum,
her gece
dünkü hesap bakiyelerinden kaseti alacağımız bir düzene yol açtı.
Diyelim ki biz bir
bankayız ve pencereye gelen insanlar var,
para koyuyor, para alıyor.
Ve sonra yapacağımız şey
, tüm işlemleri bazen fiziksel olarak delinmiş kartlara koyardık
ve sonra onları sıralardık, değil mi?
Ve diyelim ki 26 hesabımız var ve C kişi
10 dolar ekliyor ve F kişi
ortaya çıkıyor ve 10 dolar çıkarıyor, vb.
Ve sonra geceleri ne olurdu,
bunların hepsini sıralayacaktık,
ve
aslında bunları en erken sıralayacak fiziksel makineler vardı gün,
ve sonra eski denge olurdu,
A, B, C, D,
E, F, sırayla bir kaset üzerinde oturan, sırayla sıralanmış.
Banka kapandıktan sonra bir süreç
başlatırdık. İlk kaydı A gibi
okurduk. İlk işlemi kartlardan
okurduk ve karşılaştırırdık.
Ve eğer kaset
işlemden daha erken
veya daha düşük olsaydı, kopyalardık, böylece kopyalardık.
Ve sonra B C ile karşılaştırılacaktı
ve B kopyalanacaktı
ve sonra C karşısına çıkacaktı
ve sonra C verisinin C verilerini
güncellememiz
ve bakiyeye 10 dolar ekleyecektik ve sonra bunu yazacaktık.
Ve bunu yazarken fark edeceksiniz,
sıralayacağız, sıralayacağız.
Sonra D'yi kopyalayacağız, D için hiçbir şeyimiz yok
ve sadece kopyalanacaktı.
E'yi kopyalardık, E için hiçbir
şeyimiz yok, ve sadece kopyalanırdı, ve sonra, oops, bu resme F koymayı
unuturduk, F olurdu ve 10 çıkarırdık ve kopyalayacaktık.
Ve sonra
o gece yapmak zorunda olduğumuz şeylerle işimiz biter
ve sonra yapacağımız şey,
hesap sırasına göre sıralanmış yeni güncellenmiş veriler olurdu.
Ve ertesi gece,
kaseti hareket
ettirirdik, yeni kaset eski kaset
olurdu ve bunu tekrar tekrar yapardık.
Ve bazen bu işlemler
dört ya da beş saat boyunca devam ederdi çünkü kasetler uzundu ya da
birden fazla kaset olması gerekiyordu
ve
bankalar saat beşte kapandıktan sonra bir sürü bilgi işlem yapıldı,
sonra bir grup insan içeri girerdi,
biz onlara operatör derdik,
ve Bu kasetleri monte etmek ve
bu işleri çalıştırmak ve sadece orada oturup
veri
birinden diğerine kopyalanırken bu kasetleri dönmesini izlemek istiyorum.
Yani evet, bu oldukça havalı.
Şükürler olsun ki, artık böyle yapmıyoruz.
Bunu yapmak zorunda kalmayalım diye yapan şey disk sürücülerinin icadı.
Ve disk sürücüleri manyetik ortam,
tıpkı teyp sürücüleri gibi,
ama fark
şu ki, dönen plakalarda olmalarıydı.
Ve yapabileceğiniz şey, verilerin
bu tepside bir dizi eşmerkezli çevrede olması
ve sonra
hızlı bir şekilde girip çıkabilen bir kafan vardı.
Ve böylece verilere erişebildiğiniz
hız,
kafanın belirli bir silindire hareket edebileceği hızla birleşimiydi
ve veriler gelene kadar beklemek zorunda kaldınız.
Ve bazen dakikada 5,400 devir alırdın.
Yani bu demek oluyor ki
dakikada 5,400-5.000 kez,
bu da saniyede 100 kez.
Bunun için saniyenin 100'ünde beklerdin.
Ve bu, bir
kaseti yayınlamak için bir buçuk dakika, iki dakika, hatta 10 dakika beklemekten çok daha iyi.
Sorun şuydu:
“Tamam,
şimdi bu harika teknolojiye sahip olduğumuza göre
tüm gece verilerimizi
bir diskte
saklayabiliriz çünkü yeterli alan, bunu
gerçekten iyi kullanacak teknolojiyi nasıl inşa ederiz?”
Ve bir sürü araştırma,
bir sürü bilgisayar bilimi,
bir sürü satıcı araştırması
bu yeni disk şeyini en iyi şekilde nasıl kullanacağını anlamaya başladı.
İnsanlarla konuştuğumu hatırlıyorum,
çünkü eskiden disket kullanırdık,
ki çok daha yavaştılar,
bu yüzden 5,400'e gitmediler.
Kafayı hareket ettirmek saniyenin dörtte birini alabilir ve
döndürmek neredeyse bir saniye sürebilir,
ki bu da 10 dakikadan daha hızlıydı, değil mi?
Yani
diskette herhangi bir yere ulaşmak için bir saniye gibi.
Verileri depolamak için yaklaşımlar
oluştururduk, ve bu fiziksel şeyle başlardık
ve
homurdanıp hareket ettiğini duyardınız, ve sonra
verileri depolamak için daha iyi bir yol bulurdunuz,
ve sonra homurdanıp daha az hareket etti
ve şeyiniz Daha hızlı git.
Yani bu bir araştırma olayı gibiydi.
Bilgisayarların ses çıkardığı eski güzel günlerdi
ve bilgisayarların içindeki kodunuzu değiştirebilirdiniz.
Ve tabii ki yaptığımız ilk şey,
sıralı ana güncellemeleri alıp takmaktı,
ama bunun en iyisi olmadığı ortaya çıktı.
Ve bu bir nevi araştırma,
rasgele erişilemeyen veriler üzerinde yaptığımız şeyi nasıl yapabileceğimizi değil, bunun yerine,
diyelim ki bundan yararlanalım.
Ve bir sürü araştırma, bir sürü satıcı,
insanların satın aldığı çok pahalı bir yazılım vardı:
“Bakın, siz bir
bankaysınız ve bunun nasıl çalıştığını gerçekten ve gerçekten bilmek istiyorsunuz.”
60'larda ve 70'lerde
olan şey, bilgisayar satıcıları kavga ediyorlardı ve şu anki veritabanı tekniğimizle kıyaslandığında
önemsiz bir şekilde basitti,
ama o zamanlar çok iş gerektiriyordu
ve diğerleriyle savaşacaklardı. bilgisayar satıcıları
ve “Bizim endeksi
sıralı mekanizma daha iyidir.”
Satıcı 2,
“Ağ yaklaşımımız daha iyi. “derdi.
Sonra otururlardı ve
birbirleriyle mücadele ederlerdi
ve sonra fakir müşteriler
“Neden bahsettiğinizi bile bilmiyorum” derlerdi.
Sonra da
malları
golf ya da
en iyi öğle yemeği için ya da Florida'ya götüren satıcıdan satın alırlardı.
Ve sonra o
satıcı her ne yaptıysa ona uyum sağlayacaklardı.
Ve bu gerçekten biraz korkutucuydu çünkü
bir satıcıya kilitlendiğin bir yere taşınıyorduk
ve
bir kez satıcıya kilitlendin mi, kötü durumda oluyorsun.
Ve
özellikle ABD
hükümetinin tonlarca parası vardı ve hem
normal veri işleme, hem de
askeri şeyler gibi stratejik şeyler için tonlarca bilgisayar
satın
alıyorlardı ve bu yüzden tonlarca bilgisayar satın
alıyorlardı ve bu satıcıların, onlar
tek bir satıcı içine kilitli nerede,
satıcı sadece fiyat dikte mümkün olacağını.
Ve böylece federal hükümet, NIST,
Ulusal Standartlar ve Teknoloji Enstitüsü aracılığıyla,
veritabanlarının bir standarda ihtiyacı olduğuna karar verdi.
Aynı tekniği kullanarak herhangi bir satıcıdan herhangi bir veritabanıyla konuşabilmemiz ve bir satıcı yapmak zorunda kalmamamız için bir yola ihtiyaçları
vardı ve satıcıları değiştirdiyseniz, yazılımınızı tamamen yeniden yazmanız gerekti.
NIST, bu soyutlamanın,
bu standardın nasıl işe yarayacağını belirtmedi.
Sadece satıcıları getirdiler ve dediler ki,
“Eğer
bir standart bulmazsan yazılımınızı kullanmayı bırakacağız.”
Ve mükemmel bir zamandı, çünkü
satıcılar her şeyin mükemmel ve harika olduğunu düşünseler de,
bir sürü ters yönü vardı.
Ve özellikle,
ilişkisel veri tabanları kavramı vardı,
o zamanlar
verileri depolamak ve almak için
pratik olarak uygulanan mevcut bir teknolojiden daha iyi bir matematiksel teoriydi.
Ve böylece SQL, ve bu Liz Fong,
ben gittim ve NIST'te bir röportaj yaptım,
o ilk
günlerden bahsediyor, harika bir röportaj, bu SQL standardının gerçekten
çok mantıklı
ve endüstriyi nasıl düzelttiğinin ilk günlerinden bahsediyor.
Ve
bu videoya bir göz atmanızı öneririm, böylece görebileceksiniz.
Şimdi, SQL temel olarak söylediği
şey, verilerin diskte nerede olduğu konusunda çok endişelenmeyelim, çünkü daha önceki veritabanı yaklaşımları biz programcılar silindirler ve pozisyonlar olduğunu bileceklerdi ve bazı yollarla
yerleştirirdik ve indeksleri
oluştururduk ve dizinlere kendimiz
bakardık, her türlü farklı şeyi, ya da diskteki
bir yere okurduk ve bu da
diskte okumamız gereken bir sonraki yerin adresi olurdu.
Ve dediler ki, “Biliyor musun,
masanın üzerindeki fiziksel depolama yapısı hakkında çok fazla
endişelenmeyelim, bunun yerine,
okumak, yazmak, güncellemek
ve diskte silmek istediğimizi ifade
edebileceğimiz bir dil bulalım.”
altında birçok disk formatı olabileceği bir yazılım parçası oluşturabilir.
Ve sonra hepimiz bu dili kullanabiliriz ve siz de
Satıcı A'yı satın alabilir ve
bu dili ve Satıcı B'yi kullanabilir
ve bu dili kullanabiliriz, ve sonra bunu kıyaslayabilir ve
“İşte bu dilde bir sürü şey var.
Hangi satıcı bunu daha hızlı çalıştırabilir?”
Ve böylece NIST de bir dizi kriterler vardı,
TPC kriterler bazılarıydı.
Yaptıkları şey, temelde
bunu yaptılar, böylece bu güzel ve basit bir dil gibiydi,
ve biz buna SQL diyoruz.
Sanırım bir noktada bunun
adı Basit Sorgu Dili
ve veritabanlarıyla konuşmak için kullandığımız dil.
İlginç olan şey, SQL
60'larda ve 70'lerde ilk çıktığında bize gerçekten yapmamızı
sağladı, dizin
, sıralı ve ağ tarzı veritabanları gibi eski tarz veritabanlarıyla konuşmaktı
ve ilişkisel veritabanları olarak adlandırılan bu yeni form olarak
da bu harika matematiksel destek,
ama ilk kez kötü uygulandı,
biz sadece diyebiliriz, “Oh garip.”
İlişkisel veritabanlarının performansı,
diğer veritabanları kadar iyi olduğu noktaya geldiğinde,
o zaman sadece geçiş yapabilirdik ve aynı SQL'i konuşabilirdik.
Bu yüzden
10 ya da 15 yıllık bir süre boyunca inanılmaz bir yenilik
sağladı. Soyutlama,
programcılar olarak onları nasıl kullandığımızı değiştirmek zorunda kalmadan veritabanlarını harika bir şekilde geliştirmemizi sağladı.
Oldukça harika, dürüst olacağım. İlişkisel veri tabanları
ve ilişkisel veri tabanları fikrinden
bahsediyordum ve itiraf etmeliyim ki,
1980'lerin başında ilişkisel veritabanlarını ilk gördüğümde,
bu saçmalık, çünkü yine
disketleri duyabiliyordum ve
bir şeyi taşıdığımızı biliyordum.
Neler olduğuna dair çok fazla farkındalığım vardı
ve bu farkındalığa bayıldım.
İlişkisel veritabanları
bu katmanın arkasına neler döndüğünü gizlemiş gibi görünüyor
ve ne zaman kullansam
daha yavaş olduğu ortaya çıktı, çünkü henüz zekice değildi.
İlişkisel veritabanları
matematiksel bir fikir olarak başladı.
Veri ağlarını sütunlarla,
satırlarla, bağlantılarla ve birleşimlerle temsil
etmenin teorik en iyi yolu olarak.
Ve bu güzel bir fikirdi ve matematik doğruydu.
İlişkisel veritabanlarının üstün matematiğinin
son derece zekice
optimize edilmiş önceki nesil veritabanı sistemlerinden daha iyi çalıştığı noktaya ulaşmak uzun zaman aldı.
Yani
karşılaştığınız bir sürü ortak veritabanı sistemi var.
Bazıları açık kaynak,
bazıları ticari.
Postgres ve MySQL açık kaynaktır.
Postgres muhtemelen daha
karmaşık, karmaşık ve zengin,
Oracle çok ve
çok para için kullanılabilir karmaşık, karmaşık ve zengin bir veritabanıdır
ve Microsoft'un SQL Server adlı bir veritabanı vardır.
Ve gördüğümüz tüm bu veritabanları
SQL spesifikasyonu var olduktan sonra bir anlamda evrimleşti,
bu yüzden bir çeşit SQL oluşturdular.
Bir tür SQL öğrenmiş eski veritabanları vardı.
Ve bir sürü başka veri tabanı var.
SQLite aslında
bu kurs ile kullanacağımız
şeydir ve süper havalı, süper hızlı.
Cep
telefonunuzda, muhtemelen 40 adet SQLite kopyasına
sahipsiniz ve arabanızda muhtemelen 40 adet
SQLite kopyasına sahipsiniz, çünkü bu gerçek bir küçük gömülü veritabanı.
Üretim ölçeği için pek iyi değil.
Aynı anda bir web sitesine isabet eden 100 kullanıcı varsa
, Postgres, MySQL, Oracle veya SQL Server
gerçekten çevrimiçi gerçek çoklu işlem veritabanlarıdır.
Ama SQLite harika çünkü gerçekten basit.
Her şeyi bir dosyada saklar,
dosyayı vb taşıyabiliriz Bu
yüzden SQLite'ı seviyorum
ve bu sınıfta ve bu şeyde
SQLite hakkında konuşacağız.
Ama konuştuğumuz her şey
bu farklı veri tabanı sistemleri için geçerli.
Veritabanı
ile çalışacağınız zaman yapmanız gereken ilk şey, siz
ve veritabanı arasında
sütunların şekli,
sütunların ne kadar geniş olduğu,
bunun içinde ne tür bir veri depolayacağınız konusunda bir sözleşme yapmak zorundasınızdır.
Ve sonra
veritabanı yazılımının bu veritabanını
diskteki gibi nasıl yapılandıracağını bildirir.
Yaptığınız işin bir parçası da
veritabanı yazılımı, MySQL,
Postgres veya SQLite'ın depolamasını süper optimize etmesine izin vermeniz.
Senden çok daha zekice.
Oracle, MySQL
veya Postgres gibi bir şey muhtemelen
veri depolamak ve almak için en iyi yolu hakkında araştırma ve geliştirme, bir milyar doları temsil eder.
Ve bunların hiçbirini bilmene bile gerek yok.
Sadece, bak, bu sütunlara sahip olacağım,
100 karakterlik bir metin olacak,
sonra bir tamsayı ve
kayan nokta sayısı olacak, sonra 3,000 karakter metin
ve tüm bu detaylar için endişeleneceksin.
Ama anahtar şu ki,
“İstediğim her şeyi saklarım” derseniz, o zaman optimize edemez,
ve bu yüzden
başlangıçta bir sözleşme yapıp,
“
Veritabanı sistemiyle konuşurken verileri tam olarak böyle hazırlayacağım.
ve sonra
gerçek diskteki verileri nasıl düzenleyeceğinizi öğrenebilirsiniz.” Buna
şema ya da veritabanı modeli deniyor
ve bir veritabanı modeli oluşturmak da harika bir şey.
Eğer karmaşık bir uygulama oluşturuyorsanız,
bu modellere sahipsiniz ve onların bağlantıları var,
ve biz de eninde sonunda bu şeylerden bahsedeceğiz.
Ama bunun
sizinle
veritabanı yazılımı arasında bir sözleşme olduğunu söylemek çok önemli. Böylece
veritabanı yazılımı
veritabanının depolamasını optimize edebilir.
Şimdi, şema
verdikten sonra, o şemaya bağlı sorguları yazabilirsiniz.
Yani
e-posta adı verilen bir sütuna ve adı verilen bir sütuna sahip olabilirsiniz
ve sonra
bu şemayı kullanarak veritabanına veri
ekleyebilir, şemayı kullanarak verileri alabilir,
verileri veritabanının derinliklerinde bir yerde değiştirebilir
ve verileri silebilirsiniz.
Bir saniye bekle. Vay canına. Merhaba oradaki.
Orada ne yapıyorsun? Oh, kahrolasıca.
Özür dilerim, özür dilerim. Sen kötü bir yaratıksın.
Şuna bak. O sesin ne olduğunu merak ediyordum.
Gel buraya. Seni bu insanlarla tanıştırmak zorundayım.
Gel buraya.
Uslu durmuyorsun.
Demek Shelby bu.
Merhaba Shelby. Demek Shelby bu. Bu benim köpeğim.
Onu
kafesten uzak tutmaya çalışıyorum. Oturup ayağımın yanında durmasına izin veriyorum.
Çiğneme oyuncakları var.
Merhaba Shelby. Bu Shelby.
Sözünü kesiyor.
Dersimi bölüyorsun. Ama çok tatlısın.
Kalemi çiğnemeyi bırak,
sana verdiğim çiğneme oyuncaklarını çiğne, tamam mı?
Bu dersi atlatmama izin ver.
Tamam, aşağı inebilirsin.
Çiğnemeyi bırak.
Köpeğin bölünmesi için özür dilerim.
Çiğneme sesleri duyuyordum ve düşündüm ki,
her şeyi aldım ama sonra
yerde bir kalem vardı
ve böylece kalem, zavallı kalem Bay Puppy ile tanıştı.
Oh, peki. Tamam, nerede kalmıştım?
SQL. CRUD oluşturun, okuyun
, güncelleyin ve verileri silin.
Ve bir sonraki adımımız
aslında biraz SQL yapmak ve bir veritabanı oluşturmak.
[ MÜZİK]