Her programcının bildiği temel SQL komutları. SQL Sorgu Dili Ek SQL dili yardımı için ne yapabilirsiniz?

SQL'e genellikle veritabanı yönetim sistemleri (DBMS) için Esperanto'm denir. Doğru, programlarda yaygın olarak kullanılan veritabanlarıyla (DB'ler) çalışmak için başka dil yoktur. İlk standart sol 1986'da ortaya çıktı. Ve bugün yeraltı dünyasını fethettik. Ayrıca ilişkisel olmayan DBMS ile nasıl çalışılacağını da öğrenebilirsiniz. Bilgisayar ağı ve profesyonel programcıların ayrıcalığı olan Cobol gibi diğer yazılım özelliklerinin değiştirilmesine, farklı alanlardan uzmanlar sql'ye karşı çıkıyor. Programcılar, DBMS yöneticileri, iş analistleri; hepsi sql kullanarak verileri başarıyla işler. Bu dili bilmek veritabanına erişimi olan herkes için faydalıdır.

Bu makale SQL'in temel kavramlarına bakacaktır. Gelin size onun tarihini gösterelim (ve bir takım efsaneler ortaya çıkacaktır). İlişkisel modele aşina olacak ve SQL ile ilk kez çalışma becerileri kazanabileceksiniz; bu, dile daha fazla hakim olmanıza yardımcı olacaktır.

SQL öğrenmek neden önemlidir? Bu, özü ne kadar derinlemesine araştırmak istediğinize bağlıdır. Profesyonel olmak için çok şey öğrenmeniz gerekir. SQL dili 1974'te ortaya çıktı. 23 taraftan oluşan küçük bir kızak öncesi çalışmasının konusu olarak ortaya çıkmış ve bu yıllardan itibaren uzun bir gelişme yaşanmıştır. Standardın resmi belgesinin metni - "uluslararası standart veritabanı dili sql" (sql-92 olarak adlandırılır) resmi belgesi - altı yüz sayfayı kapsıyor, ancak DBMS'de uygulanan sol sürümlerinin belirli özellikleri hakkında hiçbir şey yok firma m microsoft, oracle, sybase ve. Dil özürlerle dolu ve çeşitlidir; bu, birçok dergi makalesindeki olasılıkların basit bir şekilde yeniden incelenmesinden daha fazlasıdır ve konu hakkında yazılan her şeyi toplarsanız, zengin hacimli bir kütüphaneye sahip olursunuz.

Ancak ortalama bir geliştiricinin SQL'in içini ve dışını bilmesi hiç de gerekli değildir. Ülkeye yerleşmiş ve kural olarak sadece birkaç temel ifadeyi ve dilbilgisi kuralını öğrenmesi gereken bir turist gibi, SQL'de de çok fazla bilgi sahibi olmadan birçok kötü sonuçtan kurtulabilirsiniz. Bu yazıda temel SQL komutlarına, veri seçimi kriterlerini belirleme kurallarına bakacağız ve sonuçların nasıl seçileceğini göstereceğiz. Sonuç olarak, bağımsız olarak tablolar oluşturup bunlara bilgi girebilecek, sorgular ekleyebilecek ve çağrıları işleyebileceksiniz. Bu bilgi, SQL'e daha fazla bağımsız hakimiyet için temel oluşturabilir.

SQL nedir?

sql, verileri tanımlamanıza, ilişkisel DBMS'lerdeki bilgileri seçmenize ve işlemenize olanak tanıyan, prosedürel olmayan özel bir dildir. Uzmanlaşma, bir veritabanıyla çalışmaya yönelik hiçbir spesifikasyonun olmadığı anlamına gelir; Yalnızca bu dili kullanarak tam teşekküllü bir uygulama sistemi oluşturmak mümkün değildir - bunun için SQL komutlarını içerebilen diğer dilleri kullanmanız gerekir. Bu nedenle SQL'e verileri işlemenin ek bir yolu da denir. Ek dilin diğer dillerle birleştirilme olasılığı daha düşüktür.

Uygulama dili prosedürlerin oluşturulması nedeniyle özel bir öneme sahiptir, ancak sql'de bunlar yoktur. Bu yardımla iş adamının nasıl bir yere yerleşmesi gerektiğini söylemek mümkün değil ama daha da önemlisi orada nasıl yattığını bilmek mümkün. Aksi takdirde, öyle görünüyor ki, sql ile bir saat çalıştığımızda, bunların çıkarılması için prosedürler değil, sonuçlar alıyoruz.

SQL'in en büyük gücü ilişkisel veritabanlarına erişim yeteneğidir. “SQL özellikleriyle desteklenen veritabanı” ile “ilişkisel veritabanı” ifadelerinin eşanlamlı olduğunu unutmamak gerekir. Ancak bu arada aralarında bir fark olduğunu göreceksiniz. SQL-92 standardında ilişki terimi yoktur.

İlişkisel DBMS nedir?

Ayrıntıya girmeden ilişkisel bir DBMS, ilişkisel veri yönetimi modeline dayalı bir sistemdir.

İlişkisel model kavramı ilk olarak Dr. E. F. Codd'un 1970 yılında yayınlanan çalışmasında tanıtıldı. Verileri yapılandırmak ve yönetmek için bir matematiksel aparat tanımladı ve ayrıca herhangi bir gerçek bilgiyi temsil etmek için soyut bir model önerdi. Veritabanlarını kullanan veritabanlarının, bilgi depolamaya ilişkin belirli özellikleri sağlaması gerekir. Veritabanının iç yapısı değiştirilirse (örneğin hız kodunun taşınmasıyla), uygulama programlarının yeniden işlenmesi gerekiyordu ki bu mantıksal olarak mümkün değildi. İlişkisel model, uygulama programları arasında veri depolama gizliliğinin arttırılmasını mümkün kıldı. Aslında model hiçbir şekilde bilginin nasıl saklandığını veya erişildiğini göstermez. Bu bilgiyi yalnızca sigorta yaptıranlar alır. İlişkisel modelin ortaya çıkmasıyla birlikte veri yönetimine yaklaşım açıkça değişti: mitolojiden bilime dönüştü ve bu da galusia'nın devrim niteliğindeki gelişimine yol açtı.

İlişkisel modelin temel kavramları

İlişkisel modele göre ilişki, veriler içeren bir tablodur. Bir ilişki, bu tablonun bileşenleriyle ilgili bir veya daha fazla sayıda nitelik (işaret) ve bu niteliklerin kümeleri olan bir dizi (muhtemelen boş) veri içerebilir (bunlara n-ary demetler veya kayıtlar denir). ) ve türleri Tablonun son satırları.

Herhangi bir demet için nitelik değerleri sözde alanlarda bulunabilir. Aslında bir alan, çok çeşitli geçerli değerleri tanımlayan bir veri kümesidir.

Gelin kıçına bir göz atalım. Değerleri Pazartesiden Haftaya yerleştirebilmeniz için lütfen Yılın Günleri alan adını bize bildirin. İlişkinin, etki alanının göstergesi olan "Yaşam Günü" özelliği varsa, o zaman herhangi bir demetteki "Yaşam Günü" sütunundaki giriş, aşırı şişirilmiş değerlerden biri olabilir. Sichen chi Kishka değerinin görünmesine izin verilmez.

Saygıyı yeniden sağlayın: Nitelik mutlaka izin verilen değerlerden birinden suçludur. Bölge derhal çitle çevrilir. Bu nedenle aktif alanın niteliğinin önemine ek olarak, onun atomiklik zihniyetine de ulaşmak gerekir. Bu, bu değerin ayrıştırılmasının kabul edilemez olduğu, yani ana anlamını kaybetmeden daha küçük parçalara ayrılamayacağı anlamına gelir. Örneğin, niteliğin değeri aniden Pazartesi ve Salı günleri ortaya çıkarsa, o zaman ilk sırayı kurtararak iki parçayı görmek mümkün olacaktır - Tyzhnya Günü; Böylece niteliğin değeri atomik olmaktan çıkmıştır. Ancak, "Pazartesi" kelimesinin anlamını parçalara ayırmaya çalışırsanız, "P"den "K"ye kadar bir dizi harfle karşılaşacaksınız; Hafta sonu duygusu harcandığı için “Pazartesi”nin anlamı atomiktir.

Diğer yetkililer geliyor. En önemlisi kapalı operasyonun matematiksel gücüdür. Bu, kurulumlarda yapılacak herhangi bir işlem sonucunda yeni bir kurulumun ortaya çıkabileceği anlamına gelir. Bu güç, sular üzerinde Vikonian matematiksel işlemlerinin aktarılan sonuçları ortadan kaldırmasına olanak tanır. Ayrıca işlemlerin farklı katkı düzeyleriyle soyut ifadeler halinde temsil edilmesi de mümkündür.

Son çalışmasında Dr. Codd, ilişkisel cebir adı verilen sekiz operatörden oluşan bir dizi seçti. Çeşitli operatörler (birleşim, mantıksal çarpma, fark ve Kartezyen katı) geleneksel çokluk teorisinden aktarılmıştır; Diğer operatörler tüylerin işlenmesi için özel olarak bir şey yarattılar. Dr. Codd, Chris Data ve diğer araştırmacıların diğer robotlarına ek operatörler atandı. Bu makalenin ilerleyen kısımlarında üç ilişkisel operatöre bakacağız: üretim (proje), değişim (seçme veya kısıtlama) ve birleştirme (katılma).

sql ve ilişkisel model

Artık ilişkisel modele aşina olduğunuza göre bunu unutalım. Tabii ki, sadece şimdi değil, sadece açıklığa kavuşturmak için: İlişkisel modelin kendisi Dr. Codd tarafından SQL'in geliştirilmesinde tanıtılmış olmasına rağmen, aralarında yeni veya gerçek bir benzerlik yoktur (SQL-92'nin bu kadar yaygınlaşmasının nedenlerinden biri de budur). standart gün dönemi evrelemesi). Örneğin, bir SQL tablosu eşit değerlere ayarlanmışsa, bazı tablolarda tam olarak aynı sayıda satır bulunurken satırlar aynı sayıda satıra sahip olmayabilir. Buna ek olarak, sql geniş bir ilişkisel alan yelpazesine sahip değildir, ancak veri türleri önemli bir rol oynamaktadır (ilişkisel modelin bazı uzmanları, ilişkisel alanlar için yakında çıkacak olan sql standardından önce dahil edilmeye çalışılmaktadır).

Ne yazık ki, sql ile ilişkisel model arasındaki tutarsızlık son birkaç yılda birçok yanlış anlaşılmaya ve süper yankılara yol açtı. Ancak yazının ana konusu ilişkisel model değil SQL kullanımıdır ve burada herhangi bir sorun yoktur. Terimlerin SQL'de, ilişkisel modelde ve ilişkisel modelde ne anlama geldiğini unutmayın. Ayrıca, vikorystov'un istatistiklerinin sql'de kabul edilen hiçbir şartı olmayacak. Satırlar, nitelikler ve kayıtlar yerine bunların SQL analoglarını formüle edeceğiz: tablolar, sütunlar ve satırlar.

Statik ve dinamik sql

Statik ve dinamik SQL terimlerine zaten aşina olabilirsiniz. sql, programın programa aktarıldığı aşamada derlenip optimize edildiği için statiktir. C veya COBOL ile yazılmış programlarda sql komutlarının başlatılmasından bahsettiğimizde statik sql biçimlerinden birini zaten tahmin etmiştik (bu tür virüsler için başka bir isim vardır - sql tümeksiyonu). Tahmin edebileceğiniz gibi program başlatılırken dinamik bir SQL sorgusu derlenir ve optimize edilir. Kural olarak, ilk gereksinimler, ihtiyaçlarınıza göre sorgular oluşturmanıza olanak tanıyan en dinamik sql'yi kullanmaktır. Dinamik sql sorgularını kullanma seçeneklerinden biri, işlenmesi gereken sorgular inal teriminden etkileşimli olarak girilirse, etkileşimli veya doğrudan tıklamalarıdır (bu, özel terim - directsql'den kaynaklanmaktadır). Statik ve dinamik SQL arasında, statik yapıların sözdiziminde ve sözlük, koruma ve beslenme özelliklerinde istatistik kapsamının ötesine geçen önemli farklılıklar vardır. Ayrıca, pratik uygulamaların netliğiyle, programcıların ve çekirdek geliştiricilerin çoğunun sql'yi nasıl kullanacaklarını öğrenmelerine olanak tanıyan doğrudan sql sorgularının sunulması da önemlidir.

Yak vivchati sql

Artık ilk SQL sorgularınızı yazmaya hazırsınız. Veritabanına sql üzerinden erişiminiz varsa ve pratikte yöntemlerimizi hızlı bir şekilde kullanmak istiyorsanız, o zaman önlem alın: gerekli bilgilerin kullanıcısı olarak sisteme giriş yapmanız gerekmektedir ve sql sorgularının etkileşimli olarak işlenmesi için bir yazılıma ihtiyacınız olacaktır. (Edge veritabanından bahsederken, ayrıcalıkların atanması konusunda veritabanı yöneticisiyle görüştük). Veritabanına sql üzerinden erişim yoktur - kafanız karışmasın: tüm uygulamalar çok basittir ve makineye gitmeden "kuru" olarak kurulabilir.

Sql'deki herhangi bir eylemi düzenlemek için sql'nizin düzenlemesini takip edin. Çok sayıda virüs türü vardır ve bunlar arasında üç ana grup görülebilir: ddl komutları (veri tanımlama dili), dml komutları (veri işleme dili) ve veri kontrol özellikleri. Böylece sql'in üç farklı dili vardır.

Komut filmi Verileri anlatacağım

Ana ddl komutlarından biri olan create table ile başlayalım. SQL'de çeşitli tablo türleri vardır; başlıcaları iki türdür: temel ve görünümler. Temel olanları gerçek verilere dayanan tablolardır; seçimler - bunlar, temel tablodan kaldırılan bilgilere dayanarak oluşturulan "sanal" tablolardır; Geliştiriciler için formlar orijinal tablolara benziyor. Tablo oluştur komutu temel tablolar oluşturmak için tasarlanmıştır.

Tablo oluştur komutu, tablonun adını belirtmeli, sütunların listesini ve bunların içerdiği veri türlerini belirtmelidir. Parametreler diğer karmaşık olmayan unsurları da içerebileceğinden, önce ana parametrelere bakalım. Bu komutun en basit sözdizimsel formunu gösterelim:

tablo oluştur Im'yaTablitsi (Stovpets DataType) ;

oluştur ve tablola - bunlar sql anahtar sözcükleridir; Tablo Adı, Tür ve Veri Türü resmi parametrelerdir; bunların yerine hemen gerçek değerleri girmeniz gerekir. Parametre Türü ve Veri türü yuvarlak yayın yakınına yerleştirilir. SQL'de yuvarlak elemanları gruplamak için yuvarlak kollar kullanılır. Bazen ödeme karşılığında parayı tahsil etmenize izin verirler. Sondaki “noktalı nokta” işareti bir komut ayırıcıdır. SQL'imin herhangi bir sürümünü tamamlamak sizin sorumluluğunuzdadır.

Gelin kıçına bir göz atalım. Tüm randevularla ilgili verileri kaydetmek için bir tablo oluşturmayı unutmayın. Bunu yapmak için SQL'e aşağıdaki komutu girin:

masa randevuları oluşturun (appointment_date date);

Bu komutu bitirdikten sonra randevularının yer aldığı, randevu_tarihi adında, tarih tipindeki verilerin kaydedilebildiği bir sütunun bulunduğu bir tablo oluşturulacaktır. Şu anda tablodaki satırların çoğu sıfıra eşit olduğundan veriler henüz girilmemiştir (tablo oluştur komutu yardımıyla sadece atanan tablo verilir; gerçek değerler daha fazla görülebilecek ekleme komutu).

Randevular ve randevu_tarihi parametreleri, belirli veritabanı nesnelerinin adlarını ve bazen de genel olarak tablo ve sütunların adlarını belirttikleri için tanımlayıcılar olarak adlandırılır. SQL'in iki tür tanımlayıcısı vardır: normal (normal) ve ayrılmış. Görünür tanımlayıcılar ayağın alt kısmında görünür ve düzeltilmesi gereken karakterlerin bir kaydını içerir. Orijinal tanımlayıcılar aynı sınırlandırılmış karakterlerle gösterilmediğinden yazılı kayıt korunmaz. Bu istatistiğin orijinal tanımlayıcısı olmayacak.

Tanımlayıcıları oluşturmak için kullanılan semboller aşağıdaki kurallara uygun olmalıdır. Bazı tanımlayıcılar harfler (Latince değil, diğer alfabeler), sayılar ve bir aksan simgesi içerebilir. Tanımlayıcı noktalama işaretlerinin, boşlukların veya özel karakterlerin (#, @, % veya!) eksik olmasından sorumlu değildir; Ayrıca sayılarla veya sandalyenin sembolüyle başlayamazsınız. Tanımlayıcılar için SQL anahtar kelimelerinin etrafındaki anahtar kelimeleri kullanabilirsiniz, ancak bu önerilmez. Benzersiz olabilecek (bağlam bağlamı içinde) bir nesnenin atanması için atama tanımlayıcısı: zaten veritabanında bulunan adlarla bir tablo oluşturamazsınız; Aynı tabloda aynı isimli matrislerin bulunması mümkün değildir. Konuşmadan önce lütfen randevuların ve randevuların sql için yeni isimler olduğunu unutmayın. Sadece mektubun kaydını değiştirerek yeni bir tanımlayıcı oluşturmak mümkün değildir.

Birden fazla tabloyla kullanılabilecek bir tablo istiyorsanız gerekli tabloları mümkün olduğu kadar çok tabloyla listelemek pratik olacaktır. Böyle bir tablo oluşturma komutu şuna benzer:

tablo oluştur Im'yaTablitsi (Stovpets DataType [( , Stovpets DataType ]]) ;

Nobov'yazkovich Eleementiv'i tanıyan Square Duke Vikoristan, fіgurni mistye Elehementa, yaki tek yakalı yapıların göçüyle boti olabilir (gerçekte sql-komutanına tanıtıldığında, düzenlenmemelidir). Bu sözdizimi istediğiniz sayıda ifadeyi belirtmenize olanak tanır. Lütfen başka bir öğenin önünde bir koma olduğunu unutmayın. Listede çok sayıda parametre bulunduğundan, bunlar şu veya bu şekilde güçlendirilir.

randevular2 tablosu oluştur (randevu_tarihi tarih, randevu_saati saati, açıklama varchar (256)) ;

Bu komut, randevular2 tablosunu oluşturur (randevular tablosu zaten veritabanında olduğundan yeni tablo başka birine aittir). İlk tabloda olduğu gibi, randevu tarihlerini kaydetmek için randevu_tarihi sütunu vardır; Ayrıca randevu_zamanı personelinin de bu randevulara kayıt olduğu ortaya çıktı. Açıklama parametresi, muhtemelen en fazla 256 karakterden oluşan bir metin satırıdır. Bu parametre için belirtilen tür varchar (karakter değişiminin kısaltması) olup, kayıt için ne kadar alana ihtiyaç duyulacağı önceden belli değildir ancak açıklamanın 256 karakterden biraz fazla süreceği anlaşılmaktadır. Karakter dizisi türünün (ve diğer türlerin) bir parametresini açıklarken, parametrenin geri kalanı gösterilir. Bu değerler tip adı altında sağ yönlü yuvarlak saplar için belirtilmiştir.

Belki de baktığınız iki izmaritin farklı dekore edilmiş komuta kaydına saygı göstermişsinizdir. İlk aşamada komut bir sıraya, sonra diğer sıraya yerleştirilirse, ilk açık yuvarlak kemerden sonra girişe yeni bir sıradan devam edilir ve kaplama adımının belirlenmesi yeni bir sıradan başlar. SQL'in bir kaydı kaydetmeden önce özel bir gereksinimi yoktur. Bunu manuel olarak okumaya çalışmak için satırları yazacağım. Sql dili, komutu satırlara bölmek, satırların başına girintiler ve kayıt öğeleri arasına boşluk eklemek gibi komutlar yazmanıza olanak tanır.

Şimdi, temel kuralları biliyorsanız, masanın birçok noktanın katlandığı kıç kısmına bir göz atalım. İlk istatistik çalışanlar tablosunu gösteriyor. Şu öğelere sahiptir: takma ad, isim, işe alınma tarihi, iş unvanı, kategori ve nehir için maaş. Bu tabloyu tanımlamak için aşağıdaki SQL komutunu kullanın:

tablo çalışanları oluşturun (soyadı karakteri (13) boş değil, ad karakteri (10) boş değil, işe alım tarihi tarihi, şube_ofis karakteri (15), sınıf_düzeyi küçük değeri, maaş ondalık değeri (9, 2));

Takıma bir sürü yeni unsur geliyor. Her şeyden önce, bu null değildir, bu nedenle soy_ad ve ad cümleciklerine değer veriyoruz. Benzer tasarımların yardımıyla kasların esnekliğini artırmaya yardımcı olacak yardımlar verilmektedir. Bu seçenek, soyadı ve adı alanlarının girildiğinde otomatik olarak doldurulması gerektiğini belirtir; bu bilgiyi boş bırakmak mümkün değil (tamamen mantıklı: bir casusun adı bilinmeden nasıl teşhis edilebilir?).

Ayrıca uygulamada üç yeni veri türü bulunmaktadır: karakter, küçük sayı ve ondalık sayı. Daha önce çadırlardan bahsetmemiştik. SQL'in ilişkisel alanları olmasa da bir dizi temel veri türü vardır. Bu bilgi, hafıza görünür hale geldiğinde ve değerler eşit olduğunda düzeltilir; Şarkı, girildiğinde olası değerlerin bir listesi gibi geliyor, SQL'deki tür kontrolü nedeniyle diğer dillere göre daha az kısıtlama var.

SQL'de bulunan tüm veri türleri altı gruba ayrılabilir: karakter satırları, tam sayısal değerler, yakındaki sayısal değerler, bit satırları, tarihler ve aralıklar. Tüm çeşitleri fazlasıyla inceledik, bu nedenle yalnızca birkaçına bakmak önemlidir (örneğin pancar sıraları birincil yatırımcıların ilgisini çekmez).

Konuşmadan önce eğer bir saat vermenin rahmet olduğunu sanıyorsanız merhamet etmişsiniz demektir. Bu grup (datetime), SQL'de tanımlanan zamanla ilgili veri türlerinin çoğunu (yerel grupta görülen zaman aralıkları gibi parametreler) içerir. Önceki örnekte, tarih grubunda zaten iki tür veri vardı: tarih ve saat.

Halihazırda bildiğiniz gibi mevcut veri türü değişken karakterlidir (veya basitçe varchar); Sembolik satırlar grubuna eklenmelidir. Varchar değişken para satırlarını kaydetmek için kullanıldığından, üçüncü uygulamada kullanılan char türü sabit sayıda karaktere sahip satırları kaydetmek için kullanılır. Örneğin, last_name sütununda, ister poe ister penworth-chickering olsun, girilen gerçek takma adlardan bağımsız olarak 13 karakterlik satırlar kaydedilmiş olacaktır (poe'lu satırda eksik olan 10 karakter vardır ve boşluklarla doldurulacaktır).

Ancak koristuvach, varchar ve char'ın görünümüne bakılırsa mantıklıdır. İki ipucunu tanıtmaya gerek var mıydı? Sağda, pratikte hız kodu ile disk alanından tasarruf arasında bir denge var. Kural olarak, sabit miktarda para içeren satırların kullanılması erişim hızında büyük bir artış sağlar, ancak çok sayıda satır varsa disk alanı ekonomik olmayan bir şekilde israf edilir. Her yorum satırı için randevular2 256 karakter ayırdığından, bu mantıksız olabilir; Çoğu zaman satırlar önemli ölçüde kısa olacaktır. Öte yandan, takma adlar da çok pahalıya mal olabilir, ancak yaklaşık 13 karakter gerektirirler; Bu durumda masraflar minimum düzeyde olacaktır. Bu iyi bir kuraldır: Eğer satırın değerinin biraz değiştiğini veya çok küçük olduğunu biliyorsanız char; diğer durumlarda – varchar.

Bir grup kesin sayısal değere indirgenmiş iki yeni veri türü (küçük ve ondalık) geliyor. Smallint – isim küçük tamsayıya (küçük tam) kısaltılır. SQL'de ayrıca tamsayı veri türü vardır. İki benzer tipin varlığı bazen yerden tasarruf etmenin önemiyle açıklanmaktadır. Uygulamada,grade_level parametresinin değerleri iki haneli ek bir sayı ile temsil edilebildiğinden, Smallint türü kullanılır; Pratikte hangi maksimum değerlerin parametre olabileceği her zaman açık değildir. Böyle bir bilgi yoksa tam sayı girin. Smallint ve integer türlerinin parametrelerini kaydetmenin asıl nedeni, bu parametrelere karşılık gelen değer aralığının dış görünüm platformu için ayrı olmasıdır.

Finansal göstergelerin sunumunda kullanılan ondalık veri türü, gerekli sayıda onluk basamaktan oluşan bir şablon belirlemenize olanak tanır. Bu tip hassas sayısal kayıt için kullanıldığından onlarca veri üzerinde yapılan tüm matematiksel işlemlerin doğruluğunu garanti eder. Onlarca değer için, yuvarlama hatalarına yol açan kayan noktalı sayı (kayan noktalı sayı - kayan noktalı sayı) gibi yakındaki sayısal gösterim grubundan veri türlerinin seçilmesi, bu seçenek finansal amaçlar için uygun değildir. Ondalık tipe parametre atamak için aşağıdaki gösterim biçimi kullanılır:

burada p onlarca işaretin sayısıdır, d ise virgülden sonraki deşarjların sayısıdır. İkame p daha sonra değerlerdeki anlamlı basamakların sayısını kaydeder ve ikame d - virgülden sonraki basamakların sayısını kaydeder.

"Tablo oluşturma" bölümü, tablo oluştur komutunun resmi girişinin yeni bir versiyonunu gösterir. Görüntülenen tüm veri türleri için yeni öğeler ve görüntüleme formatları mevcuttur (Prensip olarak diğer veri türleri sınırlıdır, ancak bunlar görünür değildir).

Sql komutlarının sözdiziminin çok karmaşık olduğunu hemen merak ediyor olabilirsiniz. Ale, kıçını dikkatlice işaret ettiğin için bunu kolayca anlayacaksın. Diyagramda ek bir öğe belirir - dikey bir özellik; Alternatif tasarımlar arasında ayrım yapmaya yarar. Yani cilt problemi ciddi ise uygun veri tipini seçmek gerekir (hatırlayacağınız üzere kare kolların esnek parametreleri vardır ve kolların şekilleri de sıklıkla tekrarlanabilen tasarımlara sahiptir; gerçek SQL komutlarında) bu özel karakterler yazılmaz). Diyagramların ilk bölümünde veri türleri için yeni adlar bulunurken diğer bölümünde kısaltılmış adlar bulunur; Pratikte siz de vikorist onlar gibi olabilirsiniz.

İstatistiğin ilk kısmı tamamlandı. Diğeri DML ekleme, seçme, güncelleme ve silme komutlarına ayrılacaktır. Ayrıca veri seçimlerine, eşitleme operatörlerine ve mantıksal operatörlere, sıfır değerleme ve üçlü mantığa da bakacağız.

Tablonun oluşturulması. Create table komutunun sözdizimi şu şekildedir: Kare kollar gerekli parametrelere sahipken, kıvrık kollar tekrarlanan yapılara sahiptir.

tablo tablosu oluştur (sütun karakteri (uzunluk) [ kısıtlama ] | karakter değişimi (uzunluk) [ kısıtlama ] | tarih [ kısıtlama ] | zaman [ kısıtlama ] | tamsayı [ kısıtlama ] | küçük int [ kısıtlama ] | ondalık (kesinlik, ondalık basamaklar) [ kısıtlama ] | float (hassaslık) [ kısıtlama ] [ ( , sütun char ( uzunluk ) [ kısıtlama ] | varchar ( uzunluk ) [ kısıtlama ] | tarih [ kısıtlama ] | zaman [ kısıtlama ] | int [ kısıtlama ] | küçük int [ kısıtlama ] | dec (hassasiyet, ondalık basamaklar) [kısıtlama] | float (hassasiyet) [kısıtlama])]);

Gizli ad sql

1970'lerin koçanı üzerinde kayalar. IBM, Dr. Codd tarafından önerilen ilişkisel veritabanı modelinin pratik uygulamasını uygulamaya başladı. Donald Chamberlin ve diğer bir grup bilim insanı ve gelecek vaat eden araştırmacılar, filmin yapılandırılmış İngilizce sorgulama dili veya sadece devamı olarak adlandırılan bir prototipini yarattılar. Genişlemeler ve daha fazla gelişme olacak. Yeni seçenek, IBM'in yeniden adlandırılması, devamı/2 adının kaldırılması. IBM'in ilk ilişkisel veritabanı sistemi olan system/r'nin tasarımında bir yazılım arayüzü olarak kullanıldı. Yasal nüanslar nedeniyle IBM, adı değiştirmeye karar verdi: devam/2 yerine sql (yapılandırılmış sorgu dili) kullanın. Bu kısaltmaya genellikle “si-ku-el” adı verilir.

Herkese merhaba! Bugün mümkün olduğunca basit bir şekilde, özellikle yeni başlayanlar için, size bunlardan bahsetmeye çalışacağım. SQL nedir Peki ne için kullanılıyor? Bu materyalden ayrıca bir veritabanının ne olduğunu, bir veritabanı yönetim sistemini ve ayrıca SQL'in dil lehçesini öğreneceksiniz ve makalenin tamamı, SQL'in ne olduğunu sorunsuz bir şekilde anlamanıza yol açacak şekilde tasarlanacaktır.

Sanırım SQL'in bir bütün olarak oradaki veritabanlarıyla bağlantılı olduğunu zaten anladınız, bu nedenle SQL'in ne olduğunu daha iyi anlamak için SQL'in neden gerekli olduğunu, neden gerekli olduğunu anlamak gerekiyor. Çok teşekkürler.

Şimdi size SQL'in anlamını ve neden gerekli olduğunu net bir şekilde açıklayacak küçük bir arka plan bilgisi vereceğim.

Veritabanı nedir?

Veritabanı altında düzenli bir şekilde saklanan herhangi bir bilgi kümesinin olup olmadığının anlaşılmasının genel olarak kabul edildiği ve hızlı bir şekilde geri alınabileceği gerçeğiyle başlayacağım. Otomatik veritabanlarından bahsedersek, ilişkisel veritabanlarından bahsediyoruz demektir.

İlişkisel veritabanı- Bu bilgiler sıralanır ve basit ipliklerle birbirine bağlanır. Orada tüm bu bilgilerin yer aldığı bir tablo var. Ve bu daha da önemli çünkü artık sadece tabloya bakarak mevcut veritabanınızı ortaya çıkarmanız gerekiyor ( SQL bağlamında ne söylenmeli?), tobto. zagalom veritabanı – tabloyu ayarlayın. Elbette bu çok basitleştirilmiş bir anlamdır ancak verilere pratik ve makul bir temel sağlar.

SQL nedir?

Veritabanındaki bilgilerin organize olması, belirli varlıklara bölünmesi ve bir tabloda sunulması nedeniyle ona gitmek ve ihtiyacımız olan bilgiyi bulmak kolaydır.

Ve işte müstehcen yiyecekler geliyor: Ona nasıl ulaşabiliriz ve ihtiyaç duyduğumuz bilgilerden nasıl kurtulabiliriz?

Bunun için özel bir araç var ve burada SQL yardımımıza geliyor, bu da verileri işlemek için kullanılan bu araçtır ( yaratılmış, dövülmüş, görünür vb.) veritabanında.

SQL (Yapılandırılmış sorgu dili) - Yapılandırılmış sorguların dili, ek yardım için özel sorgular yazılmıştır ( sözde SQL talimatları) veri tabanından veri çıkarmak veya veriyi değiştirmek için bir yöntem kullanarak veri tabanına.

Veritabanının ve kesinlikle ilişkisel modelin, farklı nesnelerin tabanda tek bir amaç altında tek bir amaç altında bütünleştirilmesine dayanan çokluk teorisine dayandığı da açıktır.Bu veriler tabloda açıkça gösterilmektedir. . SQL dilinin fragmentlerinin kendi başlarına yani bir veri seti ile çalışması önemlidir. masadan.

Konuyla ilgili Corysny materyalleri:

  • Microsoft SQL Server ile veritabanı oluşturma - yeni başlayanlar için talimatlar;
  • Microsoft SQL Server tablosuna veri ekleme – INSERT INTO ifadesi.

DBMS nedir?

Veritabanının tablolarda depolanan bilgileri içerip içermediğini merak ediyor olabilirsiniz, peki fiziksel olarak nasıl görünüyor? Bir insan onun bronzluğuna nasıl hayret edebilir?

Kısacası, bu sadece özel bir formattaki yaratımların bir dosyasıdır, bu da tam olarak veritabanının neye benzediğini gösterir ( Çoğu durumda, veritabanı çok sayıda dosya içerir, ancak aynı zamanda o kadar da önemli değildir.).

Diyelim ki veritabanı özel formatta bir dosya olduğuna göre onu nasıl oluşturacaksınız veya açacaksınız? Ve bu, böyle bir dosyayı herhangi bir araç kullanmadan oluşturmanın karmaşıklığından kaynaklanmaktadır. Veritabanını oluşturabilen ve yönetebilen veya görünüşe göre bu dosyalarla çalışabilen özel bir araç gerektiren ilişkisel bir veritabanı mümkün değildir.

Böyle bir araç tam olarak DBMS bir veritabanı yönetim sistemidir kısaca DBMS

DBMS'lerin patlaması gibi

Aslında, çok sayıda farklı DBMS'ye doymak zordur, bazıları ücretlidir ve tam işlevli sürümlerden veya sözde "harika" editörlerin kendilerinden bahsettiğimiz için çok kuruşa mal olur. , ki konuşmadan önce başlangıç ​​için mükemmeldir.

Bu sistemler arasında yetenekleri ve popülerlikleri nedeniyle aşağıdaki sistemleri görebilirsiniz:

  • Microsoft SQL Sunucusu- Bu Microsoft'un bir veritabanı yönetim sistemidir. Kurumsal sektör arasında, özellikle büyük şirketler arasında oldukça popülerdir. Ve bu sadece bir DBMS değil; verileri kaydetmenize ve değiştirmenize, analiz etmenize, bu verilerin güvenliğini korumanıza ve çok daha fazlasına olanak tanıyan eksiksiz bir eklentiler kompleksidir;
  • Oracle Veritabanı- Bu Oracle şirketinin bir veritabanı yönetim sistemidir. Bu aynı zamanda büyük şirketler arasında olduğu gibi çok popüler bir DBMS'dir. Yetenekleri açısından Oracle Database ve Microsoft SQL Server'ın işlevselliği eşitlenebilir, birbirlerine ciddi rakiplerdir ve tam işlevli sürümlerinin değeri çok yüksektir;
  • MySQL– Bu veritabanı yönetim sistemi de Oracle firmasındandır ancak maliyet olmadan genişletilebilir. O halde MySQL İnternet segmentinde daha da yaygın bir popülerlik kaybetti. İnternetteki tüm siteler MySQL üzerinde çalışmaz, başka bir deyişle İnternet'teki çoğu site veri kaydetmek için bu DBMS'yi kullanır;
  • PostgreSQL- Bu veritabanı yönetim sistemi aynı zamanda maliyetsizdir ve daha da popüler ve işlevseldir.

Konuyla ilgili Corysny materyalleri:

  • Microsoft SQL Server 2016 Express'in Kurulumu – Windows'ta Microsoft SQL Server'ın ücretsiz bir sürümünün kurulumuna bir örnek;
  • Microsoft SQL Server 2017 Express'in Ubuntu Sunucusuna Kurulumu - Linux'ta Microsoft SQL Server'ın ücretsiz bir sürümünün kurulumuna bir örnek;
  • PostgreSQL 11'i Windows'a yükleme – PostgreSQL'i Windows'a yükleme örneği;
  • MySQL'i Windows'a yükleme – MySQL'i Windows'a yükleme örneği;
  • MySQL'in Linux Mint'te kurulumu ve yapılandırılması - MySQL'in Linux'ta kurulumuna örnek;
  • Oracle Database Express Edition 11g'yi Yükleme - Oracle'ın ücretsiz bir sürümünü Windows'a yükleme örneği ( Makale uzun zaman önce yazıldı, ancak hepsi aynı olacak).

Dil lehçeleri SQL (SQL uzantısı)

Dil SQL, tüm ilişkisel veritabanlarında ve aynı zamanda bu standardın bir uzantısı olan her DBMS'de ve veri işleme dünyasında, öncelikle SQL'e dayanan ancak SQL lehçesi olarak adlandırılması gereken bir standarttır. Tam teşekküllü programlama için daha fazla olasılık vardır; buna ek olarak, bu tür dahili dil, sistem bilgilerinin alınmasını ve SQL sorgularının okunmasını mümkün kılar.

SQL dili lehçesinin ekseni:

  • Transact-SQL(kısaltılmış T-SQL) – Microsoft SQL Server'dan vikorist;
  • PL/SQL(Prosedürel Dil / Yapılandırılmış Sorgu Dili) - Oracle Database'de vikorize edilmiş;
  • PL/pgSQL(Prosedürel Dil/PostGres Yapılandırılmış Sorgu Dili) – PostgreSQL'de vikorize edilmiştir.

Bu nedenle, DBMS'de herhangi bir genişletilmiş SQL talimatına güvenmelisiniz. Basit SQL sorgularından bahsedelim, örneğin:

Ürünlerden ÜrünKimliği, ÜrünAdı SEÇİN

SQL'in standart olmasına rağmen tüm DBMS'lerin aynı şekilde çalışması çılgınca.

Not! Bu basit SQL sizden iki sütun görüntüleyecek bir tablodan veri seçmenizi isteyecektir.

Ancak programlamayı planlıyorsanız, DBMS'nin tüm dahili yeteneklerini kullanın ( prosedürleri parçalamak, yeni işlevler seçmek, sistem bilgilerini çıkarmak vb.), o zaman belirli bir SQL lehçesini öğrenmeniz ve o lehçenin öğretildiği DBMS'ye göre pratik yapmanız gerekir. Pek çok yapının sözdiziminin ve diğer pek çok şeyin olasılığının değişmesi önemlidir. Ve örneğin, SQL uzantısının mümkün olduğu her durumda başka bir DBMS'de bir SQL ifadesi çalıştırırsanız, bu durumda böyle bir ifade sonlandırılmayacaktır.

Mesela özellikle T-SQL dili konusunda uzmanım ve tabii ki 8 yıldan daha eski olan Microsoft SQL Server ile çalışıyorum!

Elbette diğer DBMS'lerle de çalışmama rağmen, biri PostgreSQL ve diğeri elbette Microsoft SQL Server ile çalışan iki programı çalıştırmak için bir saat harcadım.

Destekleyici siteler ve hizmetler çerçevesinde MySQL'i ve birçok insanı kullandım. Başka projeler kapsamında Oracle Database ile çalışma fırsatım oldu.

T-SQL dilinin bir kısmına dair tüm birikmiş bilgilerimi tek bir yerde toplayıp kitap halinde düzenledim.Transact-SQL (T-SQL) öğrenmek ilginizi çekiyorsa kitaplarımı okumanızı tavsiye ederim:

  • T-SQL Programcısının Yolu – yeni başlayanlar için Transact-SQL ile ilgili kendi kendine kılavuz. Onunla birlikte farenin tüm yapılarını ayrıntılı olarak anlatıyorum ve yavaş yavaş basitten katlamaya geçiyorum. Kapsamlı T-SQL dil eğitimine uygundur;
  • T-SQL programlama stili – doğru kod yazmanın temeli. Kitap T-SQL kodunun geliştirilmesine dayanmaktadır ( O halde T-SQL'imi bilenler için. Temel bilgileri istediğimi biliyorum).

Umarım artık SQL'in ne olduğunu ve neden gerekli olduğunu anlarsınız, aşağıdaki materyallerde SQL sorgularının nasıl oluşturulacağını öğreneceğim, hangi araçları öğrenmenin gerekli olduğunu ve hangi DBMS'ler için gerekli olduğunu anlayacağız, yani DBMS kullandığından beri kendi araçlarıyla, sosyal ağlardaki gruplarımda yeni makaleler yayınlamalısınız.

Dil, SQL veritabanları için arama yapar Vinikla 70 kayalar. Bu prototip IBM tarafından geliştirilmiş ve SEQUEL (Structured English QUEry Language) adı altında geliştirilmiştir. SQL, az sayıda operatöre ve basit bir sözdizimine dayanan ilişkisel cebir ve ilişkisel hesabın matematiksel aygıtına dayanması dışında ilişkisel modelin avantajlarını ortadan kaldırmıştır.

Avantajlarından dolayı, SQL dili başlangıçta "fiilen" haline geldi ve daha sonra dünyada faaliyet gösteren tüm önde gelen dünyaca ünlü şirketlerin ve veritabanı teknolojilerinin desteklediği ilişkisel veritabanlarıyla çalışmak için bir dil standardı olarak resmi olarak onaylandı. Çeşitli ve etkili bir standart dilin geliştirilmesi, artık belirli bir tür geliştirilmiş DBMS'ye bölünmüş uygulama yazılım sistemlerinin yüksek düzeyde bağımsızlığını sağlamayı mümkün kıldı ve böylece eklentilerin geliştirilmesi için seviye ve birleştirme araçlarının önemli ölçüde artırılması sağlandı. ilişkisel veritabanlarıyla çalışır.

Dil SQL standardından bahsederken, ticari uygulamalarının çoğunun standarttan daha fazla veya daha az farklılık gösterebileceğini belirtmek gerekir. Bu elbette farklı SQL lehçelerini farklılaştıran sistemlerin karmaşıklığına yol açmaktadır. Öte yandan standarda göre dilin uygulanmasının önemli ölçüde genişletilmesi, özellikle dilin geliştirilmesi, standardın yeni baskılarında yer alacaktır.

Movi SQL, birincil öneme sahip olanlar da dahil olmak üzere çok sayıda kitaba adanmıştır ve eylemleri bu arkadaşın referans listesinde listelenmiştir; örneğin, ilk yardım kitabı özellikle Movi SQL'in pratik öğreniminin beslenmesine adanmıştır. . Bununla bağlantılı olarak, bu dilin, materyale daha fazla katkı sağlamak açısından önemli olabilecek bazı önemli özelliklerine bakacağız.

8.1. Prosedürel programlamada SQL'in önemi

SQL dili prosedürel olmayan dil programlama sınıfına getirilmiştir. Veritabanlarıyla çalışmak için de kullanılabilen evrensel prosedür dillerinden farklı olarak SQL dili, kayıtlara değil çokluklara yöneliktir. Tse şu anlama geliyor. Movi'de formüle edilen SQL sorgusunun giriş bilgilerinin veritabanına nasıl uygulanacağı anonim olarak belirlenir kayıt tuple'ları tablo başına bir veya daha fazla tablo. Sonuç olarak Vikonannya da kurulur kişisel konvoylar olmadan ortaya çıkan tablo-tablo. Yani SQL'de satırlar üzerindeki herhangi bir işlemin sonucu da ayarlanır. Yani SQL'den bir prosedür koymamasını isteyin. sonucu üretmek için gerekli eylemlerin sırası ve girdi (ve giriş) kapları cinsinden formüle edilen, ortaya çıkan kabın tuple'larıyla tatmin olabilecek zihinler.

8.2. Form ve depo parçaları SQL

Mevcut ve mevcut iki SQL dili biçimi vardır: etkileşimli SQL

SQL Çağrıları.

Etkileşimli SQL Etkileşimli modda SQL sorgularının sonucunun doğrudan girişi ve alınması için kullanılır.

SQL komutları, başkaları tarafından yazılanlar (Pascal, C, C++ vb.) gibi programlarda yayınlanan SQL komutlarından oluşur. İlişkisel veritabanlarında depolanan veriler üzerinde onlarla çalışma olanağı sağlayan, daha zor ve etkili olan bu tür dillerde yazılmış programları kullanmak daha iyidir, ancak SQL arayüzünü sağlayacak ek özelliklerin tanıtılması gerekir. benimkiyle, bu durumda tanıtılacak.

Hem etkileşimli hem de SQL enjeksiyonlu sistemler bu tür depolara bağlıdır.

Mova Viznachennya Danikh– DDL (Veri Tanımlama Dili), farklı veritabanı nesnelerini (tablolar, dizinler, arka uçlar, ayrıcalıklar vb.) oluşturma, değiştirme ve silme yeteneği verir.

DDL veri atamanızın ek işlevlerinden önce, veri bütünlüğünü atamaya yönelik işlevleri de dahil edebilirsiniz.

veri kaydetme yapılarının sırası, veri kaydetmenin fiziksel düzeyinin öğelerinin açıklaması.

Haraçların dil alıntıları- DML (Veri İşleme Dili),

Veritabanından bilgi seçmenize ve içinde depolanan verileri dönüştürmenize olanak tanır.

Tim iki farklı dilden daha az değil, tek bir SQL'in bileşenleridir.

8.3. Umovi ve terminoloji

Anahtar kelimeler, SQL dillerinde özel anlam taşıyabileceği için kullanılan kelimelerdir. Örneğin, belirli SQL komutları anlamına gelebilirler. Anahtar sözcükler, veritabanı nesne adları gibi başka amaçlarla değiştirilemez.

SQL ifadeleri, SQL'i veritabanına bağlamak için kullanılan talimatlardır. Operatörler, önermeler adı verilen bir veya daha fazla mantıksal parçadan oluşur. Önermeler bir anahtar kelimeyle başlar ve anahtar kelimelerden ve argümanlardan oluşur.

Lütfen SQL dilimizde kullanılan terimlerin ilişkisel modelin açıklamasında kullanılan terimlerden farklı olduğunu unutmayın. Sokrema, yeni vikorist'te ilişki terimi yerine tuple terimleri ve satır ve sütun niteliği yerine tablo terimi kullanılıyor.

8.4. Verileri seçin. Şebeke SEÇME

En basit SELECT türü

SQL'deki SELECT ifadesi en önemli ve en sık kullanılan operatördür. Bir veritabanı tablosundan bilgi seçmenin amacı budur. Basit bir ifadeyle SELECT ifadesinin sözdizimi şuna benzer.

SEÇME< niteliklerin listesi>

İTİBAREN< список таблиц>

Kare kolların eklenebilecek unsurları vardır.

SELECT anahtar sözcüğü DBMS'ye bu önerinin bilgiyi kaldırmayı amaçladığını bildirir. SELECT kelimesinden sonra, alanların adları (öznitelikler listesi) değiştirilir, bunun yerine sorulur.

SELECT deyimindeki zorunlu anahtar kelime FROM (z) kelimesidir. FROM anahtar sözcüğünden sonra bilgilerin çıkarıldığı ayrı tablo adlarının listesi gösterilir.

Örneğin,

ÖĞRENCİNİN ADI, SOYADINI SEÇİN;

SQL sorguları nokta karakteriyle bitebilir. Kılavuz, NAME ve tüm alan değerlerinin geçerli seçimini isteyecektir.

SOYADI ÖĞRENCİ tablosundan.

Sonuç, saldırgan görünümlü bir tablodur

Bu tablodaki alanların sırası, girdi tablosundaki sırasına göre değil, girdide belirtilen AD ve SOYADI alanlarının sırasına göredir.

ÖĞRENCİ.

Tablo için ortaya çıkan SQL sorgusunun ilişkisel ilişkinin önemini tam olarak göstermediğinin farkındayız. sen

Ancak aynı nitelik değerlerine sahip yinelenen tanımlama grupları içerebilirler.

Örneğin “Öğrencilerin yaşadığı yerlerin isim listesini al, STUDENT tablosunda hangilerinin olduğu bilgisini al” isteği bu view’da yazılabilir.

ÖĞRENCİDEN ŞEHİR SEÇİN;

Sonuç bir tablo olacak

Bilgorod

Bu tablonun daha fazla satıra sahip olabileceğini unutmayın. Kokular kalın harflerle gösterilmiştir.

Tekrarlanan kayıtlar için SELECT girişinin sonucunu kapatmak için DISTINCT anahtar sözcüğünü kullanın. SELECT girildiğinde hiçbir alanı açmaz, DISTINCT seçilen tüm alanların değerlerinin aynı olduğu yinelenen satırları açar.

WHERE anahtar sözcüğüyle belirtildiği gibi SELECT operatörü ifadesinin eklenmesi, SELECT operatörünün yürütüldüğü tablodaki satır alanlarının değeri için önemli bir gerçeği veya yalanı kabul eden zihinsel bir ifade (yüklem) girmenize olanak tanır. . WHERE deyimi belirtilen tabloda hangi satırların görüntüleneceğini belirtir. Sorgu sonucu oluşan tablonun önüne sadece WHERE cümlesine zihin (yüklem) atanan satırlar dahil edilerek anlamlı doğruluk elde edilir.

(SOYADI) Petrov takma adına sahip tüm öğrencilerin adlarından (NAME) oluşan bir seçkiyi içeren bir sorgu yazın, bilgileri tabloda yer almaktadır.

SOYADI, ADI SEÇİN

ÖĞRENCİDEN

NEREDE SOYADI = 'Petrov';

WHERE deyiminde belirtilen akılda şu operatörler tarafından belirtilen eşitleme işlemleri kullanılabilir: = (eşit), > (büyük),< (меньше), >= (Daha fazla veya bir),<= (меньше или равно), <>(Uyumlu değil) ve mantıksal operatörler AND, OR ve NOT.

Örneğin 3. sınıftan başlayıp burs alan öğrencilerin (burs miktarı sıfırdan büyük) isim ve rumuzlarının kaldırılmasını isteyin ki şöyle görünsün

ÖĞRENCİNİN ADI SOYADINI SEÇİN

KÜR = 3 VE MAAŞ > 0 NEREDE;

8.5. İlişkisel cebir işlemlerinin SQL dili kullanılarak gerçekleştirilmesi. SQL'in ilişkisel bütünlüğü

sen İlişkisel cebirin ele alınmasına ayrılan önceki bölümlerde, böyle bir matematiksel aparatın ilişkisel modelinin önemli yönlerinden birinin tahmin etme ve kanıtlama yeteneği olduğu söylenmişti.ilişkisel yineleme Zokrem mov SQL veritabanlarında mov sorgularını aramak pratiktir. SQL'in ilişkisel olduğunu göstermek için herhangi bir ilişkisel cebir operatörünün SQL yollarıyla ifade edilebileceğini göstermek gerekir. SQL kullanarak ilkel ilişkisel operatörlerden herhangi birini tanımlayabileceğinizi göstermeye değer. Aşağıda SQL kullanarak ilişkisel operatörlerin nasıl uygulanacağına ilişkin bir örnek verilmiştir.

İletişim operatörü

İlişkisel cebir: UNION B SQL ifadesi:

A'DAN * SEÇİN

B'DEN * SEÇİN;

Şebeke

İlişkisel cebir: A INTERSECT B

SQL ifadesi:

A. ALAN1, A. ALAN2, …'yi SEÇİN

A, B'DEN

NEREDE A. ALAN1=B. ALAN1 VE A. ALAN2=B. ALAN2 VE ...;

A, B'DEN A.*'YI SEÇİN

NEREDE A.pk = B.pk;

Şebeke

İlişkisel cebir: A MINUS B SQL ifadesi:

A'DAN * SEÇİN

A.pk'nin NEREDE OLMADIĞI (B'DEN pk SEÇİN);

de A.pk ve B.pk birincil anahtar tablosu A ve B

Kartezyen operatörü

İlişkisel cebir: A TIMES B SQL ifadesi:

A, B'DEN;

A. ALAN1, A. ALAN2, …, B. ALAN1, B. ALAN2, … SEÇİN

A ÇAPRAZDAN B'YE BİRLEŞİN;

Projeksiyon operatörü

İlişkisel cebir: Bir SQL ifadesi:

A'DAN X, Y, …, Z'Yİ AYIRT EDİN;

Seçim operatörü

İlişkisel cebir: Bir WHERE θ SQL ifadesi:

A'DAN * SEÇİN

NEREDE θ;

Operatör θ bağlantısı

İlişkisel cebir: (A TIMES B) WHERE θ SQL ifadesi:

A. ALAN1, A. ALAN2, …, B. ALAN1, B. ALAN2, … SEÇİN

A, B'DEN

NEREDE θ;

A. ALAN1, A. ALAN2, …, B. ALAN1, B. ALAN2, … SEÇİN

ÇAPRAZDAN B'Yİ θ'NIN YERİNDE BİRLEŞTİRİN;

Alt operatör

İlişkisel cebir: A(X,Y) DEVIDE BY B(Y) SQL ifadesi:

A.X'İ A'DAN AYIRT EDİN

(SEÇME *

(A1'DEN * SEÇİN

A1. X=A. X VE A1. Y=B. Y));

Bu şekilde SQL'in ilişkisel bir cebir olarak ilişkisel olduğu anlatılmak istenmektedir.

Tablolardaki sorgularda NULL değerlerin bulunabileceğini lütfen unutmayın (aşağıdaki bölüm 9.1'e bakın), yukarıdaki sorguların tümü yanlış girilebilir, çünkü HÜKÜMSÜZ< >NULL ve NULL = NULL saçmalıktır.

Ancak bu, SQL ilişkisel bütünlüğüyle ilgili basit bir kavram değildir; NULL değer parçaları ilişkisel model tarafından desteklenmez.

Bu kılavuz SQL dilinde (DDL, DML) “belleğimin damgası” komutu içindir. Bu, mesleki faaliyet sürecinde biriken ve sürekli kafamda saklanan bilgilerdir. Bu, veritabanlarıyla çalışırken en sık karşılaşılan sorun olan yeterli minimumdan azdır. Daha gelişmiş SQL yapılarını birleştirmeye ihtiyaç duyulduğundan, yardım için İnternet'te bulunan MSDN kitaplığına başvuracağım. Bana göre her şeyi kafanızdan çıkarmak çok zor ve buna özel bir ihtiyaç da yok. Temel yapıyı bilmek gerçekten kötü, çünkü... Oracle, MySQL, Firebird gibi birçok ilişkisel veritabanında bu yaklaşımın kullanılması pratik olarak imkansızdır. Farklılıklar esas olarak veri türlerinde yatmaktadır ancak ayrıntılarda farklılık gösterebilir. SQL dilinin temel yapıları o kadar zengin değildir ve sürekli pratik yaparak pis kokuyu unutmak kolaydır. Örneğin, nesneler (tablolar, sınırlar, dizinler vb.) oluşturmak için, bir veritabanıyla çalışmak üzere elinizde bir metin düzenleyicinin (IDE) bulunması yeterlidir ve belirli bir nesneyle çalışmak için görsel bir araç kullanmaya gerek yoktur. veritabanı türü (MS SQL), Oracle, MySQL, Firebird, ...). Tüm metin önünüzde olduğundan ve örneğin bir dizin veya çizim oluşturmak için sayısal sekmeler arasında gezinmenize gerek olmadığı için bunu yapmak daha kolaydır. Bir veritabanıyla sürekli çalışırken, ek komut dosyaları kullanarak bir nesneyi oluşturmak, değiştirmek ve özellikle yeniden düzenlemek, görsel modda çalışmaya göre daha hızlı yapılabilir. Ayrıca, komut dosyası modunda (tabii ki, gerekli özen gösterilerek), nesneleri adlandırma kurallarını belirlemek ve kontrol etmek daha kolaydır (benim öznel görüşüm). Ayrıca scriptlerin bir veritabanında görünecek şekilde (örneğin test) değiştirildikten sonra manuel olarak değiştirilmesi gerekir, bu şekilde başka bir veritabanına (üretken) aktarılması gerekir.

SQL dili birçok bölüme ayrılmıştır, burada en önemli 2 bölüme bakacağım:
  • DML – Aşağıdaki yapıları barındıran Veri İşleme Dili:
    • SEÇ – veri seçimi
    • INSERT – yeni veri ekleme
    • GÜNCELLEME – verilerin güncellenmesi
    • DELETE – verileri sil
    • BİRLEŞTİRME – zlittya verileri
Çünkü Ben bir uygulayıcıyım, çünkü bu el kitabında bu tür teorilere çok az yer verilecek ve tüm tasarımlar pratik örnekler kullanılarak açıklanacaktır. Dahası, programlamanın ve özellikle SQL'in pratikte ancak kendi başınıza pratik yaparak ve şu veya bu tasarıma sadık kalırsanız ne olacağını anlayarak ustalaşılabileceğine saygı duyuyorum.

Bu araç Adım Adım ilkesine göre oluşturulmuştur. sırayla ve hemen okumak gerekir. Belirli bir komut hakkında daha ayrıntılı bilgi edinmeniz gerekiyorsa, İnternet'te, örneğin MSDN kitaplığında belirli bir arama arayın.

Bu kılavuzu yazdığım sırada, MS SQL Server veritabanının 2014 sürümünü kullanıyordum ve komut dosyalarını düzenlemek için MS SQL Server Management Studio'yu (SSMS) kullanıyordum.

MS SQL Server Management Studio (SSMS) hakkında kısaca

SQL Server Management Studio (SSMS), veritabanı bileşenlerini yapılandırmak, yönetmek ve yönetmek için Microsoft SQL Server'a yönelik bir yardımcı programdır. Bu yardımcı program, bir komut dosyası düzenleyicisi (esas olarak kullanacağımız şey) ve nesnelerle çalışan ve sunucuyu yapılandıran bir grafik programını yüklemek için kullanılır. SQL Server Management Studio'nun ana aracı, sunucu nesnelerini görüntülemenize, gezinmenize ve değiştirmenize olanak tanıyan Object Explorer'dır. Bu metin kısmen Vikipedi'den alınmıştır.

Yeni bir komut dosyası düzenleyicisi oluşturmak için Yeni Sorgu düğmesini kullanın:

Akış veritabanını değiştirmek için görüntülenen listeyi seçebilirsiniz:

Bir şarkı komutunu (veya bir grup komutu) seçmek için onu görüntüleyin ve "Yürüt" düğmesine veya "F5" tuşuna basın. Şu anda editörde tek bir komut olduğu için tüm komutlara göz atmanız gerekiyor, hiçbir şey görmenize gerek yok.

Özel olarak nesneler (tablolar, tablolar, dizinler) oluşturan komut dosyalarını düzenledikten sonra, değişiklik yapmak için, benzer bir grup (örneğin, Tablolar), tablonun kendisi veya içindeki Stov grubu tsi'yi gördükten sonra içerik menüsünden güncellemeleri seçin.

Silahlarımızı buraya yerleştirmek için bilmemiz gereken her şey bunlar. SSMS yardımcı programını kendi başınıza kurmanız önemli değildir.

Biraz teori

İlişkisel bir veritabanı (RDB veya bağlamda sadece bir DB), birbirine bağlı tabloların bir koleksiyonudur. Açıkça söylemek gerekirse veritabanı, verilerin yapılandırılmış bir şekilde saklandığı bir dosyadır.

DBMS – Veritabanı Yönetim Sistemi, yani. Bu, belirli bir veritabanı türüyle (MS SQL, Oracle, MySQL, Firebird, ...) çalışmak için bir dizi araçtır.

Not
Çünkü Günlük yaşamda, ortak dilde sıklıkla "Oracle DB" deriz veya aslında "Oracle DBMS" ile aynı adı taşıyan "Oracle" deriz, daha sonra bu araç bağlamında bazen DB terimi kullanılır. . Bana göre bağlamda ne yapılacağı açık olacaktır.

Tablo puanların toplamını göstermektedir. Stovpts, yani alan veya sütun olarak adlandırılabilirler, tüm bu kelimeler kendilerini ifade ettikleri eşanlamlı olarak kullanılacaktır.

Tablo, RDB'nin ana nesnesidir; RDB'nin tüm verileri, tablonun sütunlarındaki satırlarda saklanır. Satırlar ve kayıtlar da eş anlamlıdır.

Cilt tablosu için isimlerinin yanı sıra daha önceki yıllarda kullanılacak isimler de verilmiştir.
MS SQL'deki nesne adı (tablo adı, tablo adı, dizin adı vb.) maksimum 128 karakter uzunluğunda olabilir.

Bitirmek için– ORACLE veritabanında nesne adları maksimum 30 karakter uzunluğunda olabilir. Bu nedenle, belirli bir veritabanı için, birkaç karakter sınırına sığacak şekilde nesneleri adlandırmak için kendi kurallarınızı geliştirmeniz gerekir.

SQL, veritabanında DBMS biçiminde sorgular oluşturmanıza olanak tanıyan bir dildir. Belirli bir DBMS, SQL dili, belirli bir uygulamaya (kendi lehçesine) sahip olabilir.

DDL ve DML - SQL dilinin bir alt kümesi:

  • Language DDL, veritabanının yapısını oluşturmaya ve değiştirmeye hizmet eder. tabloyu ve bağlantıları oluşturmak/değiştirmek/kaldırmak için.
  • DML dili tablo verilerini değiştirmenize olanak tanır. bu satırlarla. Tablodan veri seçmenize, tabloya yeni veri eklemenize ve ayrıca mevcut verileri güncelleyip silmenize olanak tanır.

Movi SQL'de 2 tür yorum seçebilirsiniz (tek satırlı ve çok satırlı):

Tek satırlık yorum
і

/* zengin yorum */

Vlasna, bu teori için her şey yeterli olacak.

DDL – Veri Tanımlama Dili (verinin kelime açıklaması)

Örneğin, bir insan programcı için gerekli olan ancak aşağıdakileri içermeyen spivorobіtniki hakkındaki verileri içeren tabloya bir göz atalım:

Her tabloda şu isimler yer almaktadır: Personel numarası, PIB, Doğum tarihi, E-posta, Posada, Veddil.

Bu kişilerin cildi, yenide mevcut olan veri türüne göre karakterize edilebilir:

  • Personel numarası – tam sayı
  • PIB – satır
  • Doğum tarihi - tarih
  • E-posta – satır
  • Posada - satır
  • Weddill - sıra
İşin türü, para tasarrufu sağlayabilecek veriler hakkında nasıl konuşulacağının bir özelliğidir.

Yeni başlayanlar için yalnızca MS SQL'de analiz edilen aşağıdaki temel veri türlerini hatırlamak yeterli olacaktır:

Önem MS SQL ile randevular Tanım
Geçiş sırası varchar(N)
і
nvarchar(N)
Ek N sayısını kullanarak, ikincil satır için mümkün olan maksimum satır uzunluğunu girebiliriz. Örneğin "PIB" değer sütununun en fazla 30 karakter tutabileceğini söylemek istiyorsanız türünü nvarchar(30) belirtmeniz gerekir.
Varchar ve nvarchar arasındaki fark, varchar'ın satırları bir karakterin 1 bayt kapladığı ASCII biçiminde kaydetmenize izin vermesi ve nvarchar'ın satırları her karakterin 2 bayt kapladığı Unicode biçiminde kaydetmesine olanak vermesidir.
Varchar türü yalnızca bu alanda Unicode karakterleri saklamanın gerekli olmadığı %100 açık olduğundan kullanılır. Örneğin, e-posta adresini kaydetmek için varchar kullanılabilir, çünkü ASCII karakterlerinden yoksun bırakılmış intikam çağrısı.
Sabit dovzhin sırası karakter(N)
і
nchar(N)
Son satırın satırında, son satırın N karakterden az olması, ardından sağdakinin N boşluk kalana kadar son satıra eklenmesi ve görünüm olarak veritabanında saklanması ile bu tür farklılaşır, Daha sonra. Veritabanında tam olarak N karakter kaplar (burada bir karakter char için 1 bayt ve nchar türü için 2 bayt kaplar). Pratikte bu türün durağan olduğu nadiren bilinir ve her ne kadar kullanılsa da char(1) formatının kullanılması önemlidir. alan bir karakterle temsil ediliyorsa.
Bütün sayı int Bu tür, hem pozitif hem de negatif birden fazla tam sayı kullanmamıza olanak tanır. Sonlandırmak gerekirse (bu bizim için pek geçerli değil), int türünün izin verdiği sayı aralığı -2 147 483 648 ile 2 147 483 647 arasındadır. Tanımlayıcıları belirtmek için kullanılan ana türü belirleyin.
Konuşma numarası batmadan yüzmek Basit bir dille konuşursak, içinde onuncu noktanın (virgül) bulunabileceği sayılar vardır.
tarih tarih Tarihler, Aylar ve Saatler olmak üzere üç depolama alanından oluşan Tarihi kaydetmeniz herkes için gereklidir. Örneğin, 02/15/2014 (15 Şubat 2014). Bu tür “Kabul tarihi”, “Doğum tarihi” vb. sütunları için kullanılabilir. Bu durumlarda tarihin kaydedilmesi bizim için önemliyse veya depo saati bizim için önemli değilse çöpe atılabilir veya görünmüyor olabilir.
Saat zaman Daha fazla zaman kazanmak gerekiyorsa bu tür kullanılabilir. Godinniki, Khvilini, Saniye ve Milisaniye. Örneğin, 17:38:31.3231603
Örneğin, mevcut “Uçuş kalkış saati”.
tarih ve saat tarihsaat Bu tür hem Tarihi hem de Saati aynı anda kaydetmenize olanak tanır. Örneğin, 15.02.2014 17:38:31.323
Örneğin, bu tarih ve saati içerebilir.
Prapor biraz Bu tür, "Yani"/"Hayır" formunun değerini kaydetmek için manuel olarak ayarlanabilir; burada "Yani" 1 olarak ve "Hayır" 0 olarak kaydedilir.

Dolayısıyla, alanın değeri korunmuyorsa belirtilmeyebilir ve bu amaçla NULL anahtar sözcüğü kullanılır.

Uygulamaları test etmek için Test adı altında bir test veritabanı oluşturuyoruz.

Aşağıdaki komutu girerek basit bir veritabanı (ek parametreler girmeden) oluşturabilirsiniz:

VERİTABANI OLUŞTURMA Testi
Şu komutu kullanarak veritabanını silebilirsiniz (bu komuta çok dikkat edin):

DROP DATABASE Testi
Veritabanımıza gitmek için şu komutu kullanabilirsiniz:

KULLANIM Testi
Veya SSMS menü alanındaki listeden Test veritabanını seçin. Çalışırken, çoğunlukla veritabanları arasında geçiş yapmak için bu yöntemi kullanırım.

Artık veri tabanımızda kokulara, vikoryst karakterlere ve Kiril sembollerine benzeyen vikoryst açıklamalarını içeren bir tablo oluşturabiliriz:

CREATE TABLE [Spіvrobіtniki]([Personel numarası] int, [ПИБ] nvarchar(30), [Ulusal tarih] tarih, nvarchar(30), [Posada] nvarchar(30), [Viddil] nvarchar(30))
Bu durumda isimleri kare yayın üzerine yerleştireceğiz […].

Ayrıca veri tabanında, daha fazla açıklık sağlamak amacıyla, tüm nesne adları Latince belirtilmeli ve alan adlarında kullanılmamalıdır. MS SQL'de her kelime büyük harfle başlar, örneğin “Personel Number” alanına PersonnelNumber ismini koyabiliriz. Ayrıca isme sayılar da ekleyebilirsiniz; örneğin TelefonNumarası1.

Not
Bazı DBMS'lerde varsayılan format “PHONE_NUMBER” olarak adlandırılabilir, örneğin bu format ORACLE veritabanında sıklıkla kullanılır. Doğal olarak alan adı belirlenirken DBMS'de aranması gereken anahtar kelimelerle karşılaşmamanız önemlidir.

Bu nedenlerden dolayı kare kollu sözdizimini unutabilir ve [Uzmanlar] tablosuna bakabilirsiniz:

DAMLA TABLO [Spіvrobіtniki]
Örneğin, çalışanların yer aldığı bir tabloya “Çalışanlar” adı verilebilir ve alanlarına şu adlar verilebilir:

  • Kimlik – Personel numarası (Spiritnik Tanımlayıcı)
  • İsim – PIB
  • Doğum günü – İnsanların tarihi
  • E-posta – E-posta
  • Pozisyon – Posada
  • Departman – Widdle
Çoğu zaman kimlik sözcüğü, tanımlayıcı alanını adlandırmak için kullanılır.

Şimdi tablomuzu oluşturalım:

CREATE TABLE Çalışanlar(ID int, Ad nvarchar(30), Doğum günü tarihi, E-posta nvarchar(30), Pozisyon nvarchar(30), Departman nvarchar(30))
Sütunu doldurma koşullarını ayarlamak için NOT NULL seçeneğini seçebilirsiniz.

Mevcut bir tablo için alanlar aşağıdaki komutlar kullanılarak yeniden atanabilir:





























Alanları güncelle ID ALTER TABLE Çalışanlar ALTER COLUMN ID int NOT NULL

Not
Ancak çoğu DBMS için SQL dilinin yabancı kavramı kaybolmuştur (bunu pratik yapma fırsatı bulduğum DBMS'lerden anlayabildiğim gibi). Çeşitli DBMS'lerde DDL'nin önemi temel olarak veri türlerinde yatmaktadır (burada yalnızca adları değil, aynı zamanda uygulanmalarının ayrıntıları da değişebilir), bu nedenle gerçekliğin en spesifik özellikleri de SQL dili talimatlarında biraz farklılık gösterebilir (bunun özü, komutlar aynı ama lehçede çok az değişiklik olabilir maalesef ama standart yok). SQL'in temelleri ile bir DBMS'den diğerine geçebilirsiniz, çünkü Ayrıca yeni DBMS'de komutların nasıl uygulandığına ilişkin ayrıntıları da bilmeniz gerekecektir. Çoğu durumda, basitçe bir benzetme yapmak yeterli olacaktır.

Bir tablo oluşturma CREATE TABLE Employees(ID int, -- ORACLE'de int yazın, number(38)'in eşdeğeridir (yuvarlak) Name nvarchar2(30), -- nvarchar2 ORACLE'de MS SQL'de nvarchar'ın eşdeğeri Doğum tarihi, E-posta n, Pozisyon nvarchar2 (30), Departman nvarchar2(30)); -- Kimlik ve Ad alanlarının güncellenmesi (burada ALTER COLUMN, MODIFY(...) ile değiştirilmiştir) ALTER TABLE Çalışanlar MODIFY(ID int NOT NULL,Name nvarchar2(30) NOT NULL); -- PK ekleme (bu tipte yapı MS SQL'dekine benzer, aşağıda gösterilecektir) ALTER TABLE Employees ADD CONSTRAINT PK_Employees PRIMARY KEY(ID);
ORACLE için, kodlaması veritabanında saklanan ve metin örneğin UTF-8 kodlamasında kaydedilebilen varchar2 tipinin uygulanması açısından bir avantaj vardır. Ek olarak, ORACLE'da alan tamamlama hem bayt hem de karakter cinsinden belirtilebilir; bunun için alan tamamlandıktan sonra belirtilen ek BYTE ve CHAR seçenekleri kullanılır, örneğin:

NAME varchar2(30 BYTE) -- alan kapasitesi en fazla 30 bayttır NAME varchar2(30 CHAR) -- alan kapasitesi en fazla 30 karakterdir
ORACLE'da varchar2(30) türünde basit bir ifade olması durumunda BYTE veya CHAR ifadeleri için hangi seçeneğin kullanılacağı veritabanı kurulumunda saklandığından IDE kurulumunda da belirtilebilir. Bu durumda kolayca kaybolabilirsiniz, çünkü ORACLE seçeneğinde varchar2 türü kullanıldığından (ve bu genellikle örneğin UTF-8 kodlamasının kullanımıyla doğrudur), açıkça CHAR ( yazma isteğim var) ( çünkü karakterlere son satırı dahil etmek daha önemlidir).

Tablo zaten bir tür veri içeriyorsa, komutların başarılı bir şekilde girilmesi için tablonun tüm satırlarında Kimlik ve Ad alanlarının doğru şekilde doldurulması gerekir. Örnekte fiyatı gösteriyoruz ve aşağıdaki komut dosyası kullanılarak oluşturulabilecek ID, Pozisyon ve Departman alanlarındaki veri tablosuna ekliyoruz:

EKLEYİN Çalışanlar(ID,Pozisyon,Departman) DEĞERLER (1000,N"Yönetici",N"Yönetim"), (1001,N"Programcı",N"BT"), (1002,N"Muhasebeci",N"Muhasebe" ), (1003,N"Kıdemli Programcı",N"BT")
Aynı zamanda INSERT komutu da bir hatadır çünkü Ekleme yaparken Name alanının değerini belirtmedik.
Bu veriler ilk tabloda zaten mevcut olsaydı, ALTER TABLE Employees ALTER COLUMN ID int NOT NULL komutu başarıyla tamamlanırdı ve ALTER TABLE Employees ALTER COLUMN Name int NOT NULL komutu iptal hakkında bir bildirim alırdı çünkü Ad alanı NULL (atanmamış) anlamına gelir.

Ad alanına daha fazla değer ekleyin ve verileri tekrar doldurun:


Ayrıca NOT NULL seçeneği yeni bir tablo oluşturmadan hemen önce devre dışı bırakılabilir. CREATE TABLE komutu bağlamında.

Artık ek komutun tablosunu görebiliriz:

DROP TABLE Çalışanları
Şimdi Kimlik ve Ad sütunlarını dolduracak dizeleri içeren bir tablo oluşturalım:

CREATE TABLE Çalışanlar(ID int NOT NULL, Ad nvarchar(30) NOT NULL, Doğum günü tarihi, E-posta nvarchar(30), Pozisyon nvarchar(30), Departman nvarchar(30))
Ayrıca öğenin adından sonra NULL yazabilirsiniz, bu, bu durumda NULL değerlerine (belirtilmemiş) izin verileceği anlamına gelir, ancak bu zorunlu değildir, çünkü bu özellik zihniyete saygıya dayanmaktadır.

Tamamlanması zor bir temel komut oluşturmanız gerekiyorsa aşağıdaki komut sözdizimini kullanın:

ALTER TABLE Çalışanları ALTER COLUMN Ad nvarchar(30) NULL
Ya da sadece:

ALTER TABLE Çalışanları ALTER COLUMN Ad nvarchar(30)
Aynı komutla alan tipini başka bir genel tipe değiştirebilir veya değerini değiştirebiliriz. Örneğin Ad alanını 50 karaktere kadar genişletebiliriz:

ALTER TABLE Çalışanları ALTER COLUMN Ad nvarchar(50)

İlk anahtar

Bir tablo oluştururken, her satır için benzersiz olan küçük, benzersiz bir grup veya öğe kümesinin olması önemlidir; bu benzersiz değerlerle, bir kaydı benzersiz şekilde tanımlayabilirsiniz. Bu değere tablonun birincil anahtarı denir. Çalışanlar tablomuz için bu tür benzersiz değerlere bir kimlik atanabilir (“Çalışanın personel numarası” olarak da adlandırılabilir - bizim durumumuzda bu değer, çalışana özeldir ve tekrarlanamaz).

Aşağıdaki komutu kullanarak mevcut bir tablonun birincil anahtarını oluşturabilirsiniz:

ALTER TABLE Çalışanlar ADD CONSTRAINT PK_Employees PRIMARY KEY(ID)
"PK_Employees", birincil anahtar görevi gören borsanın adıdır. Birincil anahtarı adlandırırken herhangi bir tablo adından sonra “PK_” öneki kullanılır.

İlk anahtar birkaç alandan oluşuyorsa, bu alanların kollarda koma yoluyla birbirine katlanması gerekir:

ALTER TABLE tablo_adı ADD CONSTRAINT satır_adı PRIMARY KEY(field1,field2,…)
MS SQL'de birincil anahtardan önce eklenen tüm alanların NOT NULL karakteristiğine tabi olduğunu lütfen unutmayın.

Ayrıca birincil anahtar, tablo oluşturulduktan hemen sonra belirlenebilir. CREATE TABLE komutu bağlamında. Tabloyu görelim:

DROP TABLE Çalışanları
Ve sonra aşağıdaki sözdizimini oluşturalım:

CREATE TABLE Çalışanlar(ID int NOT NULL, Ad nvarchar(30) NOT NULL, Sanal Saat, E-posta nvarchar(30), Pozisyon nvarchar(30), Departman nvarchar(30), CONSTRAINT PK_Employees Tüm alanların PRIMARY KEY'i, sınır olarak)
Oluşturduktan sonra veri tablosuna girin:

EKLEYİN Çalışanlar(Kimlik, Pozisyon, Departman, Ad) DEĞERLER (1000,N"Yönetici",N"Yönetim",N"Ivanov I.I."), (1001,N"Programcı",N"BT",N" Petrov P.P." ), (1002,N"Muhasebeci",N"Muhasebe",N"Sidoriv S.S."), (1003,N"Kıdemli Programcı",N"BT",N"Andreev A.A.")
Bir tablonun birincil anahtarı bir sütunun değerinden oluşuyorsa aşağıdaki sözdizimini kullanabilirsiniz:

CREATE TABLE Employees(ID int NOT NULL CONSTRAINT PK_Employees PRIMARY KEY, - alanın bir özelliği olarak belirtilir Name nvarchar(30) NOT NULL, Doğum tarihi, Email nvarchar(30), Pozisyon nvarchar(30), Departman n
Aslında ad belirlenebilir veya belirlenmeyebilir; bu durumda ona bir sistem adı atanacaktır (PK__Employee__3214EC278DA42077 sembolü için):

CREATE TABLE Çalışanlar(ID int NOT NULL, Ad nvarchar(30) NOT NULL, Doğum günü tarihi, E-posta nvarchar(30), Pozisyon nvarchar(30), Departman nvarchar(30), PRIMARY KEY(ID))
Abo:

CREATE TABLE Çalışanlar(ID int NOT NULL PRIMARY KEY, Ad nvarchar(30) NOT NULL, Doğum günü tarihi, E-posta nvarchar(30), Pozisyon nvarchar(30), Departman nvarchar(30))
Ancak kalıcı tablolar için öncelikle sınırların adlarını net bir şekilde belirlemenizi öneririm çünkü Açıkça tanımlanmış ve makul adlarla onu değiştirmek daha kolay olacaktır; örneğin, şu türü oluşturabilirsiniz:

ALTER TABLE Çalışanları DROP CONSTRAINT PK_Employees
Bu kadar kısa bir sözdizimi kullanırsanız, sınırların adlarını atamadan, zaman tablosunu (zaman tablosunun adı # ci ## ile başlar) oluşturmadan önce veritabanının zaman tablosunu manuel olarak ayarlayabilirsiniz. zaman çizelgesi oluşturulduktan sonra silinir.

sanırım

İlerleyen takımlara baktık:
  • TABLO OLUŞTUR tablo_adı (alanların ve türlerin yeniden düzenlenmesi, sınır) – akış veritabanında oluşturulan yeni tablo görevi görür;
  • DAMLA TABLO tablo_adı – akış veritabanından ayrı bir tablo görevi görür;
  • TABLOYU DEĞİŞTİR Tablo ismi SÜTUNUN DEĞİŞTİRİLMESİ Im_stovptsya... – stovptsya türünü güncellemeye veya ayarlarını değiştirmeye hizmet eder (örneğin, NULL veya NOT NULL özelliklerini ayarlamak için);
  • TABLOYU DEĞİŞTİR Tablo ismi KISITLAMA EKLE ben_obezhennya BİRİNCİL ANAHTAR(alan1, alan2,...) – birincil anahtarın mevcut tabloya eklenmesi;
  • TABLOYU DEĞİŞTİR Tablo ismi DAMLA KISITLAMASI name_of_obenzheniya – tablodaki obenzheniya türü.

Zaman çizelgeleri hakkında küçük şeyler

MSDN'den virüs. MS SQL Server'da iki tür zaman tablosu vardır: yerel (#) ve genel (##). Yerel zaman tabloları, ilk olarak oluşturuldukları için SQL Server örneğine bağlı oturum sona erene kadar yalnızca oluşturucuları tarafından görülebilir. İstemci bir SQL Server örneğine bağlandıktan sonra yerel saat tabloları otomatik olarak silinir. Genel zaman tabloları, tabloları oluşturulduktan sonra herhangi bir oturumdaki tüm kullanıcılar tarafından görülebilir ve bu tabloya erişen tüm kullanıcılar bir SQL Server örneğine bağlandığında silinir.

Daha sonra zamanlama tabloları tempdb sistem veritabanında oluşturulur. Oluşturulurken ana veritabanı görünmez; diğer durumlarda tablolar orijinal tablolarla aynıdır; ek DROP TABLE komutu kullanılarak silinebilirler. En sık kullanılanları yerel (#) saat tablolarıdır.

Bir zaman tablosu oluşturmak için CREATE TABLE komutunu kullanabilirsiniz:

TABLO OLUŞTUR #Temp(ID int, Ad nvarchar(30))
MS SQL'deki zaman tablosu birincil tabloya benzer olduğundan, DROP TABLE komutunun kendisi kullanılarak da silinebileceği açıktır:

DAMLA TABLO #Sıcaklık

Böylece zaman tablosunun kendisi (birincil tablonun yanı sıra) aynı anda oluşturulabilir ve verilerle doldurulabilir, ardından aşağıdaki sözdizimi takip edilebilir: SELECT ... INTO:

Çalışanlardan #Temp İÇİN ID,Ad SEÇİN

Not
Zaman saati tablolarının farklı DBMS uygulamaları farklılık gösterebilir. Örneğin ORACLE ve Firebird DBMS'de, belirtilen veri kaydetme özellikleri nedeniyle zaman tablosunun yapısı CREATE GLOBAL TEMPORARY TABLE komutu ile önceden belirlenmeli ve daha sonra kullanıcı bunu ana tablonun ortasına oluşturabilir. ve birincil tablodaki gibi ondan çalışın.

Veritabanı normalleştirmesi – alt tablolara (eklemelere) bölme ve bağlantı tanımlama

Mevcut Çalışanlar tablomuzun, Pozisyon ve Departman alanlarına müşterinin ilk önce afla tehdit edecek herhangi bir metni girebilmesiyle pek ilgisi yoktur, dolayısıyla bir çalışan için basitçe "BT" ve başka bir çalışan için girebilirsiniz, örneğin üçüncü BT'deki BT şubesine girin. Sonuç olarak o zamanlar koristuvach'a saygılı olduğum açık değildi. Bir bölümdeki sağlık çalışanları mı, 3 farklı bölümdeki doktorlar mı? Üstelik bu durumda verileri her tipe göre doğru bir şekilde gruplamamız mümkün olmadığından kutanöz bölümde patojen sayısını göstermemiz gerekebilir.

Bir diğer endişe ise bu bilgilerin kaydedilmesi ve çoğaltılması zorunluluğudur. dış görünüm sembolü için, dış bölümün adıyla birlikte dış görünüm sembolünün veritabanında kaydedildiği bir yer olan alt bölümün aynı adı belirtilir.

Üçüncü dezavantaj, bu alanların güncellenmesinin karmaşıklığıdır, çünkü herhangi bir kurulumun adını değiştirmek gerekir, örneğin "Programcı" kurulumunun adını "Genç Programcı" olarak değiştirmek gerekir. Bu durumda Posada'nın “Programcı” ya benzediği tablonun her satırında değişiklik yapmamız gerekecek.

Bu eksiklikleri ve durgunluğu ortadan kaldırmak için buna veritabanının normalleştirilmesi denir - onu alt tablolara ve analog tablolara bölmek. Üç teoriye dalıp normal formların ne olduğunu hayal etmek zorunlu değil, normalleşmenin özünü anlamak yeterli.

"Tesis" ve "Eklendi" göstergelerinden oluşan 2 tablo oluşturalım, onlara Pozisyonlar adını vereceğim, diğeri ise Departmanlar adını vereceğim:

CREATE TABLE Pozisyonlar(ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Positions PRIMARY KEY, Name nvarchar(30) NOT NULL) CREATE TABLE Departmanlar(ID int IDENTITY(1,1) NOT NULL CONSTRAINT PK_Departments PRIMARY ) NOT NULL)
Burada yeni IDENTITY seçeneğini devreye soktuğumuzu unutmayın, böylece ID sütunundaki verilerin 1'den başlayıp 1'den başlayarak otomatik olarak numaralandırılmasından bahsedebiliriz. Yeni kayıtlar eklendiğinde bunlara sırasıyla 1, 2, 3 vb. değerler atanır. Bu tür alanlara otomatik artan denir. Bir tabloya, IDENTITY gücüyle atanmış bir alan bulunabilir ve kural olarak, ancak zorunlu olarak böyle bir alan, bu tablonun birincil anahtarıdır.

Not
Bazı DBMS'lerde doktordan gelen alanların uygulanması sizin tarafınızdan takip edilebilir. Örneğin MySQL'de bu alan ek AUTO_INCREMENT seçeneğiyle atanır. ORACLE ve Firebird'de bu işlevsellik daha önce SEQUENCE kullanılarak elde edilebiliyordu. Bildiğim gibi ORACLE, GENERATED AS IDENTITY seçeneğini ekledi.

Çalışanlar tablosunun Pozisyon ve Departman alanlarındaki kayıtların kesin verilerine göre bu tabloları otomatik olarak dolduralım:

Pozisyonlar tablosunun Ad alanı, tablonun Pozisyon alanından benzersiz değerlerle doldurulur.
Aynı şey Departmanlar tablosu için de yapılabilir:

Departmanları (Adını) EKLEYİN Departmanın BOŞ OLMADIĞI YERDE ÇALIŞANLARDAN AYRI Departmanı SEÇİN
Pozisyonlar ve Departmanlar tablosunu açarsak ID alanına numaralandırma değerini rahatlıkla girebiliriz:

Konumlardan * SEÇİN

Departmanlardan * SEÇİN

Bu tablolar artık iniş ve eklemelerin atanmasında danışman rolünü oynuyor. Artık Posad ve Viddiliv ID'ye dönebiliriz. Öncelikle bu tanımlayıcıları kaydetmek için Çalışanlar tablosunda yeni alanlar oluşturalım:

ID için eklenebilir alan ALTER TABLE Çalışanları ADD PositionID int -- ID için eklenebilir alan ALTER TABLE Çalışanları ADD DepartmanKimliği int
Bu tür int'nin sorumlusu posta alanlarının türüdür.

Ayrıca, tek bir komut kullanarak tabloya çok sayıda alan ekleyebilirsiniz ve bu alanlara şu şekilde başvurabilirsiniz:

ALTER TABLE Çalışanlar ADD PositionID int, DepartmanID int
Şimdi bu alanlar için mesajı (güçlü değişim - FOREIGN KEY) yazacağız, böylece kullanıcı belgedeki alan verilerini, değerlerini ve diğer ID değerlerini yazamayacaktır.

ALTER TABLE Çalışanlar EKLE CONSTRAINT FK_Employees_PositionID YABANCI ANAHTAR(PozisyonID) REFERANSLAR Pozisyonlar(ID)
Aynı şey başka bir alan için de yapılabilir:

ALTER TABLE Çalışanlar EKLE CONSTRAINT FK_Employees_DepartmentID YABANCI ANAHTAR(DepartmanID) REFERANSLAR Departmanlar(ID)
Artık kullanıcılar bu alana giriş sağlayıcının kimlik değerini girebilirler. Açıkçası, yeni bir giriş veya gönderi kaydetmek için yetkili acenteye yeni bir giriş eklemekten sorumlu olacağız. Çünkü ekilen ve eklenenler artık editörlerde tek bir örnekte saklanıyor, daha sonra adını değiştirmek için bunları editörde değiştirmeniz yeterli.

Olası değişimin adı diğer bir deyişle “FK_” önekinden oluşur, ardından tablonun adı ve ok işaretinden sonra ek tablonun tanımlayıcısını ifade eden alan adına gider.

Tanımlayıcı (ID), yalnızca bağlantılar için kullanılan ve orada hangi değerlerin saklandığı dahili değerlere bağlıdır; çoğu durumda, tabloyla çalışırken görünen sayı dizisinin kaderini kaydetmenize kesinlikle gerek yoktur. örneğin danışmanın girişlerini gördükten sonra.

ALTER TABLE table CONSTRAINT ADD tablo_adı YABANCI ANAHTAR(alan1,alan2,…) REFERANSLAR table_advisor(alan1,alan2,…)
Bu durumda "veri_tablosu" tablosunda görünümlerin birincil anahtarı birkaç alanın (alan1, alan2, ...) birleşimidir.

Artık PositionID ve DepartmanID alanlarını yüklenicilerden gelen ID değerleriyle güncelledik. UPDATE komutunu kullanarak bu DML'ye hızla erişin:

GÜNCELLEME e SET PositionID=(Pozisyonlardan Kimliği SEÇİN WHERE Adı=e.Konum), Departman Kimliği=(Departmanlardan Kimliği SEÇİN WHERE Adı=e.Departman) Çalışanlardan e
Galip ne olduğunu merak ederek sormaya başladı:

Çalışanlardan * SEÇİN

PozisyonID ve Departman Kimliği alanlarının tamamı belirli siparişlerle doldurulmuştur ve Çalışanlar tablosundaki Pozisyon ve Departman alanlarındaki talep tanımlayıcı türleri artık mevcut değildir, bu alanları silebilirsiniz:

ALTER TABLE Çalışanları DROP COLUMN Pozisyonu, Departmanı
Artık tablomuz şuna benziyor:

Çalışanlardan * SEÇİN

İD İsim Doğum günü E-posta Pozisyon Kimliği Departman Kimliği
1000 İvanov I.I. HÜKÜMSÜZ HÜKÜMSÜZ 2 1
1001 Petrov P.P. HÜKÜMSÜZ HÜKÜMSÜZ 3 3
1002 Sidorov S.S. HÜKÜMSÜZ HÜKÜMSÜZ 1 2
1003 Andreev A.A. HÜKÜMSÜZ HÜKÜMSÜZ 4 3

Tobto. Sonuç olarak dünya çapındaki bilgileri kaydetmeye başladık. Artık, ekim ve bölünme sayılarının ardında, ekteki tablolarda bunların adlarını ve vikor değerlerini açık bir şekilde tespit edebiliriz:

SELECT e.ID,e.Ad,p.Adı PozisyonAdı,d.Adı DepartmanAdı FROM Çalışanlardan e LEFT JOIN Departmanlar d ON d.ID=e.DepartmanID LEFT JOIN Pozisyonlar p ON p.ID=e.PositionID

Object Inspector'da bu tablo için oluşturulan tüm nesneleri görüntüleyebiliriz. Bu nesnelerle çeşitli işlemler gerçekleştirebilirsiniz; örneğin nesneleri yeniden adlandırın veya silin.

Tablonun kendi başına yüklenebileceğini de unutmamak gerekir. Hiç çaba harcamadan yinelemeli olarak oluşturabilirsiniz. Örneğin uyduların bulunduğu tablomuza bu uydunun sipariş edildiği uyduyu belirten bir Field ManagerID daha ekliyoruz. Oluşturulan alan:

ALTER TABLE Çalışanlar ADD ManagerID int
Değerine NULL izin verilen bir alan için alan boş olacaktır, çünkü örneğin spyvrobitnik'in üzerinde mevcut alan yoktur.

Şimdi Çalışanlar tablosunda FOREIGN KEY oluşturalım:

ALTER TABLE Çalışanlar ADD CONSTRAINT FK_Employees_ManagerID YABANCI ANAHTAR (ManagerID) REFERANSLAR Çalışanlar(ID)
Şimdi bir diyagram oluşturalım ve tablolarımız arasındaki bağlantıların nasıl göründüğüne bakalım:

Sonuç olarak, aşağıdaki resmi oluşturmaktan sorumluyuz (Çalışanlar tablosu, Pozisyonlar ve Departmanlar tablolarına bağlıdır ve kendisi için de geçerlidir):

Son olarak, gönderme anahtarlarının ON DELETE CASCADE ve ON UPDATE CASCADE gibi ek seçenekler içerebileceğini, yani silinmiş veya güncellenmiş bir kayıt ana tabloya gönderildiğinde ne olacağını söylemek önemlidir. Bu seçenekler belirtilmezse, başka bir tablodan gönderilen kayıt için Expert tablosundaki ID'yi değiştiremeyiz ve böyle bir kaydı, yapmaya çalıştığımız tüm satırları görene kadar Advisor'dan silemeyiz. bu giriş veya Peki, bu satırlarda mesaj daha önemlidir.

Örneğin, FK_Employees_DepartmentID için ON DELETE CASCADE seçeneğini kullanarak tabloyu yeniden oluşturabiliriz:

DROP TABLE Çalışanları CREATE TABLE Çalışanları(ID int NULL DEĞİL, Ad nvarchar(30), Doğum günü tarihi, E-posta nvarchar(30), PositionID int, DepartmanKimliği int, ManagerID int, CONSTRAINT PK_Employees PRIMARYKEY IGN KEY (DepartmentID ) REFERANSLAR Departmanlar(ID) AÇIK SİL KADEMELİ, CONSTRAINT FK_Employees_PositionID YABANCI ANAHTAR(PozisyonID) REFERANSLAR Pozisyonlar(ID), CONSTRAINT FK_Employees_ManagerID YABANCI ANAHTAR (YöneticiKimliği) REFERANSLAR ,PositionID,DepartmentID,ManagerID )VALUES (1000,N"Ivanov I.I.",19550 219", 2, 1, NULL), (1001,N"Petrov P.P.","19831203",3,3,1003), (1002 ,N"Sidorov S.S.","19760607",1,2,1000) , (1003,N"Andreev A.A. ","19820417",4,3,1000)
Departmanlar tablosunda ID 3'lü girişi görebiliriz:

Departmanları SİL NEREDE ID=3
Çalışanlar tablosundaki verilere bakın:

Çalışanlardan * SEÇİN

İD İsim Doğum günü E-posta Pozisyon Kimliği Departman Kimliği Yönetici Kimliği
1000 İvanov I.I. 1955-02-19 HÜKÜMSÜZ 2 1 HÜKÜMSÜZ
1002 Sidorov S.S. 1976-06-07 HÜKÜMSÜZ 1 2 1000

Nitekim Çalışanlar tablosunun 3. bölümündeki veriler kendiliğinden silinmiştir.

ON UPDATE CASCADE seçeneği, tarayıcıdaki kimlik değerinin güncellenmesi dışında benzer şekilde davranır. Örneğin, Veri Yöneticisinde bir tesisin kimliğini değiştirirsek, bu durumda Çalışanlar tablosundaki Departman Kimliği, Veri Defterinde ayarladığımız yeni kimlik değerine güncellenecektir. Bu vipadkudaki bira bunu gösteremezsin çünkü Departmanlar tablosundaki Kimlik sütununda, geçerli girişi reddetmemize izin vermeyen KİMLİK seçeneği bulunur (bölüm 3'ün kimliğini 30 olarak değiştirin):

GÜNCELLEME Bölümleri SET ID=30 WHERE ID=3
Lütfen bu iki seçeneğin özünü anlayın: KASKADIMI SİL ve GÜNCELLEME KASKADINDA. Bu seçenekleri çok nadiren veriyorum ve zorunlu bir takasta nasıl belirteceğinizi dikkatlice düşünmenizi tavsiye ediyorum çünkü Danışman masasından bağımsız bir giriş yapmazsanız bu durum büyük sorunlara yol açabilir ve Lanzug tepkisi yaratabilir.

Açıkçası bölüm 3:

IDENTITY değeri ekleme/değiştirme izni var SET IDENTITY_INSERT Departmanlar ON INSERT Departmanlar(ID,Ad) VALUES(3,N"IT") -- IDENTITY değerinin eklenmesi/değiştirilmesi engelleniyor SET
Ek TRUNCATE TABLE komutunu kullanarak Çalışanlar tablosunu tamamen temizleyelim:

TRUNCATE TABLE Çalışanları
Ve verileri tekrar vikorista'ya ve önceki INSERT komutuna tekrar ekleyeceğim:

EKLEYİN Çalışanları (ID,Ad,Doğum Günü,PozisyonID,DepartmanKimliği,YöneticiKimliği)VALUES (1000,N"Ivanov I.I.","19550219",2,1,NULL), (1001,N"Petrov P.P." ,"19831203",3 ,3,1003), (1002,N"Sidoriv S.S.","19760607",1,2,1000), (1003,N"Andreev A.A.","19820417" ,4,3,1000)

sanırım

Şu anda birkaç DDL komutuna ilişkin bilgimize daha ulaştık:
  • KİMLİK alanını bir alana eklemek – bu alanı tablo için bir alan (klinik alan) olarak otomatik olarak oluşturmanıza olanak tanır;
  • TABLOYU DEĞİŞTİR Tablo ismi EKLEMEK change_fields_with_characteristics – tabloya yeni alanlar eklemenizi sağlar;
  • TABLOYU DEĞİŞTİR Tablo ismi BIRAKMA SÜTUNU field_list – alanları tablodan silmenizi sağlar;
  • TABLOYU DEĞİŞTİR Tablo ismi KISITLAMA EKLE ben_obezhennya YABANCI ANAHTAR(tarlalar) REFERANSLAR table_auditor (alanlar) – bir tablo ile danışman tablosu arasındaki bağlantıları tanımlamanıza olanak tanır.

Diğer sınırlar – EŞSİZ, VARSAYILAN, KONTROL

UNIQUE sınırlamasına ek olarak, belirli bir alandaki veya bir alan kümesindeki dış görünüm satırının değerinin benzersiz olabileceğini söyleyebiliriz. Çalışanlar tablosu satırında, satırları E-posta alanına da yerleştirebilirsiniz. Henüz girilmediğinden lütfen önce E-posta değerlerini unutmayın:

GÜNCELLEME Çalışanlar SET E-postası = " [e-posta korumalı]" NEREDE ID=1000 GÜNCELLEME Çalışanları SET Email=" [e-posta korumalı]" WHERE ID=1001 GÜNCELLEME Çalışanları AYAR E-postası = " [e-posta korumalı]" WHERE ID=1002 GÜNCELLEME Çalışanları AYAR E-postası = " [e-posta korumalı] NEREDE ID=1003
Ve şimdi bu sınır benzersizliği alanını kaplayabilirsiniz:

ALTER TABLE Çalışanlar ADD CONSTRAINT UQ_Employees_Email UNIQUE(E-posta)
Artık müşteri birçok spivorotenik için aynı E-Postayı giremez.

Benzersizlik değişimi bu şekilde adlandırılır - önce "UQ_" öneki gelir, ardından tablonun adı gelir ve vurgu işaretinden sonra bu değişimin üzerine bindirilen alanın adı gelir.

Görünüşe göre, tablonun satırları arasında benzersiz olan alanların bir kombinasyonu varsa, bunları şu şekilde geçersiz kılıyoruz:

ALTER TABLE tablo_adı ADD CONSTRAINT bölge_adı UNIQUE(field1,field2,…)
DEFAULT alanına ek olarak kutuya girilecek alanlar için değerleri de belirtebiliriz, böylece yeni bir kayıt eklenirken bu alan INSERT komutunun alanları listesinden yeniden çizilmeyecektir. Bu kenarlık, tablo oluşturulduğunda merkezsiz olarak yerleştirilebilir.

Çalışanlar tablosuna yeni bir “Alınma Tarihi” alanı ekleyip HireDate adını verelim ve bu alanın arkasındaki anlamın tam tarih olacağını söyleyelim:

ALTER TABLE Çalışanlar ADD HireDate tarihi NOT NULL DEFAULT SYSDATETIME()
Veya HireDate yan tümcesi zaten mevcut olduğundan aşağıdaki sözdizimini değiştirebilirsiniz:

ALTER TABLE Çalışanları HireDate İÇİN VARSAYILAN SYSDATETIME() EKLEYİN
Burada borsanın adını belirtmeden, çünkü VARSAYILAN noktada, bunun o kadar da kritik olmadığına dair bir fikrim vardı. Nazik bir şekilde çalışmak istiyorsanız, o zaman sanırım tembelliğe ve işleri normal bir şekilde ayarlamanıza gerek yok. Şu şekilde deneyin:

ALTER TABLE Çalışanları ADD CONSTRAINT DF_Employees_HireDate DEFAULT SYSDATETIME() FOR HireDate
Bu öğe daha önce mevcut değilse HireDate alanındaki her girişe eklendiğinde tam tarih değeri eklenecektir.

Yeni bir giriş eklerken, kesin tarih de otomatik olarak eklenecektir, çünkü açıkça ayarlanmamıştır. stovpt listesine dahil değil. HireDate alanını ve kattığı değeri belirtmeden uygulama üzerinde fiyatı göstereceğiz:

INSERT Çalışan(Kimlik,Ad,E-posta)VALUES(1004,N"Sergeev S.S.", [e-posta korumalı]")
Ne olduğunu görelim:

Çalışanlardan * SEÇİN

İD İsim Doğum günü E-posta Pozisyon Kimliği Departman Kimliği Yönetici Kimliği İşe AlmaTarihi
1000 İvanov I.I. 1955-02-19 [e-posta korumalı] 2 1 HÜKÜMSÜZ 2015-04-08
1001 Petrov P.P. 1983-12-03 [e-posta korumalı] 3 4 1003 2015-04-08
1002 Sidorov S.S. 1976-06-07 [e-posta korumalı] 1 2 1000 2015-04-08
1003 Andreev A.A. 1982-04-17 [e-posta korumalı] 4 3 1000 2015-04-08
1004 Sergeyev S.S. HÜKÜMSÜZ [e-posta korumalı] HÜKÜMSÜZ HÜKÜMSÜZ HÜKÜMSÜZ 2015-04-08

CHECK denetleyicisi, alana eklenen değerin kontrol edilmesi gerektiğinde kullanılır. Örneğin çalışan tanımlayıcı (ID) olan personel numarası alanına veri ekliyoruz. Bu amaçla suçlu annenin personel sayısının 1000'den 1999'a kadar olduğunu varsayalım:

ALTER TABLE Çalışanlar ADD CONSTRAINT CK_Employees_ID CHECK(ID 1000 VE 1999 ARASINDA)
Sınır bu şekilde adlandırılır, önce “CK_” öneki gelir, ardından tablonun adı ve sınırın uygulandığı alanın adı gelir.

Değişimin çalışması için doğrulama için geçersiz bir kayıt eklemeyi deneyelim (onaylamayı iptal edebiliriz):

Çalışanları (Kimlik, E-posta) VALUES (2000) GİRİN," [e-posta korumalı]")
Ve şimdi 1500'de girilen değerleri değiştirebiliriz ve kaydın eklenmesi için bunları değiştirebiliriz:

Çalışanları (Kimlik, E-posta) DEĞERLERİNİ (1500) GİRİN," [e-posta korumalı]")
Ayrıca bir isim girmeden UNIQUE ve CHECK değişimini de oluşturabilirsiniz:

ALTER TABLE Çalışanları EŞSİZ EKLE (E-posta) ALTER TABLE Çalışanları KONTROL EKLE (ID 1000 İLE 1999 ARASINDA)
Bu aynı zamanda iyi bir uygulamadır ve sınırların adlarını net bir şekilde ortaya koymak daha iyidir, çünkü Neyin daha önemli olduğuna inmek için konuyu açmanız ve ne anlama geldiğini merak etmeniz gerekir.

İyi bir bilgi birikimiyle, borsayla ilgili birçok bilgiyi sizin adınıza anında bulabilirsiniz.

Ve tabii ki tüm bu değişiklikler, eğer henüz mevcut değilse, tablo oluşturulduğunda hemen oluşturulabilir. Tabloyu görelim:

DROP TABLE Çalışanları
Ve tek bir CREATE TABLE komutu oluşturularak düzenlenebilir:

CREATE TABLE Çalışanlar(ID int NULL DEĞİL, Ad nvarchar(30), Doğum günü tarihi, E-posta nvarchar(30), PositionID int, DepartmanID int, HireDate date NOT NULL DEFAULT SYSDATETIME(), -- DEFAULT i z (ID), CONSTRAINT FK_Employees_DepartmentID için YABANCI ANAHTAR(DepartmanKimliği) REFERANSLAR Departmanlar(ID), CONSTRAINT FK_Employees_PositionID YABANCI ANAHTAR(PozisyonID) REFERANSLAR Pozisyonlar(ID), CONSTRAINT UQ_ yees_ID KONTROLÜ (ID 1000 VE 1999 ARASI))

EKLEYİN Çalışanları (Kimlik, İsim, Doğum Günü, E-posta, Pozisyon Kimliği, Departman Kimliği)VALUES (1000,N"Ivanov I.I.", "19550219", [e-posta korumalı]",2,1), (1001,N"Petrov P.P.","19831203"," [e-posta korumalı]",3,3), (1002,N"Sidorov S.S.",19760607, [e-posta korumalı]",1,2), (1003,N"Andreev A.A.","19820417"," [e-posta korumalı]",4,3)

PRIMARY KEY ve UNIQUE ara bağlantıları oluşturulduğunda oluşturulan endeksler hakkında küçük şeyler

Ekran görüntüsünde görebileceğiniz gibi PRIMARY KEY ve UNIQUE sınırları oluşturulduğunda aynı adlara sahip indeksler (PK_Employees ve UQ_Employees_Email) otomatik olarak oluşturuldu. Daha sonra birincil anahtarın indeksi CLUSTERED olarak, indeks çözümü ise NONCLUSTERED olarak yaratılır. Varto, küme indeksi kavramının tüm DBMS'lerde olmadığını söyledi. Bir tablonun yalnızca bir CLUSTERED dizini olabilir. CLUSTERED - tablo kayıtlarının bu indeksin arkasına sıralanacağı anlamına gelir, yani bu indeksin tablodaki tüm verilere doğrudan erişimi olduğunu söyleyebilirsiniz. Bu tablonun baş indeksidir. Daha açık bir ifadeyle indeks masaya vidalanmıştır. Küme dizini, yalnızca ezberlenirken sorguların optimize edilmesine yardımcı olabilecek daha da önemli bir işlevdir. Söylemek istediğimiz şu ki, eğer küme dizini birincil anahtarda değil de başka bir dizin için oluşturulmuşsa, o zaman birincil anahtar oluşturulduğunda NONCLUSTERED seçeneğini belirtmeniz gerekir:

ALTER TABLE tablo_adı ADD CONSTRAINT satır_adı PRIMARY KEY KÜMELENMEMİŞ(alan1,alan2,…)
Örneğin, PK_Employees ara bağlantı dizini kümelenmemiştir ve UQ_Employees_Email ara bağlantı dizini kümelenmiştir. Değişim verilerini zaten gördük:

ALTER TABLE Çalışanları DROP CONSTRAINT PK_Employees ALTER TABLE Çalışanları DROP CONSTRAINT UQ_Employees_Email
Artık bunları KÜMELENMİŞ ve KÜMELENMEMİŞ seçenekleriyle oluşturabiliriz:

ALTER TABLE Çalışanları ADD CONSTRAINT PK_Employees PRIMARY KEY NONCLUSTERED (ID) ALTER TABLE Çalışanları ADD CONSTRAINT UQ_Employees_Email UNIQUE CLUSTERED (E-posta)
Artık Çalışanlar tablosundan seçim yaptıktan sonra, kayıtların UQ_Employees_Email kümelenmiş dizininin arkasında sıralandığını görüyoruz:

Çalışanlardan * SEÇİN

İD İsim Doğum günü E-posta Pozisyon Kimliği Departman Kimliği İşe AlmaTarihi
1003 Andreev A.A. 1982-04-17 [e-posta korumalı] 4 3 2015-04-08
1000 İvanov I.I. 1955-02-19 [e-posta korumalı] 2 1 2015-04-08
1001 Petrov P.P. 1983-12-03 [e-posta korumalı] 3 3 2015-04-08
1002 Sidorov S.S. 1976-06-07 [e-posta korumalı] 1 2 2015-04-08

Önceden küme dizini PK_Employees diziniyse standart kayıtlar kimlik alanına göre sıralanıyordu.

Ancak bu durumda küme endeksinin özünü gösteren yalnızca bir dipçik vardır, çünkü Çoğu zaman Çalışanlar tablosunun önünde ID alanından yazmaya çalışacaksınız, bazı durumlarda danışman rolünde de olabilirsiniz.

Danışmanlar için, istek küme indeksinin birincil anahtar olduğundan emin olun, çünkü Sorulduğunda, genellikle bir adın (Posad, Veddilu) kaldırılması için bir sağlayıcı kimliği isteriz. Burada yazdığım şeyin, küme indeksinin tablonun satırlarına doğrudan erişiminin olduğu ve bunun da herhangi bir öğenin değerlerini ek maliyet olmadan kaldırabileceğimiz anlamına geldiği açıktır.

Küme dizini, örneklemenin en yaygın olduğu alanlara kolaylıkla ayarlanabilir.

Bazen tablolarda, bir yedek alan tarafından bir anahtar oluşturulur; bunun ekseni, alt dizin için KÜMELENMİŞ dizin seçeneğini kaydetmek ve bir yedek birincil anahtar oluştururken KÜMELENMEMİŞ seçeneğini belirtmektir.

sanırım

Bu aşamada “ALTER TABLE tablo_adı ADD CONSTRAINT tablo_adı...” gibi bir komutla oluşturulan tüm sınır türlerini en basit haliyle öğrendik:
  • BİRİNCİL ANAHTAR- birincil anahtar;
  • YABANCI ANAHTAR- Bağlantıların ayarlanması ve veri bütünlüğünün kontrolü;
  • EŞSİZ- benzersizlik yaratmanıza olanak tanır;
  • KONTROL ETMEK- girilen verilerin doğruluğunu sağlamanıza olanak tanır;
  • VARSAYILAN– hesaplamalar için değerleri ayarlamanıza olanak tanır;
  • Ayrıca vikory komutu kullanılarak tüm değişimlerin silinebileceğini unutmayın. TABLOYU DEĞİŞTİR Tablo ismi DAMLA KISITLAMASI"Yoksunum."
Biz de bu endekslerle sık sık karşılaştık ve kümelenme kavramını geliştirdik ( KÜMELENMİŞ) küme olmayan ( KÜMELENMEMİŞ) indeksi.

Bağımsız endekslerin oluşturulması

Bağımsızlık bağlamında PRIMARY KEY ile UNIQUE arasında ayrım yapmak için oluşturulan indeksler burada dikkate alınır.

Bir alan veya alanlar üzerindeki dizinler, hücum komutu kullanılarak oluşturulabilir:

CREATE INDEX IDX_Employees_Name ON Çalışanlar(Ad)
Burada ayrıca KÜMELENMİŞ, KÜMELENMEMİŞ, BENZERSİZ seçeneklerini belirtebilir ve ayrıca cilt kenar boşluğunun ASC (yıkama için) veya DESC sıralamasını da doğrudan belirleyebilirsiniz:

BENZERSİZ KÜMELENMEMİŞ DİZİN OLUŞTURUN UQ_Employees_EmailDesc ON Çalışanlar(E-posta DESC)
Kümelenmemiş bir dizin oluşturulduğunda, KÜMELENMEMİŞ seçeneği etkinleştirilebilir, çünkü Kurallara saygıdan dolayı burada sadece komut için KÜMELENMİŞ ve KÜMELENMEMİŞ seçeneğinin konumunu belirtmek için gösterilmiştir.

Aşağıdaki komutu kullanarak dizini silebilirsiniz:

DROP INDEX IDX_Employees_Name ON Çalışanlar
CREATE TABLE komutu bağlamında indeksleme gibi basit indeksler oluşturulabilir.

Örneğin şu tabloyu görüyorum:

DROP TABLE Çalışanları
Ve tek bir CREATE TABLE komutuyla yalnızca sınırlar ve dizinler oluşturularak yeniden yapılandırılabilir:

CREATE TABLE Çalışanlar(ID int NULL DEĞİL, Ad nvarchar(30), Doğum günü tarihi, E-posta nvarchar(30), PositionID int, DepartmanID int, HireDate date NOT NULL CONSTRAINT DF_Employees_HireDATE DEFAULT es PRIMARY KEY (ID ), CONSTRAINT FK_Employees_DepartmentID YABANCI ANAHTAR(DepartmentID) ) Referans departmanları (ID), Kısıtlama fk_employees_positionid Yabancı Anahtar (Pozisyon Kimliği) Loyees (ID), Kısıtlama UQ_emPloyees_email Benzersiz, Kısıtlama CK_EMPLY EES_ID Kontrolü (1000 ile 1999 Arasındaki Kimlik), Dizin IDX_EMPLOYEES_NAME (NAME))
Sonunda spivrobitniklerimizin tablosuna ekleyelim:

EKLEYİN Çalışanları (Kimlik, İsim, Doğum Günü, E-posta, Pozisyon Kimliği, Departman Kimliği, Yönetici Kimliği)VALUES (1000,N"Ivanov I.I.", "19550219" [e-posta korumalı]",2,1,NULL), (1001,N"Petrov P.P.","19831203"," [e-posta korumalı]",3,3,1003), (1002,N"Sidoriv S.S.","19760607"," [e-posta korumalı]",1,2,1000), (1003,N"Andreev A.A.","19820417"," [e-posta korumalı]",4,3,1000)
Kümelenmemiş bir dizindeki değerleri INCLUDE'a ekleyerek dahil edebileceğinizi de unutmamak gerekir. Tobto. Bu bölümde INCLUDE indeksi öngörülebilir bir küme indeksidir ancak artık indeks tabloya eklenmemiştir ancak gerekli değerler indekse eklenmiştir. Görünüşe göre, bu tür dizinler SELECT sorgularının üretkenliğini bile artırabilir, çünkü tüm alan seçimleri dizindedir, bu durumda tabloyu genişletmeye gerek kalmayabilir. Alece doğal olarak endeksi geliştiriyor çünkü Listelenen alanların değerleri dizinde çoğaltılır.

MSDN'den virüs. Dizin oluşturmak için orijinal komut sözdizimi

OLUŞTURUN [EŞSİZ] [KÜMELENMİŞ | NONCLUSTERED] INDEX dizin_adı AÇIK (sütun [ ASC | DESC ] [ ,...n ]) [ INCLUDE (sütun_adı [ ,...n ]) ]

sanırım

Dizinler veri seçiminin (SELECT) hızını artırabilir ve dizinler tablo verilerinin değiştirilme hızını değiştirebilir çünkü Sistemin dış görünümü değiştirildikten sonra belirli bir tabloya ilişkin tüm dizinlerin sıfırlanması gerekecektir.

Verilerin seçimi ve değiştirilmesinde verimliliğin doğru seviyede olması için en uygun çözümü, yani altın ortalamayı bulmak önemlidir. Dizin oluşturma stratejisi ve bunlardan kaç tanesi, tablodaki verilerin ne sıklıkta değiştiği gibi çeşitli faktörlere bağlı olabilir.

Visnovok shodo DDL

Tahmin edebileceğiniz gibi DDL dili ilk bakışta düşündüğünüz kadar karmaşık değil. Burada neredeyse tüm ana yapıları üç tabloyla birlikte çalışarak göstermeyi başardım.

Golovne - özü anlayın ve uygulamaya karar verin.

SQL adı verilen bu harika dile hakim olmanızda iyi şanslar.

"SELECT * WHERE a = b FROM c" veya "SELECT WHERE a = b FROM c ON *" seçeneğine mi ihtiyacınız var?

Eğer bana benziyorsanız, bir dakika bekleyin: SQL ilk bakışta kolay görünen şeylerden biri değil (İngilizce olarak okunabilir!), Ancak yine de doğru sözdizimini bulmak için Google'da basit bir arama yapmam gerekiyor. .


Sonra birleşmeler, toplanmalar, içkiler ve her türlü saçmalık başlıyor. Nachebto'nun durumu şöyle:


Üyeler.adını SEÇİN || " " || Members.soyadı AS "Tam Ad" FROM ödünç almalar INNER JOIN üyeler ON Members.memberid=borrowings.memberid INNER JOIN kitaplar ON kitaplar.bookid=borrowings.bookid NEREDE borçlanmalar.bookid IN(kitaplardan kitap kimliğini seç ) kitaplardan)) üyelere göre GRUP .ad, üyeler.soyadı;

Bue! İster acemi ister orta düzey bir geliştirici olsun, ilk önce SQL öğrenmekten suçlu olan kişi çok kötü. Ale, her şey o kadar da kötü değil.


Sezgisel olarak açık ve bu yardımcının yardımıyla, yeni başlayanlar için SQL'e giriş eşiğini düşürmeye ve ardından onları SQL'e yeni bir bakış atmaya teşvik etmeye hazırım.


SQL sözdiziminin farklı veritabanlarında farklılık göstermemesine rağmen sorgu istatistikleri PostgreSQL'e dayanmaktadır. Bu uygulamalar MySQL ve diğer veritabanlarıyla çalışır.

1. Üç büyüleyici kelime

SQL'de SELECT, FROM ve WHERE gibi herkes için yararlı olan birçok anahtar kelime vardır. Biraz sonra bu üç kelimenin tabana giden yönlendirmelerin en temel yönleri olduğunu, daha karmaşık olan diğerlerinin ise onların üzerindeki fazlalıklar olduğunu fark edeceksiniz.

2. Üssümüz

Veritabanına bir göz atalım, böylece bu istatistikleri bir temel olarak kullanabiliriz:







Kitaplardan ve insanlardan oluşan bir kütüphanemiz var. Popüler kitapların ortaya çıkması için özel bir masa da bulunmaktadır.

  • "Kitaplar" tablosu kitabın başlığı, yazarı, yayın tarihi ve bulunabilirliği hakkındaki bilgileri saklar. Basit.
  • "Üyeler" tablosunda kütüphaneye kayıt olan tüm kişilerin isim ve rumuzları yer almaktadır.
  • "Ödünç alınanlar" tablosu, kütüphaneden alınan kitaplarla ilgili bilgileri saklar. Bookid sütunu "kitaplar" tablosunda alınan kitabın kimliğine, üye kimliği sütunu ise "üyeler" tablosundaki kişi türüne gider. Ayrıca kitabın döndürülmesi gereken tarihi de görebiliriz.

3. Beni affet

Basit bir soruyla başlayalım: ihtiyacımız var isimlerі Kimlikler(id) yazar “Dan Brown” tarafından yazılan tüm kitapların


Şöyle sorulacak:


Kitap kimliğini "id" OLARAK SEÇİN, kitapların başlığı WHERE Author="Dan Brown";

Ve sonuç şöyle:


İD başlık
2 Kayıp Sembol
4 Cehennem

Bitirmek kolaydır. Ne olduğunu anlamak için bu soruya bakalım.

3.1 FROM - yıldızlar veri alır

Bu açık görünebilir, ancak FROM daha sonra bağlantılara ve alt uygulamalara geçtiğimizde daha da önemli olacaktır.


FROM sorgulanması gereken tabloyu belirtir. Bu zaten normal bir tablo (bir uygulamada olduğu gibi) veya bir bağlantı veya alt uygulama aracılığıyla oluşturulmuş bir tablo olabilir.

3.2 NEREDE – hangi veriler gösteriliyor

WHERE sadece filtre görevi görüyor satırlar Seni görmek istiyoruz. Bizim durumumuzda yazar sütunundaki değerlerden (Dan Brown) daha fazla satır istiyoruz.

3.3 SELECT – veriler nasıl gösterilir?

Şimdi, ihtiyacımız olan tablodaki tüm gerekli sütunlara sahipsek, verilerin kendisini nasıl göstereceğimizi bulmamız gerekir. Koleksiyonumuz yalnızca kitapların adlarını ve tanımlayıcılarını ve ayrıca aynı bilgileri gerektirir. Oberemo daha fazla yardım için SEÇİN. Aynı zamanda AS sütununu yeniden adlandırabilirsiniz.


Sorgunun tamamı aşağıdaki basit diyagramlar kullanılarak görselleştirilebilir:


4. Z'єdnannya (joyni)

Şimdi Dan Brown'un kütüphaneden alınan tüm kitaplarının adlarını (benzersiz olması gerekmiyor) ve bu kitapların ne zaman çevrilmesi gerektiğini almak istiyoruz:


Books.title OLARAK "Başlık", borçlanmalar.returndate OLARAK "Geri Dönüş Tarihi" OLARAK SEÇİN borçlanmalardan Kitapları borçlanmalara katılın.bookid=books.bookid WHERE kitap.author=Dan Brown";

Sonuç:


Başlık Dönüş tarihi
Kayıp Sembol 2016-03-23 00:00:00
Cehennem 2016-04-13 00:00:00
Kayıp Sembol 2016-04-19 00:00:00

Büyük olan öndekine benzer kamera ARKASI Bölümlerden. Tse şu anlama geliyor Başka bir tablodan veri tüketiyoruz. “Kitaplar” masasına ya da “ödünç almalar” masasına gitmiyoruz. Sıkıntımız giderek artıyor yeni masa, iki masanın kapalı olduğunu.


borçlanmalar borçlanmalar.bookid=books.bookid'DEKİ kitaplara katılın - bu, tüm kayıtların kitap kimliği değerlerinin kaydedildiği "kitaplar" ve "ödünç almalar" tablolarında birleştirilmesiyle oluşturulan yeni bir tablodur. Böyle bir öfkenin sonucu şöyle olacaktır:



Daha sonra bu tabloya bir uygulamadaki gibi giriyoruz. Bu, bir masaya katılırken birleştirmeyi nasıl gerçekleştireceğinizi de bilmeniz gerektiği anlamına gelir. Ve sonra soru, paragraf 3'teki "basit soru" dan düşüşte olduğu gibi, o kadar aklı başında hale geliyor ki.


İki tabloyla biraz daha karmaşık bir bağlantı deneyelim.


Şimdi yazar Dan Brown'un kitaplarından aldığımız kitapların kütüphanesinden aldığımız kişilerin isimlerini ve takma adlarını kaldırmak istiyoruz.


Bu sefer aşağıdan yukarıya doğru gidelim:


Krok Adım 1- Yıldızlardan veri mi alıyoruz? İhtiyacımız olan sonucu elde etmek için “üye” ve “kitaplar” tablolarını “ödünç almalar” tablosuyla birleştirmemiz gerekiyor. JOIN bölümü şuna benzer:


borçlanmalar kitaplara KATILIN borçlanmalar.bookid=books.bookid Üyelere KATILIN Members.memberid=borrowings.memberid

Bağlantının sonucu en kısa sürede belirlenebilir.


Timsah 2- Ne tür veriler gösteriliyor? Bu saygı duruşuna ihtiyacımız yok çünkü kitabın yazarı “Dan Brown”


NEREDE kitaplar.author = "Dan Brown"

Timsah 3- Verileri nasıl gösteririz? Şimdi, eğer veriler elinizden alındıysa, kitapları alan kişilerin isimlerini ve takma adlarını yazmanız yeterli:


Üyeler.adını "Ad" OLARAK, üyeler.soyadını "Soyadı" OLARAK SEÇİN

Süper! Geriye kalan tek şey üç depoda stok yapmak ve ihtiyacımız olan malzemeleri üretmek:


Üyeler.adını "Ad" OLARAK SEÇİN, Members.soyadı "Soyadı" OLARAK SEÇİN borçlanmalardan Kitaplara KATILIN borçlanmalar.bookid=books.bookid Üyelere KATILIN Members.memberid=borrowings.memberid NEREDE kitaplar.author="

Bize ne vereceksiniz:


İlk adı Soy isim
Mike Willis
Ellen Horton
Ellen Horton

Mucize! Tüm isimler tekrarlanır (kokular benzersizdir). Yakında düzeltilebilir olacağız.

5. Toplama

Görünüşte kaba birçok satırı tek bir satıra dönüştürmek için toplama gerekir. Farklı sütunlar için toplama yaparken mantık farklıdır.


Tekrarlanan isimlerin yer aldığı örneğimize devam edelim. Ellen Horton'un birden fazla kitap aldığı açık ancak bu bilgiyi göstermenin en iyi yolu bu değil. Başka bir istek oluşturabilirsiniz:


Members.firstname AS "Ad", Members.soyadı AS "Soyadı", count(*) AS "Sıralanan kitap sayısı" Ödünç alınanlardan SEÇİN kitaplara KATILIN borçlanmalar.bookid=books.bookid Üyelere KATILIN Members.memberid= . memberid WHERE kitaplar.author="Dan Brown" GRUP BY Members.firstname, Members.lastname;

Bize gerekli sonucu vermek için:


İlk adı Soy isim Ödünç alınan kitap sayısı
Mike Willis 1
Ellen Horton 2

Belki de tüm toplamalar GROUP BY ifadesi kullanılarak aynı anda gerçekleşir. Bu şey, tabloyu yeniden oluşturur, böylece tabloyu gruptan sorarak kaldırabilirsiniz. Dış görünüm grubu, GROUP BY'de belirttiğimiz sütunun benzersiz değerine (veya grup değerine) karşılık gelir. Uygulamamızda geçmişten sağa doğru çıkan sonucu bir satır grubuna dönüştürüyoruz. Ayrıca, bir dizi satırı bir tam değerden dönüştüren count ile toplama işlemini de gerçekleştiriyoruz (bizim türümüzde birden fazla satır vardır). Daha sonra bu değer cilt grubuna atanır.


Cilt sırası, cilt grubunun toplanmasının sonucudur.



Sonuç olarak tüm alanların ya GROUP BY'ye dahil edildiği ya da bunların ardından toplamanın gelebileceği şeklinde mantıksal bir sonuca varılabilir. Diğer tüm alanlar teker teker farklı satırlarda görünebileceğinden ve bunları SELECT ile seçerseniz birbirlerinden hangi değerlerin alınması gerektiği net değildir.


Uygulamada, sayma işlevi tüm satırları saydı (biz yalnızca birkaç satırı hesaba kattık). sum ve max komutundaki diğer işlevler belirlenen satırlarda çalışmayacaktır. Örneğin farklı bir yazarın yazdığı kitapların sayısını öğrenmek istiyorsak aşağıdaki sorguya ihtiyacımız var:


Kitaplardan yazara göre GRUPLA yazar, toplam (stok) SEÇİN;

Sonuç:


yazar toplam
Robin Sharma 4
Dan Brown 6
Yeşil John 3
Amish Tripathi 2

Burada toplam işlevi stok sütununu tamamlar ve her gruptaki tüm değerlerin toplamını döndürür.

6. İçmek


Daha büyük sorgulardan bu ilk SQL sorgularını gönderin. Kokular, ortaya çıkan sonucun türüne göre üç türe ayrılır.

6.1 İki dünyalı tablo

Sütunları nasıl çevireceğinizi sorun. Toplama için geçmişten sağa doğru iyi bir alın kullanılacaktır. Çalıştırıldığında, yeni girişler üzerinde çalışabileceğiniz başka bir tabloyu döndürmeniz yeterlidir. Sağa doğru ilerlersek, yazar “Robin Sharma”nın yazdığı kitapların sayısını bilmek istiyorsak olası yollardan biri vikorly yazmaktır:


SELECT * FROM (Yazar SEÇ, toplam(stok) kitaplardan GRUPLA yazara göre) Sonuç olarak WHERE Author="Robin Sharma";

Sonuç:



Bunu şu şekilde yazabilirsiniz: ["Robin Sharma", "Dan Brown"]


2. Artık yeni girdi için bu sonucu görebiliriz:


SELECT başlık, kitap kimliği FROM kitaplardan WHERE yazar IN (yazar SEÇ FROM (yazar SEÇ, toplam(stok) kitaplardan yazara göre GRUPLA) AS sonuçlar WHERE toplam > 3);

Sonuç:


başlık kitapçı
Kayıp Sembol 2
Sen Öldüğünde Kim Ağlayacak? 3
Cehennem 4

Aynı şey:


BAŞLIK SEÇİN, kitap kimliği FROM kitaplardan NEREDE yazar IN ("Robin Sharma", "Dan Brown");

6.3 Okremi değerleri

Sonucun sadece bir satır ve bir sütun olduğunu söyleyebilirler. Bunlardan önce değerler, sabit değerlerden önceki gibi yerleştirilebilir, bunlar aracılığıyla vikorlaştırılabilir ve örneğin eşitleme operatörlerinde değerler vikorlaştırılabilir. Ayrıca çift tablo veya tek öğeden oluşan diziler olarak da sınıflandırılabilirler.


Mesela kütüphanede şu anda ortalama değeri aşan tüm kitaplara ait bilgileri kaldıralım.


Orta kalınlık aşağıdaki gibi kesilebilir:


kitaplardan avg(stok) seçeneğini seçin;

Bize ne veriyor:


7. Kayıt işlemleri

Veritabanındaki çoğu yazma işlemi, karmaşık okuma işlemlerine kıyasla basittir.

7.1 Güncelleme

UPDATE sorgusunun sözdizimi, okuma sorgusu nedeniyle anlamsal olarak önlenir. Tek farkımız SELECT sütunlarını seçmek yerine SET değerini ayarlamamızdır.


Dan Brown'un tüm kitapları kaybolduğu için değer değerlerinin sıfırlanması gerekmektedir. Bunun için soru şu olacak:


GÜNCELLEME kitaplar SET stok=0 WHERE Author="Dan Brown";

NEREDE öncekiyle aynısını yapın: satırları seçin. Okumanın son saatinde kullanılan SELECT yerine artık SET kullanıyoruz. Ancak artık seçilen satırlara yalnızca sütun adlarını değil, o sütun için yeni değerleri de girmeniz gerekiyor.


7.2 Sil

DELETE girin – sütun adları olmadan yalnızca SELECT veya UPDATE girilmez. Cidden. SELECT ve UPDATE cümleciklerinde olduğu gibi WHERE bloğu da aynısını yapar: silinmesi gereken satırları seçer. İşlem tüm satırı siler, dolayısıyla sütunun dışını belirtmenin bir anlamı yoktur. Dolayısıyla, eğer gerçekten Dan Brown'ın bazı kitaplarını silmek istemiyorsak ve tüm girişleri silmek istiyorsak, aşağıdaki sorguyu oluşturabiliriz:


NEREDE kitaplardan SİL Author="Dan Brown";

7.3 Ekle

INSERT dışında diğer sorgu türlerinden farklı olan bir şey olabilir. Format şu şekildedir:


x (a, b, c) DEĞERLERİNE (x, y, z) EKLEYİN;

Burada a, b, c sütunların adları, x, y ve z ise bu sütunlara aynı sırayla eklenmesi gereken değerlerdir. Prensip olarak eksen her şeydir.


Spesifik hisse senedine bir göz atalım. Eksen, "kitaplar" tablosunun tamamını dolduracak olan INSERT kullanılarak girilir:


Kitaplara EKLEYİN (kitap adı, başlık, yazar, yayınlanmış, hisse senedi) DEĞERLER (1,"Scion of Ikshvaku", "Amish Tripathi", "06-22-2015",2), (2,"The Lost Sembol", Dan Brown,"07-22-2010",3), (3,"Sen Öldüğünde Kim Ağlayacak?",Robin Sharma,"06-15-2006",4), (4,"Cehennem" "Dan Brown", "05-05-2014",3), (5, "Yıldızlarımızdaki Arıza", "John Green", "03-01-2015",3);

8. Yeniden doğrulama

Sona ulaştık, küçük bir test yapacağım. Makalenin en başında hayret edin. New'de evlenebilir misin? Bunu SELECT , FROM , WHERE , GROUP BY bölümlerine ayırmayı deneyin ve isteklerin bileşenlerine bakın.


Eksenin okunması daha kolaydır:


Üyeler.adını SEÇİN || " " || Members.soyadı AS "Tam Ad" FROM ödünç almalar INNER JOIN üyeler ON Members.memberid=borrowings.memberid INNER JOIN kitaplar ON kitaplar.bookid=borrowings.bookid NEREDE borçlanmalar.bookid IN (kitaplardan kitap kimliğini SEÇİN kitaplardan)) üyelere GÖRE GRUP .ad, üyeler.soyadı;

Bu, ortalama bir değere sahip olan, kütüphaneden kitap ödünç alan kişilerin bir listesini görüntülemenizi isteyecektir.


Sonuç:


Ad Soyad
Lida Tyler

Umarım sorunsuz bir şekilde evlenmeyi başarırsın. Değilse, bu yazıyı aydınlatabilmem için yorumlarınızı ve yorumlarınızı almaktan memnuniyet duyarım.

Teknolojiler