MySQL sorgularda, neden kullanın katılmak yerine nerede?
İki veya daha fazla tabloyu birleştirmek için, ya da katılmak ya da nerede kullanabiliriz gibi görünüyor. Diğer bir avantajları nelerdir?
CEVAP
Herhangi bir sorgu birden fazla tablo içeren Derneği çeşit tablo sonuçlarını bağlantısı gerektirir "" tablo "B". Bunu yapmanın (ANSI-89) geleneksel anlamına gelir
- Yan tabloları virgülle ayrılmış bir liste dahil liste
WHERE tablolar arasındaki ilişkiyi yazma
SELECT * FROM TABLE_A a, TABLE_B b WHERE a.id = b.id
Burada yeniden yazılmış ANSI-92 kullanarak sorgu sözdizimi KATILIN:
SELECT *
FROM TABLE_A a
JOIN TABLE_B b ON b.id = a.id
Bir Performans açısından:
(Oracle 9i , 3.23 , SQL Server 2000 7.2 MySQL , PostgreSQL) desteklediği, ya da sözdizimi kullanarak performans yararı yoktur. Doktoru aynı sorgu gibi görüyor. Ama daha karmaşık sorgular ANSI-92 sözdizimi kullanarak yararlanabilir:
- Sipariş kontrol KATILMAK için yeteneği - tablo taranır olan düzen
- Yetenek katılmadan önce bir tabloda süzme ölçütleri uygulamak için
Bakım açısından:
Orada ANSI-92 kullanmak için birçok sebep ANSI-89: sözdizimi KATIL
- Daha okunaklı olarak KATILMAK ölçüt WHERE yan tümcesi ayrıdır
- Daha az kriterleri Bayan KATILMAK için
- Tutarlı sözdizimi türleri İÇ dışında KATILMAK için, sorguları ve diğer veritabanı kullanımı kolay destekler
- Sadece tabloların kartezyen ürünün filtrasyon olarak hizmet katıldı
Tasarım Bakış açısından:
ANSI-92 sözdizimi desen KATIL, anti-deseni:
- Sorgu amacı daha belirgin; sütunlar uygulama tarafından kullanılan açık
- Mümkün olduğunca sıkı yazarak kullanarak ilgili modüler kuralı izler. Açık neredeyse evrensel olarak daha iyi.
Sonuç
Benzerlik ve/veya konfor kısa, ANSI-89 kullanmaya devam etmek için herhangi bir fayda sözdizimi yerine ANSI-92 sözdizimi KATILIN görmüyorum. Bazı ANSI-92 sözdizimi daha ayrıntılı şikayet olabilir, ama bu onu açık kılan da bu. Daha açık, daha kolay anlamak ve korumak için.
Neden metin dosyaları Apache tarafında...
Adı yerine olabilirdi kullanın neden J...
Neden kullanın .h1 yerine gerçek h1?...
Neden EventArgs kullanın.Null yerine b...
Neden kullanın .() AsEnumerable IEnume...