§

Panga hoji za SQL

Lahaja
Msisitizo
Hali ya maneno muhimu
Mvunjomstari kabla ya kifungu
§

Bandika SQL

§

SQL Iliyopangwa

Upangaji wa SQL ni muhimu kwa wasembuzi wa data na waendelezaji wa programu duniani kote. Tofauti za GitHub PR dhidi ya ghala la Snowflake zinakuwa hazisomeki wakati mwanahisabati mmoja anapanga mstari wa CTE wa mistari 200 na mwingine anabandika tena kama mstari mmoja; tofauti inakuwa kelele inayoficha mabadiliko halisi ya mantiki. Kuendesha hoji kupitia mpangaji thabiti kabla ya kutuma hupunguza mzunguko wa ukaguzi na hufanya tofauti ya agizo la safu ambayo mkaguzi anahitaji kweli kusoma isimame kwenye mstari wake.

Jinsi upangaji wa SQL unavyofanya kazi

Upangaji wa SQL ni uandishi upya unaoundwa na kisomaji ambacho hupita kila tokeni kwenye hoji na kuiwasilisha tena na nafasi za wazi kuzunguka kulingana na sheria za lahaja iliyochaguliwa. Semantiki za hoji haibadiliki kamwe, muundo pekee.

  1. Chagua lahaja. Alama za kuandika za MySQL, utupaji wa :: wa PostgreSQL, njia za jedwali zilizopachikwa za BigQuery, na vitambulishi vya mabano ya mraba vya T-SQL kila kimoja kinahitaji kisomaji kinachokijua. Kichaguo cha lahaja kinachagua sarufi ya kutumia.
  2. Gawa ingizo kwa tokeni. Mpangaji hugawanya hoji katika mkondo wa tokeni: maneno muhimu (SELECT, JOIN), vitambulishi, maandishi halisi, waendeshaji, mabano, na maoni. Maandishi halisi ya mfuatano na vitambulishi vilivyonukuliwa vinapitishwa bila kuguswa ili sintaksia maalum ya lahaja ibaki ikifanya kazi.
  3. Tumia sheria za mpangilio. Vifungu vya kiwango cha juu (SELECT, FROM, WHERE, GROUP BY, ORDER BY) vinaanza kwenye mstari wao. Misemo iliyotenganishwa na koma kwenye orodha ya kuchagua na orodha za safu kila moja hupata mstari, iliyohamishwa kwa kitengo cha msisitizo kilichochaguliwa.
  4. Tumia hali ya maneno muhimu. Kitufe cha hali ya maneno muhimu huandika upya maneno muhimu yanayotambuliwa ya SQL kuwa herufi kubwa, herufi ndogo, au huhifadhi uandishi wa ingizo kama ulivyo. Vitambulishi havigusiwi kamwe — majina ya safu na jedwali daima huja kama yalivyoandikwa.
  5. Wasilisha mfuatano uliopangwa. Mkondo wa tokeni unaungwa tena kuwa mfuatano mmoja na herufi ya msisitizo (nafasi 2, nafasi 4, au kichupo) na sheria ya mvunjomstari iliyosanidiwa. Hali ya moja kwa moja inaendesha mfumo wote upya kwenye kuzuia kwa 200 ms unapoandika.

Kwa nini kupanga SQL vizuri

  • Usomaji wa tofauti ya ombi la kuipokelewa. CTE ya mistari 200 iliyoandikwa upya kama mstari mmoja inabadilisha ukaguzi wa msimbo kuwa mchezo wa kukisia. Muundo thabiti unaweka tofauti kwenye mabadiliko uliyofanya kweli — safu mpya, JOIN ya ziada, prediketi tofauti ya WHERE — ili mkaguzi aweze kuiona bila kufungua nafasi za wazi.
  • Utatuzi rahisi. Hoji ikirudisha idadi mbaya ya safu, jambo la kwanza unalofanya ni kuisoma mstari kwa mstari. SQL iliyopangwa huweka kila JOIN kwenye mstari wake na kupanga prediketi za WHERE ili AND iliyokosekana au OR iliyopotea ionekane mara moja.
  • Mtindo thabiti wa timu. Timu nyingi huchukua mwongozo wa mtindo wa SQL na kutaka kila hoji iliyowekwa kufuata. Uendeshaji wa mpangaji kabla ya kutuma huondoa hoja ya mtindo kutoka kwenye ukaguzi na huacha mantiki pekee ijadiliwe.
  • Kushiriki SQL kwenye nyaraka. Miongozo ya kufanya kazi, tathmini za matukio, na nyaraka za Notion zote zinanufaika kutoka kwa SQL inayosomeka kutoka juu hadi chini. SQL iliyopangwa inabandika vizuri kwenye kizuizi cha msimbo kilichozungushiwa na kuchapishwa kwa utabiriwa kwenye maudhui ya PDF, bila kufunguka kwa mstari katikati ya neno muhimu.

Matumizi ya kawaida

Upangaji wa SQL unaonekana katika uhandisi wa takwimu, uendelezaji wa backend, na kazi za uendeshaji kila wakati hoji inahitaji kusomwa na mtu asiyeandika.

  • Uhandisi wa takwimu: hook ya kabla ya kutuma kwenye mradi wa dbt ambayo inapanga upya kila faili la mfano ili tofauti za PR zibaki kwenye mabadiliko ya mantiki, si mzunguko wa nafasi za wazi.
  • Utawala wa hifadhidata: bandika ingizo la kumbukumbu ya hoji polepole ya mstari mmoja, lipange, na upite agizo la kuunganika ukiandika tathmini ya tukio.
  • Nyaraka: chukua hoji kutoka kwa uchunguzi wa Looker au kitabu cha kazi cha Tableau, lipange kwa mwongozo wa kufanya kazi, na ulitumie kama mfano wa kunakili-kubandika kwa mzunguko wa kukaa tayari.

Mfano wa kufanyiwa kazi

Bandika SELECT u.id,u.email,COUNT(o.id) FROM users u LEFT JOIN orders o ON o.user_id=u.id WHERE u.created_at > '2024-01-01' GROUP BY u.id,u.email ORDER BY u.id; kwenye sehemu ya ingizo na lahaja imewekwa kwa PostgreSQL, msisitizo nafasi 2, na hali ya maneno muhimu KUBWA. Matokeo huweka SELECT, FROM, LEFT JOIN, WHERE, GROUP BY, na ORDER BY kwenye mistari yao; kila safu kwenye orodha ya kuchagua na orodha ya vikundi hupata mstari wake wa msisitizo; na prediketi ya ON inakaa msisitizo mmoja zaidi kuliko neno muhimu la JOIN linaloihusiana nazo. Hoji hiyo hiyo kupitia lahaja ya BigQuery inazalisha matokeo sawa kwa kesi hii lakini ingehifadhi vitambulishi vilivyonukuliwa kwa alama ya nyuma-nyuma vikiwepo.

FAQ

Lahaja zipi za SQL zinasaidiwa?

Orodha ya kuchagua ya lahaja inashughulikia SQL ya Kawaida, MySQL, PostgreSQL, SQLite, MariaDB, Transact-SQL (SQL Server / Azure SQL), BigQuery, Snowflake, na Redshift. Maktaba ya msingi ya sql-formatter pia inatambua DuckDB, Spark SQL, Hive, Trino, Db2, N1QL, PL/SQL, ClickHouse, TiDB, na SingleStoreDB — kuchagua lahaja iliyo karibu zaidi huzalisha matokeo yanayofaa hata lengo halisi halipo kwenye orodha. Vitambulishi, maandishi halisi ya mfuatano, na waendeshaji maalum wa lahaja (PostgreSQL @>, BigQuery SAFE. viambishi awali) vimehifadhiwa kama vile vilivyo.

Je, hii inathibitisha SQL yangu?

Hapana. Mpangaji ni muandishi upya wa kiaksi, si mchakato wa kuchakata. Hugawanya ingizo kwa tokeni, hutumia sheria za mpangilio, na kuwasilisha matokeo; haukagui kama hoji ni sahihi kisemantiki, kama meza zilizotajwa zipo, au kama sintaksia ni halali katika lahaja iliyochaguliwa. Endesha matokeo yaliyopangwa kupitia hifadhidata halisi (au kisafi cha SQL kama SQLFluff) kwa ukaguzi halisi wa usahihi.

Kwa nini maneno muhimu yangu yanabadilishwa kuwa herufi kubwa?

Orodha ya kuchagua ya Hali ya maneno muhimu inalakiwa kwa KUBWA, ambayo ni mkataba katika miongozo mingi iliyochapishwa ya mtindo wa SQL (dbt Labs, Mode, GitLab). Badilisha kuwa ndogo ikiwa timu yako inaandika select / from kwa herufi ndogo, au Hifadhi ikiwa unataka matokeo yahifadhi uandishi wowote ulioweka. Vitambulishi havitathiriwi kamwe — seti ya maneno muhimu yanayotambuliwa tu ndiyo inaandikwa upya.

Je, hoji yangu inapakiwa mahali popote?

Hapana. Maktaba ya sql-formatter iliyohifadhiwa inafanya kazi kwenye kivinjari chako, upangaji unafanyika ndani ya mashine yako, na maandishi ya hoji hayavuki mtandao. Maombi pekee ya nje ambayo ukurasa huu unafanya ni maombi sawa ya takwimu na matangazo ambayo kila ukurasa kwenye tools.ultim8soft.com unafanya; maandishi ya SQL mwenyewe si sehemu ya yoyote kati ya hizo.

SQL iliyopangwa vizuri huacha kuwa hoja ya mtindo mara mpangaji anaposhughulikia. Chombo kinafanya kazi kabisa kwenye kivinjari chako, hoji haiondoki kwenye ukurasa, na kisomaji sawa kinachojua lahaja kinachotumia nguvu za pakiti ya npm ya sql-formatter hufanya uandishi upya.