Outer Joinin Doğru Kullanımı

Outer join kullanırken dikkat edilmesi gereken basit ancak fazla bilinmediğini düşündüğüm bir nokta var.

Bir SELECT cümlesinde outer join kullanıldığında, kullanılan tablo üzerinde başka where conditionları varsa sorgu outer join yokmuş gibi çalışıyor.

Bu nedenle aynı tablo üzerindeki kolonlarla ilgili diğer where conditionlarına da outer join(+) eklenmesi gerekiyor.

Aşağıdaki script incelenirse konu daha iyi anlaşılacaktır diye düşünüyorum.

  1. SQL doğru data getiren ekstra condition olmayan outer join örneği
  2. SQL yanlış data getiren outer join örneği
  3. SQL doğru data getiren 2. SQL deki eksikliğin giderildiği outer join örneği

DROP TABLE OUTER_DENEME

/

DROP TABLE OUTER_DENEME2

/

CREATE TABLE OUTER_DENEME(NO NUMBER,AD VARCHAR2(10))

/

CREATE TABLE OUTER_DENEME2(NO NUMBER,AD VARCHAR2(10))

/

BEGIN

INSERT INTO OUTER_DENEME VALUES (1,’ERSIN’);

INSERT INTO OUTER_DENEME VALUES (2,’SELAMİ’);

INSERT INTO OUTER_DENEME VALUES (3,’VELİ’);

INSERT INTO OUTER_DENEME2 VALUES (1,’ERSIN’);

INSERT INTO OUTER_DENEME2 VALUES (2,’SELAMİ’);

COMMIT;

END;

/

SELECT * FROM OUTER_DENEME A, OUTER_DENEME2 B

WHERE A.NO=B.NO (+)

/

SELECT * FROM OUTER_DENEME A, OUTER_DENEME2 B

WHERE A.NO=B.NO (+)

AND B.AD IS NOT NULL

/

SELECT * FROM OUTER_DENEME A, OUTER_DENEME2 B

WHERE A.NO=B.NO (+)

AND B.AD (+) IS NOT NULL

/

Yayınlandı: on 21 Ağustos 2007 at 3:01 pm Yorumlar (1)

Yazılımcılar için Güzel Bir Site

Bir çok programlama dili ile ilgili kullanım örneği bulabileceğiniz güzel bir site. Çok fazla google reklamı var ama siz onlara aldırış etmeyin :)

http://www.java2s.com

Yayınlandı: on at 2:01 pm Yorumlar (1)

ROW Yaratma Teknikleri(Oracle Row Generator Techniques)

Fazla söze gerek yok.

Aşağıdaki site de herşey çok açık bir şekilde anlatılıyor.

http://orafaq.com/wiki/Oracle_Row_Generator_Techniques

Sağlıcakla.

Yayınlandı: on 18 Mayıs 2007 at 9:22 am Yorumlar (1)

SQL ile Dans 1

Aşağıdaki şekilde bir datamız olduğunu düşünelim.

NO          CNT

15:3         5

20            10

Bu veriyi aşağıdaki şekle nasıl getirebiliriz ?

NO          CNT

15             5

3               5

20            10

İlk bakışta zor gibi görünüyor ancak, SQL’i biraz konuşturarak bu gayet mümkün.

ERSIN@XE> with t as
  2  (select ‘15:3′ no,5 cnt from dual union all
  3  select ‘20′,10 from dual)
  4  select distinct substr (s, instr(s,’:',1,l) + 1 , instr(s,’:',1,l+1) – instr(s,’:',1,l) – 1 ) n
o,cnt
  5  from (select cnt,’:’ || no || ‘:’ s, level l from t connect by level <= length(no) – length(rep
lace(no,’:')) + 1)
  6  order by cnt;

NO                              CNT
———————— ———-
15                                5
3                                 5
20                               10

 Kaynak : http://forums.oracle.com/forums/thread.jspa?forumID=75&threadID=507398

Yayınlandı: on 15 Mayıs 2007 at 10:51 am Yorum Yapın

DISTINCT ve GROUP BY Arasındaki Fark (DISTINCT vs GROUP BY)

      DISTINCT ve GROUP BY arasındaki fark İngilizce olarak bir çok yerde değinilmiş ancak Türkçesini göremediğimden yazmak istedim.  

      DISTINCT ve GROUP BY fonksiyonları tamamiyle aynı ya da çok yakın değerlerde Execution Plan üretmekte, dolayısıyla performans anlamında aralarında bir fark bulunmadığı söylenebilir.  Ancak yine de söylenene inanmayıp siz Execution Plan larını karşılaştırarak karar verin..

Eğer SUM,AVG vs. Aggregate SQL Fonksiyonları kullanıyorsanız, mutlak suretle “GROUP BY ” kullanmanız gerekiyor aksi taktirde “ORA-00937: not a single-group group function” hatası almanız muhtemel.

Eğer Aggregate  SQl fonksiyonları kullanmıyorsanız ikisinin arasında tercih yapabilirsiniz.

Kişisel olarak tek bir kolondaki unique değerleri görmek isteğimde “DISTINCT” ; bunun dışında “GROUP BY” fonksiyonunu kullanmayı tercih ediyorum.

Detay için Tom amca’ya başvurabilirsiniz:

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:32961403234212

Yayınlandı: on 13 Nisan 2007 at 9:29 am Yorumlar (1)

Transparent Data Encryption(TDE)

TDE is used to encrypt a table or one(or more) column of a table easily.

TDE bir tabloyu ya da bir tablodaki kolon ya da kolonları kolayca şifreleyip, data güvenliği sağlamak için kullanılabilecek bir yapı.

For details :http://www.oracle.com/technology/oramag/oracle/05-sep/o55security.html

Yayınlandı: on 6 Şubat 2007 at 4:59 pm Yorum Yapın

Tuning and Optimizing Red Hat Enterprise Linux for Oracle 9i and 10g Databases

Tuning and Optimizing Red Hat Enterprise Linux for Oracle 9i and 10g Databases.

http://www.puschitz.com/TuningLinuxForOracle.shtml

Yayınlandı: on 30 Ocak 2007 at 8:58 am Yorum Yapın

Oracle JDeveloper 10g — Online Demonstrations

Oracle JDeveloper’da yapılabilen pek çok geliştirme(EJB,Web Service, BPEL,ESB vs) için görsel videolar.

http://www.oracle.com/technology/products/jdev/viewlets/viewlet.html#webcenter

Yayınlandı: on at 8:55 am Yorum Yapın

Globally Unique Identifier Ya da Oracle ‘da Globally Unique Identifier kullanmak

Globally Unique Identifier(GUID)  biricik olması kesin olarak garanti edilmemekle birlikte 2128 or 3.40282366×1038

kadar sayı içinden kayıt üreteceğinden, ikinci defa aynı değeri üretmesi çok zor olduğundan biricik kabul edilebilir.

Oracle da SYS_GUID() fonksiyonu kullanılarak bir GUID üretilebilir.

Oracle özelinde detaylı bilgi için tıklayınız

Genel bilgi için : http://en.wikipedia.org/wiki/Globally_Unique_Identifier

======================================

A Globally Unique Identifier or GUID (IPA pronunciation: [gwɪd] or [’gu.ɪd]) is a pseudo-random number used in software applications. While each generated GUID is not guaranteed to be unique, the total number of unique keys (2128 or 3.40282366×1038) is so large that the probability of the same number being generated twice is very small.

The term GUID usually references Microsoft’s implementation of the UUID standard, however, many other pieces of software use the term GUID including Oracle Database and Novell eDirectory.

Yayınlandı: on 18 Ocak 2007 at 9:19 pm Yorum Yapın

DBMS_METADATA

Editör kullanmadan, Veri tabanı objelerinin metadatasını okumak için

Örneğin : dbms_metadata.get_ddl(‘TABLE’,‘DUAL’,‘SYS’);

=============================

With DBMS_METADATA you can retrieve complete database object definitions (metadata) from the dictionary by specifying:

  • The type of object, for example, tables, indexes, or procedures
  • Optional selection criteria, such as owner or name
  • Parse items (attributes of the returned objects that are to be parsed and returned separately).
  • Optional transformations on the output. By default the output is represented in XML, but callers can specify transformations (into SQL DDL, for example), which are implemented by XSLT (Extensible Stylesheet Language Transformation) stylesheets stored in the database or externally.

DBMS_METADATA provides the following retrieval interfaces:

  • For programmatic use: OPEN, SET_FILTER, SET_COUNT, GET_QUERY, SET_PARSE_ITEM, ADD_TRANSFORM, SET_TRANSFORM_PARAM, FETCH_xxx and CLOSE retrieve multiple objects.
  • For use in SQL queries and for browsing: GET_XML and GET_DDL return metadata for a single named object. The GET_DEPENDENT_XML, GET_DEPENDENT_DDL, GET_GRANTED_XML, and GET_GRANTED_DDL interfaces return metadata for one or more dependent or granted objects.
Yayınlandı: on at 9:18 pm Yorum Yapın