Bagaimana cara benar-benar menguasai MySQL?

13

Saya telah menggunakan mysql untuk jumlah waktu yang sama dengan PHP. Namun saya merasa 10x lebih percaya diri dalam PHP; atau bahasa pemrograman lainnya. Tapi sepertinya saya tidak bisa benar-benar memahami SQL. Maksud saya, saya dapat memilih, memperbarui, menyisipkan, menghapus, bergabung, dll. Tetapi ketika sampai pada hal-hal yang lebih kompleks saya tersesat. Cara menulis pernyataan pilih yang lebih rumit, cara menggunakan indeks dengan benar, mesin mana yang digunakan, dll.

Untuk beberapa alasan saya benar-benar menemukan dokumen mysql sulit diikuti, tetapi php mudah diikuti.

Saya mulai berpikir bahwa mungkin otak saya hanya terhubung dengan suatu cara yang membuat pemrograman membuatnya tetapi membingungkan. Saya tidak tahu Kebanyakan orang berpikir Regex sangat membingungkan tetapi bagi saya itu lebih masuk akal secara ilmiah daripada bagaimana membangun pernyataan sql. Tolong jangan salah paham, saya tidak membenci SQL, saya sangat menyukainya, saya hanya ingin memahaminya dengan lebih baik.

Whats cara terbaik / tercepat untuk benar-benar menguasai MySQL?

Ketika saya mengatakan "tuan", saya tidak bermaksud guru di antara para guru, maksud saya cukup pintar untuk mengetahui sebagian besar pertanyaan yang saya ajukan pada SO sendiri tanpa perlu bantuan.

JD Isaacks
sumber
2
Apakah Anda berbicara tentang SQL atau MySQL, karena itu bisa sangat berbeda. Menyiapkan dan mengelola replikasi adalah tugas yang sangat berbeda dari menulis kueri sql yang rumit. Saya menduga bahwa ini adalah fungsi waktu juga. Anda hampir pasti menghabiskan lebih banyak waktu menulis PHP daripada SQL, bahkan jika Anda telah menggunakannya untuk 'jumlah waktu yang sama'.
Steven Evers
@SnOrfus Anda memiliki poin bagus tentang menulis lebih banyak kode dalam PHP. MySQL adalah satu-satunya bahasa basis data relasional yang pernah saya gunakan. ketika saya mengatakan "SQL" saya hanya berarti jenis bahasa itu secara umum.
JD Isaacks
Lakukan hal-hal yang bermanfaat. Jelajahi berbagai masalah yang dapat Anda temui di dunia nyata. Dengan cara ini Anda akan mengarahkan Anda untuk menjelajahi skenario yang lebih kompleks daripada teori buku teks. Tes hal-hal di konsol dan lihat apakah Anda dapat memperoleh hasil yang Anda inginkan tanpa menggunakan PHP. Sebagai contoh, kelas pengenalan basis data gratis yang diluncurkan Stanford memiliki beberapa latihan keren yang berkaitan dengan jejaring sosial.
James P.
Banyak orang membenci PHP (karena berbagai alasan, beberapa di antaranya sangat bagus), tetapi dokumentasinya sangat bagus. Salah satu alasan Anda mendapati PHP docs lebih mudah diikuti daripada MySQL docs bukan karena sifat bahasa tetapi sifat dokumentasi.
TRiG

Jawaban:

10

Gunakan

Menginternalisasi cara kerja database relasional sulit bagi banyak orang - tetapi ini sangat berharga. Ketika Anda bekerja dengan SQL lebih banyak, itu akan masuk ke otak Anda. Teruslah mendorong diri Anda sendiri.

Ketika sesuatu tampak aneh, selidiki

Di Chrome, saya menyiapkan mesin pencari ini sehingga yang harus saya lakukan adalah mengetikkan "m [permintaan pencarian]" untuk mencari dokumen (pencarian dev.mysql.com menyebalkan): {google: baseURL} pencarian? {Google: RLZ} {google: acceptSuggestion} {google: originalQueryForSuggestion} sourceid = chrome & ie = {inputEncoding} & q = situs: dev.mysql.com/doc/refman/5.1/en+%s

Jika dokumen tidak memiliki jawaban, buka # mysql di freenode dan lihat apakah seseorang dapat memberikan wawasan.

Baca!

Setelah Anda memahami bagaimana database relasional melakukan tugasnya, Anda akan ingin tahu lebih banyak tentang apa yang dilakukan MySQL dengan pertanyaan ajaib yang Anda tulis. Saya akan sangat merekomendasikan MySQL Kinerja Tinggi - ini sangat berharga untuk waktu Anda.

TehShrike
sumber
1
Kabar baiknya adalah saya sudah memiliki buku yang Anda rekomendasikan tetapi belum banyak membaca. Terima kasih! +1 untuk instruksi cara mengatur pencarian chrome.
JD Isaacks
Saya memiliki buku itu, hanya belum membacanya.
crosenblum
@tehShrike bagaimana Anda melakukannya di chrome?
jaybny
@jaybny klik kanan pada bilah url dan pergi ke "edit mesin pencari"
TehShrike
9

Pertama dan terutama, dapatkan pemahaman menyeluruh tentang gabungan. Bukan hanya bagian dalam dan kiri yang bergabung. Ketahui apa yang dilakukan oleh gabungan silang dan gabungan luar sepenuhnya. Ketahui keadaan yang menyebabkan Anda memilih jenis gabung tertentu. Memahami bahwa mereka tidak dapat dipertukarkan dan bahwa permintaan yang menggunakan gabungan kiri dapat mengembalikan hasil yang berbeda dari yang menggunakan gabungan batin. (Orang akan berpikir itu akan jelas tetapi saya sudah membaca terlalu banyak pertanyaan di mana orang-orang di decribing masalah mereka, agak secara acak mencoba berbagai bergabung.)

Selanjutnya benar-benar memahami agregat dan cara kerjanya. Mysql akan membiarkan Anda lolos dengan tidak melakukan bys grup dengan cara standar. Tetapi memiliki disiplin untuk sepenuhnya mendefinisikan grup dengan klausa dengan benar. Ini akan membantu Anda memahami apa yang Anda lakukan dan akan membuat pengetahuan Anda lebih mudah ditransfer ke database lain.

Pelajari apa yang dilakukan pernyataan kasus.

Saat melakukan kueri yang kompleks, belajarlah untuk bekerja di chunks. Verifikasi di setiap bagian bahwa Anda memiliki hasil yang Anda harapkan. Jadi misalnya, misalkan Anda perlu menulis permintaan pelaporan pada pesanan yang telah dikembalikan dalam 3 bulan terakhir dan alasan pengembalian serta informasi kontak untuk pelanggan. Langkah pertama adalah mendapatkan pesanan dikembalikan dalam tiga bulan terakhir. Setelah Anda tahu bahwa Anda memiliki solid itu, Anda dapat menambahkan informasi tentang alasan pengembalian. Setelah Anda memiliki solid itu, Anda dapat menambahkan pelanggan yang mengembalikannya. Setelah Anda memiliki solid itu, tambahkan informasi kontak untuk orang tersebut. Pada setiap tahap, periksa hasil Anda dan lihat apakah hasilnya masuk akal. Dalam hal ini, saya mungkin ingin berakhir hanya dengan satu catatan per pesanan yang dikembalikan. Jika pada tahap peralihan mana pun, jumlah hasil naik atau turun, Anda tahu Anda memiliki masalah dengan kueri. Terkadang dalam membangun blok, Anda akan ingin melihat bidang tambahan hanya untuk memverifikasi apakah informasi itu benar. Saya meletakkan ini di baris yang terpisah dan berkomentar saat saya mengerjakan langkah berikutnya (menghapusnya di akhir setelah saya tahu saya benar) sehingga mereka tersedia untuk dilihat lagi dengan mudah jika menambahkan kerutan lain membuat kueri menjadi lucu. Anda tidak dapat melakukan kueri kompleks dengan benar tanpa pemahaman menyeluruh tentang seperti apa hasil Anda seharusnya. Berpikir itu terlihat OK karena itu mengembalikan beberapa hasil hampir akan menjamin bahwa Anda memiliki hasil yang salah sebagian besar waktu. m benar) sehingga tersedia untuk dilihat kembali dengan mudah jika menambahkan kerutan lain membuat kueri menjadi lucu. Anda tidak dapat melakukan kueri kompleks dengan benar tanpa pemahaman menyeluruh tentang seperti apa hasil Anda seharusnya. Berpikir itu terlihat OK karena itu mengembalikan beberapa hasil hampir akan menjamin bahwa Anda memiliki hasil yang salah sebagian besar waktu. m benar) sehingga tersedia untuk dilihat kembali dengan mudah jika menambahkan kerutan lain membuat kueri menjadi lucu. Anda tidak dapat melakukan kueri kompleks dengan benar tanpa pemahaman menyeluruh tentang seperti apa hasil Anda seharusnya. Berpikir itu terlihat OK karena itu mengembalikan beberapa hasil hampir akan menjamin bahwa Anda memiliki hasil yang salah sebagian besar waktu.

Berikut adalah daftar beberapa hal dasar yang harus Anda lakukan dalam SQL tanpa harus memikirkannya:

  1. Pertama pilih lurus tanpa bergabung (dan tanpa pilih *) tetapi dengan kondisi pada pilih
  2. Anda harus tahu cara menggabungkan dua atau lebih tabel dan mendapatkan catatan yang ada di semua tabel
  3. Anda harus tahu cara menggabungkan dua atau lebih tabel dan mendapatkan catatan yang ada di semua tabel tetapi mengembalikan hanya satu catatan dari tabel dengan banyak sisi dari hubungan satu-ke-banyak
  4. Anda harus bisa mendapatkan catatan dalam satu tabel tetapi tidak dalam tabel terkait
  5. Anda harus dapat mengelompokkan data untuk laporan
  6. Anda harus dapat menyisipkan satu rekaman ke tabel
  7. Anda harus dapat memperbarui satu catatan dalam sebuah tabel
  8. Anda harus dapat menghapus satu catatan dalam sebuah tabel
  9. Anda harus dapat menyisipkan sekelompok catatan ke tabel tanpa kursor
  10. Anda harus dapat memperbarui sekelompok catatan dalam tabel tanpa kursor
  11. Anda harus dapat menghapus sekelompok catatan dalam tabel tanpa kursor
  12. Anda harus dapat melakukan beberapa tindakan dalam satu transaksi dan menangani perangkap kesalahan
  13. Anda harus dapat membuat gabungan catatan dan tahu kapan harus menggunakan UNION, wakil UNION, SEMUA
  14. Anda harus dapat memvariasikan data untuk satu bidang berdasarkan beberapa kriteria (menggunakan CASE)

Setelah Anda merasa nyaman dengan pengetahuan SQL dasar Anda, kenali struktur basis data Anda. Saya dapat menulis pertanyaan kompleks terhadap dbs yang sangat rumit yang saya dukung jauh lebih cepat daripada orang lain karena saya mengerti strukturnya dan tidak perlu memikirkan di mana barang disimpan. Jika Anda memahami struktur tabel dan hubungan kunci asing dan di mana nilai pencarian disimpan dan apa arti kolom (bukan hanya nama mereka tetapi data apa yang disimpan di dalamnya) maka Anda bisa menjadi ahli dalam menanyakan database itu. Hal pertama yang saya lakukan dalam pekerjaan baru adalah memahami struktur db.

HLGEM
sumber
3

Menurut pendapat saya untuk belajar SQL (dan ini benar-benar untuk apa yang Anda minta, spesifik MySQL dapat datang kemudian), Anda harus menghapus diri Anda dari aliran kontrol pemrograman gaya PHP. Berpikir secara khusus dalam paradigma bahasa deklaratif:

SQL mendefinisikan APA yang Anda inginkan, bukan bagaimana melakukannya. Jika Anda dapat mencoba menghapus mental yang terakhir, yang pertama akan mengikuti waktu. Abaikan lapisan ini di pikiran Anda dan biarkan MySQL (atau Oracle atau apa pun) mengkhawatirkan caranya .

Logika aplikasi dapat terjadi dalam SQL vs kode prosedural / OO dalam PHP. Misalnya saat membuat kueri ke database untuk sesuatu, Anda dapat secara konsisten bergabung dalam tabel pengguna dan mungkin tabel izin untuk memastikan hak yang tepat alih-alih membuat beberapa pra-kueri. Memasukkan dapat dilakukan melalui seleksi yang serupa ( insert into ... select ...) alih-alih nilai yang disebutkan untuk memastikan validasi data.

Bagaimanapun, saya sangat merekomendasikan untuk berfokus pada primitif Codd dan memahami pemilihan, proyeksi, bergabung, persatuan, dan perbedaan. Pada akhirnya, konsep-konsepnya langsung dan Anda mungkin dapat mencapai 80% dari apa yang ingin Anda lakukan melalui konsep-konsep itu. Sisanya bisa mengikuti.

Jé Queue
sumber
+1 untuk paragraf ke-2 saran bagus dan saya tidak pernah memikirkannya seperti itu!
JD Isaacks
2

Cara tercepat yang saya temukan untuk "menguasai" apa pun adalah menantang diri saya dengan hal itu. Ambil satu set data dan tuliskan delapan hingga sepuluh hal berbeda yang ingin Anda tanyakan. Sekelompok siswa yang mungkin ingin Anda temukan usia rata-rata setiap orang yang dikelompokkan berdasarkan rata-rata poin kelas dibulatkan ke angka keseluruhan terdekat. Kemudian tuliskan pertanyaan untuk mereka. Mulailah dengan satu tabel, lalu tambahkan lagi. Data praktik bergabung dan fungsi built-in.

Josh K.
sumber