• SQL nedir? SQL dili

    SQL yapılandırılmış bir sorgulama dilidir. SQL, veritabanları olmadan olmaz - içine program yazamazsınız ve bu anlamda PHP gibi bir programlama dili değildir, ancak belirli bir DBMS ile uğraşmanız gerektiğinde, SQL bilgisi olmadan yapamazsınız. Üzerine basit sorgular yazabilir veya birkaç karmaşık sorgudan oluşan büyük işlemleri gerçekleştirebilirsiniz. Bir SQL sorgusu, bir veritabanına yönelik bir tür komuttur. Böyle bir komut, belirli kriterleri karşılayan bilgilerin iadesini talep edebilir veya herhangi bir kaydın silinmesi talimatını verebilir, vb. SQL komutu basit dize, Örneğin:

    SEÇİN * Personelden NEREDE departman

    SQL sorguları genellikle basit bir ifadeye yakındır. ingilizce dili. Yukarıdaki komut aşağıdaki gibi Rusça'ya çevrilebilir.

    Personelden TÜMÜNÜ SEÇ WHERE clwjiertme"

    Epeyce komutu temizle, sadece İngilizce olarak kaydedilmesi üzücü. Böyle bir sorgunun yürütülmesinin bir sonucu olarak, VTYS Personel tablosundaki kalkış* Mit_id alanının üçe eşit olduğu tüm kayıtları döndürür. Örneğimizde, bu sorgu aslında tüm çalışan tabanından yalnızca programcıları seçer.

    Daha önce bir DBMS ile çalışmadıysanız, makul bir sorunuz olabilir: nerede ve nasıl performans gösterebilirsiniz? verilen istek? SQL sorgularını yürütmenin üç yolu vardır.

    1. VTYS ile etkileşim için etkileşimli ortam. Çoğu DBMS sunucusu için, çalışma ortamında SQL sorguları yazabileceğiniz, çalıştırabileceğiniz ve sonucu alabileceğiniz istemci programları (yerleşik veya üçüncü taraflarca sağlanan) vardır. Tipik olarak, bu tür araçlar veritabanı yöneticileri tarafından kullanılır ve doğrudan PHP programlama ile ilgili değildir. MySQL istemci programına bir örnek, MySQL Yönetici programı (http: /www.mysgl.coin/ product-s/administratoT/) veya çok popüler PHP sistemi phpMyAdmin'dir (http: / /www.phpmyadi'ln.r»et /itumjiage/index.php). Başlamak için, bir konsol arabirimine sahip önceden kurulmuş bir dağıtım kiti yeterli olacaktır. Linux'ta ihtiyacınız olan Komut satırı SQL sorgularına girme daveti içeren bir pencere açmak için mysql komutunu yazın ve Windows'ta aynı arayüzü başlatmak için mysql dosyasını çalıştırmanız gerekir. bin dizininden exe.

    2. Statik SQL sorguları. Tipik olarak, bu tür sorgular veritabanlarının kendilerinde saklı yordamların içine yazılır veya uygulamaların kendilerine fiziksel olarak bağlanır. Statik bir SQL sorgusu önceden tanımlanmıştır ve yalnızca program veya saklı yordam kodu el ile yeniden yazılırsa değişir. PHP'den, böyle bir SQL sorgusu kullanılarak yürütülür. özel fonksiyonlar, daha sonra tartışılacak.

    3. Dinamik SQL sorguları. İLE bu tür Bu tür istekler, uygulama yazarken tam olarak tanımlanamaz. i "örnek, bir çalışanın listesini almak için bir program yazarken" mt işletmenin farklı departmanları, programcının bilmediği, ci "> şirketin departmanları olacağı ve bunlara hangi çalışanların dahil edileceği hakkında i „. Of Elbette bu veriler programa katı bir şekilde yazılabilir ancak şirketin yapısındaki ilk değişiklikle birlikte program atılabilir veya yeniden yazılması gerekebilir. Dinamik sorgular, veri değişikliklerine esnek programlar oluşturmanıza olanak tanır. .PHP'de, bu tür sorgular, statik olanlarla hemen hemen aynı işlevlerle gerçekleştirilir, yalnızca içlerinde '^in'> Bazı parametrelerin iletilmesi mümkün değildir.

    Yukarıdaki üç noktanın bir özeti olarak, SQL sorgularının özel yönetim programlarından veya çeşitli şekillerde PHP betiklerinden yürütüldüğünü söyleyebiliriz.

    DBMS birçok sorunu çözdüğü için, SQL'in de çok işlevli bir dil olması gerekir. yapılabilecek birkaç işlem türü vardır.< \ ществлять с помощью SQL.

    1. Veritabanı yapısının belirlenmesi. Bu tür, tabloları ve dizinleri oluşturan ve değiştiren sorguları içerir. Genellikle bunlar CRE komutlarıdır; "E TA' LE, ALI'R TA' LE, ' ” '. TE DİZİNİ vb.

    2. Veri manipülasyonu. Bu tür, tablolara veri ekleme (move*ve> leni), silme veya değiştirme isteklerini içerir. Bunlar üç ana komuttur: INSERT. SİL VE GÜNCELLE.

    3. Veri seçimi Bu, yalnızca bir SELECT deyimi içerir. Verilerin kendisinde değişiklik yapmaz, ancak bunları veritabanından almanıza izin verir. Verileri almak için yalnızca bir komut kullanılmasına rağmen, çok güçlüdür ve uygulamalarda çok sık kullanılır.

    4. VTYS sunucusunun yönetimi. Bu tür, esas olarak kullanıcıları ve erişim haklarını yönetme isteklerini içerir (örneğin, GRANT komutu).

    İyi bir SQL bilgisi, bir programcının bir veritabanıyla çalışırken işini büyük ölçüde kolaylaştırır. Uygulamalar küçük olabilir, ancak yalnızca SQL'in birçok görevi üstleneceği gerçeği nedeniyle harika işlevselliğe sahip olabilir.

    BT'nin diğer herhangi bir alanında olduğu gibi, SQL'de de standartlar vardır - bu ANSI SQL'dir. ANSI kısaltması, Amrican Ulusal Standartlar Enstitüsü'nün (Amerikan Ulusal Standartlar Enstitüsü) kısaltmasıdır. Bununla birlikte, en azından DBMS'nin kendi işlevselliklerindeki farklılık nedeniyle, SQL'in farklı uygulamalar için uygulanması

    Yine de DBMS birbirinden farklıdır. Açık şu an hemen hemen her DBMS'nin, genellikle genel standarttan çok farklı olmayan, ancak kendi özelliklerine sahip olan kendi lehçesi vardır. Örneğin, PL/SQL, Oracle ve PostgreSQL ile uyumludur ve T-SQL, MS SQL Server ile çalışmak için kullanılır.

    Veritabanlarıyla sonraki çalışmalar için, gelecekte çalışmayı planladığınız standardı hemen incelemenizi öneririz. Çoğu Web geliştiricisi için, MySQL DBMS'nin işlevselliği (ve ücretsiz olarak kullanılabilir) şu anda kafa için yeterlidir, bu nedenle bu kitapta, bu DBMS'nin lehçesinde sırasıyla tüm MySQL örnekleri verilecektir. MySQL için sorgu dili belgeleri www.mysql.com adresinde bulunabilir.

    Programlama dili

    SQL (Yapılandırılmış Sorgu Dili) Yapılandırılmış dil sorgular), ilişkisel veritabanları için bir veritabanı yönetim dilidir. SQL'in kendisi bir Turing-complete programlama dili değildir, ancak standardı, işlevselliğini tam teşekküllü bir programlama diline genişleten prosedürel uzantılar oluşturmanıza izin verir.

    Dil, 1970'lerde System R veritabanı yönetim sistemi (DBMS) için "SEQUEL" adı altında oluşturuldu ve daha sonra çakışmayı önlemek için "SQL" olarak yeniden adlandırıldı. ticari markalar. SQL ilk olarak 1979'da şu şekilde yayınlandı: ticari ürün Oracle V2.

    İlk resmi dil standardı ANSI tarafından 1986'da ve ISO tarafından 1987'de kabul edildi. O zamandan beri, standardın birkaç versiyonu daha yaratıldı, bazıları küçük değişikliklerle öncekileri tekrar ederken, diğerleri yeni önemli özellikler kazandı.

    Standartların varlığına rağmen, en yaygın SQL uygulamaları o kadar farklıdır ki, kod nadiren büyük değişiklikler olmadan bir DBMS'den diğerine taşınabilir. Bu, standardın uzunluğu ve karmaşıklığının yanı sıra bazı önemli uygulama alanlarındaki spesifikasyonların eksikliğinden kaynaklanmaktadır.

    SQL, içinde bulunan verileri almanın ve işlemenin basit, standartlaştırılmış bir yolu olarak oluşturuldu. ilişkisel veritabanı veri. Daha sonra amaçlanandan daha karmaşık hale geldi ve bir geliştirici aracı olmaktan çok bir geliştirici aracı haline geldi. son kullanıcı. Şu anda, SQL (çoğunlukla Oracle tarafından uygulanan), bir dizi alternatif olmasına rağmen, veritabanı dilleri arasında en popüler olmaya devam ediyor.

    SQL dört farklı bölümden oluşur:

    1. Veri Tanımlama Dili (DDL), bir veritabanında depolanan veri yapılarını tanımlamak için kullanılır. DDL ifadeleri, veritabanında tek tek nesneleri oluşturmanıza, değiştirmenize ve silmenize olanak tanır. Geçerli nesne türleri, kullanılan DBMS'ye bağlıdır ve tipik olarak veritabanlarını, kullanıcıları, tabloları ve roller ve dizinler gibi bir dizi küçük destek nesnesini içerir.
    2. Veri Manipülasyon Dili (DML), bir veritabanındaki verileri almak ve değiştirmek için kullanılır. DML ifadeleri, tablolardaki verileri almanıza, eklemenize, değiştirmenize ve silmenize olanak tanır. Bazen veri alma seçme ifadeleri, verilerin durumunu değiştirmedikleri için DML'nin bir parçası olarak kabul edilmez. Tüm DML ifadeleri bildirimseldir.
    3. Veri Erişimi Tanımlama Dili (DCL), bir veritabanındaki verilere erişimi kontrol etmek için kullanılır. DCL ifadeleri ayrıcalıklar için geçerlidir ve kullanım hakkını vermenize ve iptal etmenize izin verir. belirli operatörler Belirli veritabanı nesnelerine DDL ve DML.
    4. İşlem Kontrol Dili (TCL), veritabanındaki işlemlerin işlenmesini kontrol etmek için kullanılır. Tipik olarak, TCL ifadeleri, bir işlem sırasında yapılan değişiklikleri taahhüt etmeyi, bunları iptal etmek için geri almayı ve işlemi birkaç küçük parçaya bölmek için kaydetme noktasını içerir.

    SQL'in bildirime dayalı bir programlama paradigması uyguladığına dikkat edilmelidir: her ifade yalnızca gerekli eylemi açıklar ve DBMS bunun nasıl gerçekleştirileceğine karar verir, yani. eylemi gerçekleştirmek için gerekli temel işlemleri planlar ve yürütür. Ancak verimli kullanım için SQL yetenekleri geliştiricinin DBMS'nin her bir ifadeyi nasıl ayrıştırdığını ve yürütme planını nasıl oluşturduğunu anlaması gerekir.

    Örnekler:

    Selam Dünya!:

    Oracle 10g SQL, Oracle 11g SQL Örneği

    'Merhaba Dünya!' dizesi, gerçek tablolara erişim gerektirmeyen sorgular için kullanılan yerleşik ikili tablodan seçilir.

    "Merhaba Dünya!"yı seçin ikiliden;

    faktöriyel:

    Oracle 10g SQL, Oracle 11g SQL Örneği

    SQL, döngüleri, özyinelemeleri veya kullanıcı tanımlı işlevleri desteklemez. Bu örnek kullanarak olası bir geçici çözümü gösterir:

    • 1'den 16'ya kadar sayıları içeren sözde tablolar t1 ve t2 oluşturmak için sözde sütun seviyesi,
    • agrega toplam işlevi, açıkça bir döngü kullanmadan bir kümenin öğelerini toplamanıza izin verir,
    • Ve matematiksel fonksiyonlar ln ve exp , çarpımı (faktöriyeli hesaplamak için gerekli) toplamla (SQL tarafından sağlanan) değiştirmenize olanak tanır.

    “0! = 1” sonuçtaki satır kümesine dahil edilmeyecektir, çünkü ln(0)'ı değerlendirmeye çalışmak bir istisnayla sonuçlanır.

    Fibonacci sayıları:

    Oracle 10g SQL, Oracle 11g SQL Örneği

    SQL döngüleri veya özyinelemeleri desteklemez, ayrıca alanların birleştirilmesi farklı çizgiler tablo veya sorgu standart değil toplama işlevi. Bu örnek şunları kullanır:

    • Binet'in formülü ve matematiksel fonksiyonları ROUND , POWER ve SQRT n'inci Fibonacci sayısını hesaplamak için;
    • 1'den 16'ya kadar sayıları içeren bir sözde tablo t1 oluşturmak için sözde sütun düzeyi;
    • alınan numaraların sıralı birleştirilmesi için yerleşik SYS_CONNECT_BY_PATH işlevi.

    SEÇ DEĞİŞTİR (MAKS (SYS_CONNECT_BY_PATH (fib || ", " , "/" )) "/" , "" ) || "..." fiblist FROM ( SELECT n , fib , ROW_NUMBER () OVER (ORDER BY n ) r FROM (seçin n , yuvarlak ((güç ((1 + sqrt (5)) * 0 .5 , n ) - güç ((1 - sqrt (5 )) * 0 .5 , n )) / sqrt (5 )) fib from (dual connect'ten level n'yi seçin)<= 16 ) t1 ) t2 ) START WITH r = 1 CONNECT BY PRIOR r = r - 1 ;

    Selam Dünya!:

    Microsoft SQL Server 2005 , Microsoft SQL Server 2008 R2 , Microsoft SQL Server 2012 , MySQL 5 , PostgreSQL 8.4 , PostgreSQL 9.1 , sqlite 3.7.3 sürümleri için örnek

    "Merhaba Dünya!"yı seçin ;

    faktöriyel:

    Microsoft SQL Server 2005 , Microsoft SQL Server 2008 R2 , Microsoft SQL Server 2012 için örnek

    Faktöriyelin özyinelemeli tanımı kullanılır ve özyinelemeli bir sorgu aracılığıyla uygulanır. Sorgunun her satırı, n ve n! olmak üzere iki sayısal alan içerir ve sonraki her satır, bir öncekinden alınan veriler kullanılarak hesaplanır.

    Tamsayı faktöriyellerini yalnızca 20'ye kadar hesaplayabilirsiniz!. 21 hesaplamaya çalışırken! bir "Aritmetik taşma hatası" oluşur, örn. taşma meydana gelir.

    Gerçek sayılar için 100 faktöriyel hesaplanır! (Bunu yapmak için örnekte 3. satırda bigint'i float ile değiştirmeniz gerekiyor)

    Fibonacci sayıları:

    Microsoft SQL Server 2005 , Microsoft SQL Server 2008 R2 , Microsoft SQL Server 2012 için örnek

    Özyinelemeli bir sorgu aracılığıyla uygulanan Fibonacci sayılarının yinelemeli bir tanımı kullanılır. Sorgunun her satırı, dizide iki bitişik sayı içerir ve bir sonraki satır, bir önceki satırın (son sayı, sayıların toplamı) olarak hesaplanır. Böylece, ilk ve son hariç tüm sayılar iki kez geçtiğinden her satırın yalnızca ilk sayıları sonuca dahil edilir.

    faktöriyel:

    Oracle 10g SQL, Oracle 11g SQL Örneği

    Bu örnek, Oracle 10g'den beri mevcut olan ve sorgu dizelerinin dizi öğeleri olarak ele alınmasına izin veren model ifadesinin kullanımını gösterir. Her satır iki alan içerir - satır numarası n ve onun faktöriyel f.

    n'yi seçin || "!=" || ikili modelden f faktörü, tüm satır boyutlarını ( 0 d ) ölçüler ( 0 f , 1 n ) yineleme kuralları (17 ) ( f [ yineleme_sayısı ] = kod çözme (yineleme_numarası , 0 , 1 , f [ yineleme_numarası - 1 ] * yineleme_sayısı ) döndürür , n [yineleme_sayısı] = yineleme_sayısı);

    Fibonacci sayıları:

    Oracle 10g SQL, Oracle 11g SQL Örneği

    Bu örnek, Oracle 10g'den beri mevcut olan ve sorgu dizelerinin dizi öğeleri olarak ele alınmasına izin veren model ifadesinin kullanımını gösterir. Her satır iki alan içerir - Fibonacci sayısının kendisi ve ondan küçük veya ona eşit tüm sayıların birleştirilmesi. Sayıların oluşturuldukları aynı sorguda yinelemeli birleştirilmesi, bağımsız bir işlem olarak toplamaya göre daha kolay ve hızlıdır.

    maks(s) seçin || ", ..." from (ikili modelden s seçin tüm satırların boyutunu döndür ( 0 d ) ölçüler ( cast (" " as varchar2 (200 )) s , 0 f ) kurallar yinele (16 ) ( f [ iteration_number ] = decode (yineleme_sayısı , 0 , 1 , 1 , 1 , f [ yineleme_number - 1 ] + f [ yineleme_number - 2 ]), s [ yineleme_number ] = deşifre (yineleme_numarası , 0 , to_char (f [ yineleme_number ]), s [ yineleme_number - 1 ] || ", " || to_char (f [ yineleme_sayı ])) ) );

    faktöriyel:

    MySQL sürüm 5 için örnek

    concat (t2 .n as char ), "!= " , cast (exp (sum (log (t1 .n )))) as char )) seçin ( TABLO'dan @ i := @ i + 1 AS n seçin , (sel1 limit 16 olarak @ i := 0 seçin) t1 , ( TABLO'dan @ j : = @ j + 1 AS n seçin , ( sel1 limit 16 olarak @ j := 0 seçin ) t2 burada t1 . N<= t2 . n group by t2 . n

    Fibonacci sayıları:

    MySQL sürüm 5 için örnek

    TABLE'ı mysql.help_topic gibi erişebileceğiniz herhangi bir tabloyla değiştirin.

    concat (group_concat (f separator ", " ), ", ..." ) öğesini seçin (select @ f := @ i + @ j as f , @ i := @ j , @ j := @ f from TABLE , ( @ i := 1 , @ j := 0 ) seçin sel1 limit 16 ) t

    Selam Dünya!:

    Oracle 10g SQL, Oracle 11g SQL Örneği

    Bu örnek, dbms_output paketini kullanarak standart çıktıya bir mesaj yazdıran anonim bir PL/SQL bloğu kullanır.

    dbms_output'u başlatın. put_line("Merhaba Dünya!"); son ;

    faktöriyel:

    Oracle 10g SQL, Oracle 11g SQL Örneği

    Bu örnek, PL/SQL kullanarak yinelemeli faktöriyel hesaplamayı göstermektedir.

    n sayısını bildir := 0 ; fsayı := 1 ; başlarken (n<= 16 ) loop dbms_output . put_line (n || "! = " || f ); n : = n + 1 ; f : = f * n ; end loop ; end ;

    Fibonacci sayıları:

    Oracle 10g SQL, Oracle 11g SQL Örneği

    Bu örnek, Fibonacci sayılarının yinelemeli tanımını kullanır. Önceden hesaplanan sayılar, bir diziye benzer şekilde varray veri yapısında saklanır.

    tür vektörünün sayının varray (16) olduğunu bildir; fib vektörü := vektör(); ben numara; svarchar2(100); . uzat(16); fib (1 ) := 1 ; fib (2 ) := 1 ; s:=fib(1) || "," || fib(2) || ", "; i için 3 .. 16 döngü fib (i ) : = fib (i - 1 ) + fib (i - 2 ); s := s || fib(i) || ", "; son döngü; dbms_output . put_line(s || "..." ); son ;

    İkinci dereceden denklem:

    Oracle 10g SQL, Oracle 11g SQL Örneği

    Bu örnek, SQL*Plus, TOAD ve PL/SQL Developer ile test edilmiştir.

    Saf SQL, sorgu yürütme sırasında değiştirilen değişkenler olarak değişkenler girmenize olanak tanır. Böyle bir değişkeni tanımlamak için, adı (bu durumda A, B ve C), değişkene her referans verildiğinde önünde bir & işareti ile birlikte kullanılmalıdır. Bir sorgu yürütüldüğünde, kullanıcıdan sorguda kullanılan tüm değiştirilen değişkenlerin değerlerini girmesi istenir. Değerleri girdikten sonra, böyle bir değişkene yapılan her başvuru, değeriyle değiştirilir ve sonuç sorgusu yürütülür.

    Değiştirilen değişkenler için değer girmenin birkaç yolu vardır. Bu örnekte, her bir değişkenin ilk referansından önce tek bir ve işareti yerine çift ve && işareti gelir. Bu nedenle, her değişken için değer yalnızca bir kez girilir ve buna sonraki tüm referanslar aynı değerle değiştirilir (SQL*Plus'ta tek bir ve işareti kullanıldığında, aynı değişkene yapılan her referans için değer ayrı ayrı girilmelidir) . PL/SQL Developer'da, tüm değişkenlere yapılan referanslardan önce tek bir & işareti gelmelidir, aksi takdirde ORA-01008 "Not all variablebound" hatası oluşur.

    Örneğin ilk satırı, kök sayıları dizelere dönüştürürken kullanılan ondalık ayırıcı karakterini belirtir.

    İsteğin kendisi dört farklı istekten oluşur. Her sorgu, durumlardan birinde (A=0, D=0, D>0 ve D) hesaplamaların sonucunu içeren bir dize döndürür.<0) и ничего — в трех остальных случаях. Результаты всех четырех запросов объединяются, чтобы получить окончательный результат.

    oturum setini değiştir NLS_NUMERIC_CHARACTERS = ". " ; "İkinci dereceden bir denklem değil"i seçin. && A = 0 birleşim olduğu ikiliden ans "x = " || to_char (-&& B / 2 /& A ) ikiliden, burada & A != 0 ve & B *& B - 4 *& A *&& C = 0 birleşim "x1 = " || to_char ((-& B + sqrt (& B *& B - 4 *& A *& C )) / 2 /& A ) || ",x2 = " || to_char (-& B - sqrt (& B *& B - 4 *& A *& C )) / 2 /& A ikiliden burada & A != 0 ve & B *& B - 4 *& A *& C > 0 birleşim "x1 = (" || to_char (-& B / 2 /& A ) || "," || to_char (sqrt (-& B *& B + 4 *& A *& C ) / 2) seçin /& Bir ) || "), " || "x2 = (" || to_char (-& B / 2 /& A ) || "," || to_char (- sqrt (-& B *& B + 4 *& A *& C ) / 2 /& A) ) || ")" ikiliden, burada & A != 0 ve & B *& B - 4 *& A *& C< 0 ;

    Programlama konusunda yeni misiniz yoksa daha önce SQL öğrenmekten kaçındınız mı? O zaman doğru yere geldiniz, çünkü herhangi bir geliştirici eninde sonunda bu sorgulama dilini bilme ihtiyacıyla karşı karşıya kalacaktır. Ana veritabanı tasarımcısı olmasanız da, onlarla çalışmaktan kaçınmak neredeyse imkansızdır. Temel SQL sorgularına ilişkin bu kısa sözdizimsel genel bakışın ilgili geliştiriciye ve ihtiyacı olan herkese yardımcı olacağını umuyorum.

    SQL veritabanı nedir?

    Yapılandırılmış sorgu dili ( S yapılandırılmış Q Elbette L anguage), ANSI tarafından desteklenen bir veritabanı iletişim standardıdır. En yeni sürüm SQL-99'dur, ancak yeni bir standart halihazırda geliştirilmektedir. Çoğu veri tabanı ANSI-92 standardına sıkı sıkıya bağlıdır. Daha modern standartların getirilmesi hakkında çok tartışma yapıldı, ancak ticari veritabanı satıcıları, depolanan verileri işlemek için kendi yeni konseptlerini geliştirerek bundan uzaklaşıyorlar. ANSI standardına çok benzer olsa da, hemen hemen her bir veritabanı bazı benzersiz söz dizimi kullanır. Çoğu durumda, bu sözdiziminin farklı veritabanları için farklı sonuçlar ürettiği durumlar olmasına rağmen, bu sözdizimi temel standardın bir uzantısıdır. Özellikle beklenmedik sonuçlar alırsanız, veritabanı belgelerine bakmak her zaman iyi bir fikirdir.

    SQL'de yeniyseniz, anlamanız gereken temel kavramlara aşina olmanız gerekir.

    Genel anlamda "veritabanı", veri tabanının genel adıdır. ilişkisel veritabanı yönetim sistemi(RDBMS). Bazı sistemler için "veritabanı" aynı zamanda diğer benzer yapılardan doğası gereği ayrı olan bir grup tablo, veri ve yapılandırma bilgisi anlamına gelir. Bu durumda, her bir SQL veritabanı kurulumu birkaç veritabanından oluşabilir. Diğer sistemlerde tablo olarak adlandırılırlar.

    Tablo, aşağıdakilerden oluşan bir veritabanı yapısıdır. sütunlar kapsamak çizgiler veri. Tipik olarak, tablolar ilgili bilgileri içerecek şekilde tasarlanmıştır. Aynı veri tabanında birden fazla tablo oluşturulabilir.

    Her sütun, çalışan kimlik numaraları, boy, araba rengi vb. gibi bir özniteliği veya nesne öznitelikleri koleksiyonunu temsil eder. Genellikle bir sütun için kullanılan terim alan bir adla, örneğin "Ad alanında". Satır alanı, tablonun minimum öğesidir. Bir tablodaki her sütunun belirli bir adı, veri türü ve boyutu vardır. Sütun adları bir tablo içinde benzersiz olmalıdır.

    Her satır (veya kayıt), belirli bir nesnenin bir dizi özelliğidir; örneğin, satır, bir çalışanın kimlik numarasını, maaşını, doğum yılını vb. içerebilir. Tablo satırlarının başlıkları yoktur. Belirli bir satıra atıfta bulunmak için, kullanıcının onu benzersiz şekilde tanımlayan bazı öznitelikleri (veya öznitelikler kümesini) belirtmesi gerekir.

    Verilerle çalışırken gerçekleştirilen en önemli işlemlerden biri, veritabanında depolanan bilgilerin seçimidir. Bunu yapmak için kullanıcının çalıştırması gerekir. rica etmek(sorgu).

    Şimdi veritabanı içindeki verileri manipüle etmeye odaklanan ana veritabanı sorgusu türlerine bakalım. Amaçlarımız doğrultusunda, tüm örnekler her ortama uyacak şekilde standart SQL'de verilmiştir.

    Veri isteği türleri

    SQL olarak adlandırılan dört ana veri sorgusu türü vardır. veri işleme dili(Veri Manipülasyon Dili veya DML):

    • SEÇME– tablolardan satırları seçin;
    • SOKMAK- tabloya satır ekleyin;
    • GÜNCELLEME– tablodaki satırları değiştirin;
    • SİLMEK- tablodaki satırları silin;

    Bu sorguların her biri, veriler üzerinde bazı eylemler gerçekleştirmek için kullanılan çeşitli işleçlere ve işlevlere sahiptir. SELECT sorgusu en fazla seçeneğe sahiptir. JOIN ve UNION gibi SELECT ile birlikte kullanılan ek sorgu türleri de vardır. Ancak şimdilik yalnızca temel sorgulara odaklanacağız.

    İstenen verileri seçmek için bir SEÇ sorgusu kullanma

    SELECT sorgusu, veritabanında depolanan bilgileri almak için kullanılır. Bu sorgunun temel eylemi tek bir tablo ile sınırlıdır, ancak aynı anda birden fazla tablodan almaya izin veren yapılar vardır. Belirli sütunlar için tüm veri satırlarını almak için şuna benzer bir sorgu kullanın:

    tablo_adı'ndan sütun1, sütun2'yi SEÇİN;

    Ayrıca, * joker karakterini kullanarak bir tablodaki tüm sütunları alabilirsiniz:

    tablo_adı'ndan * SEÇİN;

    Bu, belirli bir WHERE yan tümcesiyle veri seçeceğiniz zaman faydalı olabilir. Aşağıdaki sorgu, "sütun1"in "3" değerini içerdiği tüm satırlardaki tüm sütunları döndürür:

    = (eşittir)'e ek olarak, aşağıdaki koşullu işleçler vardır:

    Ek olarak, AND ve OR işleçlerinin kombinasyonlarının yanı sıra WHERE koşuluyla karşılaştırmak için BITWEEN ve LIKE koşullarını kullanabilirsiniz.

    Rusça'ya çevrilen şu anlama gelir: yaş sütununun değerinin 18'den büyük veya ona eşit olduğu ve Soyadı sütununun değerinin İvanov'dan Sidorov'a kadar olan alfabetik aralıkta veya değerde olduğu tablo_adı tablosundan tüm satırları seçin Şirket sütununun bir kısmı Motorola'dır.

    Yeni veri eklemek için bir INSERT sorgusu kullanma

    INSERT sorgusu için kullanılır yaratma yeni veri satırı. Mevcut verileri veya boş satır alanlarını güncellemek için bir UPDATE sorgusu kullanın.

    Örnek INSERT sorgu sözdizimi:

    INSERT INTO tablo_adı(sütun1,sütun2,sütun3) VALUES("veri1", "veri2", "veri3");

    Tüm değerleri tablonun sütunlarının göründüğü sırayla ekleyecekseniz, sütun adlarını atlayabilirsiniz, ancak bu okunabilirlik açısından tercih edilir. Ayrıca sütunları listelerseniz, girdiğiniz değerler o sıra ile eşleştiği sürece bunları veritabanı sırasına göre listelemek zorunda değilsiniz. Hiçbir bilginin girilmediği sütunları listelememelisiniz.

    Veritabanında zaten var olan bilgileri değiştirmek çok benzer.

    UPDATE sorgusu ve WHERE yan tümcesi

    GÜNCELLEME, mevcut değerleri değiştirmek veya bir satırdaki alanı boşaltmak için kullanılır, bu nedenle yeni değerlerin mevcut veri tipiyle eşleşmesi ve kabul edilebilir değerler sağlaması gerekir. Tüm satırlardaki değerleri değiştirmek istemiyorsanız WHERE yan tümcesini kullanmanız gerekir.

    WHERE'yi, değiştirmek istediğiniz sütun da dahil olmak üzere herhangi bir sütunda kullanabilirsiniz. Belirli bir değeri diğeriyle değiştirmek gerektiğinde kullanılır.

    Dikkat olmak! DELETE sorgusu tüm satırları siler

    DELETE isteği, bir satırı veritabanından tamamen kaldırır. Tek bir alanı kaldırmak istiyorsanız, bir UPDATE sorgusu kullanmanız ve bu alanı programınızda NULL'a benzer bir değere ayarlamanız gerekir. DELETE sorgunuzu bir WHERE yan tümcesi ile sınırlamaya dikkat edin, aksi takdirde tablonun tüm içeriğini kaybedebilirsiniz.

    Veritabanınızdan bir satır silindikten sonra kurtarılamaz, bu nedenle "IsActive" adlı bir sütuna veya o satırdan veri görünümünün engellendiğini belirtmek için sıfıra değiştirebileceğiniz buna benzer bir şeye sahip olmanız önerilir.

    Artık SQL sorgularının temellerini biliyorsunuz

    SQL bir veritabanı dilidir ve veri sorgulamada kullanılan en önemli ve temel komutları ele aldık. Temel kavramların çoğuna dokunulmadı (örneğin SUM ve COUNT), ancak yukarıda listelemeyi başardığımız birkaç komut, sizi harekete geçmeye ve SQL adlı harika sorgulama dili hakkında daha fazla bilgi edinmeye teşvik etmelidir.

    PHP ve veritabanları

    Büyük miktarda bilginin etkin bir şekilde saklanması ve alınması, İnternet'in başarılı gelişimine büyük katkı sağlamıştır. Tipik olarak, veritabanları bilgileri depolamak için kullanılır. Yahoo, Amazon ve Ebay gibi iyi bilinen siteler, büyük miktarda bilgi depolayan veritabanlarının güvenilirliğine büyük ölçüde güvenir. Tabii ki, veritabanı desteği sadece dev şirketler için değildir; web programcıları, nispeten düşük maliyetle (ücretsiz değilse) birkaç güçlü veritabanı uygulamasına sahiptir.

    Uygun veritabanı organizasyonu, daha hızlı ve daha esnek veri alma seçenekleri sağlar. Arama ve sıralama araçlarının uygulanmasını büyük ölçüde basitleştirir ve birçok veritabanı yönetim sisteminde (DBMS) bulunan ayrıcalık kontrol araçlarının yardımıyla bilgiye erişim hakları sorunları çözülür. Ayrıca veri çoğaltma ve arşivleme süreçleri basitleştirilmiştir.

    Bölüm, muhtemelen PHP'de kullanılan en popüler DBMS (http://www.mysql.com) olan MySQL'de veri alma ve güncellemenin ayrıntılı bir açıklamasıyla başlar. MySQL örneği, PHP'nin veritabanındaki verileri nasıl yüklediğini ve güncellediğini gösterecektir; birçok web uygulamasında kullanılan temel arama ve sıralama araçlarına bakacağız. Daha sonra PHP'nin aynı anda farklı DBMS'lere bağlanmak için kullanılabilen genel bir arayüz olan ODBC (Açık Veri Tabanı Bağlantısı) desteğine geçiyoruz. PHP'deki ODBC desteği, bir Microsoft Access veritabanına bağlanma ve veri alma örneği kullanılarak gösterilecektir. Bölüm, favori siteler hakkında bilgi içeren hiyerarşik bir dizin oluşturmak için PHP ve MySQL kullanan bir proje ile sona eriyor. Kataloğa yeni siteler eklendiğinde, kullanıcı bunları site yöneticisi tarafından tanımlanan standart kategorilerden birine atar.

    MySQL tartışmasına geçmeden önce, veritabanlarıyla çalışmak için en yaygın kullanılan dil olan SQL hakkında birkaç söz söylemek istiyorum. SQL dili, neredeyse tüm mevcut DBMS'nin temelidir. Veritabanlarıyla çalışma örneklerini ele almaya devam etmek için, en azından SQL'in nasıl çalıştığına dair genel bir fikre sahip olmak gerekir.

    SQL genellikle ilişkisel veritabanlarıyla etkileşimde kullanılan standart dil olarak tanımlanır (aşağıya bakın). Ancak SQL, C, C++ veya PHP gibi bir programlama dili değildir. Bunun yerine, kullanıcıya standart bir komut seti sağlayan, veritabanlarıyla çeşitli işlemleri gerçekleştirmek için bir arayüz aracıdır. SQL'in olanakları bir veritabanından veri almakla sınırlı değildir. SQL, aşağıdakiler dahil olmak üzere veritabanıyla etkileşim için çeşitli seçenekler sunar:

    • veri yapısı tanımı-- veri depolamada kullanılan yapıların tanımı;
    • veri örnekleme-- veri tabanından veri yüklemek ve çıktı almak için uygun bir formatta sunmak;
    • veri işleme-- bilgileri ekleyin, güncelleyin ve silin;
    • giriş kontrolu-- bireysel kullanıcılar seviyesinde örnekleme, ekleme, güncelleme ve veri silmeyi etkinleştirme/devre dışı bırakma yeteneği;
    • veri bütünlüğü kontrolü-- Eşzamanlı güncellemeler veya sistem çökmeleri gibi sorunlar meydana geldiğinde veri yapısını koruyun.

    SQL tanımının, dilin çalışmak üzere tasarlandığını söylediğine dikkat edin. ilişkisel veritabanları. İlişkisel DBMS'ler, verileri bir dizi birbiriyle ilişkili tablo halinde düzenler. Tablolar arasındaki ilişkiler, diğer tablolardaki verilere bağlantılar olarak uygulanır. masa her elemanın konumunun belirli satır ve sütun değerleri ile karakterize edildiği iki boyutlu bir dizi olarak düşünülebilir. İlişkisel bir veritabanı örneği, Şekil 2'de gösterilmektedir. 11.1.

    Pirinç. 11.1.İlişkisel veritabanı örneği

    Olarak Şekil l'de görülebilir. 11.1, her tablo satırlardan (kayıtlardan) ve sütunlardan (alanlardan) oluşur. Her alana benzersiz (verilen tablo içinde) bir ad atanır. Okla gösterilen müşteri ve sipariş tabloları arasındaki ilişkiye dikkat edin. Sipariş bilgileri, müşterinin adının ve diğer ayrıntıların gereksiz yere depolanmasını önleyen kısa bir müşteri tanımlayıcı içerir. Gösterilen veritabanında, siparişler ve ürün tabloları arasında başka bir ilişki vardır. Bu ilişki, bu müşteri tarafından sipariş edilen ürünün tanımlayıcısını saklayan prod_id alanı tarafından kurulur (custjd alanı tarafından belirlenir). Bu ilişkilerin varlığı, eksiksiz müşteri ve ürün verilerine basit tanımlayıcılarla atıfta bulunmayı kolaylaştırır. Düzgün organize edilmiş bir veritabanı, verileri minimum artıklıkla verimli bir şekilde düzenlemek ve depolamak için güçlü bir araca dönüşür. Bu veritabanını aklınızda bulundurun, daha sonraki örneklerde sık sık başvuracağım.

    Peki ilişkisel veritabanı işlemleri nasıl yapılır? Bunu yapmak için SQL'in SELECT, INSERT, UPDATE ve DELETE gibi özel bir ortak komutları vardır. Örneğin, 2001cu kimliğine sahip bir müşterinin e-posta adresini almanız gerekiyorsa (bkz. Şekil 11.1), aşağıdaki SQL komutunu çalıştırmanız yeterlidir:

    Custjd = "2001cu" NEREDE müşterilerden cust_email SEÇİN

    Her şey oldukça mantıklı, değil mi? Özetle, komut şöyle görünür:

    tablo_adı FROM alan_adı SEÇ [ WHERE koşulu ]

    Köşeli parantezler, komutun son kısmının isteğe bağlı olduğu anlamına gelir. Örneğin, müşteriler tablosundaki tüm müşterilerin e-posta adreslerini almak için aşağıdaki sorguyu çalıştırmanız yeterlidir:

    Müşterilerden cust_email SEÇİN

    Diyelim ki ürünler tablosuna yeni bir kayıt eklemek istiyorsunuz. En basit ekleme komutu şöyle görünür:

    DEĞERLER ("1009pr", "Kırmızı Domatesler", "1.43");

    Daha sonra bu verileri silmeniz gerekirse, aşağıdaki komutu kullanın:

    prod_id = 1009r";

    Pek çok SQL komutu çeşidi vardır ve bunların tam bir açıklaması bu kitabın kapsamı dışındadır. Bu konuda ayrı bir kitap yazılabilir! Örneklerde kullanılan SQL komutlarının nispeten basit ama yeterince gerçekçi olduğundan emin olmaya çalıştım. Web'de SQL hakkında birçok öğretici bilgi ve kaynak vardır. Bu bölümün sonunda bazı bağlantılar verilmiştir.

    SQL komutlarını büyük harflerle yazmak gerekli değildir. Ancak, talebin bileşenleri arasında ayrım yapmaya yardımcı olduğu için bu gösterimi tercih ediyorum.

    Bu kitabı okuduğunuza göre, muhtemelen veritabanlarının Web'de nasıl çalıştığını merak ediyorsunuzdur. Kural olarak, önce bazılarıyla

    veya bir arayüz dili (PHP, Java veya Perl), veritabanına bir bağlantı oluşturulur ve ardından program, standart araç setini kullanarak sorgularla veritabanına erişir. Arayüz dili, veritabanını Web'e bağlayan bir tür "yapıştırıcı" olarak düşünülebilir. En sevdiğim ön uç dilime geçiyorum, PHP.

    çeşitli türden çok sayıda bilgisayar sisteminde çalışabilen veritabanları. Gerçekten de, onun yardımıyla, kullanıcılar ister kişisel bir bilgisayarda, ister ağa bağlı bir iş istasyonunda veya bir ana bilgisayarda çalışıyor olsunlar, verileri manipüle edebilirler.

    İlişkisel veri modelinin gelişmesi sonucunda ortaya çıkan dillerden biri de şu anda oldukça yaygın olan ve fiilen bir hal almış olan SQL dilidir (Structured Query Language). standart dil ilişkisel veritabanları. Standart SQL, 1986'da Amerikan Ulusal Standartlar Enstitüsü (ANSI) tarafından yayınlandı ve 1987'de Uluslararası Standartlar Örgütü (ISO) tarafından uluslararası bir dil olarak kabul edildi. Geçerli SQL standardı, SQL/92 olarak bilinir.

    Herhangi bir standardın kullanılmasıyla, yalnızca çok sayıda ve oldukça belirgin avantajlar değil, aynı zamanda bazı dezavantajlar da ilişkilidir. Her şeyden önce standartlar, ilgili endüstrinin gelişimini belirli bir yönde yönlendirir; SQL dili söz konusu olduğunda, güçlü temel ilkelerin varlığı, sonuçta, çeşitli uygulamalarının uyumluluğuna yol açar ve hem yazılımların ve genel olarak veritabanlarının artan taşınabilirliğine hem de veritabanı yöneticilerinin çalışmalarının çok yönlülüğüne katkıda bulunur. Öte yandan standartlar, belirli bir uygulamanın esnekliğini ve işlevselliğini sınırlar. Altında dil uygulaması SQL, ilgili üreticinin SQL yazılım ürününü ifade eder. genişleme için işlevsellik standart tabanlı geliştiricilerin çoğu standart dil SQL çeşitli uzantılar. Standartların tamamlanmış herhangi bir dil uygulamaları SQL belirli özelliklere sahiptir ve yalnızca tüm rakip uygulamalar arasında birlikte çalışabilirliğe yol açmakla kalmayan, aynı zamanda SQL programcılarının ve kullanıcılarının değerine de katkıda bulunan ana eğilimleri geniş ölçüde yansıtır. ilişkisel veritabanları Bugünün yazılım pazarında.

    Tüm özel dil uygulamaları birbirinden biraz farklı. Uygulamalarının taşınabilirlik ve kullanıcı deneyimi için mevcut ANSI standartlarını karşılamasını sağlamak, üreticilerin çıkarınadır. Bununla birlikte, SQL'in her uygulaması, belirli bir veritabanı sunucusunun ihtiyaçlarını karşılamak için geliştirmeler içerir. SQL dilindeki bu geliştirmeler veya uzantılar, standart pakete ek olan ve bu özel uygulamada kullanılabilen ek komutlar ve seçeneklerdir.

    Şu anda, SQL dili, kişisel bilgisayarlardan ana bilgisayarlara kadar çok çeşitli bilgi işlem platformları için tasarlanmış, çeşitli türlerde düzinelerce DBMS tarafından desteklenmektedir.

    Gelişinden önce birçok DBMS için oluşturulmuş tüm veri işleme dilleri ilişkisel veritabanları, mantıksal dosya kayıtları olarak temsil edilen verilerle yapılan işlemlere odaklanmıştı. Elbette bu, kullanıcının veri depolama organizasyonu hakkında detaylı bilgi sahibi olmasını ve hangi veriye ihtiyaç duyulduğunu, nerede bulunduğunu ve nasıl elde edileceğini belirlemek için ciddi bir çaba gerektirdi.

    Ele alınan SQL dili, mantıksal olarak birbirine bağlı ilişki tablosu kümeleri biçiminde sunulan verilerle yapılan işlemlere odaklanır. Yapılarının en önemli özelliği, bu işleme prosedürüne değil, veri işlemenin nihai sonucuna odaklanmasıdır. SQL dili, verilerin nerede bulunduğunu, dizinleri ve hatta bir sonuç elde etmek için en verimli işlem sırasının kullanılması gerektiğini belirler ve bu nedenle, bu ayrıntıları bir veritabanı sorgusunda belirtmek gerekli değildir.

    İstemci-sunucu teknolojisine giriş

    Bilgi hizmetleri pazarının genişlemesiyle bağlantılı olarak, yazılım üreticileri giderek daha akıllı ve dolayısıyla büyük ölçekli yazılım sistemleri üretmeye başladı. Çoğu kuruluş ve bireysel kullanıcı, satın alınan ürünleri genellikle kendi bilgisayarlarında barındıramadı. Bilgi alışverişi ve yayılması için bilgisayar ağları oluşturuldu ve özel dosya sunucularına genelleştirici programlar ve veriler kurulmaya başlandı.

    Dosya sunucuları ile çalışan DBMS sayesinde birçok kullanıcı aynı veritabanlarına erişim sağlar. Kuruluşları yönetmek için çeşitli otomatik sistemlerin geliştirilmesi basitleştirilmektedir. Bununla birlikte, bu yaklaşımla, programlardan veya kullanıcı bilgisayarlarının terminallerinden gelen isteklerin tüm işlemleri bunlar üzerinde gerçekleştirilir, bu nedenle basit bir isteği gerçekleştirmek için bile dosya sunucusundan okumak veya tüm dosyaları ona yazmak gerekir ve bu çatışma durumlarına ve ağın aşırı yüklenmesine yol açar. Bu eksiklikleri ortadan kaldırmak için önerilen istemci-sunucu teknolojisi, ancak aynı zamanda, sunucuyla iletişim kurmak için tek bir dile ihtiyaç vardı - seçim SQL'e düştü.

    İstemci-sunucu teknolojisi tek bir sistem oluşturdukları yazılım bileşenleri arasında böyle bir etkileşim yolu anlamına gelir. Adından da anlaşılacağı gibi, belirli kaynakları gerektiren belirli bir müşteri süreci vardır. sunucu süreci bu kaynakları sağlayan. Aynı bilgisayarda olmaları gerekli değildir. Sunucuyu yerel ağdaki bir düğüme ve istemcileri diğer düğümlere yerleştirmek yaygındır.

    Bir veritabanı bağlamında, istemci, veritabanı uygulamalarını çalıştıran bir iş istasyonu gibi hareket ederek kullanıcı arabirimini ve uygulama mantığını yönetir. İstemci, kullanıcıdan bir istek alır, sözdizimini kontrol eder ve SQL'de veya uygulama mantığıyla eşleşen başka bir veritabanı dilinde veritabanına bir sorgu oluşturur. Ardından sunucuya bir mesaj gönderir, yanıt bekler ve alınan verileri kullanıcıya sunulmak üzere biçimlendirir. Sunucu, sorguları veritabanına alır ve işler ve ardından sonuçları istemciye geri gönderir. Bu tür işlemler, müşterinin kimlik bilgilerinin kontrol edilmesini, bütünlük gereksinimlerinin uygulanmasını ve verilerin sorgulanmasını ve güncellenmesini içerir. Aynı zamanda eşzamanlılık ve kurtarma yönetimini de destekler.

    İstemci-sunucu mimarisinin birçok avantajı vardır.