Sql sunucusunda sorgu oluşturma. Erişim sorguları

Access'teki sorgular, veritabanı tablolarındaki verileri almak, güncellemek ve işlemek için birincil araçtır. Access, ilişkisel veritabanları kavramına uygun olarak, sorguları yürütmek için Structured Query Language (SQL) kullanır. Access'teki herhangi bir sorgu, SQL deyimleri kullanılarak uygulanır.

Ana sorgu türü bir seçme sorgusudur. Bu sorgunun sonucu, sorgu kapatılmadan önce var olan yeni bir tablodur. Kayıtlar, sorgunun oluşturulduğu tabloların kayıtlarının birleştirilmesiyle oluşturulur. Tablo kayıtlarının birleştirilmesinin yolu, veri şemasında ilişkileri tanımlanırken veya bir sorgu oluşturulurken belirtilir. Sorguda formüle edilen seçim koşulları, birleştirme tablolarının sonucunu oluşturan kayıtları filtrelemenize olanak tanır.

Access, birkaç tür sorgu oluşturabilir:

  • getirme isteği- tek bir tablodan veya sorgudan veya birden çok ilgili tablodan ve diğer sorgulardan veri seçer. Sonuç, sorgu kapatılmadan önce var olan bir tablodur. Sonuç tablosunun kayıtlarının oluşturulması, belirtilen seçim koşullarına uygun olarak ve birkaç tablonun kayıtları birleştirilerek kullanıldığında;
  • tablo oluşturmak için sorgu- birbirine bağlı tablolardan ve diğer sorgulardan veri seçer, ancak seçme sorgusunun aksine sonucu yeni bir kalıcı tabloya kaydeder;
  • istekleri güncelle, ekle, sil- tablolardaki verilerin değiştirilmesi sonucunda eylem istekleridir.

Tasarım modundaki Access'teki sorgular, kullanılan tabloları görüntüleyen bir veri şeması ve sorgu tablosunun yapısını ve kayıt seçme koşullarını oluşturan bir sorgu formu içerir (Şekil 4.1).

Bir sorgu kullanarak aşağıdaki veri işleme türlerini gerçekleştirebilirsiniz:

  • sorgu tablosuna kullanıcı tarafından seçilen tablo alanlarını dahil edin;
  • alınan kayıtların her birinde hesaplamalar yapın;
  • seçim kriterlerini karşılayan kayıtları seçin;
  • ilgili tabloların kayıtlarının birleşimine dayalı yeni bir sanal tablo oluşturun;
  • bir veya birkaç alanda aynı değerlere sahip olan, grubun diğer alanlarında aynı anda istatistiksel işlevleri yerine getiren ve sonuçta her grup için bir kayıt içeren grup kayıtları;
  • mevcut tablolardan verileri kullanarak yeni bir veritabanı tablosu oluşturun;
  • seçilen kayıt alt kümesindeki alanları güncelleyin;
  • veritabanı tablosundan seçilen kayıt alt kümesini silin;
  • seçilen kayıt alt kümesini başka bir tabloya ekleyin.

Access'teki sorgular, diğer sorgular, formlar ve raporlar için kayıt kaynakları görevi görür. Bir sorgu kullanarak, konu alanının belirli bir belgesinin oluşumu için birkaç tablodan tam bilgi toplayabilir, ardından bir form oluşturmak için kullanabilirsiniz - bu belgenin elektronik bir temsili. Sihirbaz tarafından birbirine bağlı birkaç tabloya dayalı olarak bir form veya rapor oluşturulursa, bunlar için kayıt kaynağı olarak otomatik olarak bir sorgu oluşturulur.
Birleştirmek için video eğitimini izleyin.

İstekler, tırnak işaretleri olmadan yazılır, çünkü MySQL, MS SQL'i ve PostaYeşil onlar farklı.

SQL sorgusu: bir tablodan belirtilen (gerekli) alanları alma

id, country_title, count_people FROM tablo_adı SEÇ

Kayıtların bir listesini alıyoruz: TÜM ülkeler ve nüfusları. Zorunlu alanların adları virgülle ayrılır.

tablo_adı'ndan * SEÇİN

* tüm alanları ifade eder. Yani, izlenimler olacak HER ŞEY veri alanları.

SQL sorgusu: yinelenenler hariç bir tablodan çıktı kayıtları

tablo_adından AYRI ülke_başlığı SEÇ

Bir kayıt listesi alıyoruz: kullanıcılarımızın bulunduğu ülkeler. Bir ülkeden birçok kullanıcı olabilir. Bu durumda, bu sizin talebinizdir.

SQL sorgusu: belirli bir koşula göre bir tablodan kayıtların görüntülenmesi

id, country_title, city_title FROM table_name NEREDE count_people> 100000000 SEÇİN

Kayıtların bir listesini alıyoruz: insan sayısının 100.000.000'den fazla olduğu ülkeler.

SQL sorgusu: sıralı bir tablodan kayıtları görüntüleme

id SEÇ, city_title tablo_adı FROM SİPARİŞ BY city_title

Kayıtların bir listesini alıyoruz: alfabetik sıraya göre şehirler. A'nın başında, I'nin sonunda.

id SEÇ, city_title FROM table_name ORDER BY city_title DESC

Kayıtların bir listesini alıyoruz: ters şehirler ( TANIM) tamam. Başta I, sonunda A.

SQL sorgusu: kayıt sayısını sayma

tablo_adından SAYI SEÇ (*)

Tablodaki kayıt sayısını (sayısını) alıyoruz. Bu durumda, HİÇBİR kayıt listesi yoktur.

SQL sorgusu: gerekli kayıt aralığının çıktısını alın

SEÇ * tablo_adı SINIRINDAN 2, 3

Tablodan 2 (ikinci) ve 3 (üçüncü) kayıt alıyoruz. İstek, WEB sayfalarında gezinme oluştururken kullanışlıdır.

Koşullu SQL sorguları

Mantıksal operatörler kullanılarak belirli bir koşula göre bir tablodan kayıtların çıktısı.

SQL sorgusu: VE yapısı

SEÇ id, city_title FROM table_name WHERE country = "Rusya" AND oil = 1

Kayıtların bir listesini alıyoruz: Rusya'dan şehirler VE petrole erişim var. Operatör kullanıldığında VE, o zaman her iki koşul da eşleşmelidir.

SQL sorgusu: VEYA yapı

ID SEÇ, city_title FROM table_name NEREDE ülke = "Rusya" VEYA ülke = "ABD"

Bir kayıt listesi alıyoruz: Rusya'daki tüm şehirler VEYA AMERİKA BİRLEŞİK DEVLETLERİ. Operatör kullanıldığında VEYA, o zaman en az bir koşul eşleşmelidir.

SQL sorgusu: VE DEĞİL yapı

id SEÇ, user_login FROM table_name NEREDE country = "Rusya" VE count_comments DEĞİL<7

Bir kayıt listesi alıyoruz: Rusya'dan tüm kullanıcılar VE kim yaptı AZ DEĞİL 7 yorum.

SQL sorgusu: IN (B) yapısı

ID SEÇ, user_login FROM table_name NEREDE ülke IN ("Rusya", "Bulgaristan", "Çin")

Kayıtların bir listesini alıyoruz: içinde yaşayan tüm kullanıcılar ( İÇİNDE) (Rusya veya Bulgaristan veya Çin)

SQL sorgusu: YAPILI DEĞİL

ID SEÇ, user_login FROM table_name NEREDE ülke DEĞİL ("Rusya", "Çin")

Kayıtların bir listesini alıyoruz: içinde yaşamayan tüm kullanıcılar ( DEĞİL) (Rusya veya Çin).

SQL sorgusu: IS NULL yapısı (boş veya DEĞİL boş değerler)

ID SEÇ, user_login FROM tablo_adı NEREDE durum NULL IS

Bir kayıt listesi alıyoruz: durum tanımlı olmayan tüm kullanıcılar. NULL ayrı bir konudur ve bu nedenle ayrı olarak kontrol edilir.

ID SEÇ, user_login FROM tablo_adı NEREDE durum NULL DEĞİL

Bir kayıt listesi alıyoruz: durumun tanımlandığı tüm kullanıcılar (SIFIR DEĞİL).

SQL sorgusu: LIKE yapısı

ID SEÇ, user_login tablo_adı NEREDE soyadı "Ivan%" GİBİ NEREDE

Bir kayıt listesi alıyoruz: soyadı "Ivan" kombinasyonu ile başlayan kullanıcılar. % işareti, HERHANGİ sayıda HERHANGİ karakter anlamına gelir. % işaretini bulmak için, kaçan "Ivan \%" öğesini kullanmanız gerekir.

SQL sorgusu: BETWEEN yapısı

ID SEÇ, user_login tablo_adı FROM maaş 25000 VE 50000 ARASINDA NEREDE

Kayıtların bir listesini alıyoruz: 25.000'den 50.000'e kadar maaş alan kullanıcılar.

Çok sayıda mantıksal operatör vardır, bu nedenle SQL sunucu belgelerini ayrıntılı olarak inceleyin.

Karmaşık SQL sorguları

SQL sorgusu: birden çok sorguyu birleştirme

(SELECT id, user_login FROM table_name1) BİRLİĞİ (SELECT id, user_login FROM table_name2 FROM

Kayıtların bir listesini alıyoruz: sistemde kayıtlı olan kullanıcılar ve ayrıca forumda ayrı ayrı kayıtlı kullanıcılar. UNION operatörü ile birden fazla sorgu birleştirilebilir. UNION, SELECT DISTINCT gibi davranır, yani yinelenen değerleri atar. Kesinlikle tüm kayıtları almak için UNION ALL operatörünü kullanmanız gerekir.

SQL sorgusu: alan değerlerini sayma MAX, MIN, SUM, AVG, COUNT

Birinin çıktısı, tablodaki sayacın maksimum değeri:

table_name'DEN MAX (sayaç) SEÇİN

Birinin çıktısı, tablodaki sayacın minimum değeri:

table_name'DEN MIN (sayaç) SEÇİN

Tablodaki tüm sayaç değerlerinin toplamını görüntüleme:

tablo_adından SUM (sayaç) SEÇ

Tablodaki sayacın ortalama değerinin görüntülenmesi:

tablo_adından AVG (sayaç) SEÇİN

Tablodaki sayaçların sayısını görüntüleme:

tablo_adından SAYI SEÇ (sayaç)

1 No'lu atölyedeki sayaç sayısının tabloda gösterilmesi:

Tablo_adı NEREDE ofisten SAYI SEÇİN (sayaç) = "Mağaza # 1"

Bunlar en popüler komutlardır. Kendi verilerini işlerken hiçbir programlama ortamı veri işleme hızında SQL sunucusunun kendisiyle karşılaştırılamayacağından, mümkün olduğunda hesaplama için bu tür SQL sorgularının kullanılması önerilir.

SQL sorgusu: kayıtları gruplama

Kıtayı SEÇ, SUM (country_area) Kıtaya göre ülkeden GRUP

Kayıtların bir listesini alıyoruz: kıtanın adı ve tüm ülkelerinin alanlarının toplamı ile. Yani, her ülkenin kendi alanının kayıtlı olduğu bir ülke dizini varsa, GROUP BY deyimini kullanarak her kıtanın boyutunu (kıtaya göre gruplandırmaya göre) öğrenebilirsiniz.

SQL sorgusu: takma ad aracılığıyla birden çok tablo kullanma

o.order_no, o.amount_paid, c.company FROM FROM order AS o, müşteri AS ile WHERE o.custno = c.custno AND c.city = "Tyumen" SEÇİN

Kayıtların bir listesini alıyoruz: sadece Tyumen'de yaşayan müşterilerden gelen siparişler.

Aslında, bu tür düzgün tasarlanmış bir veritabanı ile, sorgu en sık olanıdır, bu nedenle MySQL'de, yukarıda yazılan koddan çok daha hızlı çalışan özel bir operatör tanıtıldı.

O.order_no, o.amount_paid, z.company SİPARİŞLERİNDEN SEÇ o SOL OLARAK müşteriye z ON OLARAK KATIL (z.custno = o.custno)

iç içe alt sorgular

SEÇ * tablo_adı NEREDE maaş = (çalışandan MAKS (maaş) SEÇİN)

Bir kayıt alıyoruz: maksimum maaşlı kullanıcı hakkında bilgi.

Dikkat!İç içe alt sorgular, SQL sunucularındaki darboğazlardan biridir. Esneklikleri ve güçleriyle birlikte sunucu üzerindeki yükü de önemli ölçüde artırırlar. Bu, diğer kullanıcıların çalışmalarında feci bir yavaşlamaya yol açar. İç içe sorgularla özyinelemeli çağrılar çok yaygındır. Bu nedenle, iç içe sorguları KULLANMAMANIZI, ancak onları daha küçük sorgulara bölmenizi şiddetle tavsiye ederim. Veya yukarıdaki LEFT JOIN kombinasyonunu kullanın. Bu tür talebe ek olarak, istekler artan bir güvenlik ihlali yatağıdır. İç içe alt sorguları kullanmaya karar verirseniz, bunları çok dikkatli bir şekilde tasarlamanız ve ilk çalıştırmaları veritabanlarının (test veritabanları) kopyaları üzerinde yapmanız gerekir.

Verileri değiştiren SQL sorguları

SQL sorgusu: INSERT

Talimatlar SOKMAK tabloya kayıt eklemenizi sağlar. Basit bir deyişle, tablodaki verilerle bir satır oluşturun.

Seçenek numarası 1. Talimat genellikle kullanılır:

INSERT INTO tablo_adı (id, user_login) DEĞERLER (1, "ivanov"), (2, "petrov")

Masada " Tablo ismi"2 (iki) kullanıcı aynı anda eklenecek.

Seçenek numarası 2. Stili kullanmak daha uygundur:

INSERT tablo_adı SET kimliği = 1, user_login = "ivanov"; INSERT tablo_adı SET kimliği = 2, user_login = "petrov";

Bunun avantajları ve dezavantajları vardır.

Ana dezavantajlar:

  • Birçok küçük SQL sorgusu, büyük bir SQL sorgusundan biraz daha yavaş çalışır, ancak diğer sorgular hizmet için kuyruğa alınır. Yani, 30 dakika boyunca büyük bir SQL sorgusu yürütülürse, tüm bu süre boyunca sorguların geri kalanı bambu tüttürecek ve sırasını bekleyecektir.
  • İstek, önceki sürümden daha büyük olduğu ortaya çıktı.

Ana avantajlar:

  • Küçük SQL sorguları sırasında diğer SQL sorguları engellenmez.
  • Okuma kolaylığı.
  • Esneklik. Bu seçenekte yapıyı takip edemezsiniz, sadece gerekli verileri ekleyebilirsiniz.
  • Bu şekilde arşiv oluştururken, bir satırı kolayca kopyalayabilir ve komut satırı (konsol) üzerinden çalıştırabilirsiniz, böylece tüm ARŞİV'i geri yüklemezsiniz.
  • Yazma stili UPDATE ifadesine benzer, bu da hatırlamayı kolaylaştırır.

SQL sorgusu: GÜNCELLEME

GÜNCELLEME tablo_adı SET user_login = "ivanov", user_surname = "Ivanov" NEREDE id = 1

Masada " Tablo ismi"id=1 olan kayıtta user_login ve user_surname alanlarının değerleri belirtilen değerlere değiştirilecektir.

SQL sorgusu: DELETE

tablo_adı NEREDEN DELETE id = 3

id numarası 3 olan kayıt tablo_adı tablosunda silinecektir.

  1. Tüm alan adlarının küçük harflerle yazılması ve gerekirse Delphi, Perl, Python ve Ruby gibi farklı programlama dilleriyle uyumluluk için zorunlu boşluk "_" ile ayrılması önerilir.
  2. Okunabilirlik için SQL komutlarını BÜYÜK harflerle yazın. Her zaman, başkalarının kodu sizden sonra okuyabileceğini ve büyük olasılıkla N süre sonra kendinizin okuyabileceğini unutmayın.
  3. Alanları adın başlangıcından ve ardından eylemden adlandırın. Örneğin: city_status, user_login, user_name.
  4. SQL, PHP veya Perl'de (isim, sayı, bağlantı) gibi sorunlara neden olabilecek farklı dillerdeki yedek sözcüklerden kaçınmaya çalışın. Örneğin: link MS SQL'de kullanılabilir, ancak MySQL'de ayrılmıştır.

Bu materyal, günlük işler için kısa bir referanstır ve belirli bir veritabanı için birincil SQL sorguları kaynağı olan süper mega yetkili bir kaynak olduğunu iddia etmez.

Her birimiz düzenli olarak karşılaşıyoruz ve çeşitli veritabanlarını kullanıyoruz. Bir e-posta adresi seçtiğimizde, bir veritabanı ile çalışıyoruz. Veritabanları, müşteri verilerini depolamak için arama motorlarını, bankaları vb. kullanır.

Ancak, veritabanlarının sürekli kullanımına rağmen, birçok yazılım sistemi geliştiricisi için bile, aynı terimlerin farklı yorumlarından dolayı birçok "boşluk" vardır. SQL diline bakmadan önce temel veritabanı terimlerinin kısa bir tanımını vereceğiz. Böyle.

Veri tabanı - sıralı veri yapılarını ve bunların ilişkilerini depolamak için bir dosya veya dosya grubu. Çoğu zaman bir kontrol sistemine veritabanı denir - bu yalnızca belirli bir biçimde bilgilerin depolanmasıdır ve çeşitli DBMS ile çalışabilir.

tablo - Belirli bir kritere göre gruplandırılmış belgeleri saklayan bir klasör düşünün, örneğin geçen aya ait siparişlerin bir listesi. Bu bilgisayardaki tablodur.Ayrı bir tablonun kendi benzersiz adı vardır.

Veri tipi - ayrı bir sütun veya satırda saklanmasına izin verilen bilgi türü. Bunlar, belirli bir biçimde sayılar veya metin olabilir.

Sütun ve satır- hepimiz aynı zamanda satırları ve sütunları olan elektronik tablolarla çalıştık. Herhangi bir ilişkisel veritabanı, tablolarla benzer şekilde çalışır. Çizgilere bazen kayıt denir.

Birincil anahtar- tablonun her satırı, benzersiz tanımlaması için bir veya daha fazla sütuna sahip olabilir. Birincil anahtar olmadan, gerekli satırları güncellemek, değiştirmek ve silmek çok zordur.

SQL nedir?

SQL(İngilizce - yapılandırılmış sorgu dili) yalnızca veritabanlarıyla çalışmak için geliştirilmiştir ve şu anda tüm popüler VTYS için standarttır. Dilin sözdizimi az sayıda operatörden oluşur ve öğrenmesi kolaydır. Ancak, dış basitliğine rağmen, herhangi bir boyuttaki bir veritabanı ile karmaşık işlemler için sql sorgularının oluşturulmasına izin verir.

1992'den beri, ANSI SQL adı verilen genel kabul görmüş bir standart vardır. Operatörlerin temel sözdizimini ve işlevlerini tanımlar ve ORACLE gibi DBMS pazarının tüm liderleri tarafından desteklenir.Dilin tüm özelliklerini küçük bir makalede ele almak imkansızdır, bu nedenle sadece temel SQL sorgularını kısaca ele alacağız. . Örnekler, dilin basitliğini ve yeteneklerini açıkça göstermektedir:

  • veritabanlarının ve tabloların oluşturulması;
  • Veri işleniyor;
  • kayıt ekleme;
  • bilgilerin değiştirilmesi ve silinmesi.

SQL veri türleri

Bir veritabanı tablosundaki tüm sütunlar aynı veri türünü depolar. SQL'deki veri türleri, diğer programlama dillerindeki ile aynıdır.

Tablolar ve veritabanları oluşturun

SQL'de yeni veritabanları, tablolar ve diğer sorgular oluşturmanın iki yolu vardır:

  • DBMS konsolu aracılığıyla
  • Veritabanı sunucusuyla birlikte verilen çevrimiçi yönetim araçlarını kullanma.

Operatör tarafından yeni bir veritabanı oluşturulur VERİTABANI YARAT<наименование базы данных>; ... Gördüğünüz gibi, sözdizimi basit ve özlü.

CREATE TABLE deyimi ile veritabanı içerisinde aşağıdaki parametrelerle tablolar oluşturuyoruz:

  • Tablo ismi
  • sütun adları ve veri türleri

Örnek olarak, aşağıdaki sütunlarla bir Emtia tablosu oluşturalım:

Bir tablo oluşturuyoruz:

TABLO OLUŞTUR

(commodity_id CHAR (15) NULL DEĞİL,

satıcı_kimliği CHAR (15) NULL DEĞİL,

emtia_adı CHAR (254) NULL,

emtia_price ONDALIK (8,2) BOŞ,

meta_desc VARCHAR (1000) BOŞ);

Tablonun beş sütunu vardır. Adın ardından veri türü gelir, sütunlar virgülle ayrılır. Sütun değeri boş (NULL) olabilir veya doldurulması gerekir (BOŞ DEĞİL) ve bu, tablo oluşturulduğunda belirlenir.

Bir tablodan veri alma

Veri seçme operatörü, en sık kullanılan SQL sorgularıdır. Bilgi almak için böyle bir tablodan neyi seçmek istediğimizi belirtmek gerekir. Basit bir örnekle başlayalım:

Emtiadan emtia_adı SEÇİN

SELECT deyiminden sonra bilgiyi alacağımız sütunun adını belirtiriz ve FROM tabloyu tanımlar.

Sorguyu yürütmenin sonucu, veritabanına girildikleri sırayla Commodity_name değerlerine sahip tablonun tüm satırları olacaktır, yani. herhangi bir sıralama olmadan. Sonucu sıralamak için ek bir ORDER BY deyimi kullanılır.

Birkaç alanla ilgili bir sorgu için, bunları aşağıdaki örnekte olduğu gibi virgülle ayırarak listeleriz:

Emtiadan emtia_id, emtia_adı, emtia_fiyatını SEÇİN

Bir sorgu sonucunda bir satırın tüm sütunlarının değerini almak mümkündür. Bunu yapmak için "*" işaretini kullanın:

* SEÇİMİ ÜRÜNDEN

  • Ayrıca SELECT şunları destekler:
  • Verileri sıralama (ORDER BY operatörü)
  • Koşullara göre seçim (NEREDE)
  • Gruplandırma terimi (GROUP BY)

satırı ekle

Tabloya satır eklemek için INSERT deyimi ile SQL sorguları kullanılır. Ekleme üç şekilde yapılabilir:

  • yeni bir bütün satır ekleyin;
  • bir dizinin parçası;
  • sorgu sonuçları.

Tam bir satır eklemek için tablo adını ve yeni satırın sütunlarının (alanlarının) değerlerini belirtmelisiniz. Bir örnek verelim:

Emtia DEĞERLERİNE EKLE ("106", "50", "Coca-Cola", "1,68", "Alcogol Yok,)

Örnek, tabloya yeni bir ürün ekler. Değerler her sütun için DEĞERLER'den sonra belirtilir. Sütun için karşılık gelen bir değer yoksa, NULL belirtilmelidir. Sütunlar, tablo oluşturulurken belirtilen sırada değerlerle doldurulur.

Bir satırın yalnızca bir bölümünü eklerseniz, örnekte olduğu gibi sütunların adlarını açıkça belirtmeniz gerekir:

INSERT INTO Commodity (commodity_id, satıcı_id, emtia_name)

DEĞERLER ("106", '50 "," Coca-Cola ",)

Sadece ürün, tedarikçi ve isminin tanımlayıcılarını girdik ve geri kalan alanları boş bıraktık.

Sorgu Sonuçları Ekleme

INSERT esas olarak satır eklemek için kullanılır, ancak bir SELECT ifadesinin sonuçlarını eklemek için de kullanılabilir.

Veri değişikliği

Veritabanı tablosunun alanlarındaki bilgileri değiştirmek için UPDATE deyimini kullanmanız gerekir. Operatör iki şekilde kullanılabilir:

  • Tablodaki tüm satırlar güncellenir.
  • Yalnızca belirli bir hat için.

UPDATE'in üç ana unsuru vardır:

  • değişiklik yapmanız gereken tablo;
  • alan adları ve yeni değerleri;
  • değiştirilecek satırları seçme koşulları.

Bir örneğe bakalım. Diyelim ki ID = 106 olan bir öğenin maliyeti değişti, bu yüzden bu satırın güncellenmesi gerekiyor. Aşağıdaki operatörü yazıyoruz:

GÜNCELLEME Emtia SET emtia_fiyat = "3.2" WHERE emtia_id = "106"

Tablonun adını, bizim durumumuzda, güncellemenin yapılacağı Commodity'yi, ardından SET'ten sonra - sütunun yeni değerini belirttik ve WHERE'de gerekli ID değerini belirterek gerekli kaydı bulduk.

Birden çok sütunu değiştirmek için, SET deyiminden sonra virgülle ayrılmış birden çok sütun-değer çifti belirtilir. Bir ürünün adını ve fiyatını güncelleyen bir örnek görelim:

GÜNCELLEME Emtia SET emtia_adı = 'Fanta', emtia_fiyat = "3.2" WHERE emtia_id = "106"

Bir sütundaki bilgileri kaldırmak için tablo yapısı izin veriyorsa onu NULL olarak ayarlayabilirsiniz. NULL'un tam olarak "hayır" bir değer olduğu ve metin veya sayı biçiminde sıfır olmadığı unutulmamalıdır. Ürün açıklamasını silelim:

GÜNCELLEME Emtia AYARLA emtia_desc = NULL WHERE emtia_id = "106"

Satırları Silme

Bir tablodaki satırları silmek için SQL sorguları DELETE deyimi tarafından yürütülür. İki kullanım durumu vardır:

  • tablodaki belirli satırlar silinir;
  • tablodaki tüm satırlar silinir.

Tablodan bir satır silme örneği:

Emtiadan SİL WHERE emtia_id = "106"

DELETE FROM'dan sonra satırların silineceği tablonun adını belirtiyoruz. WHERE yan tümcesi, silinecek satırların seçileceği bir koşul içerir. Örnekte ID = 106 olan ürün için satırı siliyoruz. NEREDE belirtmek çok önemlidir. bu ifadenin atlanması tablodaki tüm satırları siler. Bu, alanların değerini değiştirmek için de geçerlidir.

DELETE deyimi, sütun adlarını veya meta karakterleri içermez. Satırları tamamen siler, ancak tek bir sütunu silemez.

SQL'i Microsoft Access'te Kullanma

Genellikle etkileşimli olarak tablolar, veritabanları oluşturmak, bir veritabanındaki verileri yönetmek, değiştirmek, analiz etmek ve SQL Access sorgularını herhangi bir SQL ifadesini oluşturabileceğiniz ve hemen uygulayabileceğiniz uygun bir etkileşimli sorgu tasarımcısı (Sorgu Tasarımcısı) aracılığıyla gömmek için kullanılır. karmaşıklık...

Access DBMS'nin herhangi bir ODBC veri kaynağına yönelik bir SQL sorgusu oluşturucusu olarak kullanılabileceği sunucuya erişim modu da desteklenir. Bu yetenek, Access uygulamalarının herhangi bir formatla etkileşim kurmasını sağlar.

SQL uzantıları

SQL sorguları, döngüler, dallar vb. gibi prosedürel programlama dillerinin tüm yeteneklerine sahip olmadığından, veritabanı satıcıları gelişmiş yeteneklerle kendi SQL sürümlerini geliştirir. Her şeyden önce, bu, saklı yordamlar ve yordamsal dillerin standart operatörleri için destektir.

Dilin en yaygın lehçeleri:

  • Oracle Veritabanı - PL / SQL
  • Interbase, Firebird - PSQL
  • Microsoft SQL Server - Transact-SQL
  • PostgreSQL - PL / pgSQL.

İnternette SQL

MySQL, GNU Genel Kamu Lisansı altında dağıtılmaktadır. Özel modüller geliştirme yeteneğine sahip ticari bir lisans vardır. Entegre bir parça olarak, XAMPP, WAMP ve LAMP gibi İnternet sunucularının en popüler derlemelerine dahil edilir ve İnternette uygulama geliştirmek için en popüler DBMS'dir.

Sun Microsystems tarafından geliştirilmiştir ve şu anda Oracle Corporation tarafından desteklenmektedir. 64 terabayta kadar veritabanları, SQL: 2003 sözdizimi standardı, veri tabanı replikasyonu ve bulut hizmetleri desteklenir.

Tablo ifadeleri alt sorgular adlandırılır ve tablonun bulunmasının beklendiği yerde kullanılır. İki tür tablo ifadesi vardır:

    türetilmiş tablolar;

    genelleştirilmiş tablo ifadeleri.

Bu iki tablo ifadesi biçimi aşağıdaki alt bölümlerde tartışılmaktadır.

türetilmiş tablolar

türetilmiş tablo sorgunun FROM yan tümcesinde bulunan bir tablo ifadesidir. SQL çevirmeni, takma ad bilinmeden önce başka bir ifadeyi işlediğinden, sütun takma adları uygun olmadığında türetilmiş tablolar kullanılabilir. Aşağıdaki örnek, takma ad bilinmeden önce başka bir tümcenin işlendiği bir durumda bir sütun takma adı kullanmaya çalışır:

SampleDb'yi KULLANIN; Works_on GROUP BY enter_month olarak enter_month olarak AY (EnterDate) SEÇİN;

Bu sorguyu çalıştırmaya çalışmak aşağıdaki hata mesajıyla sonuçlanacaktır:

Mesaj 207, Seviye 16, Durum 1, Satır 5 Geçersiz sütun adı "enter_month". (Mesaj 207: Düzey 16, Durum 1, Satır 5 Geçersiz sütun adı enter_ay)

Hatanın nedeni, GROUP BY yan tümcesinin ilişkili SELECT listesi işlenmeden önce işlenmesi ve bu grup işlenirken enter_month sütun diğer adının bilinmemesidir.

FROM yan tümcesi GROUP BY yan tümcesinden önce yürütüldüğünden, bu sorun, önceki sorguyu içeren (GROUP BY yan tümcesi olmadan) türetilmiş bir tablo kullanılarak çözülebilir:

SampleDb'yi KULLANIN; FROM enter_month FROM'u (SELECT MONTH (EnterDate) olarak enter_month FROM Works_on) SEÇİN m GROUP BY enter_month;

Bu sorguyu çalıştırmanın sonucu şöyle olacaktır:

Tipik olarak, tablo ifadesi, SELECT deyiminde tablo adının görünebileceği herhangi bir yere yerleştirilebilir. (Tablo ifadesinin sonucu her zaman bir tablo veya özel durumlarda bir ifadedir.) Aşağıdaki örnek, bir SELECT ifadesinin seçim listesinde bir tablo ifadesinin kullanımını gösterir:

Bu sorgunun sonucu:

Genelleştirilmiş tablo ifadeleri

Ortak Tablo İfadesi (CTE) Transact-SQL dili tarafından desteklenen adlandırılmış bir tablo ifadesidir. Genel tablo ifadeleri aşağıdaki iki tür sorguda kullanılır:

    özyinelemeli olmayan;

    özyinelemeli.

Bu iki istek türü aşağıdaki bölümlerde tartışılmaktadır.

OTB ve özyinelemeli olmayan sorgular

Türetilmiş tablolara ve görünümlere alternatif olarak özyinelemeli olmayan OTB formunu kullanabilirsiniz. Genellikle OTB tarafından tanımlanır İLE cümleleri ve WITH yan tümcesinde kullanılan ada başvuran isteğe bağlı bir sorgu. WITH anahtar sözcüğü Transact-SQL'de belirsizdir. Belirsizliği önlemek için, WITH yan tümcesinden önceki ifadeyi noktalı virgülle sonlandırın.

AdventureWorks2012'yi KULLANIN; Sales.SalesOrderHeader WHERE TotalDue>'DAN SalesOrderID SEÇİN 2.5;

Bu örnekteki sorgu, toplam vergileri (TotalDue) tüm vergiler için ortalamadan büyük olan ve navlun ücretleri (Navlun) vergiler için ortalamanın %40'ından büyük olan siparişleri seçer. Alt sorgunun iki kez yazılması gerektiğinden, bu sorgunun ana özelliği hacmidir. Sorgu yapısının boyutunu küçültmenin olası bir yolu, alt sorgu içeren bir görünüm oluşturmaktır. Ancak bu çözüm biraz zordur, çünkü bir görünüm oluşturmayı ve ardından sorgu yürütmesinin bitiminden sonra onu silmeyi gerektirir. En iyi yaklaşım bir OTB oluşturmak olacaktır. Aşağıdaki örnek, yukarıdaki sorgu tanımını kısaltan özyinelemeli olmayan OTB kullanımını göstermektedir:

AdventureWorks2012'yi KULLANIN; price_calc (yıl_2005) OLARAK (Sales.SalesOrderHeader NERDEN ORTALAMA (TotalDue) SEÇİN YEAR (OrderDate) = "2005") Sales.SalesOrderHeader NERDEN TotalDue> (fiyat_hesabından) VE Fre2005'TEN YIL_2005 SEÇİN) /2.5;

Yinelemeli olmayan sorgularda WITH yan tümcesinin sözdizimi şöyledir:

cte_name parametresi, sonuçtaki tabloyu tanımlayan OTB adını temsil eder ve column_list parametresi, tablo ifadesindeki sütunların listesini temsil eder. (Yukarıdaki örnekte OTB, fiyat_hesabı olarak adlandırılmıştır ve bir sütunu vardır, yıl_2005.) inner_query parametresi, karşılık gelen tablo ifadesinin sonuç kümesini tanımlayan bir SELECT ifadesini temsil eder. Tanımlanan tablo ifadesi daha sonra external_query dış sorgusunda kullanılabilir. (Yukarıdaki örnekteki dış sorgu, çift iç içe sorguyu basitleştirmek için OTB price_calc ve onun year_2005 sütununu kullanır.)

OTB ve özyinelemeli sorgular

Bu bölüm, artan karmaşıklıktaki materyali sunar. Bu nedenle, ilk kez okurken, onu atlayıp daha sonra geri dönmeniz önerilir. OTB'ler kendilerine referanslar içerebildiğinden, OTB'ler özyinelemeler uygulayabilir. Özyinelemeli bir sorgu için temel OTB sözdizimi şöyle görünür:

cte_name ve column_list parametreleri, özyinelemeli olmayan sorgular için OTB'dekiyle aynı anlama sahiptir. WITH yan tümcesi gövdesi, operatör tarafından birleştirilen iki sorgudan oluşur BİRLİK TÜMÜ... İlk sorgu yalnızca bir kez çağrılır ve özyinelemenin sonucunu toplamaya başlar. UNION ALL operatörünün ilk işleneni OTB'ye atıfta bulunmaz. Bu sorguya başvuru sorgusu veya kaynak denir.

İkinci istek, OTB'ye bir bağlantı içerir ve özyinelemeli kısmını temsil eder. Bu nedenle özyinelemeli üye olarak adlandırılır. Özyinelemeli kısma yapılan ilk çağrıda, OTB referansı, referans sorgusunun sonucunu temsil eder. Özyinelemeli üye, sorguya yapılan ilk çağrının sonucunu kullanır. Bundan sonra sistem yinelemeli kısmı tekrar çağırır. Özyinelemeli bir üyeye yapılan çağrı, önceki çağrı boş bir sonuç kümesi döndürdüğünde sonlandırılır.

UNION ALL operatörü, mevcut çağrı tarafından özyinelemeli üyeye eklenen ek dizilerin yanı sıra, o anda birikmiş dizileri birleştirir. (UNION ALL operatörünün varlığı, yinelenen satırların sonuçtan kaldırılmayacağı anlamına gelir.)

Son olarak, external_query parametresi, her iki üyenin birleşimine yapılan tüm çağrıları almak için OTB'yi kullanan bir dış sorgu tanımlar.

Özyinelemeli bir OTB formunu göstermek için, aşağıdaki örnekte gösterilen kodla tanımlanmış ve doldurulmuş Uçak tablosunu kullanıyoruz:

SampleDb'yi KULLANIN; CREATE TABLE Uçak (ContainingAssembly VARCHAR (10), ContainedAssembly VARCHAR (10), QuantityContained INT, UnitCost DECIMAL (6,2)); UÇAK DEĞERLERİNE EKLE ("Uçak", "Gövde", 1, 10); UÇAK DEĞERLERİNE EKLE ("Uçak", "Kanatlar", 1, 11); Uçak DEĞERLERİNE EKLE ("Uçak", "Kuyruk", 1, 12); UÇAK DEĞERLERİNE EKLE ("Gövde", "Salon", 1, 13); UÇAK DEĞERLERİNE EKLE ("Gövde", "Kabin", 1, 14); UÇAK DEĞERLERİNE EKLE ("Gövde", "Burun", 1, 15); Uçak DEĞERLERİNE EKLE ("Salon", NULL, 1.13); Uçak DEĞERLERİNE EKLE ("Kabin", NULL, 1, 14); Uçak DEĞERLERİNE EKLE ("Burun", NULL, 1, 15); Uçak DEĞERLERİNE EKLE ("Kanatlar", NULL, 2, 11); Uçak DEĞERLERİNE EKLE ("Kuyruk", NULL, 1, 12);

Uçak tablosunun dört sütunu vardır. ContainingAssembly sütunu montajı tanımlar ve ContainedAssembly sütunu, ilgili montajı oluşturan parçaları (birbiri ardına) tanımlar. Aşağıdaki şekil, olası bir uçak tipinin ve onu oluşturan parçaların grafiksel bir gösterimini sağlar:

Uçak tablosu aşağıdaki 11 satırdan oluşur:

Aşağıdaki örnek, her bir montajın toplam maliyetini hesaplayan bir sorguyu tanımlamak için kullanılan WITH yan tümcesini göstermektedir:

SampleDb'yi KULLANIN; İLE list_of_parts (montaj1, miktar, maliyet) AS (İçerenAssembly, QuantityContained, Uçaktan UnitCost'u SeçinAssembly NULL OLARAK BİRLİK TÜMÜNÜ SEÇİN a.ContainingAssembly, a.QuantityContained, CAST (l.miktar * l.,2) ONDALIK OLARAK ) list_of_parts l'DEN, Uçak a WHERE l.assembly1 = a.ContainedAssembly) Montaj1 "Parça", miktar "Miktar", maliyet "Fiyat" DAN list_of_parts;

WITH yan tümcesi, üç sütunlu list_of_parts adlı bir OTB listesi tanımlar: montaj1, miktar ve maliyet. Örnekteki ilk SELECT ifadesi, özyineleme işleminin ilk adımının sonuçlarını korumak için yalnızca bir kez çağrılır. Örneğin son satırındaki SELECT ifadesi aşağıdaki sonucu görüntüler.

Son güncelleme: 07/05/2017

Bir önceki konuda, SQL Management Studio'da tek tablolu basit bir veritabanı oluşturuldu. Şimdi ilk SQL sorgusunu tanımlayıp çalıştıralım. Bunu yapmak için SQL Management Studio'yu açın, Nesne Gezgini'nde (sunucu adı) üst düzey öğeye sağ tıklayın ve görüntülenen içerik menüsünde Yeni Sorgu'yu seçin:

Bundan sonra, programın orta kısmında SQL komutlarını girmek için bir pencere açılacaktır.

Bir önceki konuda oluşturulan tabloya bir sorgu çalıştıralım özellikle ondan tüm verileri alacağız. Veritabanımızın adı üniversite ve tablo dbo.Students yani tablodan veri almak için aşağıdaki sorguyu gireceğiz:

*ÜNİVERSİTE.DBO.ÖĞRENCİLERDEN SEÇİNİZ

SELECT ifadesi, verileri seçmenizi sağlar. FROM, verilerin nereden alınacağını belirtir. Aslında bu sorgu ile "tüm tablodan üniversite.dbo.Students SEÇ" diyoruz. Tablonun adı için, veritabanını ve şemayı gösteren tam yolunun kullanıldığını belirtmekte fayda var.

Sorguyu girdikten sonra araç çubuğundaki Yürüt düğmesine tıklayın veya F5 tuşuna basabilirsiniz.

Sorgu yürütmenin bir sonucu olarak, programın alt kısmında sorgu sonuçlarını, yani Öğrenciler tablosundaki tüm verileri görüntüleyen küçük bir tablo görünür.

Aynı veritabanına birden fazla sorgu yapmamız gerekiyorsa, veritabanını işlemek için USE komutunu kullanabiliriz. Bu durumda tablolara sorgu yapılırken veritabanı ve şema ismi olmadan isimlerini belirtmek yeterlidir:

ÜNİVERSİTE KULLANIN SEÇİMİ * Öğrencilerden

Bu durumda sunucunun tamamı için bir istek gerçekleştiriyoruz, sunucu üzerindeki herhangi bir veritabanına erişebiliyoruz. Ancak sorguları yalnızca belirli bir veritabanında da yürütebiliriz. Bunu yapmak için, gerekli veritabanına sağ tıklayın ve içerik menüsünden Yeni Sorgu öğesini seçin:

Bu durumda Öğrencinin yukarıda kullandığı tabloya bir sorgu yapmak istersek, bu değerler zaten net olacağından sorguda veritabanının adını ve şemayı belirtmemize gerek kalmayacaktır.