| Makale Tarihi : 18 Temmuz 2000
Yazan:Can Kaynak |
|
SQL Sorgulama Dili,Yerel SQL ve Dil Takımı
SQL Sorgulama Dili adı altında yeni bir makale dizisine başladık
"SQL sorgulama dili" adlı makale dizimiz bittikten sonra
"Veritabanı Uygulamaları Geliştirmek" adlı makale dizimize TQuery bileşeni
ile devam edeceğiz. Makale dizimizin bu bölümünde SQL sorgulama dilinin Borland
firması tarafından geliştirilen türevi Yerel SQL sorgulama dilini anlatacağız.
Ayrıca Yerel SQL'in dil takımı üzerinde de duracağız.Yerel SQL dil takımında tablo
isimlerinin, saha isimlerinin ve referansların, tarih ve zaman biçimlemelerinin, boolean
ifadelerin kendine ait yazım kurallarını anlatacağız.SQL Sorgulama dilini bilen
kişilerin bile bu makale dizisini dikkatle takip etmesini tavsiye ederim.
Yerel SQL
Yerel SQL Nedir?
Yerel SQL dBASE, Paradox ve FoxPro tablolarına ulaşmak için kullanılan SQL-92
standartının bir alt türevidir. Yerel SQL ifadelerine uygulamalardan erişilirken, BDE
bu ifadeleri BDE API fonksiyonlarına dönüştürür.
SQL ifadeleri iki katagoriye ayrılır: Veri İşletme Dili (DML) ve Veri Tanımlama
Dili (DDL)
DML tablo verilerini taramak,eklemek,güncellemek, silmek için kullanılan SQL ifadeleri
içerir. Örnek olarak SELECT bir DML ifadesidir.
DDL tabloları yaratmak, değiştirmek, ve silmek için kullanılan SQL ifadelerini
içerir. Örnek olarak CREATE TABLE ve DROP INDEX DDL SQL ifadelerindendir.
Yerel SQL Dil Takımı
Bu makale dizisinde vereceğim örneklerin daha iyi anlaşılabilmesi için önce size
SQL anlatım geleneklerini anlatmayı uygun gördüm.
vereceğim örneklerde tüm SQL örnekleri Courier New fontunda olacaktır. Ayrıca
yerel SQL büyük küçük harf duyarlı olmasa da dil elemenlteri ile diğer elementleri
kolayca ayırabilmeniz için tüm dil elementleri büyük harfle diğer elementler ise
küçük harflae yazılmıştır.
Örneklerde kullanılma imkanı bulunan fakat kullanmak zorunda olmadığınız dil
elementleri köşeli parantez ( [ ve ] ) arasına alınacaktır. Örneğin aşağıdaki
örnekte DISTINCT anahtar kelimesi seçimliktir.
SELECT [DISTINCT] *
Örneklerde birden çok seçenekten birini seçmek söz konusu ise seçenekler dikey
çubuk karakteri ayrılacaktır. Örneğin aşağıdaki gibi bir SQL ifadesinde bir saha
referansı için ASC yada DESC ifadelerinden sadece biri kullanılabilir. Aynı zamanda bu
ASC veDESC ifadeleri seçimliktir.
ORDER BY saha_referansi [ASC | DESC]
Not: Kesinlikle tek dikey çubuk karakterini SQL dilinde kullanılan çift
çubuk karakterleri ile karıştırmayın.( | | )
Yerel SQL kullanılırken bazı kurallara uyulması gerekir örneğin SQL ifadelerinden
komutlarından yada fonksiyonlarıdan herhangi birini değişken, saha
referansı,Parametre vb. olarak kullanamazsınız. Ayrıca tablo isimlerinin, saha
isimlerinin ve referanslarıın, tarih ve zaman biçimlemelerinin, boolean ifadelerin
kendine göre yazım kuralları vardır. Bu tanımlamalar aşağıda verilmiştir.
Tablo İsimleri:
ANSI-standard SQL'de, tablo isimleri Türkçe karakterler içermeyen tek bir kelimeden
yada aralarında boşluk yerine "_" karakteri içeren birden çok kelimeden
oluşabilir. Fakat Yerel SQL birden çok kelime içeren tablo isimlerine izin verir.
Yerel SQL tam dosya adı ve yol tanımlamalarına izin verir. Tablo tek yada çift
tırnak arasında bir dosya yolu yada dosya adı tanımlaması ile gösterilir.Örneğin:
SELECT *
FROM 'parts.dbf'
SELECT *
FROM "c:\örnek\parts.dbf"
Yerel SQL BDE alias tablo referanslarını da destekler. Örneğin:
SELECT *
FROM ":pdox:table1"
Eğer dosya uzantısını ihmal etmek istiyorsanız, tablonun tipi BDE'de varsayılan
tablo tipi olmalıdır. Yada SQL ifadenizde alias kullandığınız taktirde tablonun
uzantısını yoksayabiliriz.
Son olarak eğer tablonuzun adı SQL ifadelerinden biri ise bunu tek yada çift tırnak
arasına alarak kullanabiliriz. Örneğin:
SELECT passid
FROM "password"
Saha adları ve referansları:
ANSI-standard SQL'de, kolon isimleri ve referansları Türkçe karakterler içermeyen
tek bir kelimeden yada aralarında boşluk yerine "_" karakteri içeren birden
çok kelimeden oluşabilir. Fakat Yerel SQL birden çok kelime içeren kolon isimlerine ve
referanslarına izin verir.
Yerel SQL Paradox'un çok kelimeden oluşan saha isimlerini ve referanslarını
destekler.
Eğer Paradox tablosunun bir sahası SQL ifadesiyle aynı adı taşıyorsa tek yada
çift tırnakla çevrilerek kullanılır ve Önüne tablo adını yada tablo referansını
alır.Tablo adı yada referansı saha adı yada referansından bir nokta ile ayrılır.
Aşağıdaki örnekte saha adı iki kelimeden oluşmuştur:
SELECT E."Emp Id"
FROM employee E
Bir sonraki örnek DATE SQL anahtar kelimesini içeren bir saha adını nı nasıl
tanımlandığını gösterir:
SELECT datelog."date"
FROM datelog
Tarih Biçimleri:
Yerel SQL tarih tanımlarını Amerikan tarih biçimine göre ayarlar. Diğer tarih
biçimlerini desteklemez. Amerikan tarih biçimi AA/GG/YY yada AA/GG/YYYY olarak iki
çeşittir. Tarih kullanımımnda bir hataya mahal vermemek için tarih değerleri tek
yada çift tırnak içine alınırlar. Eğer tarih değerini tırnak içine almazsak
örneğin 17/7/2000 tarihini 17 bölü 7 bölü 2000 olarak algılayacaktır.Aşağıda
tarih değerinin SQL ifadelerinde nasıl kullanılacağına dair bir örnek verilmiştir.
SELECT *
FROM orders
WHERE (saledate <= "1/23/1998")
Tek haneli günlerin yada ayların başlarına sıfır eklemek seçimliktir.
Eğer yüzyıl yıl içinde tanımlanmamışsa BDE ayarlarından FOURDIGITYEAR
parametresi yüzyılı kontrol eder. Eğer FALSE ise yıllar sadece iki hane ile
tanımlanır. Eğer rakam 0 ile 49 arasında ise 21'ci yüzyılı 50 ile 99 arasında ise
20'ci yüzyılı tanımlar. Örneğin 5/5/1998 tarihi 5/5/98 olarak tanımlanır.
17/7/2000 tarihi ise 17/7/00 olarak tanımlanır. Eğer TRUE ise 17/7/00 tarihi Milattan
sonra 0'cı yıl olarak anlaşılır.
Zaman Biçimleri:
Yerel SQL saat biçimlerinin ss:dd:nn AM/PM (ss saat, dd dakika, nn saniye) olarak
ayarlanmasını ister. zaman değeri ile birlikte yeni bir kayıt eklerken AM/PM
kullanımı seçimliktir ve büyük küçük harf ayrımı yapılmaz (yani AM yerine am
yazabilirsiniz.)Tanımlama tırnak işaretleri arasında olmalıdır.
INSERT INTO WorkOrder
(ID, StartTime)
VALUES ("B00120","10:30:00 PM")
Eğer AM yada PM etiketlerinden herhangi biri kullanılmışsa bu yarım gün
uygulamasının kullanılacağı anlamına gelir ve saat 12 ile karşılaştırılır.
Eğer saat 12den küçükse AM büyükse PM olur Saat sahsı AM/PM tasarımını
değiştirebilir. Örneğin "15:03:22 AM" "3:03:22 PM" değerine
çevrilir.
Boolean ifadeler:
Boolean ifadeler TRUE ve FALSE tırnak işaretleri ile çevrilerek yada çevrilmeden
kullanılabilir.
SELECT *
FROM transfers
WHERE (paid = TRUE) AND NOT (incomplete = "FALSE")
Tablo Referans Adları:
tablo referans adları tablo ile bir kolonu ilişkilendirmek için kullanılır. bu
genellikle farklı tablolardan gelen adları aynı birden çok sahanın SQL ifadesi
içinde kullanılırken çok büyük kolaylık sağlar. Bir tablo referans adı FROM
ifadesinde tanımlanır.Bu tanımlayıcı yada tablo referans adıbir kolon adının ön
eki olarak kullanılabilir.
Eğer tablo ismi tırnak işaretleri arasında değilse tablo adı varsayılan referans
adı olarak kullanılır.
SELECT *
FROM customer
LEFT OUTER JOIN orders
ON (customer.custno = orders.custno)
Eğer tablo ismi tırnak işaretli bir ifade ise aşağıdaki gibi tırnak işaretleri
ile birlikte kullanabilirsiniz.
SELECT *
FROM "customer.db"
LEFT OUTER JOIN "orders.db"
ON ("customer.db".custno = "orders.db".custno)
Eğer tırnak işaretinin arasındaki ifade çok uzunsa bu tanımlamayı FROM
ifadesinden sonra başka bir ifadeye atayarak kullanabilirsiniz.
SELECT *
FROM "customer.db" CUSTOMER
LEFT OUTER JOIN "orders.db" ORDERS
ON (CUSTOMER.custno = ORDERS.custno)
Saha Refereansları:
Saha referansları bir sahayı,hesaplanan saha değer kümesini yada bir SQL ifadesini
ad olarak barındıran sahayı farklı bir adla tanımlamaya yarar. Saha referansları
kesinlikle çift tırnak arasına alınamaz. Bir saha referansı tanımlamak için saha
referansı tanımlanacak olan tanımlamadan sonra AS anahtar kelimesini kullanıp saha
referans adını AS anahtar kelimesinden sonra yazmalıyız.Aşağıdaki ifade de Sub ve
Word tanımlamaları saha referansıdır.
SELECT SUBSTRING(company FROM 1 FOR 1) AS sub,
"Text" AS word
FROM customer
Açıklama Tanımlamak:
Eğer SQL ifadenizin daha anlaşılır olmasını istiyorsanız içine açıklama
yazabilirsiniz. Açıklamanız /* ile başlayıp */ ile sona ermelidir. başlangıç ve
sondaki işaretler açıklama ile aynı satırda olmak zorunda değildir.
/*
Merhaba Televole
*/
SELECT SUBSTRING(company FROM 1 FOR 1) AS sub, "Text" AS word
FROM customer
Açıklamalar aynı zamanda SQL ifadeleri de içerebilirler İfadeleriniz eğer
Açıklama içinde ise yoksayılacaklardır.Açıklamalar özellikle SQL ifadelerinizi
test etmek istediğinizde çok işe yarat.Her satırı ayrı ayrı açıklama içine
alarak hatanın nerede olduğunu bulabilirsiniz.
SELECT company
FROM customer
/* WHERE (state = "TX") */
ORDER BY company
SQL tanımlı kelimeler:
SQL ifadeleri tanımlamak için bazı kelimeleri kullanmıştır. Biz sorgularımızda
bu isimleri kullanamayız. Eğer kullanırsanız Invalid use of keyword error hata
mesajını alırsınız.Aşağıda bahsettiğimiz ifadelerin alfabetik bir listesini
görüyorsunuz.
ACTIVE
ADD
ALL
AFTER
ALTER
AND
ANY
AS
ASC
ASCENDING
AT
AUTO
AUTOINC
AVG
BASE_NAME
BEFORE
BEGIN
BETWEEN
BLOB
BOOLEAN
BOTH
BY
BYTES
CACHE
CAST
CHAR
CHARACTER
CHECK
CHECK_POINT_LENGTH
COLLATE
COLUMN
COMMIT
COMMITTED
COMPUTED
CONDITIONAL
CONSTRAINT
CONTAINING
COUNT
CREATE
CSTRING
CURRENT
CURSOR
DATABASE
DATE
DAY
DEBUG
DEC
DECIMAL
DECLARE
DEFAULT
DELETE
DESC
DESCENDING
DISTINCT |
DO
DOMAIN
DOUBLE
DROP
ELSE
END
ENTRY_POINT
ESCAPE
EXCEPTION
EXECUTE
EXISTS
EXIT
EXTERNAL
EXTRACT
FILE
FILTER
FLOAT
FOR
FOREIGN
FROM
FULL
FUNCTION
GDSCODE
GENERATOR
GEN_ID
GRANT
GROUP
GROUP_COMMIT_WAIT_TIME
HAVING
HOUR
IF
IN
INT
INACTIVE
INDEX
INNER
INPUT_TYPE
INSERT
INTEGER
INTO
IS
ISOLATION
JOIN
KEY
LONG
LENGTH
LOGFILE
LOWER
LEADING
LEFT
LEVEL
LIKE
LOG_BUFFER_SIZE |
MANUAL
MAX
MAXIMUM_SEGMENT
MERGE
MESSAGE
MIN
MINUTE
MODULE_NAME
MONEY
MONTH
NAMES
NATIONAL
NATURAL
NCHAR
NO
NOT
NULL
NUM_LOG_BUFFERS
NUMERIC
OF
ON
ONLY
OPTION
OR
ORDER
OUTER
OUTPUT_TYPE
OVERFLOW
PAGE_SIZE
PAGE
PAGES
PARAMETER
PASSWORD
PLAN
POSITION
POST_EVENT
PRECISION
PROCEDURE
PROTECTED
PRIMARY
PRIVILEGES
RAW_PARTITIONS
RDB$DB_KEY
READ
REAL
RECORD_VERSION
REFERENCES
RESERV
RESERVING
RETAIN
RETURNING_VALUES
RETURNS
REVOKE
RIGHT |
ROLLBACK
SECOND
SEGMENT
SELECT
SET
SHARED
SHADOW
SCHEMA
SINGULAR
SIZE
SMALLINT
SNAPSHOT
SOME
SORT
SQLCODE
STABILITY
STARTING
STARTS
STATISTICS
SUB_TYPE
SUBSTRING
SUM
SUSPEND
TABLE
THEN
TIME
TIMESTAMP
TIMEZONE_HOUR
TIMEZONE_MINUTE
TO
TRAILING
TRANSACTION
TRIGGER
TRIM
UNCOMMITTED
UNION
UNIQUE
UPDATE
UPPER
USER
VALUE
VALUES
VARCHAR
VARIABLE
VARYING
VIEW
WAIT
WHEN
WHERE
WHILE
WITH
WORK
WRITE
YEAR |
AşağıdaYerel SQL'de bulunan operatörlerleri görüyorsunuz.Bu
operatörler kesinlikle hiç bir referansın yada ismin içinde kullanılamazlar.
| | | |
- |
* |
/ |
<> |
< |
> |
, |
| = |
<= |
>= |
~= |
!= |
^= |
( |
) |
Yerel SQL'in Desteklemediği Elementler:
Aşağıdaki SQL-92 elementleri Yerel SQL'de kullanılamazlar.
ALLOCATE CURSOR (Komut)
ALLOCATE DESCRIPTOR (Komut)
ALTER DOMAIN (Komut)
CASE (Deyim)
CHECK (Sabit)
CLOSE (Komut)
COALESCE (Deyim)
COMMIT (Komut)
CONNECT (Komut)
CONVERT (Fonksiyon)
CORRESPONDING BY (Deyim)
CREATE ASSERTION (Komut)
CREATE CHARACTER SET (Komut)
CREATE COLLATION (Komut)
CREATE DOMAIN (Komut)
CREATE SCHEMA (Komut)
CREATE TRANSLATION (Komut)
CREATE VIEW (Komut)
CROSS JOIN (İlişki Operatörü)
CURRENT_DATE (Fonksiyon)
CURRENT_TIME (Fonksiyon)
CURRENT_TIMESTAMP (Fonksiyon)
DEALLOCATE DESCRIPTOR (Komut)
DEALLOCATE PREPARE (Komut)
DECLARE CURSOR (Komut)
DECLARE LOCAL TEMPORARY TABLE (Komut)
DESCRIBE (Komut)
DISCONNECT (Komut)
DROP ASSERTION (Komut)
DROP CHARACTER SET (Komut)
DROP COLLATION (Komut)
DROP DOMAIN (Komut)
DROP SCHEMA (Komut) |
DROP TRANSLATION (Komut)
DROP VIEW (Komut)
EXCEPT (İlişki Operatörü)
EXECUTE (Komut)
EXECUTE IMMEDIATE (Komut)
FETCH (Komut)
FOREIGN KEY (Sabit)
GET DESCRIPTOR (Komut)
GET DIAGNOSTICS (Komut)
GRANT (Komut)
INTERSECT (İlişki Operatörü)
MATCH (Yüklem)
NATURAL (İlişki Operatörü)
NULLIF (Deyim)
OPEN (Komut)
OVERLAPS (Yüklem)
PREPARE (Komut)
REFERENCES (Sabit)
REVOKE (Komut)
ROLLBACK (Komut)
Row value constructorsSET CATALOG (Komut)
SET CONNECTION (Komut)
SET CONSTRAINTS MODE (Komut)
SET DESCRIPTOR (Komut)
SET NAMES (Komut)
SET SCHEMA (Komut)
SET SESSION AUTHORIZATION (Komut)
SET TIME ZONE (Komut)
SET TRANSACTION (Komut)
TRANSLATE (Fonksiyon)
UNIQUE (Yüklem)
USING (İlişki Operatörü) |
Yarın Veri İşletme Dili (DML)
Eğer Bu çalışmalarımı
desteklemek istiyorsanız lütfen aşağıdaki Linke tıklayıp üye olun. Tamamen
ücretsiz olan bu site;size 25 MB yer veriyor.Bana da 1$ veriyor. Böylece daha fazla
yazma şevki oluşacak ve size daha kaliteli bilgi verebileceğim.Unutmayın Ben
Size yardım için hep buradayım ve burada olacağım.

|