MySQL'de nasıl ustalaşılır?


13

Ben PHP kullanarak aynı süre için mysql kullanıyorum. Ancak PHP'de yaklaşık 10 kat daha fazla güveniyorum; veya başka bir programlama dili. Ama gerçekten SQL'i gerçekten anlayamıyorum. Demek istediğim, seçebilir, güncelleyebilir, ekleyebilir, silebilir, birleştirebilirim, ama daha karmaşık şeyler söz konusu olduğunda kayboldum. Daha karmaşık bir seçim ifadesi nasıl yazılır, dizinlerin nasıl düzgün bir şekilde kullanılacağı, hangi motorun kullanılacağı vb.

Nedense gerçekten mysql belgeleri takip etmek zor, ama php olanlar takip etmek kolay buluyorum.

Belki beynimin programlamadan beri sql kafa karıştırıcı hale getirecek şekilde bağlandığını düşünmeye başlıyorum. Bilmiyorum. Çoğu insan Regex'in kafa karıştırıcı olduğunu düşünüyor, ancak bana göre bir sql ifadesinin nasıl oluşturulacağından daha bilimsel bir anlam taşıyor. Lütfen beni yanlış anlamayın, SQL'de nefret etmiyorum, gerçekten beğendim, sadece daha iyi anlamak istiyorum.

Gerçekten MySQL'de ustalaşmanın en iyi / en hızlı yolu nedir?

"Üstat" dediğimde, gurular arasındaki guruyu kastetmiyorum, yani SO'ya kendime sorduğum soruların çoğunu yardıma ihtiyaç duymadan anlamaya yetecek kadar akıllıyım.


2
SQL veya MySQL'den mi bahsediyorsunuz, çünkü bunlar çok farklı şeyler olabilir. Çoğaltmayı ayarlamak ve yönetmek, karmaşık bir sql sorgusu yazmaktan çok farklı bir görevdir. Bunun zamanın bir fonksiyonu olduğundan şüpheleniyorum. PHP'yi yazmak için 'aynı miktarda' kullanıyor olsanız bile, neredeyse kesinlikle PHP yazmaktan çok daha fazla zaman harcıyorsunuz.
Steven Evers

@SnOrfus PHP'de daha fazla kod yazma konusunda iyi bir fikriniz var. MySQL, şimdiye kadar kullandığım tek ilişkisel veritabanı dilidir. "SQL" dediğimde genel olarak bu türden bir dil demek istiyordum.
JD Isaacks

Yararlı şeyler yapın. Gerçek dünyada karşılaşabileceğiniz farklı sorunları keşfedin. Bu şekilde, ders kitabı teorisinden daha karmaşık senaryoları keşfetmeye yönlendireceksiniz. Konsolda bir şeyler test edin ve PHP kullanmadan istediğiniz sonuçları elde edip edemeyeceğinize bakın. Örneğin, Stanford'un başlattığı ücretsiz veritabanı tanıtım sınıfında sosyal ağlarla ilgili birkaç harika alıştırma var.
James P.

Birçok insan PHP'den nefret eder (çeşitli nedenlerle, bazıları çok iyi), ancak belgeleri mükemmel. PHP belgelerini MySQL belgelerinden daha kolay takip etmenizin bir nedeni, dillerin doğası değil, belgelerin doğasıdır.
TRiG

Yanıtlar:


10

Kullanın

İlişkisel veritabanlarının nasıl çalıştığını içselleştirmek birçok insan için zordur - ama çok değerlidir. SQL ile daha fazla çalıştıkça, beyninize doğru yol alır. Kendinizi zorlamaya devam edin.

Bir şey garip göründüğünde, araştırın

Chrome'da bu arama motorunu ayarladım, böylece tek yapmam gereken dokümanları aramak için "m [arama sorgusu]" yazmak (dev.mysql.com'un arama emmeleri): {google: baseURL} arama? {Google: RLZ} {google: acceptedSuggestion} {google: originalQueryForSuggestion} sourceid = krom & yani = {inputEncoding} q = Alanı: dev.mysql.com/doc/refman/5.1/en+%s

Dokümanların bir cevabı yoksa, freenode üzerinde # mysql içine girin ve birisinin fikir edip edemeyeceğini görün.

Okuma!

İlişkisel veritabanlarının işlerini nasıl yaptığını anladıktan sonra, yazdığınız bu sihirli sorgularla MySQL'in ne yaptığı hakkında biraz daha fazla bilgi edinmek istersiniz. Yüksek Performanslı MySQL'i şiddetle tavsiye ederim - çok zaman ayırmaya değer.


1
İyi haber şu ki, tavsiye ettiğin kitap çoktan henüz geçmedi. Teşekkürler! Chrome aramasının nasıl ayarlanacağına ilişkin talimatlar için +1.
JD Isaacks

Kitabım var, henüz okumadım.
crosenblum

@tehShrike bunu kromda nasıl yaptınız?
jaybny

@jaybny url çubuğuna sağ tıklayın ve "arama motorlarını düzenle" ye gidin
TehShrike

9

Her şeyden önce, birleşimleri tam olarak anlayın. Sadece iç ve sol birleşimler de değil. Çapraz birleştirmenin ne yaptığını ve tam dış birleşmeyi bilin. Belirli bir birleştirme türü seçmenize neden olabilecek koşulları bilin. Değiştirilebilir olmadıklarını ve sol birleştirme kullanan sorgunun, iç birleştirme kullanan bir sorgudan farklı sonuçlar döndürebileceğini anlayın. (Biri bunun açık olacağını düşünürdüm ama insanların sorunlarını çözerken, rastgele bir şekilde farklı birleşimleri denedikleri çok fazla soru okudum.)

Daha sonra agregaları ve nasıl çalıştıklarını gerçekten anlayın. Mysql standart olarak grup bys yapmamaya izin verir. Ancak, grubu doğru bir şekilde madde ile tamamen tanımlayacak disipline sahip olun. Ne yaptığınızı anlamanıza yardımcı olacak ve bilginizi diğer veritabanlarına daha kolay aktarılabilir hale getirecektir.

Vaka ifadesinin ne yaptığını öğrenin.

Karmaşık sorgular yaparken parçalar halinde çalışmayı öğrenin. Her bir parçada beklediğiniz sonuçlara sahip olduğunuzu doğrulayın. Örneğin, son 3 ay içinde iade edilen siparişler ve iade nedeni ile müşteri için iletişim bilgileri hakkında bir raporlama sorgusu yazmanız gerektiğini varsayalım. İlk adım, son üç ayda siparişlerin iade edilmesini sağlamaktır. Bu katıya sahip olduğunuzu öğrendikten sonra, iade nedeni ile ilgili bilgileri ekleyebilirsiniz. Bu katıya sahip olduktan sonra, iade eden müşteriyi ekleyebilirsiniz. Bu katıya ulaştıktan sonra, kişinin iletişim bilgilerini ekleyin. Her aşamada, sonuçlarınızı kontrol edin ve anlamlı olup olmadıklarını görün. Bu durumda, büyük olasılıkla iade edilen sipariş başına yalnızca bir kayıt olmak istiyorum. Herhangi bir ara aşamada, sonuçların sayısı artar veya azalırsa, sorguyla ilgili bir probleme sahip olduğunuzu bilirsiniz. Bazen yapı taşlarında, bilgilerin doğru olup olmadığını doğrulamak için ek alanlar görmek isteyebilirsiniz. Bunları ayrı bir satıra koyuyorum ve bir sonraki adımda çalışırken (doğru olduğumu bildiğimde onları kaldırarak) yorum yapıyorum, böylece başka bir kırışıklık ekleyerek sorguyu komik hale getirdiyse kolayca kolayca görülebiliyorlar. Sonuçlarınızın nasıl olması gerektiğini tam olarak anlamadan karmaşık sorgulamayı doğru şekilde yapamazsınız. Bazı sonuçlar döndürdüğü için iyi göründüğünü düşünmek, zamanın iyi bir kısmının yanlış sonuçlara sahip olmasını neredeyse garanti edecektir. m sağ) bu yüzden başka bir kırışıklık ekleyerek sorgu komik gitmek yaptı kolayca tekrar görmek için kullanılabilir. Sonuçlarınızın nasıl olması gerektiğini tam olarak anlamadan karmaşık sorgulamayı doğru şekilde yapamazsınız. Bazı sonuçlar döndürdüğü için iyi göründüğünü düşünmek, zamanın iyi bir kısmının yanlış sonuçlara sahip olmasını neredeyse garanti edecektir. m sağ) bu yüzden başka bir kırışıklık ekleyerek sorgu komik gitmek yaptı kolayca tekrar görmek için kullanılabilir. Sonuçlarınızın nasıl olması gerektiğini tam olarak anlamadan karmaşık sorgulamayı doğru şekilde yapamazsınız. Bazı sonuçlar döndürdüğü için iyi göründüğünü düşünmek, zamanın iyi bir kısmının yanlış sonuçlara sahip olmasını neredeyse garanti edecektir.

Burada düşünmek zorunda kalmadan SQL'de yapabileceğiniz bazı temel şeylerin listesi:

  1. İlk önce birleşimsiz (ve seçim yok *) ancak seçim koşullarında düz yukarı seçim
  2. İki veya daha fazla tabloyu nasıl birleştireceğinizi ve tüm tablolarda bulunan kayıtları nasıl alacağınızı bilmelisiniz
  3. İki veya daha fazla tabloyu nasıl birleştireceğinizi ve tüm tablolarda bulunan kayıtları alacağınızı bilmelisiniz, ancak bir-çok ilişkisinin birçok tarafıyla tablodan yalnızca bir kayıt döndürün
  4. Kayıtları tek bir tablodan alabilmelisiniz, ancak ilişkili bir tablodan alamamalısınız
  5. Bir rapor için verileri Birleştirebilmeniz gerekir
  6. Bir tabloya bir kayıt ekleyebilmeniz gerekir
  7. Tablodaki bir kaydı güncelleyebilmeniz gerekir
  8. Tablodaki bir kaydı silebilmeniz gerekir
  9. İmleç olmadan tabloya bir grup kayıt ekleyebilmeniz gerekir
  10. İmleç olmadan tablodaki bir grup kaydı güncelleyebilmeniz gerekir
  11. İmleç olmadan tablodaki bir grup kaydı silebilmeniz gerekir
  12. Bir işlemde birden çok eylem gerçekleştirebilmeniz ve hata yakalamayı işleyebilmeniz gerekir
  13. Kayıt birliği oluşturabilmeli ve ne zaman UNION başkan yardımcısı kullanacağınızı bilmelisiniz UNION ALL
  14. Bir alanın verilerini bazı ölçütlere göre değiştirebilmeniz gerekir (CASE kullanarak)

Temel SQL bilginizle rahat hissettiğinizde, veritabanı yapınızı tanıyın. Yapıyı anladığım ve işlerin nerede saklandığı hakkında düşünmek zorunda olmadığım için diğer insanlardan çok daha hızlı desteklediğim çok karmaşık dbs'e karşı karmaşık sorgular yazabilirim. Tablo yapısını ve yabancı anahtar ilişkilerini ve arama değerlerinin nerede saklandığını ve sütunların ne anlama geldiğini (yalnızca adları değil, içinde hangi verilerin tutulduğu) anlarsanız, bu veritabanını sorgulama konusunda uzman olabilirsiniz. Herhangi bir yeni iş yapmak ilk şey db yapısını iyice anlamak.


3

Bence SQL öğrenmek için (ve bu gerçekten istediğin şey için, MySQL'e özgü özellikler daha sonra gelebilir), PHP tarzı programlamanın kontrol akışından kendini kaldırmalısın . Özellikle bildirici diller paradigmasında düşünün:

SQL nasıl yapılacağını değil, ne istediğinizi tanımlar. İkincisini zihinsel olarak kaldırmayı deneyebilirseniz, eski zaman içinde takip edecektir. Bu katmanı zihninizde soyutlayın ve MySQL'in (veya Oracle'ın ya da her neyse) nasıl yapılacağı konusunda endişelenmesine izin verin .

Uygulama mantığı SQL'de yordamsal / OO koduna karşı PHP'de oluşabilir. Örneğin, bir şey için veritabanında sorgulama yaparken, birden çok ön sorgu yapmak yerine uygun hakları sağlamak için sürekli olarak bir kullanıcı tablosuna ve bir izinler tablosuna katılabilirsiniz. insert into ... select ...Veri doğrulamayı sağlamak için ekleme, adlandırılmış değerler yerine benzer bir seçim ( ) aracılığıyla yapılabilir .

Her neyse, Codd ilkelerine odaklanmanızı ve seçim, projeksiyon, birleştirme, birleşme ve farklılığı anlamayı önemle tavsiye ederim . Günün sonunda, kavramlar basittir ve muhtemelen onlarla yapmak istediğiniz şeyin% 80'ini başarabilirsiniz. Gerisi takip edebilir.


2. paragraf için büyük tavsiye +1 ve ben hiç bu şekilde düşünmemiştim!
JD Isaacks

2

Bir şeyi "ustalaştırmanın" en hızlı yolu, kendime meydan okumaktı. Bir veri kümesi alın ve sorgulamak istediğiniz sekiz ila on farklı şeyi yazın. Bir grup öğrenci, en yakın tam sayıya yuvarlanmış not ortalamasıyla gruplandırılmış herkesin ortalama yaşını bulmak isteyebilir. Sonra onlar için sorguları yazın. Bir tabloyla başlayın, ardından daha fazlasını ekleyin. Veri birleştirme ve yerleşik işlevler uygulama.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.