- Gunakan SQLite dan Python secara setempat untuk mencipta semula persekitaran amalan SQL yang realistik tanpa memerlukan gudang data penuh atau kluster Spark.
- Kuasai kemahiran teras SQL terlebih dahulu: menapis dengan WHERE, menggabungkan berbilang jadual dan mengagregatkan data dengan GROUP BY dan HAVING.
- Normalkan skema ke dalam berbilang jadual dengan kunci utama dan asing, kemudian gunakan JOIN untuk membina semula hubungan dalam analisis anda.
- Gabungkan amalan tempatan dengan platform SQL interaktif untuk berlatih soalan gaya temu bual dan dapatkan semula keyakinan dengan perkakasan data moden.
Jika anda cuba kembali kepada SQL dan Python selepas beberapa tahun tidak menggunakan SQL, adalah perkara biasa untuk berasa keliru. – terutamanya jika peranan terakhir anda menggunakan alat proprietari dan buku nota Databricks yang selesa yang tidak lagi anda miliki. Iklan kerja moden yang memerlukan Python, SQL dan juga PySpark boleh kelihatan menakutkan apabila setiap panduan bermula dengan sesuatu seperti "muatkan set data tuntutan anda ke dalam gudang data anda" dan anda berfikir: "Itulah sebenarnya yang saya tidak ada."
Berita baiknya ialah anda boleh mencipta semula sebahagian besar pengalaman pembelajaran itu pada komputer riba anda sendiri. menggunakan alatan percuma, set data sampel kecil dan satu set masalah latihan berstruktur. Dalam panduan ini, kami akan menerangkan, dalam bahasa Inggeris yang mudah, cara membina persekitaran setempat yang realistik, cara SQL berfungsi (daripada pertanyaan asas kepada JOIN dan pengagregatan), dan cara membungkus pertanyaan SQL tersebut dalam Python supaya anda boleh berlatih dengan tepat jenis tugas yang akan anda hadapi dalam kerja data moden.
Membina persekitaran amalan tempatan yang mudah dengan SQLite dan Python
Anda tidak memerlukan gudang data yang lengkap atau kluster Spark untuk berlatih SQL dan PythonUntuk pembelajaran dan persediaan temu duga, pangkalan data terbenam yang ringan seperti SQLite sudah lebih daripada mencukupi. SQLite menyimpan semua datanya dalam satu fail pada cakera, yang menjadikannya sesuai untuk projek mainan, prototaip dan latihan pendidikan.
Secara konseptual, pangkalan data SQLite kelihatan seperti hamparan dengan berbilang helaian: setiap helaian adalah meja, setiap baris ialah rekod, dan setiap lajur ialah bidangDalam jargon pangkalan data hubungan, jadual kadangkala dipanggil "hubungan", baris ialah "tupel", dan lajur ialah "atribut", tetapi untuk kerja amali, anda boleh dengan senang hati menggunakan istilah harian jadual, baris dan lajur.
Python disertakan dengan pemacu SQLite terbina dalam yang dipanggil sqlite3, yang bermaksud anda tidak perlu memasang pelayan pangkalan data yang berasingan. Skrip Python anda akan membuka sambungan ke .sqlite fail (menciptanya jika ia tidak wujud), dapatkan kursor objek (sangat serupa dengan pemegang fail), dan kemudian hantar arahan SQL melalui kursor tersebut menggunakan execute(). Lihat kami SQLite PILIH dan DI MANA panduan untuk contoh praktikal membaca dan menapis data.
Walaupun artikel ini memberi tumpuan kepada pemacu SQLite daripada Python, terdapat juga alat GUI berguna yang dipanggil “Pelayar Pangkalan Data untuk SQLite” (kadangkala diedarkan sebagai Pelayar Pangkalan Data untuk SQLite). Dengannya, anda boleh memeriksa jadual secara visual, menyisip atau mengedit beberapa baris dengan tangan dan menjalankan pernyataan SQL yang mudah. Ia seperti editor teks untuk fail pangkalan data: tweak manual yang pantas adalah lebih mudah dalam GUI, tetapi apa-apa yang berulang atau kompleks lebih baik diskripkan dalam Python.
Pangkalan data hubungan lebih tegar daripada senarai atau dikte Python: ia menegaskan skema yang ditakrifkanApabila anda mencipta jadual, anda mesti mengisytiharkan nama lajur dan jenis data yang anda jangkakan (teks, integer, tarikh/masa, dll.). SQLite kemudiannya akan menyimpan dan mengindeks data dengan cara yang memastikan carian cekap, walaupun set data anda berkembang melebihi apa yang sesuai dengan selesa dalam ingatan. Untuk laluan pembelajaran praktikal dan contoh amali, rujuk analisis data dengan SQL.
Mencipta jadual dan memasukkan data dengan SQL dan Python
Untuk mula berlatih, anda memerlukan jadual terlebih dahulu – anggap ia sebagai mereka bentuk bentuk data andaKatakan anda mahukan meja perpustakaan muzik yang kecil. Menggunakan Python sqlite3 Modul ini membolehkan anda menyambung ke fail pangkalan data, menggugurkan sebarang versi lama jadual jika ia wujud, dan kemudian mencipta jadual baharu dengan lajur yang ditaip dengan jelas.
Beginilah rupa aliran itu secara konseptual dalam Python: awak panggil sqlite3.connect('music.sqlite') untuk membuka atau mencipta fail pangkalan data, kemudian panggil conn.cursor() untuk mendapatkan kursor. Melalui kursor itu anda boleh menjalankan arahan SQL seperti DROP TABLE IF EXISTS Songs untuk membersihkan sebarang skema sebelumnya, diikuti dengan CREATE TABLE Songs (title TEXT, plays INTEGER) untuk mentakrifkan jadual baharu dengan dua lajur.
Sebaik sahaja jadual wujud, anda bertukar daripada DDL (Bahasa Definisi Data) kepada DML (Bahasa Manipulasi Data) dengan INSERT kenyataanDalam Python, anda harus sentiasa menggunakan pertanyaan berparameter: tulis INSERT INTO Songs (title, plays) VALUES (?, ?) dan lulus tuple seperti ('Thunderstruck', 20) sebagai hujah kedua untuk execute()Tanda tanya ialah ruang letak yang akan digantikan oleh Python dengan selamat, membantu anda mengelakkan masalah suntikan SQL dan memetik pepijat.
Selepas melakukan sisipan atau kemas kini, anda mesti menghubungi conn.commit() untuk membuang perubahan anda ke cakeraSehingga anda melakukan commit, operasi hanya berada dalam penimbal transaksi. Ini berbeza daripada penulisan fail mudah, dan ia merupakan salah satu tabiat utama yang perlu dibina lebih awal: membuat pertanyaan, mengubah suai, kemudian melakukan commit.
Untuk membaca kembali data anda, anda menggunakan SELECT pernyataan dan ulangi kursor. Sebagai contoh, SELECT title, plays FROM Songs akan menstrim setiap baris sebagai tuple Python, seperti ('Thunderstruck', 20)Kursor tidak memuatkan semua hasil sekaligus; sebaliknya ia mengambil baris secara malas, yang berguna apabila anda akhirnya mengendalikan set data yang lebih besar.
Elemen pertanyaan SQL teras dan penapisan dengan WHERE
Setiap pertanyaan SQL dibina pada satu set kecil klausa yang muncul dalam susunan standard: SELECT, FROM, WHERE, GROUP BY, HAVING, dan ORDER BY. Sekurang-kurangnya anda tentukan lajur yang anda mahu (SELECT) dan dari jadual mana (FROMKlausa pilihan kemudian memperhalusi, mengagregatkan, menapis hasil agregat dan mengisih output.
. WHERE klausa menapis baris sebelum sebarang pengelompokan atau pengagregatan berlakuUntuk lajur angka, anda boleh menggunakan operator perbandingan seperti =, != (Atau <>), >, <, >=, <=. Lajur teks menyokong pemadanan corak tambah ini melalui LIKE dan semakan keahlian melalui INNilai tarikh/masa menyokong perbandingan hubungan yang sama, dan anda sering melihat julat yang dinyatakan dengan BETWEEN.
Pengendalian null dalam SQL cukup unik sehingga memerlukan perhatian yang jelasPerbandingan biasa seperti = dan != jangan bertindak seperti yang anda jangkakan dengan NULL, jadi SQL menyediakan IS NULL dan IS NOT NULL untuk menyemak nilai yang hilang. Lajur Boolean biasanya berfungsi dengan = dan !=, tetapi anda masih memerlukan IS NULL apabila boolean itu sendiri mungkin hilang.
Apabila anda menggabungkan pelbagai syarat, ingatlah bahawa AND dan OR ikut peraturan keutamaanJika anda menulis age < 5 OR age > 10 AND breed = 'Ragdoll', SQL akan menilai AND pertama. Untuk menyatakan “kucing Ragdoll yang berumur kurang daripada 5 tahun atau lebih daripada 10 tahun”, anda harus menggunakan kurungan: (age < 5 OR age > 10) AND breed = 'Ragdoll'Membiasakan diri dengan kombinasi logik ini adalah penting untuk kerja analitik dunia sebenar.
Padanan corak dengan LIKE membolehkan anda mencari rentetan yang memulakan, menamatkan atau mengandungi serpihan tertentuTanda peratus % ialah kad bebas untuk sebarang jujukan aksara, jadi breed LIKE 'R%' mencari baka yang bermula dengan "R", fav_toy LIKE 'ball%' mencari mainan yang namanya bermula dengan "bola", dan coloration LIKE '%m' mencari corak warna yang berakhir dengan “m”. Dipasangkan dengan AND/OR, ini menjadi toolkit penapisan teks yang berkuasa.
Mempraktikkan pertanyaan jadual tunggal dengan set data mainan
Satu cara yang berguna untuk membina ingatan otot adalah dengan membetulkan skema kecil di kepala anda dan menyelesaikan banyak pertanyaan terhadapnya.. Bayangkan a cat jadual dengan lajur seperti id, name, breed, coloration, age, sex, dan fav_toyIni memberi anda kepelbagaian yang mencukupi – teks, nombor, kategori mudah – untuk mengamalkan kebanyakan corak pertanyaan asas.
Untuk semakan gaya boolean, anda sering menapis pada satu lajur dan kemudian melapisi syarat tambahanUntuk menyenaraikan kucing jantan yang “membosankan” yang tiada mainan kegemaran direkodkan, anda perlu memilih name di mana sex = 'M' dan fav_toy IS NULLIni menggambarkan bagaimana semakan nol digandingkan dengan perbandingan mudah untuk mengasingkan subset baris tertentu.
Untuk menyasarkan baka tertentu atau mengecualikannya, anda menggabungkan kesaksamaan dengan penafian logikMemilih hanya kucing Ragdoll dengan kegunaan umur tertentu breed = 'Ragdoll'; tidak termasuk Parsi dan Siam mungkin kelihatan seperti breed NOT LIKE 'Persian' AND breed NOT LIKE 'Siamese'Walaupun sesetengah pangkalan data menyokong NOT IN ('Persian', 'Siamese'), mengamalkan corak eksplisit membantu mengukuhkan pemahaman anda tentang NOT dan LIKE.
Latihan seperti "kucing betina yang suka mainan penggoda dan bukan Parsi atau Siam" memaksa anda untuk menggabungkan penapis teks, kesamaan dan operator logikAnda akan memilih id, name, breed, coloration dan kekang baris menggunakan sex = 'F', fav_toy = 'teaser', dan syarat majmuk yang mengecualikan baka yang tidak diingini. Memberi perhatian kepada kurungan memastikan semua subsyarat digunakan dalam kombinasi yang dimaksudkan.
Sebaik sahaja anda selesa dengan contoh mainan ini dalam SQL mentah, laksanakan semula melalui Python menggunakan pertanyaan berparameterTulis skrip pendek yang meminta baka, umur minimum atau jenis mainan daripada input(), pasangkannya ke dalam WHERE klausa, dan mencetak hasilnya. Inilah penghubung antara penulisan pertanyaan dan kod aplikasi sebenar yang diharapkan oleh banyak peranan data junior.
Memahami dan mengamalkan SQL JOINs
Sebaik sahaja anda mengatasi masalah mainan, anda akan sentiasa menyertai pelbagai mejaJOIN ialah cara anda menghubungkan set data berkaitan: pelanggan kepada pesanan, artis kepada karya seni, permainan kepada syarikat dan sebagainya. Dalam SQL, anda menerangkan lajur mana yang sepatutnya sepadan antara jadual dan enjin pangkalan data menggabungkan baris ke dalam set hasil gabungan.
Terdapat empat jenis penyertaan utama yang akan anda temui dalam temu duga dan projek sebenar: INNER JOIN (sering ditulis hanya JOIN), LEFT JOIN, RIGHT JOIN, dan FULL OUTER JOINGabungan dalaman hanya mengembalikan baris yang kedua-dua jadual mempunyai kekunci yang sepadan; gabungan kiri menyimpan semua baris daripada jadual kiri, mengisi NULLs apabila jadual kanan tiada padanan; cantuman kanan melakukan perkara simetri; dan cantuman luar penuh mengembalikan setiap baris dari kedua-dua belah pihak, memadankan jika boleh dan menggunakan NULL di mana tidak.
Fikirkan LEFT JOIN dan RIGHT JOIN sebagai operasi "lebih mempercayai pihak ini"Dengan cantuman kiri, jadual kiri ialah sumber kebenaran utama: setiap baris daripadanya muncul sekurang-kurangnya sekali dalam output, walaupun jadual kanan tidak menyumbang apa-apa. Dengan cantuman penuh, kedua-dua pihak tidak diberi keistimewaan – anda hanya perlu menggabungkan semua kekunci daripada kedua-dua jadual dan menyelaraskannya di tempat ia bertindih.
Untuk memastikan pertanyaan berbilang jadual boleh dibaca, sentiasa alias jadual andaDaripada menulis SELECT artist.name berulang kali, tulis FROM artist AS a dan kemudian lajur rujukan sebagai a.name. Begitu juga, piece_of_art boleh menjadi poa, dan museum boleh mApabila pertanyaan anda berkembang kepada tiga atau lebih cantuman, alias yang baik adalah perbezaan antara kejelasan dan kekacauan.
Persediaan latihan klasik menggunakan tiga jadual: artist, museum, dan piece_of_art. Yang artist meja mungkin boleh tahan id, name, birth_year, death_year dan bidang utama seperti cat air atau arca. museum kedai meja id, name dan country. Yang piece_of_art pemegang meja id, name, artist_id dan museum_idDua lajur terakhir itu ialah kunci asing yang menghubungkan setiap karya seni dengan pencipta dan lokasinya.
Dengan skema itu, anda boleh berlatih gabungan dalaman, gabungan kiri dan penapis bersyaratContohnya, untuk menyenaraikan artis yang lahir selepas tahun 1800 yang hidup lebih daripada 50 tahun, di samping nama karya mereka, anda perlu menyertai artist dan piece_of_art on artist.id = piece_of_art.artist_id dan kemudian tapis dengan death_year - birth_year > 50 dan birth_year > 1800Alias lajur yang dipilih sebagai artist_name dan piece_name untuk kejelasan.
Untuk melihat semua karya seni bersama-sama nama dan negara muzium – termasuk karya “hilang” tanpa muzium – anda akan menggunakan a LEFT JOIN yang diadakan pada piece_of_art kepada museum on museum_idDengan cara itu, karya seni tanpa muzium yang berkaitan masih muncul dalam hasilnya, dengan NULL dalam ruangan muzium. Menapis baris di mana artist_id IS NULL membolehkan anda mengesan karya oleh seniman yang tidak dikenali sambil masih menyertai muzium yang menyimpan karya tersebut.
Latihan yang lebih lanjut membolehkan anda menyertai tiga meja secara serentakUntuk menyenaraikan setiap karya seni dengan artisnya dan nama muzium, anda perlu menyertai museum kepada piece_of_art on museum.id = piece_of_art.museum_id, kemudian sertai artist on artist.id = piece_of_art.artist_idMenggunakan bahan biasa JOIN (gabungan dalaman) sengaja menggugurkan karya seni yang sama ada tiada artis atau muzium, memberi anda gambaran tentang bagaimana jenis gabung memberi kesan kepada kiraan baris.
Pengagregatan, KUMPULAN MENGIKUT, dan MEMPUNYAI dalam amalan
Sebaik sahaja anda boleh mendapatkan dan menggabungkan data, kemahiran besar seterusnya ialah meringkaskannyaFungsi pengagregatan seperti SUM(), AVG(), COUNT(), MAX(), dan MIN() mengira metrik ke atas set baris. GROUP BY membahagikan set data anda kepada kumpulan dan menggunakan fungsi tersebut dalam setiap kumpulan – contohnya, satu kumpulan setiap tahun, setiap syarikat atau setiap artis. Jika anda lebih suka kursus berstruktur untuk mengamalkan konsep ini, lihat kursus SQL yang komprehensif.
Bayangkan yang mudah sales_table dengan lajur year, month, dan salesSebuah dataran SELECT SUM(sales) AS total_sales FROM sales_table memberikan anda jumlah keseluruhan merentasi semua baris. Menambah GROUP BY year mengubah soalan: kini anda meminta jumlah jualan setahun dan bukannya satu nombor keseluruhan.
Peraturan utamanya ialah setiap lajur bukan agregat dalam SELECT mesti muncul dalam GROUP BY. Jika anda memilih year dan SUM(sales), anda kumpulkan mengikut year. Jika anda memilih year dan month bersama-sama dengan agregat, kemudian anda kumpulkan mengikut kedua-duanya year dan monthSecara konseptual, kombinasi berbeza bagi lajur berkumpulan mentakrifkan kumpulan tersebut.
WHERE dan HAVING kedua-duanya adalah penapis, tetapi ia bertindak pada peringkat yang berbeza. WHERE menapis baris mentah sebelum sebarang pengelompokan atau pengagregatan berlaku. HAVING menapis hasil kumpulan menggunakan ungkapan agregat. Contohnya, anda mungkin WHERE production_year BETWEEN 2000 AND 2009 dan kemudian HAVING SUM(revenue) > 4000000 untuk mengekalkan hanya syarikat yang "permainan bagus" mereka menjana lebih daripada empat juta pendapatan.
Skema amalan yang lebih realistik ialah games meja dengan lajur seperti id, title, company, type, production_year, system, production_cost, revenue, dan ratingDengan jadual tunggal ini, anda boleh menjalankan purata, kiraan, jumlah, pengelompokan dan kedudukan – tunjang utama SQL analitik.
Contohnya, untuk mengira purata kos pengeluaran permainan yang dikeluarkan dari tahun 2010 hingga 2015 dengan penarafan lebih daripada 7, anda akan pilih AVG(production_cost) dan kekang baris dengan WHERE production_year BETWEEN 2010 AND 2015 AND rating > 7Itu soalan gaya temu bual klasik, dan anda boleh membenamkannya dengan mudah ke dalam Python dan mencetak nombor tunggal yang terhasil.
Anda juga boleh menghasilkan statistik peringkat tahun secara langsung daripada yang sama games meja. Kumpulkan mengikut production_year, kemudian hitung COUNT(*) AS count, AVG(production_cost) AS avg_cost, dan AVG(revenue) AS avg_revenuePertanyaan jenis ini memberikan anda paparan siri masa padat yang sangat biasa dalam papan pemuka BI dan alat pelaporan.
Untuk menilai syarikat mengikut keuntungan kasar sepanjang tahun, anda boleh mengagregatkan pada companyCorak yang berguna ialah SELECT company, SUM(revenue - production_cost) AS gross_profit_sum FROM games GROUP BY 1 ORDER BY 2 DESC. Di sini GROUP BY 1 dan ORDER BY 2 gunakan kedudukan lajur dalam SELECT list, yang boleh memastikan perkara ringkas tetapi mesti digunakan dengan berhati-hati supaya anda tidak memecahkan pertanyaan dengan menyusun semula lajur kemudian.
Gesaan yang lebih kompleks menggabungkan penapis, pengelompokan dan penapis pasca-pengagregatanKatakan anda mentakrifkan "permainan yang bagus" sebagai permainan yang dihasilkan antara tahun 2000 dan 2009, dengan penarafan melebihi 6 dan hasil lebih besar daripada kos pengeluaran. Bagi setiap syarikat, anda mahukan bilangan permainan sedemikian ditambah jumlah hasil mereka, tetapi hanya untuk syarikat yang hasil daripada permainan yang bagus melebihi 4,000,000. Anda akan menapis baris dengan WHERE on production_year, rating, dan keuntungan, kumpulan mengikut company, pengiraan COUNT(company) dan SUM(revenue), kemudian memohon HAVING SUM(revenue) > 4000000Pertanyaan ini merangkumi kebanyakan langkah mental dunia sebenar yang akan anda hadapi dalam tugasan analitik.
Pemodelan data dengan berbilang jadual dan kekunci
Reka bentuk jadual tunggal membawa anda jauh, tetapi pangkalan data hubungan bersinar apabila anda menormalkan data merentasi berbilang jadualNormalisasi ialah proses menghapuskan storan berlebihan dan mewakili perhubungan melalui kekunci. Ini menjadikan pangkalan data anda lebih kecil, lebih pantas dan kurang terdedah kepada ralat.
Satu contoh mudah tetapi instruktif datang daripada merayapi graf sosial seperti TwitterKatakan anda ingin menjejaki akaun pengguna dan hubungan "mengikuti" antara mereka. Satu pendekatan naif ialah jadual tunggal di mana setiap baris menduplikasi nama pengikut dan orang yang diikuti sebagai teks. Ini dengan cepat membawa kepada pengulangan yang banyak dan ejaan yang tidak konsisten.
Sebaliknya, anda membahagikan sesuatu kepada People meja dan sebuah Follows meja. People mungkin mempunyai integer id sebagai kunci utama, unik name (nama skrin atau nama pengguna), dan a retrieved bendera yang menandakan sama ada anda telah merangkak senarai rakan akaun tersebut. Follows memegang pasangan integer from_id dan to_id, mewakili sambungan terarah daripada seorang pengguna ke pengguna yang lain.
Tiga konsep utama menstrukturkan model ini: kekunci logik, kekunci primer dan kekunci asingKunci logik ialah apa yang digunakan oleh dunia luar untuk merujuk kepada rekod – di sini, pemegang Twitter dalam name. Kekunci utama biasanya merupakan integer yang dijana pangkalan data (id) yang mengenal pasti setiap baris secara unik dan murah untuk diindeks dan dibandingkan. Kunci asing ialah integer yang menunjuk ke kunci utama dalam jadual lain – from_id dan to_id dalam Follows jadual adalah rujukan kunci asing People.id.
Untuk menguatkuasakan kualiti data, anda mengisytiharkan kekangan dalam definisi jadual anda. Sebagai contoh, name TEXT UNIQUE in People memastikan anda tidak boleh memasukkan dua baris dengan pemegang yang sama secara tidak sengaja. A UNIQUE(from_id, to_id) kekangan dalam Follows menghalang anda daripada menyimpan tepi ikut yang sama lebih daripada sekali. Kekangan ini berfungsi sebagai jaring keselamatan apabila anda mula menulis logik upsert dalam Python.
Dalam Python sqlite3 modul, corak biasa adalah dengan menggunakan INSERT OR IGNORE untuk menghormati kekangan tersebut dengan anggunJika anda cuba memasukkan name yang sedia ada, SQLite akan melangkau operasi secara senyap dan bukannya mengeluarkan ralat. Anda kemudian boleh menyemak cursor.rowcount untuk melihat sama ada baris benar-benar ditambah, dan bergantung pada cursor.lastrowid untuk menemui yang ditugaskan id untuk pengguna yang baru dimasukkan.
Apabila kod anda menerima nama skrin baharu, ia harus cuba mencari kod yang sepadan terlebih dahulu id. Sekiranya SELECT id FROM People WHERE name = ? mengembalikan baris, anda menggunakan semula integer tersebut. Jika tidak, anda masukkan nama dengan retrieved = 0, komit, dan kemudian baca lastrowidCorak "cari atau sisipan" itu merupakan teras kepada banyak skrip pengingesan data.
Sebaik sahaja kedua-dua ID pengikut dan penerima diketahui, merekodkan hubungan dalam Follows hanyalah satu lagi INSERT OR IGNORE. Anda UNIQUE(from_id, to_id) kekangan menangani pendua, dan anda boleh menumpukan pada logik peringkat tinggi profil mana yang hendak dirayapi seterusnya, daripada menguruskan penyahduplikasian baris secara mikro.
Menggunakan JOIN untuk membina semula perhubungan daripada jadual yang dinormalkan
Skema ternormal menukar redundansi untuk ketidakterampilan: anda menyimpan integer dan bukannya rentetan berulang, tetapi kini anda mesti menggabungkan jadual untuk membina semula gambaran penuhInilah sebenarnya yang SQL JOIN direka untuknya, dan sebaik sahaja anda terbiasa dengannya, pertanyaan yang banyak berkaitan JOIN terasa semula jadi sepenuhnya.
Dalam contoh graf sosial, jika anda ingin melihat pengguna yang id = 2 sedang mengikuti, anda akan menyertai Follows kepada People di bahagian sasaran. Secara konseptual, anda menjalankan SELECT * FROM Follows JOIN People ON Follows.to_id = People.id WHERE Follows.from_id = 2Ini menghasilkan baris gabungan yang mengandungi kedua-dua tepi berangka dan nama yang boleh dibaca manusia untuk setiap pengikut.
Setiap baris dalam hasil tersebut ialah "meta-row" yang menggabungkan lajur daripada kedua-dua jadualDua lajur pertama mungkin (from_id, to_id) yang diadakan pada Follows, manakala lajur seterusnya milik People - suka (id, name, retrieved). Kerana ia JOIN syarat menguatkuasakan Follows.to_id = People.id, anda boleh melihat hubungan tersebut secara eksplisit: lajur kedua dan lajur ketiga bagi setiap baris sepadan.
Corak yang sama ini meluas secara semula jadi ke lebih banyak jadual. Anda sudah melihatnya dengan artist, piece_of_art, dan museum, dan perayap Twitter menggambarkannya dengan People dan FollowsDalam saluran analitikal yang lebih kompleks, anda mungkin menggabungkan jadual fakta (peristiwa, pesanan) kepada jadual berbilang dimensi (pengguna, produk, kempen) untuk menjawab soalan berbilang aspek.
Semasa menyahpepijat kod anda atau mempelajari bagaimana skema tersebut sesuai, aliran kerja "jalankan Python, kemudian periksa dengan Pelayar DB untuk SQLite" adalah sangat berkesan.Jalankan skrip anda untuk mengisi pangkalan data, tutup sebarang tika GUI yang memastikan fail terkunci, kemudian buka .sqlite fail dalam pelayar. Dari situ anda boleh memeriksa kandungan setiap jadual dan menjalankan ad-hoc SELECT pertanyaan untuk mengesahkan andaian anda.
Satu peringatan: SQLite menguatkuasakan kunci fail, jadi jika Pelayar Pangkalan Data membuka pangkalan data dalam mod edit, skrip Python anda mungkin gagal untuk bersambung atau melakukan komitmenPenyelesaiannya adalah dengan menutup pangkalan data dalam GUI (atau keluar sepenuhnya daripada pelayar) sebelum menjalankan kod Python anda sekali lagi. Membiasakan diri menutup alat yang mengunci fail DB anda akan menyelamatkan anda daripada ralat misteri "pangkalan data dikunci".
Menggabungkan teknik-teknik ini – reka bentuk skema, kekangan, pertanyaan berparameter dalam Python, JOIN, GROUP BY dan HAVING – memberikan anda makmal tempatan yang berkuasa. untuk berlatih dengan tepat jenis kerja SQL dan Python yang akan anda lakukan di tempat kerja. Dengan hanya SQLite dan beberapa jadual sampel yang berstruktur dengan baik, anda boleh berlatih soalan gaya temu bual, prototaip logik analitik dan mendapatkan semula keyakinan anda dengan perkakasan data moden.
Di mana platform seperti DataLemur dan kursus interaktif sesuai
Selain amalan tempatan anda, platform interaktif boleh memberi anda pengalaman yang lebih berpandu dengan maklum balas segeraAlat yang lahir daripada pengalaman industri dunia sebenar – contohnya, platform yang dicipta oleh bekas jurutera data Facebook dan Google yang menghabiskan masa mereka menulis SQL dan Python serta menjalankan ujian A/B – sering memusatkan kandungan mereka pada soalan temu bual dan senario analitik yang tulen.
Buku-buku yang merangkumi statistik, pembelajaran mesin dan intuisi perniagaan untuk temu bual data adalah bagus untuk teori, tetapi ia tidak selalunya menyediakan taman permainan SQL secara langsung yang diidamkan oleh ramai pelajar. Jurang itulah yang ingin diisi oleh beberapa alatan moden: ia membungkus semula ratusan gesaan gaya temu bual ke dalam persekitaran SQL dan analitik dalam pelayar supaya anda boleh menjalankan, mengubah suai dan menjalankan semula pertanyaan anda tanpa perlu risau tentang persediaan setempat. Anda juga boleh mencuba contoh yang digunakan seperti penilaian risiko pelanggan yang berhenti untuk menggabungkan SQL dengan aliran kerja pembelajaran mesin asas.
Anda juga akan menemui kursus SQL interaktif yang mencerminkan topik yang telah kami bincangkan di sini.: pertanyaan jadual tunggal dengan SELECT dan WHERE, bergabung merentasi dua atau tiga jadual, pengagregatan dan pengelompokan, subkueri dan banyak lagi. Kebanyakan kursus ini bergantung pada set data yang realistik – fikirkan permainan, muzium atau jualan transaksi – supaya soalan terasa seperti masalah perniagaan yang tulen dan bukannya teka-teki yang direka-reka.
Jika anda berasa terbeban dengan dokumentasi untuk alatan seperti PySpark, DuckDB atau dbt, adalah wajar untuk menangguhkannya sehingga asas SQL anda terasa kukuh.Dengan memberi tumpuan terlebih dahulu pada SQLite dan Python, anda boleh menginternalisasikan corak pertanyaan teras tanpa perlu bergelut dengan konfigurasi kluster atau kebenaran awan. Sebaik sahaja asasnya menjadi kebiasaan, pembelajaran PySpark menjadi lebih kepada pelaksanaan teragih berbanding konsep pertanyaan baharu.
Akhirnya, gabungan persediaan setempat yang mudah, masalah amalan berstruktur dan penggunaan platform interaktif sekali-sekala memberikan anda yang terbaik daripada semua dunia: kawalan penuh ke atas persekitaran anda, asas konseptual yang kukuh dan pendedahan kepada gaya soalan yang disukai oleh majikan terkemuka. Dengan latihan yang berterusan, gabungan SQL, Python dan alatan kejuruteraan data yang dahulunya menakutkan menjadi satu toolkit yang biasa dan menyeronokkan yang boleh anda gunakan dengan yakin dalam peranan baharu.
Jika digabungkan, laluan anda ke hadapan adalah jelas: bina pangkalan data SQLite dengan Python, reka bentuk beberapa jadual yang realistik, latih corak SQL asas dan pertengahan (penapis, cantuman, pengagregatan, pengelompokan, HAVING), balut pertanyaan tersebut dalam skrip Python dan secara pilihan menambah pembelajaran anda dengan platform SQL interaktif yang dibina oleh pengamal yang pernah berada di tempat anda sekarang.; dengan berbuat demikian, anda akan membina semula naluri teknikal anda, mengurangkan kebimbangan mengenai susunan data moden dan bersedia untuk mengendalikan tuntutan SQL dan Python bagi peranan data hari ini.