T sql ഉദാഹരണങ്ങൾ. MS SQL സെർവർ, T-SQL എന്നിവയിലേക്കുള്ള ആമുഖം. ഗ്രൂപ്പിംഗ് വ്യവസ്ഥകൾ ഉപയോഗിച്ച് സമാഹരിച്ച മൂല്യങ്ങൾ നിയന്ത്രിക്കുന്നു: HAVING ക്ലോസ്

അവസാന പരിഷ്കാരം: 24.06.2017

SQL സെർവർ ഏറ്റവും കൂടുതൽ ഒന്നാണ് ജനപ്രിയ സംവിധാനങ്ങൾലോകത്തിലെ ഡാറ്റാബേസ് മാനേജ്മെൻ്റ് (DBMS). ഈ DBMS വൈവിധ്യമാർന്ന പ്രോജക്റ്റുകൾക്ക് അനുയോജ്യമാണ്: ചെറിയ ആപ്ലിക്കേഷനുകൾ മുതൽ വലിയ, ഉയർന്ന ലോഡുള്ള പ്രോജക്റ്റുകൾ വരെ.

SQL സെർവർ സൃഷ്ടിച്ചു Microsoft മുഖേന. ആദ്യ പതിപ്പ് 1987 ൽ പുറത്തിറങ്ങി. എ നിലവിലുള്ള പതിപ്പ്പതിപ്പ് 16 ആണ്, അത് 2016 ൽ പുറത്തിറങ്ങി, നിലവിലെ ഗൈഡിൽ ഉപയോഗിക്കും.

SQL സെർവർ ദീർഘനാളായിവിൻഡോസിനുള്ള ഒരു ഡാറ്റാബേസ് മാനേജ്മെൻ്റ് സിസ്റ്റം മാത്രമായിരുന്നു, എന്നാൽ പതിപ്പ് 16 മുതൽ ഈ സിസ്റ്റം ലിനക്സിലും ലഭ്യമാണ്.

SQL സെർവറിൻ്റെ സവിശേഷത ഇനിപ്പറയുന്നതുപോലുള്ള സവിശേഷതകളാണ്:

    പ്രകടനം. SQL സെർവർ വളരെ വേഗതയുള്ളതാണ്.

    വിശ്വാസ്യതയും സുരക്ഷയും. SQL സെർവർ ഡാറ്റ എൻക്രിപ്ഷൻ നൽകുന്നു.

    ലാളിത്യം. ഈ DBMS പ്രവർത്തിക്കാനും നിയന്ത്രിക്കാനും താരതമ്യേന എളുപ്പമാണ്.

MS SQL സെർവറിലെ കേന്ദ്ര വശം, ഏതൊരു DBMS-ലേയും പോലെ, ഡാറ്റാബേസ് ആണ്. ഒരു പ്രത്യേക രീതിയിൽ ക്രമീകരിച്ചിരിക്കുന്ന ഡാറ്റയുടെ ഒരു ശേഖരമാണ് ഡാറ്റാബേസ്. മിക്കപ്പോഴും ഡാറ്റാബേസ് ഹാർഡ് ഡ്രൈവിലെ ഒരു ഫയലിനെ പ്രതിനിധീകരിക്കുന്നു, എന്നിരുന്നാലും ഈ കത്തിടപാടുകൾ ആവശ്യമില്ല. ഡാറ്റാബേസുകൾ സംഭരിക്കാനും നിയന്ത്രിക്കാനും ഡാറ്റാബേസ് മാനേജ്മെൻ്റ് സിസ്റ്റങ്ങൾ അല്ലെങ്കിൽ DBMS-കൾ ഉപയോഗിക്കുന്നു. MS SQL സെർവർ അത്തരം ഡിബിഎംഎസുകളിൽ ഒന്നാണ്.

ഡാറ്റാബേസുകൾ സംഘടിപ്പിക്കുന്നതിന്, MS SQL സെർവർ ഉപയോഗിക്കുന്നു റിലേഷണൽ മോഡൽ. ഈ ഡാറ്റാബേസ് മോഡൽ 1970 ൽ എഡ്ഗർ കോഡ് വികസിപ്പിച്ചെടുത്തു. ഇന്ന് ഇത് യഥാർത്ഥത്തിൽ ഡാറ്റാബേസുകൾ സംഘടിപ്പിക്കുന്നതിനുള്ള മാനദണ്ഡമാണ്.

റിലേഷണൽ മോഡലിൽ പട്ടികകളുടെ രൂപത്തിൽ ഡാറ്റ സംഭരിക്കുന്നത് ഉൾപ്പെടുന്നു, അവയിൽ ഓരോന്നിനും വരികളും നിരകളും അടങ്ങിയിരിക്കുന്നു. ഓരോ വരിയും സംഭരിക്കുന്നു പ്രത്യേക വസ്തു, കൂടാതെ നിരകളിൽ ഈ വസ്തുവിൻ്റെ ആട്രിബ്യൂട്ടുകൾ അടങ്ങിയിരിക്കുന്നു.

ഒരു പട്ടികയ്ക്കുള്ളിലെ ഓരോ വരിയും തിരിച്ചറിയാൻ ഒരു പ്രാഥമിക കീ ഉപയോഗിക്കുന്നു. പ്രാഥമിക കീ ഒന്നോ അതിലധികമോ നിരകളാകാം. പ്രാഥമിക കീ ഉപയോഗിച്ച് നമുക്ക് റഫർ ചെയ്യാം നിർദ്ദിഷ്ട സ്ട്രിംഗ്പട്ടികയിൽ. അതനുസരിച്ച്, രണ്ട് വരികൾക്ക് ഒരേ പ്രാഥമിക കീ ഉണ്ടായിരിക്കാൻ കഴിയില്ല.

കീകൾ വഴി, ഒരു പട്ടികയെ മറ്റൊന്നുമായി ബന്ധിപ്പിക്കാൻ കഴിയും, അതായത്, രണ്ട് പട്ടികകൾക്കിടയിൽ ബന്ധങ്ങൾ ക്രമീകരിക്കാം. പട്ടികയെ തന്നെ ഒരു ബന്ധമായി പ്രതിനിധീകരിക്കാം.

ഡാറ്റാബേസുമായി സംവദിക്കാൻ, SQL (സ്ട്രക്ചേർഡ് ക്വറി ലാംഗ്വേജ്) ഭാഷ ഉപയോഗിക്കുന്നു. ഒരു ക്ലയൻ്റ് (ഉദാഹരണത്തിന്, ഒരു ബാഹ്യ പ്രോഗ്രാം) ഒരു അഭ്യർത്ഥന അയയ്ക്കുന്നു SQL ഭാഷഒരു പ്രത്യേക API വഴി. ഡിബിഎംഎസ് അഭ്യർത്ഥന ശരിയായി വ്യാഖ്യാനിക്കുകയും നടപ്പിലാക്കുകയും ചെയ്യുന്നു, തുടർന്ന് എക്സിക്യൂഷൻ ഫലം ക്ലയൻ്റിലേക്ക് അയയ്ക്കുന്നു.

സിസ്റ്റം/ആർ എന്ന ഡാറ്റാബേസ് സിസ്റ്റത്തിന് വേണ്ടി ഐബിഎം വികസിപ്പിച്ചെടുത്തതാണ് എസ്‌ക്യുഎൽ. അതേ സമയം, ഭാഷയെ തന്നെ SEQUEL (സ്ട്രക്ചർഡ് ഇംഗ്ലീഷ് ക്വറി ലാംഗ്വേജ്) എന്ന് വിളിച്ചിരുന്നു. ഡാറ്റാബേസോ ഭാഷയോ പിന്നീട് ഔദ്യോഗികമായി പ്രസിദ്ധീകരിക്കപ്പെട്ടില്ലെങ്കിലും, പരമ്പരാഗതമായി SQL എന്ന പദം തന്നെ പലപ്പോഴും ഒരു "തുടർച്ച" ആയി ഉച്ചരിക്കാറുണ്ട്.

1979-ൽ, റിലേഷണൽ സോഫ്റ്റ്‌വെയർ ഇൻക്. SQL ഭാഷ ഉപയോഗിച്ച ഒറാക്കിൾ എന്ന ആദ്യത്തെ ഡാറ്റാബേസ് മാനേജ്മെൻ്റ് സിസ്റ്റം വികസിപ്പിച്ചെടുത്തു. ഈ ഉൽപ്പന്നത്തിൻ്റെ വിജയത്തെത്തുടർന്ന് കമ്പനിയെ ഒറാക്കിൾ എന്ന് പുനർനാമകരണം ചെയ്തു.

തുടർന്ന്, SQL ഉപയോഗിക്കുന്ന മറ്റ് ഡാറ്റാബേസ് സിസ്റ്റങ്ങൾ പ്രത്യക്ഷപ്പെടാൻ തുടങ്ങി. തൽഫലമായി, 1989-ൽ, അമേരിക്കൻ നാഷണൽ സ്റ്റാൻഡേർഡ് ഇൻസ്റ്റിറ്റ്യൂട്ട് (ANSI) ഭാഷ ക്രോഡീകരിച്ച് അതിൻ്റെ ആദ്യ നിലവാരം പ്രസിദ്ധീകരിച്ചു. ഇതിനുശേഷം, സ്റ്റാൻഡേർഡ് ആനുകാലികമായി അപ്ഡേറ്റ് ചെയ്യുകയും അനുബന്ധമായി നൽകുകയും ചെയ്തു. അതിൻ്റെ അവസാന അപ്ഡേറ്റ് നടന്നത് 2011 ലാണ്. എന്നാൽ ഒരു സ്റ്റാൻഡേർഡ് നിലവിലുണ്ടെങ്കിലും, DBMS നിർമ്മാതാക്കൾ പലപ്പോഴും അവരുടെ സ്വന്തം ഉപയോഗിക്കുന്നു സ്വന്തം നടപ്പാക്കലുകൾ SQL ഭാഷകൾ, പരസ്പരം അല്പം വ്യത്യസ്തമാണ്.

SQL ഭാഷയിൽ രണ്ട് തരം ഉണ്ട്: PL-SQL, T-SQL. ഒറാക്കിൾ, MySQL തുടങ്ങിയ ഡിബിഎംഎസുകളിൽ PL-SQL ഉപയോഗിക്കുന്നു. SQL സെർവറിൽ T-SQL (Transact-SQL) ഉപയോഗിക്കുന്നു. വാസ്തവത്തിൽ, അതുകൊണ്ടാണ് T-SQL നിലവിലെ ഗൈഡിനുള്ളിൽ പരിഗണിക്കുന്നത്.

T-SQL കമാൻഡ് നിർവ്വഹിക്കുന്ന ചുമതലയെ ആശ്രയിച്ച്, ഇത് ഇനിപ്പറയുന്ന തരങ്ങളിൽ ഒന്നായിരിക്കാം:

    DDL (ഡാറ്റ ഡെഫനിഷൻ ലാംഗ്വേജ്). ഒരു ഡാറ്റാബേസ്, പട്ടികകൾ, സൂചികകൾ, സംഭരിച്ച നടപടിക്രമങ്ങൾ മുതലായവ സൃഷ്ടിക്കുന്ന വിവിധ കമാൻഡുകൾ ഈ തരത്തിൽ ഉൾപ്പെടുന്നു. പൊതുവേ, ഡാറ്റ നിർണ്ണയിക്കപ്പെടുന്നു.

    പ്രത്യേകിച്ചും, നമുക്ക് ഇനിപ്പറയുന്ന കമാൻഡുകളെ ഈ തരത്തിൽ തരംതിരിക്കാം:

    • സൃഷ്ടിക്കുക : ഡാറ്റാബേസ് ഒബ്ജക്റ്റുകൾ സൃഷ്ടിക്കുന്നു (ഡാറ്റാബേസ്, പട്ടികകൾ, സൂചികകൾ മുതലായവ)

      ALTER: ഡാറ്റാബേസ് ഒബ്‌ജക്‌റ്റുകൾ പരിഷ്‌ക്കരിക്കുന്നു

      ഡ്രോപ്പ്: ഡാറ്റാബേസ് ഒബ്ജക്റ്റുകൾ നീക്കംചെയ്യുന്നു

      വെട്ടിച്ചുരുക്കുക: പട്ടികകളിൽ നിന്ന് എല്ലാ ഡാറ്റയും നീക്കംചെയ്യുന്നു

    ഡിഎംഎൽ (ഡാറ്റ മാനിപുലേഷൻ ലാംഗ്വേജ്). ഡാറ്റ തിരഞ്ഞെടുക്കുന്നതിനും അപ്‌ഡേറ്റ് ചെയ്യുന്നതിനും ചേർക്കുന്നതിനും ഇല്ലാതാക്കുന്നതിനുമുള്ള കമാൻഡുകൾ ഈ തരത്തിൽ ഉൾപ്പെടുന്നു - പൊതുവേ, ഞങ്ങൾക്ക് ഡാറ്റ നിയന്ത്രിക്കാൻ കഴിയുന്ന എല്ലാ കമാൻഡുകളും.

    ഇനിപ്പറയുന്ന കമാൻഡുകൾ ഈ തരത്തിലുള്ളതാണ്:

    • തിരഞ്ഞെടുക്കുക: ഡാറ്റാബേസിൽ നിന്ന് ഡാറ്റ വീണ്ടെടുക്കുന്നു

      അപ്ഡേറ്റ്: അപ്ഡേറ്റ് ഡാറ്റ

      ചേർക്കുക: പുതിയ ഡാറ്റ ചേർക്കുന്നു

      ഇല്ലാതാക്കുക: ഡാറ്റ ഇല്ലാതാക്കുന്നു

    DCL (ഡാറ്റ കൺട്രോൾ ലാംഗ്വേജ് / ഡാറ്റ ആക്സസ് കൺട്രോൾ ലാംഗ്വേജ്). ഈ തരത്തിൽ ഡാറ്റ ആക്സസ് അവകാശങ്ങൾ നിയന്ത്രിക്കുന്ന കമാൻഡുകൾ ഉൾപ്പെടുന്നു. പ്രത്യേകിച്ചും, ഇനിപ്പറയുന്ന കമാൻഡുകൾ ഇവയാണ്:

    • ഗ്രാൻ്റ്: ഡാറ്റ ആക്സസ് ചെയ്യുന്നതിനുള്ള അനുമതികൾ നൽകുന്നു

      അസാധുവാക്കുക: ഡാറ്റ ആക്സസ് അവകാശങ്ങൾ അസാധുവാക്കുന്നു

ആദ്യ ഭാഗത്തിൽ, MERGE കമാൻഡ് ഒഴികെ, അതിൻ്റെ ഏതാണ്ട് മുഴുവൻ കമാൻഡുകളും ഉപയോഗിച്ച് ഞങ്ങൾ ഇതിനകം തന്നെ DML ഭാഷയിൽ അൽപ്പം സ്പർശിച്ചു.

വ്യക്തിപരമായ അനുഭവത്തിൽ നിന്ന് വികസിപ്പിച്ചെടുത്ത എൻ്റെ സ്വന്തം ക്രമം അനുസരിച്ച് ഞാൻ DML നെ കുറിച്ച് സംസാരിക്കും. വഴിയിൽ, ശ്രദ്ധ കേന്ദ്രീകരിക്കേണ്ട "വഴുവഴുപ്പുള്ള" സ്ഥലങ്ങളെക്കുറിച്ചും സംസാരിക്കാൻ ഞാൻ ശ്രമിക്കും; ഈ "സ്ലിപ്പറി" സ്ഥലങ്ങൾ SQL ഭാഷയുടെ പല ഭാഷകളിലും സമാനമാണ്.

കാരണം പാഠപുസ്തകം വിശാലമായ വായനക്കാർക്കായി സമർപ്പിച്ചിരിക്കുന്നു (പ്രോഗ്രാമർമാർ മാത്രമല്ല), അപ്പോൾ വിശദീകരണം ചിലപ്പോൾ ഉചിതമായിരിക്കും, അതായത്. നീണ്ടതും മടുപ്പിക്കുന്നതുമാണ്. പ്രൊഫഷണൽ പ്രവർത്തനത്തിൻ്റെ ഫലമായി പ്രായോഗികമായി പ്രധാനമായും ലഭിച്ച മെറ്റീരിയലിനെക്കുറിച്ചുള്ള എൻ്റെ കാഴ്ചപ്പാടാണിത്.

ഈ ട്യൂട്ടോറിയലിൻ്റെ പ്രധാന ലക്ഷ്യം, ഘട്ടം ഘട്ടമായി, SQL ഭാഷയുടെ സത്തയെക്കുറിച്ച് പൂർണ്ണമായ ധാരണ വികസിപ്പിക്കുകയും അതിൻ്റെ നിർമ്മാണങ്ങൾ എങ്ങനെ ശരിയായി പ്രയോഗിക്കാമെന്ന് നിങ്ങളെ പഠിപ്പിക്കുകയും ചെയ്യുക എന്നതാണ്. ഈ മേഖലയിലെ പ്രൊഫഷണലുകൾക്ക് സ്ക്രോൾ ചെയ്യാൻ താൽപ്പര്യമുണ്ടാകാം ഈ മെറ്റീരിയൽ, ഒരുപക്ഷേ അവർക്ക് സ്വയം പുതിയ എന്തെങ്കിലും പഠിക്കാൻ കഴിഞ്ഞേക്കാം, അല്ലെങ്കിൽ അവരുടെ ഓർമ്മ പുതുക്കുന്നതിന് വായിക്കുന്നത് ഉപയോഗപ്രദമാകും. എല്ലാവർക്കും ഇത് രസകരമായി തോന്നുമെന്ന് ഞാൻ പ്രതീക്ഷിക്കുന്നു.

കാരണം MS SQL ഡാറ്റാബേസ് ഡയലക്റ്റിലെ DML, SELECT കൺസ്ട്രക്‌റ്റിൻ്റെ വാക്യഘടനയുമായി വളരെ അടുത്ത് ബന്ധപ്പെട്ടിരിക്കുന്നു, അതിനാൽ ഞാൻ DML നെ കുറിച്ച് സംസാരിക്കാൻ തുടങ്ങും. എൻ്റെ അഭിപ്രായത്തിൽ, ഡിഎംഎൽ ഭാഷയിലെ ഏറ്റവും പ്രധാനപ്പെട്ട നിർമ്മിതിയാണ് SELECT നിർമ്മാണം, കാരണം അത് അല്ലെങ്കിൽ അതിൻ്റെ ഭാഗങ്ങൾ കാരണം, ആവശ്യമായ ഡാറ്റ ഡാറ്റാബേസിൽ നിന്ന് വീണ്ടെടുക്കുന്നു.

DML ഭാഷയിൽ ഇനിപ്പറയുന്ന നിർമ്മിതികൾ അടങ്ങിയിരിക്കുന്നു:

  • തിരഞ്ഞെടുക്കുക - ഡാറ്റ തിരഞ്ഞെടുക്കൽ
  • INSERT - പുതിയ ഡാറ്റ ചേർക്കുന്നു
  • അപ്ഡേറ്റ് - ഡാറ്റ അപ്ഡേറ്റ്
  • ഇല്ലാതാക്കുക - ഡാറ്റ ഇല്ലാതാക്കുന്നു
  • MERGE - ഡാറ്റ ലയനം

ഈ ഭാഗത്ത്, SELECT കമാൻഡിൻ്റെ അടിസ്ഥാന വാക്യഘടന മാത്രമേ ഞങ്ങൾ നോക്കൂ, അത് ഇതുപോലെ കാണപ്പെടുന്നു:

കോളം_ലിസ്റ്റ് തിരഞ്ഞെടുക്കുക അല്ലെങ്കിൽ * ഉറവിടത്തിൽ നിന്ന് എവിടെ ഫിൽട്ടർ ചെയ്യുക അടുക്കുക_എക്‌സ്‌പ്രഷൻ പ്രകാരം ഓർഡർ ചെയ്യുക
വിഷയം പ്രസ്താവന തിരഞ്ഞെടുക്കുകവളരെ വിപുലമായ, അതിനാൽ ഈ ഭാഗത്ത് ഞാൻ അതിൻ്റെ അടിസ്ഥാന ഡിസൈനുകളിൽ മാത്രം ശ്രദ്ധ കേന്ദ്രീകരിക്കും. അടിസ്ഥാനകാര്യങ്ങൾ നന്നായി അറിയാതെ നിങ്ങൾക്ക് കൂടുതൽ സങ്കീർണ്ണമായ ഘടനകൾ പഠിക്കാൻ കഴിയില്ലെന്ന് ഞാൻ വിശ്വസിക്കുന്നു, കാരണം... അപ്പോൾ എല്ലാം ഈ അടിസ്ഥാന രൂപകൽപ്പനയെ ചുറ്റിപ്പറ്റിയാണ് (സബ്ക്വറികൾ, ജോയിൻസ് മുതലായവ).

കൂടാതെ, ഈ ഭാഗത്തിൻ്റെ ഭാഗമായി, ഞാൻ TOP ഓഫറിനെക്കുറിച്ചും സംസാരിക്കും. അടിസ്ഥാന വാക്യഘടനയിൽ ഈ വാചകം ഞാൻ മനഃപൂർവ്വം സൂചിപ്പിച്ചിട്ടില്ല, കാരണം... വ്യത്യസ്ത SQL ഭാഷകളിൽ ഇത് വ്യത്യസ്തമായി നടപ്പിലാക്കുന്നു.

DDL ഭാഷ കൂടുതൽ സ്റ്റാറ്റിക് ആണെങ്കിൽ, അതായത്. അതിൻ്റെ സഹായത്തോടെ, കർക്കശമായ ഘടനകൾ സൃഷ്ടിക്കപ്പെടുന്നു (പട്ടികകൾ, ബന്ധങ്ങൾ മുതലായവ), തുടർന്ന് ഡിഎംഎൽ ഭാഷ ചലനാത്മകമാണ്, ഇവിടെ നിങ്ങൾക്ക് വ്യത്യസ്ത രീതികളിൽ ശരിയായ ഫലങ്ങൾ ലഭിക്കും.

ഘട്ടം ഘട്ടമായുള്ള രീതിയിലും പരിശീലനം തുടരും, അതായത്. വായിക്കുമ്പോൾ, നിങ്ങളുടെ സ്വന്തം കൈകൊണ്ട് ഉദാഹരണം പൂർത്തിയാക്കാൻ നിങ്ങൾ ഉടൻ ശ്രമിക്കണം. അപ്പോൾ നിങ്ങൾ ലഭിച്ച ഫലം വിശകലനം ചെയ്യുകയും അവബോധപൂർവ്വം മനസ്സിലാക്കാൻ ശ്രമിക്കുകയും ചെയ്യുക. എന്തെങ്കിലും അവ്യക്തമായി തുടരുകയാണെങ്കിൽ, ഉദാഹരണത്തിന്, ഒരു ഫംഗ്‌ഷൻ്റെ അർത്ഥം, സഹായത്തിനായി ഇൻ്റർനെറ്റിലേക്ക് തിരിയുക.

ആദ്യ ഭാഗത്തിൽ DDL+DML ഉപയോഗിച്ച് സൃഷ്ടിച്ച ടെസ്റ്റ് ഡാറ്റാബേസിൽ ഉദാഹരണങ്ങൾ കാണിക്കും.

ആദ്യ ഭാഗത്തിൽ ഒരു ഡാറ്റാബേസ് സൃഷ്ടിക്കാത്തവർക്ക് (എല്ലാവർക്കും DDL ഭാഷയിൽ താൽപ്പര്യമുണ്ടാകില്ല എന്നതിനാൽ), അവർക്ക് ഇനിപ്പറയുന്ന സ്ക്രിപ്റ്റ് ഉപയോഗിക്കാം:

ടെസ്റ്റ് ഡാറ്റാബേസ് സൃഷ്ടിക്കൽ സ്ക്രിപ്റ്റ്

ഒരു ഡാറ്റാബേസ് സൃഷ്‌ടിക്കുന്നു ഡാറ്റാബേസ് ടെസ്റ്റ് ഗോ സൃഷ്‌ടിക്കുക -- ടെസ്റ്റ് ഡാറ്റാബേസ് നിലവിലെ ഉപയോഗം ടെസ്റ്റ് ഗോ ആക്കുക -- റഫറൻസ് ടേബിളുകൾ സൃഷ്‌ടിക്കുക പട്ടിക സ്ഥാനങ്ങൾ സൃഷ്‌ടിക്കുക (ഐഡി ഇൻറ്റ് ഐഡൻ്റിറ്റി(1,1) ശൂന്യമായ നിയന്ത്രണമല്ല PK_Positions പ്രൈമറി കീ, പേര് nvarchar(30) NULL അല്ല) പട്ടിക വകുപ്പുകൾ സൃഷ്‌ടിക്കുക (ID int IDENTITY(1,1) PK_Departments പ്രൈമറി കീ അല്ല PK_Departments പ്രൈമറി കീ, പേര് nvarchar(30) NULL അല്ല) പോകുക -- റഫറൻസ് ID പട്ടികകൾ പൂരിപ്പിച്ച് SEENTIT INRTIT പട്ടികകൾ ഡാറ്റ സഹിതം സ്ഥാനം സ്ഥാനങ്ങൾ( ID,പേര്)VALUES (1,N"അക്കൗണ്ടൻ്റ്"), (2,N"ഡയറക്ടർ"), (3,N"പ്രോഗ്രാമർ"), (4,N"സീനിയർ പ്രോഗ്രാമർ") IDENTITY_INSERT സ്ഥാനങ്ങൾ സജ്ജീകരിക്കുക ഓഫാണ് GO SET IDENTITY_INSERT വകുപ്പുകളിലെ വകുപ്പുകൾ (ഐഡി, പേര്) മൂല്യങ്ങൾ (1,N"അക്കൗണ്ടിംഗ്"), (2,N"അക്കൗണ്ടിംഗ്"), (3,N"IT") സെറ്റ് ഐഡൻ്റിറ്റി_ഇൻസേർട്ട് ഡിപ്പാർട്ട്‌മെൻ്റുകൾ ഓഫ് ഗോ -- ജീവനക്കാരുമായി ഒരു പട്ടിക സൃഷ്ടിക്കുക പട്ടിക സൃഷ്ടിക്കുക ജീവനക്കാർ(ID int NULL, പേര് nvarchar(30), ജന്മദിന തീയതി, ഇമെയിൽ nvarchar(30), PositionID int, DepartmentID int, HireDate date അസാധുവായ നിയന്ത്രണമല്ല DF_Employees_HireDate DEFAULT SYSDATE_TIME-നുള്ളിൽ, മാനേജർ KYENSTRAINT ), നിയന്ത്രണങ്ങൾ gerID) റഫറൻസുകൾ ജീവനക്കാർ(ID), CONSTRAINT UQ_Employees_Email UNIQUE(Email), CONSTRAINT CK_Emplo yees_ID CHECK (1000 നും 1999 നും ഇടയിലുള്ള ഐഡി), INDEX IDX_Employees_Name(Name)) GO -- ഡാറ്റ ഉപയോഗിച്ച് പൂരിപ്പിക്കുക ജീവനക്കാരുടെ (ഐഡി, പേര്, ജന്മദിനം, ഇമെയിൽ, സ്ഥാന ഐഡി, ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി, മാനേജർ ഐഡി) VALUES120901090 "," [ഇമെയിൽ പരിരക്ഷിതം]",2,1,NULL), (1001,N"പെട്രോവ് പി.പി.","19831203"," [ഇമെയിൽ പരിരക്ഷിതം]",3,3,1003), (1002,N"Sidorov S.S.","19760607"," [ഇമെയിൽ പരിരക്ഷിതം]",1,2,1000), (1003,N"ആന്ദ്രീവ് എ.എ.","19820417"," [ഇമെയിൽ പരിരക്ഷിതം]",4,3,1000)

അത്രയേയുള്ളൂ, ഇപ്പോൾ ഞങ്ങൾ ഡിഎംഎൽ ഭാഷ പഠിക്കാൻ തയ്യാറാണ്.

തിരഞ്ഞെടുക്കുക - ഡാറ്റ തിരഞ്ഞെടുക്കൽ ഓപ്പറേറ്റർ

ഒന്നാമതായി, സജീവമായ അന്വേഷണ എഡിറ്ററിനായി, ഡ്രോപ്പ്-ഡൗൺ ലിസ്റ്റിൽ തിരഞ്ഞെടുത്ത് അല്ലെങ്കിൽ "യുഎസ്ഇ ടെസ്റ്റ്" കമാൻഡ് ഉപയോഗിച്ച് നിലവിലെ ഡാറ്റാബേസ് ടെസ്റ്റ് നടത്താം.

SELECT എന്നതിൻ്റെ ഏറ്റവും അടിസ്ഥാന രൂപത്തിൽ നമുക്ക് ആരംഭിക്കാം:

ജീവനക്കാരിൽ നിന്ന് * തിരഞ്ഞെടുക്കുക
ഈ ചോദ്യത്തിൽ, എംപ്ലോയീസ് ടേബിളിൽ നിന്ന് എല്ലാ കോളങ്ങളും ("*" എന്ന് സൂചിപ്പിക്കുന്നത്) തിരികെ നൽകാൻ ഞങ്ങൾ ആവശ്യപ്പെടുന്നു - നിങ്ങൾക്ക് ഇത് "എല്ലാ_ഫീൽഡുകളും എംപ്ലോയീസ്_ടേബിളിൽ നിന്ന് തിരഞ്ഞെടുക്കുക" എന്ന് വായിക്കാം. ഒരു ക്ലസ്റ്റേർഡ് ഇൻഡക്സ് ഉണ്ടെങ്കിൽ, തിരികെ നൽകിയ ഡാറ്റ മിക്കവാറും അത് വഴി അടുക്കും ഈ സാഹചര്യത്തിൽഐഡി കോളം പ്രകാരം (എന്നാൽ ഇത് പ്രധാനമല്ല, കാരണം മിക്ക കേസുകളിലും ഓർഡർ പ്രകാരം ക്രമപ്പെടുത്തൽ ഞങ്ങൾ സ്വയം സൂചിപ്പിക്കുന്നു ...):

ഐഡി പേര് ജന്മദിനം ഇമെയിൽ സ്ഥാനം ഐഡി വകുപ്പ് ഐഡി വാടക തീയതി മാനേജർ ഐ.ഡി
1000 ഇവാനോവ് I.I. 1955-02-19 [ഇമെയിൽ പരിരക്ഷിതം] 2 1 2015-04-08 ശൂന്യം
1001 പെട്രോവ് പി.പി. 1983-12-03 [ഇമെയിൽ പരിരക്ഷിതം] 3 3 2015-04-08 1003
1002 സിഡോറോവ് എസ്.എസ്. 1976-06-07 [ഇമെയിൽ പരിരക്ഷിതം] 1 2 2015-04-08 1000
1003 ആൻഡ്രീവ് എ.എ. 1982-04-17 [ഇമെയിൽ പരിരക്ഷിതം] 4 3 2015-04-08 1000

പൊതുവേ, MS SQL ഭാഷയിൽ ഏറ്റവും ലളിതമായ രൂപമാണെന്ന് പറയേണ്ടതാണ് ചോദ്യം തിരഞ്ഞെടുക്കുക FROM ബ്ലോക്ക് അടങ്ങിയിരിക്കണമെന്നില്ല, ഈ സാഹചര്യത്തിൽ നിങ്ങൾക്ക് ചില മൂല്യങ്ങൾ ലഭിക്കാൻ ഇത് ഉപയോഗിക്കാം:

5550/100*15, SYSDATETIME(), -- ഡാറ്റാബേസ് സിസ്റ്റം തീയതി ലഭിക്കുന്നത് SIN(0)+COS(0)

(കോളം പേര് ഇല്ല) (കോളം പേര് ഇല്ല) (കോളം പേര് ഇല്ല)
825 2015-04-11 12:12:36.0406743 1

(5550/100*15) എന്ന പദപ്രയോഗം 825 എന്ന ഫലം നൽകി എന്നത് ശ്രദ്ധിക്കുക, എന്നിരുന്നാലും നമ്മൾ ഒരു കാൽക്കുലേറ്ററിൽ കണക്കാക്കിയാൽ മൂല്യം (832.5) ആയിരിക്കും. ഞങ്ങളുടെ പദപ്രയോഗത്തിൽ എല്ലാ സംഖ്യകളും പൂർണ്ണസംഖ്യകളാണെന്ന കാരണത്താലാണ് ഫലം 825 ലഭിച്ചത്, അതിനാൽ ഫലം ഒരു പൂർണ്ണസംഖ്യയാണ്, അതായത്. (5550/100) നമുക്ക് 55 നൽകുന്നു, അല്ല (55.5).

MS SQL-ൽ ഇനിപ്പറയുന്ന ലോജിക് പ്രവർത്തിക്കുന്നുവെന്ന് ഓർമ്മിക്കുക:

  • പൂർണ്ണസംഖ്യ / പൂർണ്ണസംഖ്യ = പൂർണ്ണസംഖ്യ (അതായത് ഈ സാഹചര്യത്തിൽ പൂർണ്ണസംഖ്യ വിഭജനം സംഭവിക്കുന്നു)
  • യഥാർത്ഥ / പൂർണ്ണസംഖ്യ = യഥാർത്ഥമായത്
  • പൂർണ്ണസംഖ്യ / യഥാർത്ഥ = യഥാർത്ഥ
ആ. ഫലം പരിവർത്തനം ചെയ്യപ്പെടുന്നു വലിയ തരം, അതിനാൽ അവസാന 2 കേസുകളിൽ നമുക്ക് ഒരു യഥാർത്ഥ സംഖ്യ ലഭിക്കും (ഗണിതത്തിലെന്നപോലെ ചിന്തിക്കുക - യഥാർത്ഥ സംഖ്യകളുടെ ശ്രേണി പൂർണ്ണസംഖ്യകളുടെ ശ്രേണിയേക്കാൾ വലുതാണ്, അതിനാൽ ഫലം അതിലേക്ക് പരിവർത്തനം ചെയ്യപ്പെടുന്നു):

തിരഞ്ഞെടുക്കുക 123/10, -- 12 123./10, -- 12.3 123/10. -- 12.3
ഇവിടെ (123.) = (123.0), ഈ സാഹചര്യത്തിൽ 0 ഉപേക്ഷിക്കാനും പോയിൻ്റ് മാത്രം ശേഷിക്കാനും കഴിയും.

മറ്റുള്ളവരുടെ കൂടെ ഗണിത പ്രവർത്തനങ്ങൾഅതേ യുക്തി ബാധകമാണ്, വിഭജനത്തിൻ്റെ കാര്യത്തിൽ ഈ സൂക്ഷ്മത കൂടുതൽ പ്രസക്തമാണ്.

അതിനാൽ, സംഖ്യാ നിരകളുടെ ഡാറ്റ തരം ശ്രദ്ധിക്കുക. ഇതൊരു പൂർണ്ണസംഖ്യയാണെങ്കിൽ, നിങ്ങൾക്ക് ഒരു യഥാർത്ഥ ഫലം ലഭിക്കണമെങ്കിൽ, ഒരു പരിവർത്തനം ഉപയോഗിക്കുക, അല്ലെങ്കിൽ സ്ഥിരാങ്കമായി സൂചിപ്പിച്ചിരിക്കുന്ന സംഖ്യയ്ക്ക് ശേഷം ഒരു ഡോട്ട് ഇടുക (123.).

ഫീൽഡുകൾ പരിവർത്തനം ചെയ്യാൻ നിങ്ങൾക്ക് CAST അല്ലെങ്കിൽ CONVERT ഫംഗ്‌ഷൻ ഉപയോഗിക്കാം. ഉദാഹരണത്തിന്, നമുക്ക് ID ഫീൽഡ് ഉപയോഗിക്കാം, ഇത് int എന്ന തരത്തിലുള്ളതാണ്:

ഐഡി തിരഞ്ഞെടുക്കുക, ഐഡി/100, -- ഇവിടെ പൂർണ്ണസംഖ്യ വിഭജനം സംഭവിക്കും CAST(ID AS ഫ്ലോട്ട്)/100, -- ഫ്ലോട്ട് തരത്തിലേക്ക് പരിവർത്തനം ചെയ്യാൻ CAST ഫംഗ്‌ഷൻ ഉപയോഗിക്കുക CONVERT(float,ID)/100, -- CONVERT ഫംഗ്‌ഷൻ ഉപയോഗിക്കുക ഫ്ലോട്ട് ഐഡി/100 എന്ന തരത്തിലേക്ക് പരിവർത്തനം ചെയ്യാൻ. -- ജീവനക്കാരിൽ നിന്നുള്ള ഒരു യഥാർത്ഥ സംഖ്യയാണ് ഡിനോമിനേറ്റർ എന്ന് വ്യക്തമാക്കി പരിവർത്തനം ഉപയോഗിക്കുക

ഐഡി (കോളം പേര് ഇല്ല) (കോളം പേര് ഇല്ല) (കോളം പേര് ഇല്ല) (കോളം പേര് ഇല്ല)
1000 10 10 10 10.000000
1001 10 10.01 10.01 10.010000
1002 10 10.02 10.02 10.020000
1003 10 10.03 10.03 10.030000

ഒരു കുറിപ്പിൽ. ORACLE ഡാറ്റാബേസിൽ, FROM ബ്ലോക്ക് ഇല്ലാത്ത വാക്യഘടന അസ്വീകാര്യമാണ്; അവിടെ, ഈ ആവശ്യത്തിനായി, ഡ്യുവൽ സിസ്റ്റം ടേബിൾ ഉപയോഗിക്കുന്നു, അതിൽ ഒരു വരി അടങ്ങിയിരിക്കുന്നു:

5550/100*15 തിരഞ്ഞെടുക്കുക, -- കൂടാതെ ORACLE-ൽ ഫലം 832.5 sysdate, sin(0)+cos(0) എന്നതിന് തുല്യമായിരിക്കും.


കുറിപ്പ്.പല RDB-കളിലെയും പട്ടികയുടെ പേരിന് മുമ്പായി സ്കീമ നാമം ഉണ്ടായിരിക്കാം:

dbo. ജീവനക്കാരിൽ നിന്ന് * തിരഞ്ഞെടുക്കുക -- dbo – സ്കീമ നാമം

ഒരു സ്കീമ എന്നത് ഒരു ഡാറ്റാബേസിൻ്റെ ലോജിക്കൽ യൂണിറ്റാണ്, അതിന് അതിൻ്റേതായ പേരുണ്ട് കൂടാതെ പട്ടികകൾ, കാഴ്ചകൾ മുതലായവ പോലുള്ള ഡാറ്റാബേസ് ഒബ്ജക്റ്റുകൾ ഗ്രൂപ്പുചെയ്യാൻ നിങ്ങളെ അനുവദിക്കുന്നു.

വ്യത്യസ്ത ഡാറ്റാബേസുകളിലെ ഒരു സ്കീമയുടെ നിർവചനം വ്യത്യാസപ്പെടാം; ചില സന്ദർഭങ്ങളിൽ, സ്കീമ ഡാറ്റാബേസ് ഉപയോക്താവുമായി നേരിട്ട് ബന്ധപ്പെട്ടിരിക്കുന്നു, അതായത്. ഈ സാഹചര്യത്തിൽ, സ്കീമയും ഉപയോക്താവും പര്യായപദങ്ങളാണെന്നും സ്കീമയിൽ സൃഷ്ടിച്ച എല്ലാ വസ്തുക്കളും പ്രധാനമായും ഈ ഉപയോക്താവിൻ്റെ ഒബ്ജക്റ്റുകളാണെന്നും നമുക്ക് പറയാം. MS SQL-ൽ, ഒരു സ്കീമ ഒരു സ്വതന്ത്ര ലോജിക്കൽ യൂണിറ്റാണ്, അത് സ്വന്തമായി സൃഷ്ടിക്കാൻ കഴിയും (സ്കീമ സൃഷ്ടിക്കുക കാണുക).

ഡിഫോൾട്ടായി, MS SQL ഡാറ്റാബേസിൽ dbo (ഡാറ്റാബേസ് ഉടമ) എന്ന പേരിൽ ഒരു സ്കീമ സൃഷ്ടിക്കപ്പെടുന്നു, കൂടാതെ എല്ലാ സൃഷ്ടിച്ച ഒബ്ജക്റ്റുകളും ഈ സ്കീമയിൽ സ്ഥിരസ്ഥിതിയായി സൃഷ്ടിക്കപ്പെടുന്നു. അതനുസരിച്ച്, ഒരു ചോദ്യത്തിൽ ഒരു പട്ടികയുടെ പേര് ഞങ്ങൾ ലളിതമായി വ്യക്തമാക്കിയാൽ, അത് നിലവിലെ ഡാറ്റാബേസിൻ്റെ dbo സ്കീമയിൽ തിരയപ്പെടും. ഒരു നിർദ്ദിഷ്‌ട സ്‌കീമയിൽ ഒരു ഒബ്‌ജക്‌റ്റ് സൃഷ്‌ടിക്കണമെങ്കിൽ, സ്‌കീമയുടെ പേരിനൊപ്പം ഒബ്‌ജക്‌റ്റ് നാമവും ഞങ്ങൾ മുൻകൂട്ടി നൽകേണ്ടതുണ്ട്, ഉദാഹരണത്തിന്, “പട്ടിക സൃഷ്‌ടിക്കുക schema_name.table_name(...)”.

MS SQL-ൻ്റെ കാര്യത്തിൽ, സ്കീമയുടെ പേരിന് മുമ്പായി സ്കീമ സ്ഥിതിചെയ്യുന്ന ഡാറ്റാബേസിൻ്റെ പേരും ഉണ്ടായിരിക്കാം:

* Test.dbo.Employees-ൽ നിന്ന് തിരഞ്ഞെടുക്കുക -- database_name.schema_name.table
ഈ വിശദീകരണം ഉപയോഗപ്രദമാകും, ഉദാഹരണത്തിന്:

  • ഒരു അഭ്യർത്ഥനയിൽ, വ്യത്യസ്ത സ്‌കീമകളിലോ ഡാറ്റാബേസുകളിലോ ഉള്ള ഒബ്‌ജക്‌റ്റുകൾ ഞങ്ങൾ ആക്‌സസ് ചെയ്യുന്നു
  • നിങ്ങൾ ഒരു സ്കീമയിൽ നിന്നോ ഡാറ്റാബേസിൽ നിന്നോ മറ്റൊന്നിലേക്ക് ഡാറ്റ കൈമാറേണ്ടതുണ്ട്
  • ഒരു ഡാറ്റാബേസിൽ ആയിരിക്കുമ്പോൾ, നിങ്ങൾ മറ്റൊരു ഡാറ്റാബേസിൽ നിന്ന് ഡാറ്റ അഭ്യർത്ഥിക്കേണ്ടതുണ്ട്
  • ഇത്യാദി.
ഡാറ്റാബേസ് ആർക്കിടെക്ചർ, പ്രത്യേകിച്ച് വലിയ ഡാറ്റാബേസുകൾ വികസിപ്പിക്കുമ്പോൾ ഉപയോഗിക്കുന്നതിന് ഉപയോഗപ്രദമായ വളരെ സൗകര്യപ്രദമായ ഉപകരണമാണ് സ്കീമ.

കൂടാതെ, അഭ്യർത്ഥന വാചകത്തിൽ നമുക്ക് ഒറ്റ-വരി "-- ...", മൾട്ടി-ലൈൻ "/* ... */" എന്നീ രണ്ട് കമൻ്റുകളും ഉപയോഗിക്കാമെന്ന കാര്യം മറക്കരുത്. അഭ്യർത്ഥന വലുതും സങ്കീർണ്ണവുമാണെങ്കിൽ, കുറച്ച് സമയത്തിന് ശേഷം അതിൻ്റെ ഘടനയെ ഓർത്തുവെക്കാനോ മനസ്സിലാക്കാനോ അഭിപ്രായങ്ങൾ നിങ്ങളെയോ മറ്റാരെങ്കിലുമോ വളരെയധികം സഹായിക്കും.

പട്ടികയിൽ ധാരാളം നിരകൾ ഉണ്ടെങ്കിൽ, പ്രത്യേകിച്ച് പട്ടികയിൽ ഇനിയും ധാരാളം വരികൾ ഉണ്ടെങ്കിൽ, കൂടാതെ ഞങ്ങൾ നെറ്റ്‌വർക്കിലൂടെ ഡാറ്റാബേസിലേക്ക് അന്വേഷണങ്ങൾ നടത്തുകയാണെങ്കിൽ, നേരിട്ടുള്ള ലിസ്റ്റിംഗ് ഉപയോഗിച്ച് തിരഞ്ഞെടുക്കുന്നതാണ് നല്ലത്. നിങ്ങൾക്ക് ആവശ്യമുള്ള ഫീൽഡുകൾ, കോമകളാൽ വേർതിരിച്ചിരിക്കുന്നു:

ഐഡി തിരഞ്ഞെടുക്കുക, ജീവനക്കാരിൽ നിന്ന് പേര്

ആ. പട്ടികയിൽ നിന്ന് ഐഡിയും നെയിം ഫീൽഡുകളും തിരികെ നൽകിയാൽ മതിയെന്ന് ഞങ്ങൾ ഇവിടെ പറയുന്നു. ഫലം ഇനിപ്പറയുന്നതായിരിക്കും (വഴി, നെയിം ഫീൽഡ് സൃഷ്ടിച്ച സൂചിക ഉപയോഗിക്കാൻ ഇവിടെ ഒപ്റ്റിമൈസർ തീരുമാനിച്ചു):

ഐഡി പേര്
1003 ആൻഡ്രീവ് എ.എ.
1000 ഇവാനോവ് I.I.
1001 പെട്രോവ് പി.പി.
1002 സിഡോറോവ് എസ്.എസ്.

ഒരു കുറിപ്പിൽ.ചില സമയങ്ങളിൽ ഡാറ്റ എങ്ങനെ വീണ്ടെടുക്കുന്നു എന്ന് നോക്കുന്നത് ഉപയോഗപ്രദമാണ്, ഉദാഹരണത്തിന്, ഏത് സൂചികകളാണ് ഉപയോഗിക്കുന്നതെന്ന് കണ്ടെത്താൻ. “ഡിസ്‌പ്ലേ എസ്റ്റിമേറ്റ് എക്‌സിക്യൂഷൻ പ്ലാൻ” ബട്ടണിൽ ക്ലിക്ക് ചെയ്‌ത് അല്ലെങ്കിൽ “യഥാർത്ഥ എക്‌സിക്യൂഷൻ പ്ലാൻ ഉൾപ്പെടുത്തുക” (ഈ സാഹചര്യത്തിൽ നമുക്ക് കാണാൻ കഴിയും യഥാർത്ഥ പദ്ധതി, യഥാക്രമം, അഭ്യർത്ഥന നടപ്പിലാക്കിയതിനുശേഷം മാത്രം):

ഒരു ചോദ്യം ഒപ്റ്റിമൈസ് ചെയ്യുമ്പോൾ എക്സിക്യൂഷൻ പ്ലാൻ വിശകലനം വളരെ ഉപകാരപ്രദമാണ്; ഏതൊക്കെ സൂചികകളാണ് നഷ്‌ടമായത് അല്ലെങ്കിൽ ഏതൊക്കെ സൂചികകൾ ഉപയോഗിക്കാത്തതും നീക്കംചെയ്യാൻ കഴിയുന്നതും കണ്ടെത്താൻ ഇത് നിങ്ങളെ അനുവദിക്കുന്നു.

നിങ്ങൾ ഇപ്പോൾ DML പഠിക്കാൻ തുടങ്ങിയെങ്കിൽ, ഇപ്പോൾ ഇത് നിങ്ങൾക്ക് അത്ര പ്രധാനമല്ല, ശ്രദ്ധിക്കുക, നിങ്ങൾക്ക് അതിനെക്കുറിച്ച് സുരക്ഷിതമായി മറക്കാൻ കഴിയും (ഒരുപക്ഷേ നിങ്ങൾക്ക് ഇത് ഒരിക്കലും ആവശ്യമില്ല) - ഞങ്ങളുടെ പ്രാരംഭ ലക്ഷ്യം DML ഭാഷയുടെ അടിസ്ഥാനകാര്യങ്ങൾ പഠിക്കുക എന്നതാണ്. അവ എങ്ങനെ ശരിയായി ഉപയോഗിക്കാമെന്ന് മനസിലാക്കുക, ഒപ്റ്റിമൈസേഷൻ ഇതിനകം ഒരു പ്രത്യേക കലയാണ്. ഒരു വിഷയ വീക്ഷണകോണിൽ നിന്ന് ശരിയായ ഫലം നൽകുന്ന ശരിയായി എഴുതിയ ഒരു ചോദ്യം നിങ്ങളുടെ പക്കലുണ്ടെന്നത് ചിലപ്പോൾ വളരെ പ്രധാനമാണ്, കൂടാതെ വ്യക്തിഗത ആളുകൾ അത് ഇതിനകം ഒപ്റ്റിമൈസ് ചെയ്യുന്നു. ആദ്യം, ലക്ഷ്യം നേടുന്നതിന് ഏത് മാർഗവും ഉപയോഗിച്ച് ചോദ്യങ്ങൾ എങ്ങനെ ശരിയായി എഴുതാമെന്ന് നിങ്ങൾ പഠിക്കേണ്ടതുണ്ട്. നിങ്ങൾ ഇപ്പോൾ നേടേണ്ട പ്രധാന ലക്ഷ്യം നിങ്ങളുടെ അന്വേഷണത്തിന് ശരിയായ ഫലങ്ങൾ നൽകുകയെന്നതാണ്.

പട്ടിക അപരനാമങ്ങൾ ക്രമീകരിക്കുന്നു

നിരകൾ ലിസ്റ്റുചെയ്യുമ്പോൾ, FROM ബ്ലോക്കിൽ സ്ഥിതിചെയ്യുന്ന പട്ടികയുടെ പേര് അവയ്ക്ക് മുമ്പായി നൽകാം:

ജീവനക്കാരിൽ നിന്ന് Employees.ID, Employees.പേര് തിരഞ്ഞെടുക്കുക

എന്നാൽ ഈ വാക്യഘടന സാധാരണയായി ഉപയോഗിക്കുന്നതിന് അസൗകര്യമാണ്, കാരണം പട്ടികയുടെ പേര് ദൈർഘ്യമേറിയതായിരിക്കാം. ഈ ആവശ്യങ്ങൾക്ക്, കൂടുതൽ ചെറിയ പേരുകൾ- അപരനാമങ്ങൾ:

എംപ്ലോയീസ് എന്ന നിലയിൽ emp.ID, emp.Name തിരഞ്ഞെടുക്കുക
അഥവാ

എംപ്ലോയീസ് emp-ൽ നിന്ന് emp.ID, emp.Name തിരഞ്ഞെടുക്കുക -- AS കീവേഡ് ഒഴിവാക്കാം (ഞാൻ ഈ ഓപ്ഷൻ തിരഞ്ഞെടുക്കുന്നു)

ഇവിടെ emp എന്നത് എംപ്ലോയീസ് ടേബിളിൻ്റെ അപരനാമമാണ്, അത് ഈ SELECT പ്രസ്താവനയുടെ സന്ദർഭത്തിൽ ഉപയോഗിക്കാനാകും. ആ. ഈ SELECT പ്രസ്‌താവനയുടെ പശ്ചാത്തലത്തിൽ ഞങ്ങൾ പട്ടികയ്‌ക്ക് ഒരു പുതിയ പേര് നൽകുന്നു എന്ന് നമുക്ക് പറയാം.

തീർച്ചയായും, ഈ സാഹചര്യത്തിൽ, അന്വേഷണ ഫലങ്ങൾ "സെലക്ട് ഐഡി, ജീവനക്കാരുടെ പേര്" എന്നതിന് തുല്യമായിരിക്കും. എന്തുകൊണ്ടാണ് ഇത് ആവശ്യമായി വരുന്നത് എന്നത് പിന്നീട് വ്യക്തമാകും (ഈ ഭാഗത്ത് പോലും ഇല്ല), ഇപ്പോൾ പട്ടികയുടെ പേര് നേരിട്ട് അല്ലെങ്കിൽ ഒരു അപരനാമം ഉപയോഗിച്ച് കോളത്തിൻ്റെ പേരിന് മുമ്പായി (വ്യക്തമാക്കാം) എന്ന് ഞങ്ങൾ ഓർക്കുന്നു. ഇവിടെ നിങ്ങൾക്ക് രണ്ട് കാര്യങ്ങളിൽ ഒന്ന് ഉപയോഗിക്കാം, അതായത്. നിങ്ങൾ ഒരു അപരനാമം സജ്ജീകരിക്കുകയാണെങ്കിൽ, നിങ്ങൾ അത് ഉപയോഗിക്കേണ്ടതുണ്ട്, എന്നാൽ നിങ്ങൾക്ക് ഇനി പട്ടികയുടെ പേര് ഉപയോഗിക്കാൻ കഴിയില്ല.

ഒരു കുറിപ്പിൽ. ORACLE-ൽ, AS കീവേഡ് ഇല്ലാതെ ഒരു പട്ടിക അപരനാമം വ്യക്തമാക്കുന്നതിനുള്ള ഓപ്ഷൻ മാത്രമേ അനുവദിക്കൂ.

DISTINCT - ഡ്യൂപ്ലിക്കേറ്റ് വരികൾ നിരസിക്കുന്നു

അന്വേഷണ ഫലത്തിൽ നിന്ന് തനിപ്പകർപ്പ് വരികൾ നിരസിക്കാൻ DISTINCT കീവേഡ് ഉപയോഗിക്കുന്നു. ഏകദേശം പറഞ്ഞാൽ, ആദ്യം DISTINCT ഓപ്ഷൻ ഇല്ലാതെ ഒരു ചോദ്യം എക്സിക്യൂട്ട് ചെയ്യുന്നത് സങ്കൽപ്പിക്കുക, തുടർന്ന് ഫലത്തിൽ നിന്ന് എല്ലാ തനിപ്പകർപ്പുകളും നിരസിക്കുക. ഒരു ഉദാഹരണം ഉപയോഗിച്ച് കൂടുതൽ വ്യക്തതയ്ക്കായി നമുക്ക് ഇത് തെളിയിക്കാം:

ഡെമോൺസ്‌ട്രേഷനായി നമുക്ക് ഒരു താൽക്കാലിക ടേബിൾ സൃഷ്‌ടിക്കാം ടേബിൾ സൃഷ്‌ടിക്കുക #ട്രാഷ്(ID int NULL പ്രാഥമിക കീ, Col1 varchar(10), Col2 varchar(10), Col3 varchar(10)) - പൂരിപ്പിക്കുക ഈ മേശഎല്ലാത്തരം മാലിന്യങ്ങളും ചേർക്കുക #ട്രാഷ്(ID,Col1,Col2,Col3)VALUES (1,"A","A","A"), (2,"A","B","C"), ( 3, "C","A","B"), (4,"A","A","B"), (5,"B","B","B"), (6, "A ","A","B"), (7,"A","A","A"), (8,"C","A","B"), (9,"C ", "A","B"), (10,"A","A","B"), (11,"A",NULL,"B"), (12,"A",NULL, "B ") -- DISTINCT SELECT ഓപ്‌ഷൻ Col1,Col2,Col3 #ട്രാഷിൽ നിന്ന് ലഭിക്കാതെ ചോദ്യം എന്താണ് നൽകുന്നത് എന്ന് നോക്കാം -- DISTINCT SELECT ഓപ്‌ഷൻ DISTINCT Col1,Col2,Col3 #ട്രാഷിൽ നിന്ന് -- ഇല്ലാതാക്കുക താൽക്കാലിക പട്ടിക ഡ്രോപ്പ് ടേബിൾ #ട്രാഷ്

ദൃശ്യപരമായി, ഇത് ഇതുപോലെ കാണപ്പെടും (എല്ലാ തനിപ്പകർപ്പുകളും ഒരേ നിറത്തിൽ അടയാളപ്പെടുത്തിയിരിക്കുന്നു):

കൂടുതൽ പ്രായോഗിക ഉദാഹരണം ഉപയോഗിച്ച് ഇത് എവിടെ പ്രയോഗിക്കാമെന്ന് നോക്കാം - എംപ്ലോയീസ് ടേബിളിൽ നിന്ന് ഞങ്ങൾ അദ്വിതീയ ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡൻ്റിഫയറുകൾ മാത്രമേ തിരികെ നൽകൂ (അതായത്, ജീവനക്കാർ രജിസ്റ്റർ ചെയ്തിട്ടുള്ള വകുപ്പുകളുടെ ഐഡികൾ ഞങ്ങൾ കണ്ടെത്തും):

ജീവനക്കാരിൽ നിന്ന് വ്യത്യസ്തമായ വകുപ്പ് ഐഡി തിരഞ്ഞെടുക്കുക

ഇവിടെ നമുക്ക് 4 വരികൾ ലഭിച്ചു, കാരണം... ഞങ്ങളുടെ പട്ടികയിൽ ആവർത്തിക്കുന്ന കോമ്പിനേഷനുകളൊന്നുമില്ല (DepartmentID, PositionID).

നമുക്ക് ഒരു നിമിഷം DDL-ലേക്ക് മടങ്ങാം.

ഡെമോ ഉദാഹരണങ്ങൾക്കായുള്ള ഡാറ്റ തീർന്നുപോകാൻ തുടങ്ങിയതിനാൽ, കൂടുതൽ വിശദമായും വ്യക്തമായും സംസാരിക്കാൻ ഞങ്ങൾ ആഗ്രഹിക്കുന്നതിനാൽ, നമുക്ക് ഞങ്ങളുടെ തൊഴിൽ പട്ടിക അൽപ്പം വിപുലീകരിക്കാം. കൂടാതെ, "ആവർത്തനമാണ് പഠനത്തിൻ്റെ മാതാവ്" എന്ന് അവർ പറയുന്നതുപോലെ, നമുക്ക് ഒരു ചെറിയ DDL ഓർമ്മിക്കാം, കൂടാതെ, നമുക്ക് വീണ്ടും കുറച്ച് മുന്നോട്ട് പോയി അപ്‌ഡേറ്റ് പ്രസ്താവന പ്രയോഗിക്കാം:

ഞങ്ങൾ പുതിയ കോളങ്ങൾ സൃഷ്ടിക്കുന്നു ALTER TABLE ജീവനക്കാർ അവസാന നാമം nvarchar(30) ചേർക്കുക, -- അവസാന നാമം FirstName nvarchar(30), -- ആദ്യനാമം MiddleName nvarchar(30), -- മധ്യനാമം Salary float, -- ചില യൂണിറ്റുകളിൽ തീർച്ചയായും ശമ്പളം BonusPercent float -- GO ശമ്പളത്തിൽ നിന്ന് ബോണസ് കണക്കാക്കുന്നതിനുള്ള ശതമാനം -- ഡാറ്റ ഉപയോഗിച്ച് അവ പൂരിപ്പിക്കുക (ചില ഡാറ്റ മനഃപൂർവ്വം ഒഴിവാക്കിയിരിക്കുന്നു) ജീവനക്കാരെ അപ്‌ഡേറ്റ് ചെയ്യുക അവസാനനാമം=N"Ivanov", FirstName=N"Ivan", MiddleName=N"Ivanovich", ശമ്പളം=5000,ബോണസ് ശതമാനം= 50 എവിടെ ഐഡി=1000 -- ഇവാനോവ് ഐ.ഐ. ജീവനക്കാരുടെ അപ്‌ഡേറ്റ് അവസാനനാമം=N"Petr",FirstName=N"Petr",MiddleName=N"Petr",Salary=1500,BonusPercent= 15 WHERE ID=1001 -- Petrov P.P. ജീവനക്കാരുടെ അപ്‌ഡേറ്റ് അവസാനത്തെ പേര്=N"സിഡോർ",ആദ്യനാമം=N"സിഡോർ",മധ്യനാമം=NULL, ശമ്പളം=2500,BonusPercent=NULL എവിടെ ഐഡി=1002 -- Sidorov S.S. ജീവനക്കാരുടെ അപ്‌ഡേറ്റ് അവസാനനാമം=N"ആന്ദ്രീവ്",ആദ്യനാമം=N"ആന്ദ്രേ",മധ്യനാമം=NULL, ശമ്പളം=2000,BonusPercent= 30 എവിടെ ഐഡി=1003 -- Andreev A.A.

ഡാറ്റ വിജയകരമായി അപ്‌ഡേറ്റ് ചെയ്‌തുവെന്ന് ഉറപ്പാക്കാം:

ജീവനക്കാരിൽ നിന്ന് * തിരഞ്ഞെടുക്കുക

ഐഡി പേര് പേരിന്റെ അവസാന ഭാഗം പേരിന്റെ ആദ്യഭാഗം പേരിന്റെ മധ്യഭാഗം ശമ്പളം ബോണസ് ശതമാനം
1000 ഇവാനോവ് I.I. ഇവാനോവ് ഇവാൻ ഇവാനോവിച്ച് 5000 50
1001 പെട്രോവ് പി.പി. പെട്രോവ് പീറ്റർ പെട്രോവിച്ച് 1500 15
1002 സിഡോറോവ് എസ്.എസ്. സിഡോറോവ് സിഡോർ ശൂന്യം 2500 ശൂന്യം
1003 ആൻഡ്രീവ് എ.എ. ആൻഡ്രീവ് ആന്ദ്രേ ശൂന്യം 2000 30

അന്വേഷണ നിരകൾക്കായി അപരനാമങ്ങൾ ക്രമീകരിക്കുന്നു

എഴുതുന്നതിനേക്കാൾ ഇവിടെ കാണിക്കുന്നത് എളുപ്പമാണെന്ന് ഞാൻ കരുതുന്നു:

SELECT -- കണക്കാക്കിയ കോളത്തിന് ഒരു പേര് നൽകുക LastName+" "+FirstName+" "+Middlename as full name, -- usage ഇരട്ട ഉദ്ധരണികൾ, കാരണം ഒരു സ്‌പെയ്‌സ് ഉപയോഗിക്കുന്നത് HireDate ആയി "സ്വീകരണ തീയതി", -- ചതുര ബ്രാക്കറ്റുകളുടെ ഉപയോഗം, കാരണം സ്പേസ് ജന്മദിനം ആയി ഉപയോഗിക്കുന്നു [ജനന തീയതി], -- AS എന്ന വാക്ക് ആവശ്യമില്ല, ജീവനക്കാരിൽ നിന്നുള്ള ശമ്പളം ZP

പൂർണ്ണമായ പേര് രസീത് തീയതി ജനനത്തീയതി ZP
ഇവാനോവ് ഇവാൻ ഇവാനോവിച്ച് 2015-04-08 1955-02-19 5000
പെട്രോവ് പീറ്റർ പെട്രോവിച്ച് 2015-04-08 1983-12-03 1500
ശൂന്യം 2015-04-08 1976-06-07 2500
ശൂന്യം 2015-04-08 1982-04-17 2000

നമുക്ക് കാണാനാകുന്നതുപോലെ, ഞങ്ങൾ വ്യക്തമാക്കിയ കോളം അപരനാമങ്ങൾ ഫലമായുണ്ടാകുന്ന പട്ടികയുടെ തലക്കെട്ടിൽ പ്രതിഫലിക്കുന്നു. യഥാർത്ഥത്തിൽ, കോളം അപരനാമങ്ങളുടെ പ്രധാന ലക്ഷ്യം ഇതാണ്.

ദയവായി ശ്രദ്ധിക്കുക, കാരണം അവസാനത്തെ 2 ജീവനക്കാർക്ക് മധ്യനാമം വ്യക്തമാക്കിയിട്ടില്ല (NULL മൂല്യം), തുടർന്ന് "LastName+" "+FirstName+" "+MiddleName" എന്ന പദപ്രയോഗത്തിൻ്റെ ഫലവും NULL ഞങ്ങൾക്ക് തിരികെ നൽകി.

MS SQL-ൽ സ്ട്രിംഗുകൾ ചേരുന്നതിന് (ചേർക്കുക, കൂട്ടിച്ചേർക്കുക) "+" ചിഹ്നം ഉപയോഗിക്കുന്നു.

NULL ഉൾപ്പെടുന്ന എല്ലാ പദപ്രയോഗങ്ങളും (ഉദാഹരണത്തിന്, NULL കൊണ്ട് വിഭജിക്കുക, NULL ഉപയോഗിച്ച് കൂട്ടിച്ചേർക്കുക) NULL തിരികെ നൽകുമെന്ന് ഓർമ്മിക്കുക.

ഒരു കുറിപ്പിൽ.
ORACLE-ൻ്റെ കാര്യത്തിൽ, സ്ട്രിംഗുകൾ കൂട്ടിച്ചേർക്കാൻ "||" ഓപ്പറേറ്റർ ഉപയോഗിക്കുന്നു ഒപ്പം "അവസാന നാമം||" "||ആദ്യനാമം||" "||മിഡിൽനെയിം" പോലെ കാണപ്പെടും. ORACLE-നെ സംബന്ധിച്ചിടത്തോളം, ഇതിന് സ്ട്രിംഗ് തരങ്ങൾക്ക് ഒരു അപവാദം ഉണ്ടെന്നത് ശ്രദ്ധിക്കേണ്ടതാണ്, അവയ്ക്ക് NULL ഉം ശൂന്യമായ സ്ട്രിംഗും "" ഒന്നുതന്നെയാണ്, അതിനാൽ ORACLE-ൽ അവസാനത്തെ 2 ജീവനക്കാരായ “സിഡോർ സിഡോർ”, “ആൻഡ്രി” എന്നിവർക്ക് അത്തരമൊരു പദപ്രയോഗം തിരികെ നൽകും. ആൻഡ്രീവ്". ആ നിമിഷത്തിൽ ORACLE പതിപ്പുകൾ 12c, എനിക്കറിയാവുന്നിടത്തോളം, ഈ സ്വഭാവം മാറ്റുന്ന ഒരു ഓപ്ഷനും ഇല്ല (ഞാൻ തെറ്റാണെങ്കിൽ, ദയവായി എന്നെ തിരുത്തുക). ഇവിടെ ഇത് നല്ലതോ ചീത്തയോ എന്ന് വിലയിരുത്താൻ എനിക്ക് ബുദ്ധിമുട്ടാണ്, കാരണം... ചില സന്ദർഭങ്ങളിൽ, ഒരു NULL സ്ട്രിംഗിൻ്റെ സ്വഭാവം MS SQL-ലും മറ്റുള്ളവയിൽ ORACLE-ലും ഉള്ളതുപോലെ കൂടുതൽ സൗകര്യപ്രദമാണ്.

ORACLE-ൽ, മുകളിൽ ലിസ്റ്റ് ചെയ്തിരിക്കുന്ന എല്ലാ കോളം അപരനാമങ്ങളും സാധുവാണ്, ഒഴികെ [...].


ISNULL ഫംഗ്‌ഷൻ ഉപയോഗിച്ച് നിർമ്മാണം വേലിയിറക്കാതിരിക്കാൻ, MS SQL-ൽ നമുക്ക് CONCAT ഫംഗ്‌ഷൻ ഉപയോഗിക്കാം. നമുക്ക് 3 ഓപ്ഷനുകൾ പരിഗണിക്കുകയും താരതമ്യം ചെയ്യുകയും ചെയ്യാം:

LastName+" "+FirstName+" "+MiddleName FullName1, -- NULL മാറ്റിസ്ഥാപിക്കുന്നതിനുള്ള 2 ഓപ്ഷനുകൾ തിരഞ്ഞെടുക്കുക ശൂന്യമായ വരികൾ"" (ഒരാക്കിളിലെ അതേ സ്വഭാവമാണ് ഞങ്ങൾക്ക് ലഭിക്കുന്നത്) ISNULL(അവസാനനാമം,"")+"+ISNULL(ആദ്യനാമം,"")+" "+ISNULL(മധ്യനാമം,"") പൂർണ്ണനാമം2, CONCAT(അവസാനനാമം," ", ആദ്യനാമം, "", മധ്യനാമം) മുഴുവൻ പേര് 3 ജീവനക്കാരിൽ നിന്ന്

പൂർണ്ണനാമം1 പൂർണ്ണനാമം2 പൂർണ്ണനാമം3
ഇവാനോവ് ഇവാൻ ഇവാനോവിച്ച് ഇവാനോവ് ഇവാൻ ഇവാനോവിച്ച് ഇവാനോവ് ഇവാൻ ഇവാനോവിച്ച്
പെട്രോവ് പീറ്റർ പെട്രോവിച്ച് പെട്രോവ് പീറ്റർ പെട്രോവിച്ച് പെട്രോവ് പീറ്റർ പെട്രോവിച്ച്
ശൂന്യം സിഡോറോവ് സിഡോർ സിഡോറോവ് സിഡോർ
ശൂന്യം ആൻഡ്രീവ് ആൻഡ്രി ആൻഡ്രീവ് ആൻഡ്രി

MS SQL-ൽ, തുല്യ ചിഹ്നം ഉപയോഗിച്ച് അപരനാമങ്ങളും വ്യക്തമാക്കാം:

തിരഞ്ഞെടുക്കുക "സ്വീകരണ തീയതി"=ഹൈർഡേറ്റ്, -- "..." കൂടാതെ […] കൂടാതെ നിങ്ങൾക്ക് "..." [ജനന തീയതി]=ജന്മദിനം, ZP=ജീവനക്കാരുടെ ശമ്പളം

ഒരു അപരനാമം വ്യക്തമാക്കുന്നതിന് AS കീവേഡ് അല്ലെങ്കിൽ തുല്യ ചിഹ്നം ഉപയോഗിക്കുന്നത് ഒരുപക്ഷേ അഭിരുചിയുടെ കാര്യമാണ്. എന്നാൽ മറ്റുള്ളവരുടെ അഭ്യർത്ഥനകൾ വിശകലനം ചെയ്യുമ്പോൾ, ഈ അറിവ് ഉപയോഗപ്രദമാകും.

അവസാനമായി, ലാറ്റിൻ പ്രതീകങ്ങളും അക്കങ്ങളും മാത്രം ഉപയോഗിച്ച് അപരനാമങ്ങൾക്കായി പേരുകൾ സജ്ജീകരിക്കുന്നതാണ് നല്ലതെന്ന് ഞാൻ പറയും, "...", "...", […] എന്നിവയുടെ ഉപയോഗം ഒഴിവാക്കുക, അതായത്, പട്ടികകൾക്ക് പേരിടുമ്പോൾ ഞങ്ങൾ ഉപയോഗിച്ച അതേ നിയമങ്ങൾ ഉപയോഗിക്കുക. . കൂടാതെ, ഉദാഹരണങ്ങളിൽ ഞാൻ അത്തരം പേരുകൾ മാത്രമേ ഉപയോഗിക്കൂ, കൂടാതെ "...", "..." കൂടാതെ […].

അടിസ്ഥാന SQL അരിത്മെറ്റിക് ഓപ്പറേറ്റർമാർ


നിർവ്വഹണ മുൻഗണന ഗണിത ഓപ്പറേറ്റർമാർഗണിതത്തിലെ പോലെ തന്നെ. ആവശ്യമെങ്കിൽ, പരാൻതീസിസ് ഉപയോഗിച്ച് ഓപ്പറേറ്റർമാരുടെ പ്രയോഗത്തിൻ്റെ ക്രമം മാറ്റാവുന്നതാണ് - (a+b)*(x/(y-z)).

NULL ഉപയോഗിച്ചുള്ള ഏതൊരു പ്രവർത്തനവും NULL ഉൽപ്പാദിപ്പിക്കുമെന്ന് ഞാൻ ഒരിക്കൽ കൂടി ആവർത്തിക്കുന്നു, ഉദാഹരണത്തിന്: 10+NULL, NULL*15/3, 100/NULL - ഇതെല്ലാം NULL-ൽ കലാശിക്കും. ആ. ലളിതമായി പറഞ്ഞാൽ നിർവചിക്കാത്തത്ഒരു നിശ്ചിത ഫലം നൽകാൻ കഴിയില്ല. നിങ്ങളുടെ ചോദ്യം രചിക്കുമ്പോൾ ഇത് കണക്കിലെടുക്കുക, ആവശ്യമെങ്കിൽ, ISNULL, COALESCE ഫംഗ്ഷനുകൾ ഉപയോഗിച്ച് NULL മൂല്യങ്ങൾ കൈകാര്യം ചെയ്യുക:

ID, പേര്, ശമ്പളം/100*ഫലം 1 ആയി ബോണസ് ശതമാനം തിരഞ്ഞെടുക്കുക, -- NULL മൂല്യങ്ങൾ പ്രോസസ്സ് ചെയ്യാതെ തന്നെ ശമ്പളം/100*ISNULL(BonusPercent,0) ഫലത്തിൽ 2, -- ISNULL ഫംഗ്‌ഷൻ ഉപയോഗിക്കുക Salary/100*COALESCE,(BonusPercent) ഫലം3 - - ജീവനക്കാരിൽ നിന്നുള്ള COALESCE എന്ന ഫംഗ്‌ഷൻ ഉപയോഗിക്കുക

COALESCE ഫംഗ്‌ഷനെക്കുറിച്ച് ഞാൻ നിങ്ങളോട് കുറച്ച് പറയും:

COALESCE (expr1, expr2, ..., exprn) - മൂല്യങ്ങളുടെ പട്ടികയിൽ നിന്ന് ആദ്യത്തെ NULL അല്ലാത്ത മൂല്യം നൽകുന്നു.

COALESCE (f1, f1*f2, f2*f3) val തിരഞ്ഞെടുക്കുക -- ഈ സാഹചര്യത്തിൽ മൂന്നാമത്തെ മൂല്യം തിരികെ നൽകും (null f1, 2 f2, 3 f3) q

ഞാൻ കൂടുതലും DML നിർമ്മിതികളെക്കുറിച്ച് സംസാരിക്കുന്നതിലാണ് ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്നത്, ഉദാഹരണങ്ങളിൽ ദൃശ്യമാകുന്ന ഫംഗ്ഷനുകളെ കുറിച്ച് ഞാൻ സംസാരിക്കില്ല. ഒരു പ്രത്യേക ഫംഗ്‌ഷൻ എന്താണ് ചെയ്യുന്നതെന്ന് നിങ്ങൾക്ക് മനസ്സിലാകുന്നില്ലെങ്കിൽ, ഇൻറർനെറ്റിൽ അതിൻ്റെ വിവരണത്തിനായി നോക്കുക, നിങ്ങൾക്ക് ഒരേസമയം ഫംഗ്‌ഷനുകൾ ഉപയോഗിച്ച് വിവരങ്ങൾക്കായി തിരയാനും കഴിയും, ഉദാഹരണത്തിന്, ചോദിക്കുന്നതിലൂടെ ഗൂഗിളില് തിരയുക"മിസ്. SQL സ്ട്രിംഗുകൾപ്രവർത്തനങ്ങൾ", "MS SQL ഗണിത പ്രവർത്തനങ്ങൾ"അല്ലെങ്കിൽ "എം.എസ് SQL പ്രവർത്തനങ്ങൾ NULL പ്രോസസ്സിംഗ്." ഫംഗ്ഷനുകളിൽ ധാരാളം വിവരങ്ങൾ ഉണ്ട്, നിങ്ങൾക്ക് അത് എളുപ്പത്തിൽ കണ്ടെത്താനാകും. ഉദാഹരണത്തിന്, MSDN ലൈബ്രറിയിൽ, നിങ്ങൾക്ക് COALESCE ഫംഗ്ഷനെ കുറിച്ച് കൂടുതൽ കണ്ടെത്താനാകും:

MSDN-ൽ നിന്നുള്ള ക്ലിപ്പിംഗ് COALESCE, CASE എന്നിവയുടെ താരതമ്യം

COALESCE എക്സ്പ്രഷൻ CASE എക്സ്പ്രഷനുള്ള ഒരു വാക്യഘടന കുറുക്കുവഴിയാണ്. ഇതിനർത്ഥം COALESCE(expression1,...n) ഇനിപ്പറയുന്ന CASE എക്‌സ്‌പ്രഷൻ ആയി ക്വറി ഒപ്റ്റിമൈസർ മാറ്റിയെഴുതിയിരിക്കുന്നു എന്നാണ്:

കേസ് എപ്പോൾ (എക്സ്പ്രഷൻ1 അസാധുവല്ല) പിന്നെ എക്സ്പ്രഷൻ1 എപ്പോൾ (എക്സ്പ്രഷൻ2 ശൂന്യമല്ല) പിന്നെ എക്സ്പ്രഷൻ2 ... മറ്റെല്ലാ എക്സ്പ്രഷൻഎൻ അവസാനം

ഉദാഹരണത്തിന്, വിഭജനത്തിൻ്റെ (%) ശേഷിക്കുന്ന ഭാഗം നിങ്ങൾക്ക് എങ്ങനെ ഉപയോഗിക്കാമെന്ന് നോക്കാം. ഈ ഓപ്പറേറ്റർനിങ്ങൾക്ക് റെക്കോർഡുകൾ ഗ്രൂപ്പുകളായി വിഭജിക്കേണ്ടിവരുമ്പോൾ വളരെ ഉപയോഗപ്രദമാണ്. ഉദാഹരണത്തിന്, തുല്യതയുള്ള എല്ലാ ജീവനക്കാരെയും നമുക്ക് പുറത്താക്കാം പേഴ്സണൽ നമ്പറുകൾ(ഞാന് മരിക്കും. 2 കൊണ്ട് ഹരിക്കാവുന്ന ഐഡികൾ:

ഐഡി തിരഞ്ഞെടുക്കുക, ജീവനക്കാരുടെ പേര് എവിടെ ഐഡി%2=0 -- 2 കൊണ്ട് ഹരിക്കുമ്പോൾ ബാക്കി 0 ആണ്

ഓർഡർ പ്രകാരം - അന്വേഷണ ഫലം അടുക്കുന്നു

ഒരു ചോദ്യത്തിൻ്റെ ഫലം അടുക്കാൻ ക്ലോസ് പ്രകാരം ഓർഡർ ഉപയോഗിക്കുന്നു.

ലാസ്റ്റ് നെയിം, ഫസ്റ്റ് നെയിം, ജീവനക്കാരുടെ ശമ്പളം, അവസാന നാമം, ആദ്യനാമം എന്നിവ പ്രകാരം ഓർഡർ ചെയ്യുക -- ഫലം 2 കോളങ്ങളായി ഓർഡർ ചെയ്യുക - അവസാന നാമം, തുടർന്ന് ആദ്യ നാമം

ഒരു കുറിപ്പിനായി.ആരോഹണ ക്രമത്തിൽ അടുക്കുന്നതിന് ഒരു ASC കീവേഡ് ഉണ്ട്, എന്നാൽ ആരോഹണ ക്രമം ഡിഫോൾട്ടായതിനാൽ, നിങ്ങൾക്ക് ഈ ഓപ്ഷനെ കുറിച്ച് മറക്കാൻ കഴിയും (ഞാൻ ഈ ഓപ്ഷൻ ഉപയോഗിച്ച സമയം എനിക്ക് ഓർമയില്ല).

SELECT ക്ലോസിൽ ലിസ്റ്റുചെയ്തിട്ടില്ലാത്ത ഫീൽഡുകളും ORDER BY ക്ലോസിൽ ഉപയോഗിക്കാമെന്നത് ശ്രദ്ധിക്കേണ്ടതാണ് (DISTINCT ഉപയോഗിക്കുമ്പോൾ ഒഴികെ, അത് ഞാൻ ചുവടെ ചർച്ച ചെയ്യും). ഒരു ഉദാഹരണമായി, ഞാൻ TOP ഓപ്ഷൻ ഉപയോഗിച്ച് അൽപ്പം മുന്നോട്ട് പോകും, ​​ഉദാഹരണത്തിന്, ഏറ്റവും ഉയർന്ന ശമ്പളമുള്ള 3 ജീവനക്കാരെ നിങ്ങൾക്ക് എങ്ങനെ തിരഞ്ഞെടുക്കാമെന്ന് കാണിക്കും, രഹസ്യാത്മകതയ്ക്കായി ഞാൻ ശമ്പളം തന്നെ കാണിക്കരുത് എന്ന് കണക്കിലെടുക്കുന്നു:

ടോപ്പ് 3 തിരഞ്ഞെടുക്കുക -- ജീവനക്കാരുടെ മുഴുവൻ ഫല ഐഡിയിൽ നിന്നും അവസാനത്തെ പേര്, ആദ്യനാമം എന്നിവയിൽ നിന്നും ആദ്യ 3 റെക്കോർഡുകൾ മാത്രം തിരികെ നൽകുക -- ശമ്പളത്തിൻ്റെ അവരോഹണ ക്രമത്തിൽ ഫലം അടുക്കുക

ഐഡി പേരിന്റെ അവസാന ഭാഗം പേരിന്റെ ആദ്യഭാഗം
1000 ഇവാനോവ് ഇവാൻ
1002 സിഡോറോവ് സിഡോർ

തീർച്ചയായും, നിരവധി ജീവനക്കാർക്ക് ഒരേ ശമ്പളം ഉണ്ടായിരിക്കാമെന്ന ഒരു കേസ് ഇവിടെയുണ്ട്, കൂടാതെ ഏത് മൂന്ന് ജീവനക്കാരാണ് ഈ അഭ്യർത്ഥന തിരികെ നൽകുകയെന്ന് പറയാൻ പ്രയാസമാണ്; ഇത് ടാസ്‌ക് ഡയറക്ടറുമായി പരിഹരിക്കണം. ഡിസൈനറുമായി ഈ പ്രശ്നം ചർച്ച ചെയ്ത ശേഷം, നിങ്ങൾ സമ്മതിക്കുകയും ഉപയോഗിക്കാൻ തീരുമാനിക്കുകയും ചെയ്തുവെന്ന് നമുക്ക് പറയാം അടുത്ത ഓപ്ഷൻ- ജനനത്തീയതി പ്രകാരം ഒരു അധിക തരംതിരിക്കൽ നടത്തുക (അതായത് ഞങ്ങൾ യുവാക്കളെ വിലമതിക്കുന്നു), കൂടാതെ നിരവധി ജീവനക്കാരുടെ ജനനത്തീയതി ഒത്തുവന്നാൽ (എല്ലാത്തിനുമുപരി, ഇതും സാധ്യമാണ്), തുടർന്ന് നിങ്ങൾക്ക് അവരോഹണ ക്രമത്തിൽ മൂന്നാമത്തെ സോർട്ടിംഗ് നടത്താം. ഐഡി മൂല്യങ്ങളുടെ (അവസാനത്തെ സാമ്പിളിൽ പരമാവധി ഐഡി ഉള്ളവരെ ഉൾപ്പെടുത്തും - ഉദാഹരണത്തിന്, അവസാനം അംഗീകരിച്ചവർ, ഞങ്ങൾ പേഴ്‌സണൽ നമ്പറുകൾ തുടർച്ചയായി നൽകിയെന്ന് പറയാം):

ടോപ്പ് 3 തിരഞ്ഞെടുക്കുക -- ജീവനക്കാരുടെ സാലറി ഡെസ്‌സി പ്രകാരം ഓർഡർ ചെയ്ത മുഴുവൻ ഫല ഐഡി, അവസാന നാമം, ആദ്യനാമം എന്നിവയിൽ നിന്നും ആദ്യത്തെ 3 റെക്കോർഡുകൾ മാത്രം തിരികെ നൽകുക, -- 1. ശമ്പള ജന്മദിനം അനുസരിച്ച് ഫലം അവരോഹണ ക്രമത്തിൽ അടുക്കുക, -- 2. തുടർന്ന് ജനനത്തീയതി പ്രകാരം ഐഡി DESC -- 3 . കൂടാതെ ഫലത്തിൻ്റെ പൂർണ്ണമായ അവ്യക്തതയ്ക്കായി, ഐഡി പ്രകാരം അടുക്കുന്നത് ചേർക്കുക

ആ. അഭ്യർത്ഥനയുടെ ഫലം പ്രവചനാതീതമാക്കാൻ നിങ്ങൾ ശ്രമിക്കണം, അതുവഴി ഈ പ്രത്യേക ആളുകളെ "ബ്ലാക്ക് ലിസ്റ്റിൽ" ഉൾപ്പെടുത്തിയിരിക്കുന്നത് എന്തുകൊണ്ടാണെന്ന് നിങ്ങൾക്ക് വിശദീകരിക്കാൻ കഴിയും, അതായത്. സ്ഥാപിത നിയമങ്ങൾക്കനുസൃതമായി എല്ലാം സത്യസന്ധമായി തിരഞ്ഞെടുത്തു.

നിങ്ങൾക്ക് ഓർഡർ പ്രകാരം വ്യത്യസ്‌ത പദപ്രയോഗങ്ങൾ ഉപയോഗിച്ച് അടുക്കാനും കഴിയും:

കോൺകാറ്റ് പ്രകാരം ഓർഡർ ചെയ്ത ജീവനക്കാരിൽ നിന്ന് അവസാന നാമം, ആദ്യനാമം തിരഞ്ഞെടുക്കുക (അവസാന നാമം," ", ആദ്യനാമം) -- എക്സ്പ്രഷൻ ഉപയോഗിക്കുക

ഓർഡർ പ്രകാരം കോളങ്ങൾക്കായി വ്യക്തമാക്കിയ അപരനാമങ്ങളും നിങ്ങൾക്ക് ഉപയോഗിക്കാം:

ജീവനക്കാരുടെ ഓർഡറിൽ നിന്ന് കോൺകാറ്റ് (അവസാനനാമം," ",ആദ്യനാമം) തിരഞ്ഞെടുക്കുക -- ഒരു അപരനാമം ഉപയോഗിക്കുക

DISTINCT ക്ലോസ് ഉപയോഗിക്കുമ്പോൾ, SELECT ബ്ലോക്കിൽ ലിസ്റ്റ് ചെയ്തിരിക്കുന്ന കോളങ്ങൾ മാത്രമേ ORDER BY ക്ലോസിൽ ഉപയോഗിക്കാൻ കഴിയൂ എന്നത് ശ്രദ്ധിക്കേണ്ടതാണ്. ആ. DISTINCT പ്രവർത്തനം പ്രയോഗിച്ചതിന് ശേഷം നമുക്ക് ലഭിക്കും പുതിയ സെറ്റ്ഡാറ്റ, ഒരു പുതിയ കൂട്ടം കോളങ്ങൾ. ഇക്കാരണത്താൽ, ഇനിപ്പറയുന്ന ഉദാഹരണം പ്രവർത്തിക്കില്ല:

ID പ്രകാരമുള്ള ജീവനക്കാരുടെ വേർതിരിവ് അവസാന നാമം, ആദ്യനാമം, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക -- DISTINCT ഉപയോഗിച്ച് ഞങ്ങൾക്ക് ലഭിച്ച സെറ്റിൽ ഐഡി ഇല്ല

ആ. ഫലം ഉപയോക്താവിന് തിരികെ നൽകുന്നതിന് മുമ്പ്, തത്ഫലമായുണ്ടാകുന്ന സെറ്റിലേക്ക് ഓർഡർ ബൈ ക്ലോസ് പ്രയോഗിക്കുന്നു.

കുറിപ്പ് 1.നിങ്ങൾക്ക് ഓർഡർ പ്രകാരമുള്ള ക്ലോസിലെ SELECT എന്നതിൽ ലിസ്റ്റ് ചെയ്തിരിക്കുന്ന നിരകളുടെ നമ്പറുകളും ഉപയോഗിക്കാം:

ജീവനക്കാരുടെ അവസാന നാമം, ആദ്യനാമം, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക -- 3 DESC എന്ന ക്രമത്തിൽ അടുക്കുക, -- 1. അവരോഹണ ശമ്പളം 1, -- 2. അവസാന നാമം 2 -- 3. പേരിൻ്റെ ആദ്യ പേര്

തുടക്കക്കാർക്ക് ഇത് സൗകര്യപ്രദവും പ്രലോഭനപരവുമാണ്, പക്ഷേ ഈ സോർട്ടിംഗ് ഓപ്ഷൻ മറക്കുകയും ഒരിക്കലും ഉപയോഗിക്കാതിരിക്കുകയും ചെയ്യുന്നതാണ് നല്ലത്.

ഈ സാഹചര്യത്തിൽ (ഫീൽഡുകൾ വ്യക്തമായി ലിസ്റ്റുചെയ്തിരിക്കുമ്പോൾ), ഈ ഓപ്ഷൻ ഇപ്പോഴും സ്വീകാര്യമാണെങ്കിൽ, "*" ഉപയോഗിക്കുമ്പോൾ ഈ ഓപ്ഷൻ ഒരിക്കലും ഉപയോഗിക്കാതിരിക്കുന്നതാണ് നല്ലത്. എന്തുകൊണ്ട് - കാരണം, ഉദാഹരണത്തിന്, ആരെങ്കിലും പട്ടികയിലെ നിരകളുടെ ക്രമം മാറ്റുകയോ നിരകൾ ഇല്ലാതാക്കുകയോ ചെയ്താൽ (ഇതൊരു സാധാരണ സാഹചര്യമാണ്), നിങ്ങളുടെ അന്വേഷണം തുടർന്നും പ്രവർത്തിച്ചേക്കാം, പക്ഷേ തെറ്റായി, കാരണം സോർട്ടിംഗ് ഇതിനകം തന്നെ മറ്റ് നിരകൾ വഴി ചെയ്യാൻ കഴിയും, മാത്രമല്ല ഈ പിശക് വളരെ വേഗം കണ്ടെത്താനാകാത്തതിനാൽ ഇത് വഞ്ചനാപരമാണ്.

തൂണുകൾ വ്യക്തമായി ലിസ്റ്റുചെയ്തിട്ടുണ്ടെങ്കിൽ, മുകളിലുള്ള സാഹചര്യത്തിൽ, അന്വേഷണം ഒന്നുകിൽ പ്രവർത്തിക്കുന്നത് തുടരും, മാത്രമല്ല ശരിയായി (എല്ലാം വ്യക്തമായി നിർവചിച്ചിരിക്കുന്നതിനാൽ), അല്ലെങ്കിൽ അത് ഒരു പിശക് സൃഷ്ടിക്കും. ഈ കോളത്തിൻ്റെനിലവിലില്ല.

അതിനാൽ കോളം നമ്പറുകൾ പ്രകാരം അടുക്കുന്നതിനെക്കുറിച്ച് നിങ്ങൾക്ക് സുരക്ഷിതമായി മറക്കാൻ കഴിയും.

കുറിപ്പ് 2.
MS SQL-ൽ, ആരോഹണ ക്രമത്തിൽ അടുക്കുമ്പോൾ, NULL മൂല്യങ്ങൾ ആദ്യം പ്രദർശിപ്പിക്കും.

ജീവനക്കാരുടെ ഓർഡറിൽ നിന്ന് ബോണസ് ശതമാനം തിരഞ്ഞെടുക്കുക

അതനുസരിച്ച്, DESC ഉപയോഗിക്കുമ്പോൾ അവ അവസാനമായിരിക്കും

ബോണസ് ശതമാനം ഡെസ്‌സി പ്രകാരം ജീവനക്കാരുടെ ഓർഡറിൽ നിന്ന് ബോണസ് ശതമാനം തിരഞ്ഞെടുക്കുക

NULL മൂല്യങ്ങൾ അടുക്കുന്നതിനുള്ള ലോജിക് നിങ്ങൾക്ക് മാറ്റണമെങ്കിൽ, എക്സ്പ്രഷനുകൾ ഉപയോഗിക്കുക, ഉദാഹരണത്തിന്:

ISNULL പ്രകാരം ജീവനക്കാരുടെ ഓർഡറിൽ നിന്ന് ബോണസ് ശതമാനം തിരഞ്ഞെടുക്കുക (ബോണസ് ശതമാനം,100)

ORACLE ഈ ആവശ്യത്തിനായി രണ്ട് ഓപ്ഷനുകൾ നൽകുന്നു: NULLS FIRST, NULLS LAST (സ്ഥിരസ്ഥിതിയായി ഉപയോഗിക്കുന്നു). ഉദാഹരണത്തിന്:

ജീവനക്കാരുടെ ഓർഡറിൽ നിന്ന് ബോണസ് ശതമാനം തിരഞ്ഞെടുക്കുക.

ഒരു പ്രത്യേക ഡാറ്റാബേസിലേക്ക് മാറുമ്പോൾ ഇത് ശ്രദ്ധിക്കുക.

ടോപ്പ് - നിർദ്ദിഷ്ട റെക്കോർഡുകളുടെ എണ്ണം തിരികെ നൽകുക

MSDN-ൽ നിന്ന് എക്‌സ്‌ട്രാക്‌റ്റ് ചെയ്യുക. TOP - എന്നതിലേക്ക് സജ്ജീകരിച്ച അന്വേഷണ ഫലത്തിൽ തിരികെ നൽകിയ വരികളുടെ എണ്ണം പരിമിതപ്പെടുത്തുന്നു നൽകിയ നമ്പർഅല്ലെങ്കിൽ ശതമാനം മൂല്യം. ഒരു ഓർഡർ ബൈ ക്ലോസുമായി സംയോജിച്ച് ഒരു TOP ക്ലോസ് ഉപയോഗിക്കുമ്പോൾ, ക്രമീകരിച്ച ഫലത്തിൻ്റെ ആദ്യ N ​​വരികളിൽ ഫല സെറ്റ് പരിമിതപ്പെടുത്തിയിരിക്കുന്നു. അല്ലെങ്കിൽ, ആദ്യ N ​​വരികൾ വ്യക്തമാക്കാത്ത ക്രമത്തിൽ തിരികെ നൽകും.

സാധാരണയായി ഈ പദപ്രയോഗംഓർഡർ ബൈ ക്ലോസിനൊപ്പം ഉപയോഗിക്കുന്നു, ഫല സെറ്റിൽ നിന്ന് ആദ്യത്തെ N വരികൾ തിരികെ നൽകേണ്ട ഉദാഹരണങ്ങൾ ഞങ്ങൾ ഇതിനകം പരിശോധിച്ചു.

ഓർഡർ പ്രകാരം, ഈ ക്ലോസ് സാധാരണയായി നമുക്ക് അജ്ഞാതമായ ഒരു ടേബിളിലേക്ക് നോക്കേണ്ടിവരുമ്പോൾ ഉപയോഗിക്കാറുണ്ട്, അതിൽ ധാരാളം റെക്കോർഡുകൾ ഉണ്ടായിരിക്കാം, ഈ സാഹചര്യത്തിൽ നമുക്ക്, ഉദാഹരണത്തിന്, ആദ്യത്തെ 10 വരികൾ മാത്രം തിരികെ നൽകാൻ ആവശ്യപ്പെടാം, പക്ഷേ വ്യക്തത ഞങ്ങൾ 2 മാത്രം പറയും:

ജീവനക്കാരിൽ നിന്ന് ടോപ്പ് 2 * തിരഞ്ഞെടുക്കുക

ഫല ഗണത്തിൽ നിന്ന് വരികളുടെ അനുബന്ധ ശതമാനം തിരികെ നൽകുന്നതിന് നിങ്ങൾക്ക് PERCENT എന്ന വാക്ക് വ്യക്തമാക്കാനും കഴിയും:

ജീവനക്കാരിൽ നിന്ന് മികച്ച 25 ശതമാനം * തിരഞ്ഞെടുക്കുക

എൻ്റെ പരിശീലനത്തിൽ, വരികളുടെ എണ്ണം അനുസരിച്ചുള്ള സാമ്പിൾ ആണ് മിക്കപ്പോഴും ഉപയോഗിക്കുന്നത്.

TOP ഉപയോഗിച്ച് നിങ്ങൾക്ക് WITH TIES ഓപ്ഷനും ഉപയോഗിക്കാം, ഇത് അവ്യക്തമായ സോർട്ടിംഗിൻ്റെ കാര്യത്തിൽ എല്ലാ വരികളും തിരികെ നൽകാൻ സഹായിക്കും, അതായത്. ഈ വാചകം TOP N സെലക്ഷനിൽ വരുന്ന വരികൾക്ക് തുല്യമായ എല്ലാ വരികളും തിരികെ നൽകും; തൽഫലമായി, N-ൽ കൂടുതൽ വരികൾ തിരഞ്ഞെടുക്കാം. പ്രകടനത്തിനായി 1500 ശമ്പളമുള്ള മറ്റൊരു "പ്രോഗ്രാമർ" ചേർക്കാം:

ജീവനക്കാരെ ചേർക്കുക (ഐഡി, പേര്, ഇമെയിൽ, പൊസിഷൻ ഐഡി, ഡിപ്പാർട്ട്മെൻ്റ് ഐഡി, മാനേജർ ഐഡി, ശമ്പളം) മൂല്യങ്ങൾ(1004,N"നിക്കോളേവ് എൻ.എൻ."," [ഇമെയിൽ പരിരക്ഷിതം]",3,3,1003,1500)

2000 ശമ്പളമുള്ള സ്ഥാനവും വകുപ്പും സൂചിപ്പിക്കാതെ മറ്റൊരു ജീവനക്കാരനെ ചേർക്കാം:

ജീവനക്കാരെ ചേർക്കുക (ഐഡി, പേര്, ഇമെയിൽ, പൊസിഷൻ ഐഡി, ഡിപ്പാർട്ട്മെൻ്റ് ഐഡി, മാനേജർ ഐഡി, ശമ്പളം) മൂല്യങ്ങൾ(1005,N"അലക്‌സാൻഡ്റോവ് എ.എ."," [ഇമെയിൽ പരിരക്ഷിതം]",NULL,NULL,1000,2000)

ഇപ്പോൾ നമുക്ക് വിത്ത് ടൈസ് ഓപ്ഷൻ ഉപയോഗിച്ച്, 3 ജീവനക്കാരുടെ ശമ്പളവുമായി പൊരുത്തപ്പെടുന്ന എല്ലാ ജീവനക്കാരെയും ഏറ്റവും ചെറിയ ശമ്പളത്തിൽ തിരഞ്ഞെടുക്കാം (എനിക്ക് എന്താണ് ലഭിക്കുന്നതെന്ന് കൂടുതൽ വ്യക്തമാകുമെന്ന് ഞാൻ പ്രതീക്ഷിക്കുന്നു):

ടൈസ് ഐഡി, പേര്, ശമ്പളം അനുസരിച്ച് ജീവനക്കാരുടെ ശമ്പളത്തിൽ നിന്ന് ടോപ്പ് 3 തിരഞ്ഞെടുക്കുക

ഇവിടെ, TOP 3 സൂചിപ്പിച്ചിട്ടുണ്ടെങ്കിലും, അഭ്യർത്ഥന 4 റെക്കോർഡുകൾ നൽകി, കാരണം TOP 3 (1500 ഉം 2000 ഉം) നൽകിയ ശമ്പള മൂല്യം 4 ജീവനക്കാരിൽ കണ്ടെത്തി. ദൃശ്യപരമായി ഇത് ഇതുപോലെ പ്രവർത്തിക്കുന്നു:

ഒരു കുറിപ്പിൽ.
TOP വ്യത്യസ്ത ഡാറ്റാബേസുകളിൽ വ്യത്യസ്ത രീതികളിൽ നടപ്പിലാക്കുന്നു; MySQL-ൽ ഇതിനായി ഒരു പരിധി ക്ലോസ് ഉണ്ട്, അതിൽ നിങ്ങൾക്ക് ആരംഭ ഓഫ്സെറ്റ് അധികമായി സജ്ജമാക്കാൻ കഴിയും.

ORACLE 12c-ൽ, TOP, LIMIT എന്നിവയുടെ പ്രവർത്തനക്ഷമത സംയോജിപ്പിച്ച് അവർ സ്വന്തം അനലോഗും അവതരിപ്പിച്ചു - "ORACLE OFFSET FETCH" എന്ന വാക്കുകൾക്കായി തിരയുക. പതിപ്പ് 12c ന് മുമ്പ്, ഈ ആവശ്യത്തിനായി സാധാരണയായി ROWNUM എന്ന വ്യാജ കോളം ഉപയോഗിച്ചിരുന്നു.


നിങ്ങൾ DISTINCT, TOP ക്ലോസുകൾ ഒരേ സമയം പ്രയോഗിച്ചാൽ എന്ത് സംഭവിക്കും? ഇത്തരം ചോദ്യങ്ങൾക്ക് പരീക്ഷണങ്ങളിലൂടെ എളുപ്പത്തിൽ ഉത്തരം കണ്ടെത്താനാകും. പൊതുവേ, ഭയപ്പെടരുത്, പരീക്ഷണങ്ങൾക്ക് മടിയാകരുത്, കാരണം ... അതിൽ ഭൂരിഭാഗവും പരിശീലനത്തിലൂടെയാണ് പഠിക്കുന്നത്. SELECT പ്രസ്താവനയിലെ പദ ക്രമം ഇപ്രകാരമാണ്: DISTINCT ആദ്യം വരുന്നു, തുടർന്ന് TOP, അതായത്. നിങ്ങൾ യുക്തിസഹമായി ചിന്തിക്കുകയും ഇടത്തുനിന്ന് വലത്തോട്ട് വായിക്കുകയും ചെയ്യുകയാണെങ്കിൽ, ആദ്യം ഡ്യൂപ്ലിക്കേറ്റുകൾ നിരസിക്കുന്നത് പ്രയോഗിക്കും, തുടർന്ന് ഈ സെറ്റിനെ അടിസ്ഥാനമാക്കി TOP നിർമ്മിക്കപ്പെടും. ശരി, ഇത് അങ്ങനെയാണോ എന്ന് പരിശോധിച്ച് ഉറപ്പാക്കാം:

ജീവനക്കാരുടെ ശമ്പളം ക്രമത്തിൽ നിന്ന് വ്യത്യസ്തമായ ടോപ്പ് 2 ശമ്പളം തിരഞ്ഞെടുക്കുക

ശമ്പളം
1500
2000

ആ. തൽഫലമായി, ഞങ്ങൾക്ക് ഏറ്റവും ചെറിയ 2 ശമ്പളം ലഭിച്ചു. തീർച്ചയായും, ചില ജീവനക്കാർക്കുള്ള ശമ്പളം വ്യക്തമാക്കിയേക്കില്ല (NULL), കാരണം ഇത് ചെയ്യാൻ സ്കീം ഞങ്ങളെ അനുവദിക്കുന്നു. അതിനാൽ, ചുമതലയെ ആശ്രയിച്ച്, ഒന്നുകിൽ ഓർഡർ പ്രകാരം NULL മൂല്യങ്ങൾ പ്രോസസ്സ് ചെയ്യാൻ ഞങ്ങൾ തീരുമാനിക്കുന്നു, അല്ലെങ്കിൽ ശമ്പളം NULL ആയ എല്ലാ രേഖകളും നിരസിക്കുക, ഇതിനായി ഞങ്ങൾ WHERE ക്ലോസ് പഠിക്കാൻ പോകുന്നു.

എവിടെ - വരി തിരഞ്ഞെടുക്കൽ അവസ്ഥ

ഈ വാചകം നൽകിയിരിക്കുന്ന വ്യവസ്ഥ പ്രകാരം റെക്കോർഡുകൾ ഫിൽട്ടർ ചെയ്യാൻ ഉപയോഗിക്കുന്നു. ഉദാഹരണത്തിന്, "ഐടി" വകുപ്പിൽ ജോലി ചെയ്യുന്ന എല്ലാ ജീവനക്കാരെയും നമുക്ക് തിരഞ്ഞെടുക്കാം (അതിൻ്റെ ഐഡി=3):

ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി=3 -- അവസാനനാമം, ആദ്യനാമം പ്രകാരം ഐടി ഓർഡർ ചെയ്യുക

ഐഡി പേരിന്റെ അവസാന ഭാഗം പേരിന്റെ ആദ്യഭാഗം ശമ്പളം
1004 ശൂന്യം ശൂന്യം 1500
1003 ആൻഡ്രീവ് ആന്ദ്രേ 2000
1001 പെട്രോവ് പീറ്റർ 1500

ഓർഡർ ബൈ കമാൻഡിന് മുമ്പായി WHERE ക്ലോസ് എഴുതിയിരിക്കുന്നു.

പ്രാരംഭ ജീവനക്കാരുടെ സെറ്റിലേക്ക് കമാൻഡുകൾ പ്രയോഗിക്കുന്നതിനുള്ള ക്രമം ഇപ്രകാരമാണ്:

  1. എവിടെ - വ്യക്തമാക്കിയിട്ടുണ്ടെങ്കിൽ, മുഴുവൻ ജീവനക്കാരുടെയും ആദ്യ പടി, വ്യവസ്ഥയെ തൃപ്തിപ്പെടുത്തുന്ന രേഖകൾ മാത്രം തിരഞ്ഞെടുക്കുക എന്നതാണ്
  2. DISTINCT - വ്യക്തമാക്കിയിട്ടുണ്ടെങ്കിൽ, എല്ലാ തനിപ്പകർപ്പുകളും നിരസിക്കപ്പെടും
  3. ഓർഡർ പ്രകാരം - വ്യക്തമാക്കിയിട്ടുണ്ടെങ്കിൽ, ഫലം അടുക്കും
  4. ടോപ്പ് - വ്യക്തമാക്കിയിട്ടുണ്ടെങ്കിൽ, ക്രമീകരിച്ച ഫലത്തിൽ നിന്ന് നിശ്ചിത എണ്ണം റെക്കോർഡുകൾ മാത്രമേ നൽകൂ

വ്യക്തതയ്ക്കായി നമുക്ക് ഒരു ഉദാഹരണം നോക്കാം:

ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി=3 ശമ്പള പ്രകാരം ഓർഡർ ചെയ്യുന്ന ജീവനക്കാരിൽ നിന്ന് വ്യത്യസ്തമായ ടോപ്പ് 1 ശമ്പളം തിരഞ്ഞെടുക്കുക

ദൃശ്യപരമായി ഇത് ഇതുപോലെ കാണപ്പെടും:

NULL നായി പരിശോധിക്കുന്നത് ഒരു തുല്യ ചിഹ്നത്തോടെയല്ല, മറിച്ച് IS NULL, IS NULL ഓപ്പറേറ്റർമാർ എന്നിവ ഉപയോഗിച്ചാണ് ചെയ്യുന്നത് എന്നത് ശ്രദ്ധിക്കേണ്ടതാണ്. "=" (തുല്യ ചിഹ്നം) ഓപ്പറേറ്റർ ഉപയോഗിച്ച് നിങ്ങൾക്ക് NULL-ൽ താരതമ്യം ചെയ്യാൻ കഴിയില്ലെന്ന് ഓർക്കുക, കാരണം പദപ്രയോഗത്തിൻ്റെ ഫലവും NULL ന് തുല്യമായിരിക്കും.

ഉദാഹരണത്തിന്, ഡിപ്പാർട്ട്‌മെൻ്റ് വ്യക്തമാക്കിയിട്ടില്ലാത്ത എല്ലാ ജീവനക്കാരെയും നമുക്ക് തിരഞ്ഞെടുക്കാം (അതായത് ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി അസാധുവാണ്):

ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി ശൂന്യമായിരിക്കുന്നിടത്ത് ജീവനക്കാരിൽ നിന്ന് ഐഡി തിരഞ്ഞെടുക്കുക

ഇപ്പോൾ, ഒരു ഉദാഹരണമായി, ബോണസ് ശതമാനം മൂല്യം വ്യക്തമാക്കിയിട്ടുള്ള എല്ലാ ജീവനക്കാർക്കുമുള്ള ബോണസ് കണക്കാക്കാം (അതായത്, ബോണസ് ശതമാനം ശൂന്യമല്ല):

ഐഡി, പേര്, ശമ്പളം/100*ബോണസ് ശതമാനം ബോണസ് ശതമാനം അസാധുവാണെങ്കിൽ ജീവനക്കാരിൽ നിന്ന് ബോണസായി

അതെ, നിങ്ങൾ അതിനെക്കുറിച്ച് ചിന്തിക്കുകയാണെങ്കിൽ, BonusPercent മൂല്യം പൂജ്യത്തിന് (0) തുല്യമായിരിക്കും, കൂടാതെ മൂല്യം ഒരു മൈനസ് ചിഹ്നത്തിലും നൽകാം, കാരണം ഞങ്ങൾ ഈ ഫീൽഡിൽ നിയന്ത്രണങ്ങളൊന്നും ഏർപ്പെടുത്തിയിട്ടില്ല.

ശരി, പ്രശ്നത്തെക്കുറിച്ച് പറഞ്ഞതിന് ശേഷം, അത് പരിഗണിക്കാൻ ഞങ്ങളോട് പറഞ്ഞു (ബോണസ് ശതമാനം<=0 или BonusPercent IS NULL), то это означает что у сотрудника так же нет бонуса. Для начала, как нам сказали, так и сделаем, реализуем это при помощи логического оператора OR и NOT:

ഐഡി, പേര്, ശമ്പളം/100*ബോണസ് ശതമാനം ബോണസായി അല്ലാത്ത ജീവനക്കാരിൽ നിന്ന് (ബോണസ് ശതമാനം<=0 OR BonusPercent IS NULL)

ആ. ഇവിടെയാണ് ഞങ്ങൾ ബൂളിയൻ ഓപ്പറേറ്റർമാരെ കുറിച്ച് പഠിക്കാൻ തുടങ്ങിയത്. ബ്രാക്കറ്റുകളിലെ എക്സ്പ്രഷൻ "(ബോണസ് ശതമാനം<=0 OR BonusPercent IS NULL)» проверяет на то что у сотрудника нет бонуса, а NOT инвертирует это значение, т.е. говорит «верни всех сотрудников которые не сотрудники у которых нет бонуса».

(BonusPercent>0 ഉം BonusPercent IS NULL) എന്ന എക്‌സ്‌പ്രഷൻ ഉപയോഗിച്ച് "ബോണസ് ഉള്ള എല്ലാ ജീവനക്കാരെയും തിരികെ കൊണ്ടുവരിക" എന്ന് പറഞ്ഞുകൊണ്ട് ഈ പദപ്രയോഗം മാറ്റിയെഴുതാനും കഴിയും:

ഐഡി, പേര്, ശമ്പളം/100*ബോണസ് ശതമാനം ബോണസ് ശതമാനം>0, ബോണസ് ശതമാനം അസാധുവല്ലാത്തിടത്ത് ജീവനക്കാരിൽ നിന്ന് ബോണസായി

കൂടാതെ WHERE ബ്ലോക്കിൽ നിങ്ങൾക്ക് ഗണിത ഓപ്പറേറ്ററുകളും ഫംഗ്ഷനുകളും ഉപയോഗിച്ച് വിവിധ തരത്തിലുള്ള എക്സ്പ്രഷനുകൾ പരിശോധിക്കാൻ കഴിയും. ഉദാഹരണത്തിന്, ISNULL ഫംഗ്‌ഷനുള്ള ഒരു എക്‌സ്‌പ്രഷൻ ഉപയോഗിച്ച് സമാനമായ ഒരു പരിശോധന നടത്താം:

ഐഡി, പേര്, ശമ്പളം/100*ബോണസ് ശതമാനം ബോണസായി ജീവനക്കാരിൽ നിന്ന് അസാധുവാകുന്നിടത്ത് (ബോണസ് ശതമാനം,0)>0

ബൂളിയൻ ഓപ്പറേറ്റർമാരും ലളിതമായ താരതമ്യ ഓപ്പറേറ്റർമാരും

അതെ, നമുക്ക് ഇവിടെ ഗണിതശാസ്ത്രമില്ലാതെ ചെയ്യാൻ കഴിയില്ല, അതിനാൽ നമുക്ക് ബൂളിയൻ, ലളിതമായ താരതമ്യ ഓപ്പറേറ്ററുകളിലേക്ക് ഒരു ചെറിയ ഉല്ലാസയാത്ര നടത്താം.

SQL-ൽ 3 ബൂളിയൻ ഓപ്പറേറ്റർമാർ മാത്രമേയുള്ളൂ - കൂടാതെ, അല്ലെങ്കിൽ അല്ലാത്തവ:

ഓരോ ബൂളിയൻ ഓപ്പറേറ്റർക്കും, വ്യവസ്ഥകൾ അസാധുവാകുമ്പോൾ ഫലം എന്തായിരിക്കുമെന്ന് കാണിക്കുന്ന സത്യ പട്ടികകൾ നിങ്ങൾക്ക് നൽകാം:

വ്യവസ്ഥകൾ രൂപീകരിക്കുന്നതിന് ഇനിപ്പറയുന്ന ലളിതമായ താരതമ്യ ഓപ്പറേറ്റർമാർ ഉപയോഗിക്കുന്നു:

കൂടാതെ NULL-നുള്ള മൂല്യം/എക്‌സ്‌പ്രഷൻ പരിശോധിക്കുന്നതിന് 2 ഓപ്പറേറ്റർമാരുണ്ട്:

NULL ആണ് NULL സമത്വത്തിനായുള്ള പരിശോധന
NULL അല്ല NULL അസമത്വത്തിനായുള്ള പരിശോധന

മുൻഗണന: 1) എല്ലാ താരതമ്യ ഓപ്പറേറ്റർമാർ; 2) അല്ല; 3) ഒപ്പം; 4) അല്ലെങ്കിൽ.

സമുച്ചയം നിർമ്മിക്കുമ്പോൾ ലോജിക്കൽ എക്സ്പ്രഷനുകൾപരാൻതീസിസ് ഉപയോഗിക്കുന്നു:

((വ്യവസ്ഥ1, വ്യവസ്ഥ2) അല്ലെങ്കിൽ അല്ല(നിലവാരം3, വ്യവസ്ഥ4, വ്യവസ്ഥ5)) അല്ലെങ്കിൽ (...)

കൂടാതെ, പരാൻതീസിസ് ഉപയോഗിച്ച്, നിങ്ങൾക്ക് കണക്കുകൂട്ടലുകളുടെ സ്റ്റാൻഡേർഡ് ക്രമം മാറ്റാൻ കഴിയും.

ഇവിടെ ഞാൻ ബൂളിയൻ ബീജഗണിതത്തെക്കുറിച്ച് ഒരു ആശയം നൽകാൻ ശ്രമിച്ചു. നിങ്ങൾക്ക് കാണാനാകുന്നതുപോലെ, കൂടുതൽ സങ്കീർണ്ണമായ വ്യവസ്ഥകൾ എഴുതുന്നതിന്, നിങ്ങൾക്ക് യുക്തിയില്ലാതെ ചെയ്യാൻ കഴിയില്ല, എന്നാൽ അതിൽ അധികമൊന്നും ഇവിടെ ഇല്ല (AND, OR, NOT) അത് ആളുകൾ കണ്ടുപിടിച്ചതാണ്, അതിനാൽ എല്ലാം തികച്ചും യുക്തിസഹമാണ്.

നമുക്ക് രണ്ടാം ഭാഗത്തിൻ്റെ അവസാനത്തിലേക്ക് പോകാം

നിങ്ങൾക്ക് കാണാനാകുന്നതുപോലെ, SELECT ഓപ്പറേറ്ററിൻ്റെ അടിസ്ഥാന വാക്യഘടനയെക്കുറിച്ച് പോലും നമുക്ക് വളരെക്കാലം സംസാരിക്കാൻ കഴിയും, എന്നാൽ ലേഖനത്തിൻ്റെ പരിധിയിൽ തുടരുന്നതിന്, ഞാൻ ഒടുവിൽ അധികമായി കാണിക്കും ലോജിക്കൽ ഓപ്പറേറ്റർമാർ– ഇടയിൽ, ഇൻ, ലൈക്ക്.

ഇടയിൽ - ഒരു ശ്രേണിയിൽ ഉൾപ്പെടുത്തുന്നത് പരിശോധിക്കുന്നു

Test_value start_value നും end_value നും ഇടയിൽ

പദപ്രയോഗങ്ങൾക്ക് മൂല്യങ്ങളായി പ്രവർത്തിക്കാൻ കഴിയും.

നമുക്ക് ഒരു ഉദാഹരണം നോക്കാം:

2000-നും 3000-നും ഇടയിലുള്ള ശമ്പളം -- 2000-3000 റേഞ്ചിൽ ശമ്പളമുള്ള ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക

യഥാർത്ഥത്തിൽ, BETWEEN എന്നത് ഫോമിൻ്റെ ലളിതമായ ഒരു നൊട്ടേഷനാണ്:

ജീവനക്കാരുടെ ഐഡി, പേര്, ശമ്പളം, ശമ്പളം>=2000, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക<=3000 -- все у кого ЗП в диапозоне 2000-3000

BETWEEN എന്ന വാക്കിന് മുമ്പ് NOT എന്ന വാക്ക് ഉപയോഗിക്കാൻ കഴിയില്ല, അത് മൂല്യം നിർദ്ദിഷ്ട പരിധിക്കുള്ളിലല്ലെന്ന് പരിശോധിക്കും:

2000-നും 3000-നും ഇടയിൽ ശമ്പളം ലഭിക്കാത്ത ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക -- NOT(ശമ്പളം>=2000-ഉം ശമ്പളവും<=3000)

അതനുസരിച്ച്, നിങ്ങൾ BETWEEN, IN, LIKE എന്നിവ ഉപയോഗിക്കുകയാണെങ്കിൽ, കൂടാതെ കൂടാതെ അല്ലെങ്കിൽ എന്നിവ ഉപയോഗിച്ച് നിങ്ങൾക്ക് അവയെ മറ്റ് വ്യവസ്ഥകളുമായി സംയോജിപ്പിക്കാനും കഴിയും:

2000-നും 3000-നും ഇടയിൽ ശമ്പളം ലഭിക്കുന്ന ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക -- 2000-3000 റേഞ്ചിൽ ശമ്പളമുള്ളവരും വകുപ്പ് ഐഡി=3 -- വകുപ്പ് 3-ലെ ജീവനക്കാരെ മാത്രം കണക്കിലെടുക്കുക.

IN - മൂല്യങ്ങളുടെ പട്ടികയിൽ ഉൾപ്പെടുത്തുന്നുണ്ടോയെന്ന് പരിശോധിക്കുക

ഈ ഓപ്പറേറ്റർക്ക് ഇനിപ്പറയുന്ന ഫോം ഉണ്ട്:

Test_value IN (മൂല്യം1, മൂല്യം2, ...)

ഒരു ഉദാഹരണം ഉപയോഗിച്ച് കാണിക്കുന്നത് എളുപ്പമാണെന്ന് ഞാൻ കരുതുന്നു:

3 അല്ലെങ്കിൽ 4 സ്ഥാനത്തുള്ള (3,4) സ്ഥാനത്തുള്ള ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക

ആ. ഇത് അടിസ്ഥാനപരമായി ഇനിപ്പറയുന്ന പദപ്രയോഗത്തിന് സമാനമാണ്:

ഉദ്യോഗാർത്ഥികളിൽ നിന്ന് ഐഡി, പേര്, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക.

അല്ലാത്ത സാഹചര്യത്തിൽ ഇത് സമാനമായിരിക്കും (ഡിപ്പാർട്ട്‌മെൻ്റ് 3, 4 എന്നിവയിൽ നിന്നുള്ളവ ഒഴികെ എല്ലാവരെയും ഞങ്ങൾക്ക് ലഭിക്കും):

ഉദ്യോഗാർത്ഥികളിൽ നിന്ന് ഐഡി, പേര്, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക.

NOT IN ഉള്ള ഒരു ചോദ്യം കൂടാതെ ഇനിപ്പറയുന്നവ ഉപയോഗിച്ച് പ്രകടിപ്പിക്കാനും കഴിയും:

ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക<>3ആൻഡ് പൊസിഷൻ ഐഡി<>4 -- പൊസിഷൻ ഐഡിക്ക് തുല്യമാണ് (3,4)

IN നിർമ്മാണം ഉപയോഗിച്ച് NULL മൂല്യങ്ങൾക്കായി തിരയുന്നത് പ്രവർത്തിക്കില്ല, കാരണം NULL=NULL പരിശോധിക്കുന്നത് NULL നൽകുന്നു, ശരിയല്ല:

ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡിയിൽ (1,2, NULL) ഉള്ള ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, വകുപ്പ് ഐഡി തിരഞ്ഞെടുക്കുക -- ഫലത്തിൽ NULL രേഖകൾ ഉൾപ്പെടുത്തില്ല

ഈ സാഹചര്യത്തിൽ, ചെക്ക് പല വ്യവസ്ഥകളായി വിഭജിക്കുക:

ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി (1,2) -- 1 അല്ലെങ്കിൽ 2 അല്ലെങ്കിൽ ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി അസാധുവാണ് -- അല്ലെങ്കിൽ ശൂന്യമാണ് ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി തിരഞ്ഞെടുക്കുക

അല്ലെങ്കിൽ നിങ്ങൾക്ക് ഇതുപോലുള്ള എന്തെങ്കിലും എഴുതാം:

ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ഡിപ്പാർട്ട്മെൻ്റ് ഐഡി തിരഞ്ഞെടുക്കുക.

ഈ സാഹചര്യത്തിൽ, ആദ്യ ഓപ്ഷൻ കൂടുതൽ ശരിയും വിശ്വസനീയവുമാണെന്ന് ഞാൻ കരുതുന്നു. ശരി, മറ്റ് ഘടനകൾ എന്തെല്ലാം നിർമ്മിക്കാമെന്ന് തെളിയിക്കുന്നതിനുള്ള ഒരു ഉദാഹരണം മാത്രമാണ് ഇത്.

NULL-മായി ബന്ധപ്പെട്ട ഇതിലും കൂടുതൽ വഞ്ചനാപരമായ പിശക് പരാമർശിക്കേണ്ടതാണ്, NOT IN കൺസ്ട്രക്‌റ്റ് ഉപയോഗിക്കുമ്പോൾ ഇത് സംഭവിക്കാം. ഉദാഹരണത്തിന്, ഡിപ്പാർട്ട്‌മെൻ്റ് 1 അല്ലെങ്കിൽ ഡിപ്പാർട്ട്‌മെൻ്റ് വ്യക്തമാക്കിയിട്ടില്ലാത്തവരെ ഒഴികെയുള്ള എല്ലാ ജീവനക്കാരെയും തിരഞ്ഞെടുക്കാൻ ശ്രമിക്കാം, അതായത്. NULL തുല്യമാണ്. ഒരു പരിഹാരമെന്ന നിലയിൽ, ഇനിപ്പറയുന്ന ഓപ്ഷൻ സ്വയം നിർദ്ദേശിക്കുന്നു:

ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി ഇല്ലാത്തിടത്ത് ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി തിരഞ്ഞെടുക്കുക (1, NULL)

എന്നാൽ ചോദ്യം എക്സിക്യൂട്ട് ചെയ്‌തതിന് ശേഷം, ഇനിപ്പറയുന്നവ കാണുമെന്ന് ഞങ്ങൾ പ്രതീക്ഷിച്ചെങ്കിലും ഞങ്ങൾക്ക് ഒരു വരി പോലും ലഭിക്കില്ല:

വീണ്ടും, ഇവിടെ തമാശ കളിച്ചത് മൂല്യങ്ങളുടെ പട്ടികയിൽ വ്യക്തമാക്കിയ NULL ആണ്.

എന്തുകൊണ്ടാണ് ഈ കേസിൽ ഒരു ലോജിക്കൽ പിശക് സംഭവിച്ചതെന്ന് നോക്കാം. AND ഉപയോഗിച്ച് ചോദ്യം വിപുലീകരിക്കാം:

ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി എവിടെയായിരുന്നോ ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി എന്നിവ തിരഞ്ഞെടുക്കുക<>1, ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി<>NULL -- ഈ NULL ചെക്ക് കാരണമാണ് പ്രശ്നം - ഈ അവസ്ഥ എല്ലായ്പ്പോഴും NULL തിരികെ നൽകും

ശരിയായ അവസ്ഥ (ഡിപ്പാർട്ട്മെൻ്റ് ഐഡി<>NULL) ഇവിടെ എപ്പോഴും നമുക്ക് അനിശ്ചിതത്വം നൽകും, അതായത്. ശൂന്യം. ഇപ്പോൾ AND ഓപ്പറേറ്ററിനായുള്ള ട്രൂട്ട് ടേബിൾ ഓർക്കുക, അവിടെ (TRUE AND NULL) NULL നൽകുന്നു. ആ. ഇടത് അവസ്ഥ പാലിക്കുമ്പോൾ (ഡിപ്പാർട്ട്മെൻ്റ് ഐഡി<>1) നിർവചിക്കാത്ത ശരിയായ അവസ്ഥ കാരണം, മുഴുവൻ എക്‌സ്‌പ്രഷനും (ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി) നിർവചിക്കാത്ത മൂല്യത്തിൽ ഞങ്ങൾ അവസാനിക്കും<>1, ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി<>NULL), അതിനാൽ ഫലത്തിൽ സ്ട്രിംഗ് ഉൾപ്പെടുത്തില്ല.

വ്യവസ്ഥ ഇനിപ്പറയുന്ന രീതിയിൽ ശരിയായി തിരുത്തിയെഴുതാം:

ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി (1)-ൽ ഇല്ലാത്തിടത്ത് ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി തിരഞ്ഞെടുക്കുക -- അല്ലെങ്കിൽ ഈ സാഹചര്യത്തിൽ ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി മാത്രം<>1 കൂടാതെ ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി അസാധുവല്ല -- കൂടാതെ NOT NULL എന്ന് പ്രത്യേകം പരിശോധിക്കുക

സബ്ക്വറികൾക്കൊപ്പം IN ഉപയോഗിക്കാനും കഴിയും, എന്നാൽ ഈ ട്യൂട്ടോറിയലിൻ്റെ തുടർന്നുള്ള ഭാഗങ്ങളിൽ ഞങ്ങൾ ഈ ഫോമിലേക്ക് മടങ്ങും.

ലൈക്ക് - ഒരു പാറ്റേൺ ഉപയോഗിച്ച് ഒരു സ്ട്രിംഗ് പരിശോധിക്കുന്നു

ഞാൻ ഈ ഓപ്പറേറ്ററെ കുറിച്ച് അതിൻ്റെ ഏറ്റവും ലളിതമായ രൂപത്തിൽ മാത്രമേ സംസാരിക്കൂ, അത് ഒരു സ്റ്റാൻഡേർഡ് ആണ്, കൂടാതെ SQL ഭാഷയുടെ മിക്ക ഭാഷകളും പിന്തുണയ്ക്കുന്നു. ഈ രൂപത്തിൽ പോലും, ഒരു സ്ട്രിംഗിൻ്റെ ഉള്ളടക്കം പരിശോധിക്കേണ്ട നിരവധി പ്രശ്നങ്ങൾ പരിഹരിക്കാൻ ഇത് ഉപയോഗിക്കാം.

ഈ ഓപ്പറേറ്റർക്ക് ഇനിപ്പറയുന്ന ഫോം ഉണ്ട്:

സ്ട്രിംഗ്_പാറ്റേൺ പോലെയുള്ള ടെസ്റ്റ്_സ്ട്രിംഗ്

"pattern_string"-ൽ ഇനിപ്പറയുന്ന പ്രത്യേക പ്രതീകങ്ങൾ ഉപയോഗിക്കാം:

  1. അടിവരയിട്ട “_” എന്നതിൻ്റെ അർത്ഥം ഏതൊരു പ്രതീകത്തിനും അതിൻ്റെ സ്ഥാനം നേടാനാകും എന്നാണ്
  2. "%" എന്ന ശതമാനം ചിഹ്നം - അതിൻറെ സ്ഥാനത്ത് എത്ര പ്രതീകങ്ങൾ വേണമെങ്കിലും എടുക്കാം എന്ന് പറയുന്നു
“%” ചിഹ്നമുള്ള ഉദാഹരണങ്ങൾ നോക്കാം (പ്രായോഗികമായി, ഇത് പലപ്പോഴും ഉപയോഗിക്കുന്നു):

സെലക്ട് ഐഡി, "പെറ്റ്%" പോലെയുള്ള ജീവനക്കാരുടെ പേര് -- "പെറ്റ്" സെലക്ട് ഐഡി എന്ന അക്ഷരങ്ങളിൽ തുടങ്ങുന്ന പേരിൻ്റെ പേര്, "%ov" പോലെയുള്ള ജീവനക്കാരുടെ അവസാന നാമം -- "ov" SELECT ഐഡിയിൽ അവസാനിക്കുന്ന അവസാന നാമം, "%re%" പോലെയുള്ള അവസാന നാമം എവിടെയായിരുന്നോ ജീവനക്കാരിൽ നിന്നുള്ള അവസാന നാമം -- ആരുടെ അവസാന നാമത്തിൽ "re" എന്ന കോമ്പിനേഷൻ അടങ്ങിയിരിക്കുന്നു

“_” ചിഹ്നമുള്ള ഉദാഹരണങ്ങൾ നോക്കാം:

"_etrov" പോലെയുള്ള അവസാന നാമം ജീവനക്കാരിൽ നിന്ന് തിരഞ്ഞെടുക്കുക ഐഡി, അവസാന നാമം -- ഏതെങ്കിലും ആദ്യ പ്രതീകവും തുടർന്നുള്ള അക്ഷരങ്ങളും "etrov" SELECT ID, അവസാന നാമം "____ov" പോലെയുള്ള അവസാന നാമം -- ഏതെങ്കിലും നാല് പ്രതീകങ്ങൾ ഉൾക്കൊള്ളുന്ന അവസാന നാമം തുടർന്നുള്ള അക്ഷരങ്ങൾ "ov"

ESCAPE ഉപയോഗിച്ച്, "_", "%" എന്നീ പ്രത്യേക പ്രതീകങ്ങളുടെ ചെക്കിംഗ് ഇഫക്റ്റ് റദ്ദാക്കുന്ന ഒരു രക്ഷപ്പെടൽ പ്രതീകം നിങ്ങൾക്ക് വ്യക്തമാക്കാൻ കഴിയും. ഒരു സ്ട്രിംഗിൽ ഒരു ശതമാനം ചിഹ്നമോ അണ്ടർ സ്‌കോറോ നേരിട്ട് പരിശോധിക്കണമെങ്കിൽ ഈ ക്ലോസ് ഉപയോഗിക്കുന്നു.

എസ്‌കേപ്പ് പ്രദർശിപ്പിക്കുന്നതിന്, നമുക്ക് മാലിന്യം ഒരു എൻട്രിയിൽ ഇടാം:

എംപ്ലോയീസ് സെറ്റ് ഫസ്റ്റ് നെയിം അപ്ഡേറ്റ് ചെയ്യുക = "ഇത് %" അടങ്ങുന്ന ട്രാഷ് ആണ് എവിടെ ഐഡി=1005

കൂടാതെ, ഇനിപ്പറയുന്ന ചോദ്യങ്ങൾ എന്താണ് തിരികെ നൽകുന്നത് എന്ന് നോക്കാം:

"%!%%" എസ്കേപ്പ് "!" പോലെയുള്ള ആദ്യനാമം എവിടെയുള്ള ജീവനക്കാരിൽ നിന്ന് * തിരഞ്ഞെടുക്കുക -- വരിയിൽ "%" ചിഹ്നം അടങ്ങിയിരിക്കുന്നു * ജീവനക്കാരിൽ നിന്ന് തിരഞ്ഞെടുക്കുക -- വരിയിൽ "_" ചിഹ്നം അടങ്ങിയിരിക്കുന്നു

സമ്പൂർണ്ണ പൊരുത്തത്തിനായി നിങ്ങൾക്ക് ഒരു സ്ട്രിംഗ് പരിശോധിക്കണമെങ്കിൽ, ലൈക്ക് എന്നതിന് പകരം "=" ചിഹ്നം ഉപയോഗിക്കുന്നതാണ് നല്ലത്:

ആദ്യനാമം = "പീറ്റർ" എവിടെയായിരുന്നാലും ജീവനക്കാരിൽ നിന്ന് * തിരഞ്ഞെടുക്കുക

ഒരു കുറിപ്പിൽ.
MS SQL-ൽ, ലൈക്ക് ഓപ്പറേറ്റർ ടെംപ്ലേറ്റിൽ, നിങ്ങൾക്ക് സാധാരണ എക്സ്പ്രഷനുകൾ ഉപയോഗിച്ച് ഒരു തിരയൽ വ്യക്തമാക്കാനും കഴിയും; ഈ ഓപ്പറേറ്ററുടെ സ്റ്റാൻഡേർഡ് കഴിവുകൾ നിങ്ങൾക്ക് പര്യാപ്തമല്ലെങ്കിൽ ഇൻ്റർനെറ്റിൽ അതിനെക്കുറിച്ച് വായിക്കുക.

സാധാരണ എക്സ്പ്രഷനുകൾ ഉപയോഗിച്ച് തിരയാൻ ORACLE REGEXP_LIKE ഫംഗ്ഷൻ ഉപയോഗിക്കുന്നു.

സ്ട്രിംഗുകളെ കുറിച്ച് കുറച്ച്

യൂണികോഡ് പ്രതീകങ്ങളുടെ സാന്നിധ്യത്തിനായി ഒരു സ്ട്രിംഗ് പരിശോധിക്കുന്ന സാഹചര്യത്തിൽ, ഉദ്ധരണികൾക്ക് മുമ്പായി നിങ്ങൾ N എന്ന പ്രതീകം സ്ഥാപിക്കേണ്ടതുണ്ട്, അതായത്. എൻ"...". എന്നാൽ ഞങ്ങളുടെ പട്ടികയിലെ എല്ലാ പ്രതീക ഫീൽഡുകളും യൂണികോഡ് ഫോർമാറ്റിൽ (nvarchar ടൈപ്പ്) ആയതിനാൽ, ഈ ഫീൽഡുകൾക്കായി നിങ്ങൾക്ക് എല്ലായ്പ്പോഴും ഈ ഫോർമാറ്റ് ഉപയോഗിക്കാം. ഉദാഹരണം:

ഐഡി തിരഞ്ഞെടുക്കുക, ജീവനക്കാരിൽ നിന്ന് പേര് N"പെറ്റ്%" പോലെയുള്ള പേര് എവിടെയാണ്, ഐഡി തിരഞ്ഞെടുക്കുക, ജീവനക്കാരിൽ നിന്നുള്ള അവസാന നാമം എവിടെയാണ് LastName=N"Petrov"

ശരിയായി ചെയ്യുമ്പോൾ, varchar (ASCII) തരം ഫീൽഡുമായി താരതമ്യപ്പെടുത്തുമ്പോൾ, നിങ്ങൾ "..." ഉപയോഗിച്ച് ടെസ്റ്റുകൾ ഉപയോഗിക്കാൻ ശ്രമിക്കണം, കൂടാതെ nvarchar (യൂണികോഡ്) എന്ന് ടൈപ്പുചെയ്യുന്നതിന് ഒരു ഫീൽഡ് താരതമ്യം ചെയ്യുമ്പോൾ, നിങ്ങൾ N ഉപയോഗിച്ച് ടെസ്റ്റുകൾ ഉപയോഗിക്കാൻ ശ്രമിക്കണം. ...". അന്വേഷണ നിർവ്വഹണ വേളയിൽ വ്യക്തമായ തരത്തിലുള്ള പരിവർത്തനങ്ങൾ ഒഴിവാക്കുന്നതിനാണ് ഇത് ചെയ്യുന്നത്. ഒരു ഫീൽഡിൽ (INSERT) മൂല്യങ്ങൾ ചേർക്കുമ്പോൾ അല്ലെങ്കിൽ അവ അപ്ഡേറ്റ് ചെയ്യുമ്പോൾ (അപ്ഡേറ്റ് ചെയ്യുക) ഞങ്ങൾ ഇതേ നിയമം ഉപയോഗിക്കുന്നു.

സ്ട്രിംഗുകൾ താരതമ്യം ചെയ്യുമ്പോൾ, ഡാറ്റാബേസ് ക്രമീകരണങ്ങൾ (കോലേഷൻ) അനുസരിച്ച്, സ്ട്രിംഗ് താരതമ്യം കേസ്-ഇൻസെൻസിറ്റീവ് ആയിരിക്കാം ("പെട്രോവ്" = "പെട്രോവ്") അല്ലെങ്കിൽ കേസ് സെൻസിറ്റീവ് ("പെട്രോവ്" ആയിരിക്കുമ്പോൾ" എന്ന കാര്യം പരിഗണിക്കേണ്ടതാണ്.<>"പെട്രോവ്").
ഒരു കേസ്-സെൻസിറ്റീവ് ക്രമീകരണത്തിൻ്റെ കാര്യത്തിൽ, നിങ്ങൾക്ക് ഒരു കേസ്-സെൻസിറ്റീവ് തിരയൽ നടത്തണമെങ്കിൽ, ഉദാഹരണത്തിന്, നിങ്ങൾക്ക് വലത്, ഇടത് എക്സ്പ്രഷനുകൾ ഒരു കേസിലേക്ക് മുൻകൂട്ടി പരിവർത്തനം ചെയ്യാം - മുകളിലോ താഴെയോ:

ഐഡി തിരഞ്ഞെടുക്കുക, മുകളിലുള്ളിടത്ത് ജോലിക്കാരിൽ നിന്ന് പേര് (പേര്) മുകളിലുള്ളത് (N"പെറ്റ്%") -- അല്ലെങ്കിൽ താഴ്ന്നത് (N"പെറ്റ്%") പോലെയുള്ളത് (N"പെറ്റ്%") തിരഞ്ഞെടുക്കുക ഐഡി, അവസാനത്തെ പേര് ജീവനക്കാരിൽ നിന്ന് മുകളിൽ എവിടെയാണ് (അറ്റത്തെ ഭാഗം) N"Petrov") -- അല്ലെങ്കിൽ LOWER(LastName)=LOWER(N"Petrov")

തീയതികളെക്കുറിച്ച് കുറച്ച്

ഒരു തീയതി പരിശോധിക്കുമ്പോൾ, നിങ്ങൾക്ക് സ്ട്രിംഗുകൾ പോലെ ഒറ്റ ഉദ്ധരണികൾ "..." ഉപയോഗിക്കാം.

MS SQL-ലെ പ്രാദേശിക ക്രമീകരണങ്ങൾ പരിഗണിക്കാതെ തന്നെ, നിങ്ങൾക്ക് ഇനിപ്പറയുന്ന തീയതി വാക്യഘടന "YYYYMMDD" (സ്‌പെയ്‌സുകളില്ലാതെ വർഷം, മാസം, ദിവസം ഒരുമിച്ച്) ഉപയോഗിക്കാം. MS SQL എപ്പോഴും ഈ തീയതി ഫോർമാറ്റ് മനസ്സിലാക്കും:

"19800101" നും "19891231" നും ഇടയിലുള്ള ജന്മദിനം എവിടെയായിരുന്നാലും ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ജന്മദിനം എന്നിവ തിരഞ്ഞെടുക്കുക -- 80കളിലെ ജീവനക്കാർ ജന്മദിനത്തിനനുസരിച്ച് ഓർഡർ ചെയ്യുക

ചില സാഹചര്യങ്ങളിൽ, DATEFROMPARTS ഫംഗ്‌ഷൻ ഉപയോഗിച്ച് തീയതി സജ്ജീകരിക്കുന്നത് കൂടുതൽ സൗകര്യപ്രദമാണ്:

ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ജന്മദിനം എന്നിവ തിരഞ്ഞെടുക്കുക

DATETIMEFROMPARTS എന്നതിന് സമാനമായ ഒരു ഫംഗ്‌ഷനുമുണ്ട്, അത് തീയതിയും സമയവും സജ്ജീകരിക്കാൻ ഉപയോഗിക്കുന്നു (തീയതി സമയ തരത്തിന്).

നിങ്ങൾക്ക് ഒരു സ്ട്രിംഗ് ഒരു തീയതിയിലേക്കോ തീയതി സമയ മൂല്യത്തിലേക്കോ പരിവർത്തനം ചെയ്യണമെങ്കിൽ, നിങ്ങൾക്ക് CONVERT ഫംഗ്‌ഷൻ ഉപയോഗിക്കാം:

പരിവർത്തനം തിരഞ്ഞെടുക്കുക(തീയതി,"12.03.2015",104), പരിവർത്തനം(തീയതിസമയം,"2014-11-30 17:20:15",120)

104, 120 എന്നീ മൂല്യങ്ങൾ സ്ട്രിംഗിൽ ഏത് തീയതി ഫോർമാറ്റാണ് ഉപയോഗിക്കുന്നതെന്ന് സൂചിപ്പിക്കുന്നു. "MS SQL CONVERT" എന്നതിനായി തിരയുന്നതിലൂടെ നിങ്ങൾക്ക് MSDN ലൈബ്രറിയിൽ എല്ലാ സാധുവായ ഫോർമാറ്റുകളുടെയും വിവരണം കണ്ടെത്താനാകും.

MS SQL-ൽ തീയതികൾക്കൊപ്പം പ്രവർത്തിക്കുന്നതിന് ധാരാളം ഫംഗ്ഷനുകൾ ഉണ്ട്, "തീയതികൾക്കൊപ്പം പ്രവർത്തിക്കുന്നതിനുള്ള ms sql ഫംഗ്ഷനുകൾ" നോക്കുക.

കുറിപ്പ്.എസ്‌ക്യുഎൽ ഭാഷയുടെ എല്ലാ ഭാഷാഭേദങ്ങൾക്കും തീയതികൾക്കൊപ്പം പ്രവർത്തിക്കുന്നതിന് അവരുടേതായ ഫംഗ്‌ഷനുകൾ ഉണ്ട്, അവയ്‌ക്കൊപ്പം പ്രവർത്തിക്കുന്നതിന് അവരുടേതായ സമീപനം പ്രയോഗിക്കുന്നു.

സംഖ്യകളെക്കുറിച്ചും അവയുടെ പരിവർത്തനങ്ങളെക്കുറിച്ചും അൽപ്പം

ഈ വിഭാഗത്തിലെ വിവരങ്ങൾ ഐടി സ്പെഷ്യലിസ്റ്റുകൾക്ക് കൂടുതൽ ഉപയോഗപ്രദമാകും. നിങ്ങൾ ഒരാളല്ലെങ്കിൽ, ഡാറ്റാബേസിൽ നിന്ന് നിങ്ങൾക്ക് ആവശ്യമായ വിവരങ്ങൾ നേടുന്നതിന് ചോദ്യങ്ങൾ എങ്ങനെ എഴുതാമെന്ന് മനസിലാക്കുക എന്നതാണ് നിങ്ങളുടെ ലക്ഷ്യം എങ്കിൽ, നിങ്ങൾക്ക് അത്തരം സൂക്ഷ്മതകൾ ആവശ്യമില്ലായിരിക്കാം, എന്നാൽ ഏത് സാഹചര്യത്തിലും, നിങ്ങൾക്ക് പെട്ടെന്ന് വാചകത്തിലൂടെ പോയി കുറിപ്പുകൾ എടുക്കാം. , കാരണം. നിങ്ങൾ എസ്‌ക്യുഎൽ പഠിക്കാൻ തുടങ്ങിയിട്ടുണ്ടെങ്കിൽ, നിങ്ങൾ ഇതിനകം ഐടിയിൽ ചേരുകയാണ്.

CAST കൺവേർഷൻ ഫംഗ്‌ഷനിൽ നിന്ന് വ്യത്യസ്തമായി, പരിവർത്തന ശൈലിക്ക് (ഫോർമാറ്റ്) ഉത്തരവാദിയായ CONVERT ഫംഗ്‌ഷനിൽ നിങ്ങൾക്ക് ഒരു മൂന്നാം പാരാമീറ്റർ വ്യക്തമാക്കാൻ കഴിയും. വ്യത്യസ്ത ഡാറ്റാ തരങ്ങൾക്ക് അവരുടേതായ ശൈലികൾ ഉണ്ടായിരിക്കാം, അത് ലഭിച്ച ഫലത്തെ ബാധിച്ചേക്കാം. CONVERT ഫംഗ്‌ഷൻ ഉപയോഗിച്ച് ഒരു സ്‌ട്രിംഗിൻ്റെ തീയതി, തീയതി സമയ തരങ്ങളിലേക്ക് പരിവർത്തനം ചെയ്യുന്നത് പരിഗണിക്കുമ്പോൾ ഞങ്ങൾ സ്റ്റൈലുകളുടെ ഉപയോഗത്തെക്കുറിച്ച് ഇതിനകം സ്‌പർശിച്ചിട്ടുണ്ട്.

നിങ്ങൾക്ക് MSDN-ൽ CAST, CONVERT ഫംഗ്‌ഷനുകൾ, ശൈലികൾ എന്നിവയെക്കുറിച്ച് കൂടുതൽ വായിക്കാം - “CAST, ConVERT ഫംഗ്‌ഷനുകൾ (Transact-SQL)”: msdn.microsoft.com/ru-ru/library/ms187928.aspx

ഉദാഹരണങ്ങൾ ലളിതമാക്കാൻ, ട്രാൻസാക്റ്റ്-എസ്‌ക്യുഎൽ ഭാഷാ പ്രസ്‌താവനകൾ DECLARE, SET എന്നിവ ഇവിടെ ഉപയോഗിക്കും.

തീർച്ചയായും, ഒരു പൂർണ്ണസംഖ്യയെ ഒരു യഥാർത്ഥ സംഖ്യയിലേക്ക് പരിവർത്തനം ചെയ്യുന്ന കാര്യത്തിൽ (ഈ പാഠത്തിൻ്റെ തുടക്കത്തിൽ ഞാൻ നൽകിയത്, പൂർണ്ണസംഖ്യയും യഥാർത്ഥ വിഭജനവും തമ്മിലുള്ള വ്യത്യാസം പ്രകടിപ്പിക്കുന്നതിനായി), പരിവർത്തനത്തിൻ്റെ സൂക്ഷ്മതകളെക്കുറിച്ചുള്ള അറിവ് അത്ര നിർണായകമല്ല, കാരണം അവിടെ ഞങ്ങൾ യഥാർത്ഥ പരിവർത്തനത്തിലേക്ക് ഒരു പൂർണ്ണസംഖ്യ നടത്തി (ഇതിൻ്റെ ശ്രേണി പൂർണ്ണസംഖ്യകളുടെ ശ്രേണിയേക്കാൾ വളരെ വലുതാണ്):

@min_int int SET പ്രഖ്യാപിക്കുക @min_int=-2147483648 പ്രഖ്യാപിക്കുക @max_int int SET @max_int=2147483647 SELECT -- (-2147483648) @min_int,CAST(@min_int4, float-4mint, 7 float8), 47 @max_int ,CAST(@max_int AS float),CONVERT(float,@max_int), -- സംഖ്യാ(16,6) @min_int/1., -- (-2147483648.000000) @max_int/1. -- 2147483647.000000

(1.) കൊണ്ട് ഹരിച്ചാൽ ലഭിച്ച പരോക്ഷമായ പരിവർത്തനത്തിൻ്റെ രീതി വ്യക്തമാക്കുന്നത് ഒരുപക്ഷേ വിലപ്പെട്ടതല്ല, കാരണം ലഭിച്ച ഫലത്തിൻ്റെ തരത്തിൽ കൂടുതൽ നിയന്ത്രണത്തിനായി വ്യക്തമായ പരിവർത്തനങ്ങൾ നടത്താൻ ശ്രമിക്കുന്നത് ഉചിതമാണ്. എന്നിരുന്നാലും, ദശാംശ ബിന്ദുവിന് ശേഷം ഒരു നിശ്ചിത എണ്ണം അക്കങ്ങളോടെ, ടൈപ്പ് ന്യൂമെറിക്കിൻ്റെ ഫലം ലഭിക്കണമെങ്കിൽ, ഒരു പൂർണ്ണസംഖ്യ മൂല്യത്തെ (1., 1.0, 1.00, മുതലായവ) കൊണ്ട് ഗുണിക്കാൻ MS SQL-ൽ ഒരു ട്രിക്ക് ഉപയോഗിക്കാം. :

@int int SET പ്രഖ്യാപിക്കുക @int=123 തിരഞ്ഞെടുക്കുക @int*1., -- സംഖ്യാ(12, 0) - 0 ദശാംശസ്ഥാനങ്ങൾ @int*1.0, -- സംഖ്യാ(13, 1) - 1 ദശാംശസ്ഥാനം @int*1.00, -- സംഖ്യാ(14, 2) - 2 പ്രതീകങ്ങൾ -- ചിലപ്പോൾ വ്യക്തമായ പരിവർത്തനം നടത്തുന്നതാണ് നല്ലത് എങ്കിലും CAST(@int AS സംഖ്യാ(20, 0)), -- 123 CAST(@int AS സംഖ്യ(20, 1) ), -- 123.0 CAST(@int AS സംഖ്യാ(20, 2)) -- 123.00

ചില സന്ദർഭങ്ങളിൽ, പരിവർത്തനത്തിൻ്റെ വിശദാംശങ്ങൾ വളരെ പ്രധാനമാണ്, കാരണം... അവ ലഭിച്ച ഫലത്തിൻ്റെ കൃത്യതയെ ബാധിക്കുന്നു, ഉദാഹരണത്തിന്, ഒരു സംഖ്യാ മൂല്യത്തിൽ നിന്ന് ഒരു സ്ട്രിംഗിലേക്ക് (varchar) പരിവർത്തനം നടത്തുമ്പോൾ. പണവും ഫ്ലോട്ട് മൂല്യങ്ങളും varchar ആയി പരിവർത്തനം ചെയ്യുന്നതിനുള്ള ഉദാഹരണങ്ങൾ നോക്കാം:

പണം varchar-ലേക്ക് പരിവർത്തനം ചെയ്യുമ്പോഴുള്ള പെരുമാറ്റം DECLARE @money money SET @money = 1025.123456789 -- 1025.1235 ലേക്ക് ഒരു പരോക്ഷമായ പരിവർത്തനം ഉണ്ടാകും, കാരണം SELECT @money, -- 1025.1235 -- ഡിഫോൾട്ടായി, CAST, CONVERT എന്നിവ ഒരേപോലെയാണ് (അതായത്, ഏകദേശം പറഞ്ഞാൽ, സ്റ്റൈൽ 0 പ്രയോഗിക്കുന്നു) CAST(@money as varchar(20)) എന്ന ദശാംശ പോയിൻ്റിന് ശേഷം പണത്തിൻ്റെ തരം 4 അക്കങ്ങൾ മാത്രമേ സംഭരിക്കുന്നുള്ളൂ. , -- 1025.12 CONVERT(varchar(20), @money), -- 1025.12 CONVERT(varchar(20), @money, 0), -- 1025.12 (സ്റ്റൈൽ 0 - ആയിരത്തിലൊന്ന് സെപ്പറേറ്ററും 2 ദശാംശ സ്ഥാനങ്ങളും (സ്ഥിര ഫോർമാറ്റ്)) പരിവർത്തനം ചെയ്യുക( varchar(20), @money, 1), -- 1.025.12 (ശൈലി 1 - ആയിരത്തിലൊന്ന് സെപ്പറേറ്ററും 2 ദശാംശ സ്ഥാനങ്ങളും ഉപയോഗിക്കുന്നു) CONVERT(varchar(20), @money, 2) -- 1025.1235 (style 2 - സെപ്പറേറ്റർ ഇല്ല, ദശാംശ പോയിൻ്റിന് ശേഷം 4 അക്കങ്ങൾ)

ഫ്ലോട്ട് വാർച്ചറിലേക്ക് മാറ്റുമ്പോൾ പെരുമാറ്റം DECLARE @float1 float SET @float1 = 1025.123456789 പ്രഖ്യാപിക്കുക @float2 float SET @float2 = 1231025.123456789 SELECT @float1, -- 10256-SELECT @float1, -- 10255. 12345679 -- ഡിഫോൾട്ടായി, CAST ഉം CONVERT ഉം ഒരേപോലെ പ്രവർത്തിക്കുന്നു (അതായത്, ഏകദേശം പറഞ്ഞാൽ, സ്റ്റൈൽ 0 ഉപയോഗിക്കുന്നു) -- ശൈലി 0 - 6 അക്കങ്ങളിൽ കൂടരുത്. എക്‌സ്‌പോണൻഷ്യൽ നൊട്ടേഷൻ ഉപയോഗിക്കുന്നത് അനിവാര്യത കൊണ്ടാണ് -- varchar CAST(@float1 varchar(20) ആയി), -- 1025.12 CONVERT(varchar(20), @float1), -- 1025.12 CONVERT(varchar(varchar( 20 ), @float1, 0), -- 1025.12 CAST(@float2 varchar(20)), -- 1.23103e+006 CONVERT(varchar(20), @float2), -- 1.23103e+006 CONVERT(varchar( 20 ), @float2, 0), -- 1.23103e+006 -- style 1 - എപ്പോഴും 8 അക്കങ്ങൾ. അക്കങ്ങൾക്കുള്ള ശാസ്ത്രീയ നൊട്ടേഷൻ എപ്പോഴും ഉപയോഗിക്കുന്നു. -- ഫ്ലോട്ടിനുള്ള ഈ ശൈലിയും വളരെ കൃത്യമല്ല CONVERT(varchar(20), @float1, 1), -- 1.0251235e+003 CONVERT(varchar(20), @float2, 1), -- 1.2310251e+006 - - ശൈലി 2 - എപ്പോഴും 16 ബിറ്റുകൾ. അക്കങ്ങൾക്കുള്ള ശാസ്ത്രീയ നൊട്ടേഷൻ എപ്പോഴും ഉപയോഗിക്കുന്നു. -- ഇവിടെ കൃത്യത മികച്ചതാണ് പരിവർത്തനം(varchar(30), @float1, 2), -- 1.025123456789000e+003 - ശരി പരിവർത്തനം(varchar(30), @float2, 2) -- 1.231025123405689e+OK+5676

ഉദാഹരണത്തിൽ നിന്ന് കാണാൻ കഴിയുന്നതുപോലെ, ഫ്ലോട്ടിംഗ് തരങ്ങൾ ഫ്ലോട്ട് ചെയ്യുന്നു, ചില സന്ദർഭങ്ങളിൽ യഥാർത്ഥത്തിൽ ഒരു വലിയ പിശക് സൃഷ്ടിക്കാൻ കഴിയും, പ്രത്യേകിച്ചും ഒരു സ്ട്രിംഗിലേക്കും പിന്നിലേക്കും പരിവർത്തനം ചെയ്യുമ്പോൾ (ഇത് വിവിധ തരം സംയോജനങ്ങളിൽ സംഭവിക്കാം, ഉദാഹരണത്തിന്, ഡാറ്റ കൈമാറുമ്പോൾ. ടെക്സ്റ്റ് ഫയലുകൾ ഒരു സിസ്റ്റത്തിൽ നിന്ന് മറ്റൊന്നിലേക്ക്) .

നിങ്ങൾക്ക് ഒരു നിശ്ചിത ചിഹ്നം വരെയുള്ള കൃത്യത വ്യക്തമായി നിയന്ത്രിക്കണമെങ്കിൽ, 4-ൽ കൂടുതൽ, ഡാറ്റ സംഭരിക്കുന്നതിന് ദശാംശം/സംഖ്യാ തരം ഉപയോഗിക്കുന്നത് ചിലപ്പോൾ നല്ലതാണ്. 4 പ്രതീകങ്ങൾ മതിയെങ്കിൽ, നിങ്ങൾക്ക് പണത്തിൻ്റെ തരം ഉപയോഗിക്കാം - ഇത് ഏകദേശം സംഖ്യയുമായി (20,4) യോജിക്കുന്നു.

ദശാംശവും സംഖ്യയും പ്രഖ്യാപിക്കുക @money money സെറ്റ് @മണി = 1025.123456789 -- 1025.1235 പ്രഖ്യാപിക്കുക @float1 float SET @float1 = 1025.123456789 DECLARE @float2 float1 = 2ECLARE @float2 float1 =265 DECLARE @float320595 മെറിക് ന്യൂമെറിക്(28,9) സെറ്റ് @ന്യൂമെറിക് = 1025.123456789 തിരഞ്ഞെടുക്കുക കാസ്റ്റ്( @സംഖ്യകൾ varchar(20)), -- 1025.12345679 CONVERT(varchar(20), @numeric), -- 1025.12345679 CAST(@മണി അക്കമായി(28,9)), -- 1025.1203500000000000er (float1 float ,9)), -- 1025.123456789 CAST(@float2 അക്കമായി (28,9)) -- 1231025.123456789

കുറിപ്പ്.
MS SQL 2008 പതിപ്പിൽ നിന്ന്, നിർമ്മാണത്തിന് പകരം നിങ്ങൾക്ക് ഉപയോഗിക്കാം: ലേബലുകൾ ചേർക്കുക

ഡാറ്റാബേസിൽ നിന്ന് ഡാറ്റ വീണ്ടെടുക്കാൻ SQL ഭാഷ ഉപയോഗിക്കുന്നു. SQL എന്നത് ഇംഗ്ലീഷിനോട് സാമ്യമുള്ള ഒരു പ്രോഗ്രാമിംഗ് ഭാഷയാണ്, പക്ഷേ ഇത് ഡാറ്റാബേസ് മാനേജ്മെൻ്റ് പ്രോഗ്രാമുകൾക്കായി ഉദ്ദേശിച്ചുള്ളതാണ്. ആക്‌സസിലെ എല്ലാ ചോദ്യങ്ങളിലും SQL ഉപയോഗിക്കുന്നു.

എസ്‌ക്യുഎൽ എങ്ങനെ പ്രവർത്തിക്കുന്നുവെന്ന് മനസിലാക്കുന്നത് കൂടുതൽ കൃത്യമായ ചോദ്യങ്ങൾ സൃഷ്‌ടിക്കാനും തെറ്റായ ഫലങ്ങൾ നൽകുന്ന ചോദ്യങ്ങൾ ശരിയാക്കുന്നത് എളുപ്പമാക്കാനും നിങ്ങളെ സഹായിക്കുന്നു.

ആക്‌സസിനായുള്ള SQL ഭാഷയെക്കുറിച്ചുള്ള ലേഖനങ്ങളുടെ ഒരു പരമ്പരയിൽ നിന്നുള്ള ഒരു ലേഖനമാണിത്. ഡാറ്റ വീണ്ടെടുക്കുന്നതിന് SQL ഉപയോഗിക്കുന്നതിൻ്റെ അടിസ്ഥാനകാര്യങ്ങൾ ഇത് വിവരിക്കുകയും SQL വാക്യഘടനയുടെ ഉദാഹരണങ്ങൾ നൽകുകയും ചെയ്യുന്നു.

ഈ ലേഖനത്തിൽ

എന്താണ് SQL?

SQL എന്നത് ഒരു കൂട്ടം വസ്തുതകളും അവ തമ്മിലുള്ള ബന്ധവും ഉപയോഗിച്ച് പ്രവർത്തിക്കാൻ രൂപകൽപ്പന ചെയ്ത ഒരു പ്രോഗ്രാമിംഗ് ഭാഷയാണ്. Microsoft Office Access പോലുള്ള റിലേഷണൽ ഡാറ്റാബേസ് മാനേജ്മെൻ്റ് പ്രോഗ്രാമുകൾ ഡാറ്റ കൈകാര്യം ചെയ്യാൻ SQL ഉപയോഗിക്കുന്നു. പല പ്രോഗ്രാമിംഗ് ഭാഷകളിൽ നിന്നും വ്യത്യസ്തമായി, തുടക്കക്കാർക്ക് പോലും SQL വായിക്കാവുന്നതും മനസ്സിലാക്കാവുന്നതുമാണ്. പല പ്രോഗ്രാമിംഗ് ഭാഷകളെയും പോലെ, ISO, ANSI പോലുള്ള സ്റ്റാൻഡേർഡ് കമ്മിറ്റികൾ അംഗീകരിച്ച ഒരു അന്താരാഷ്ട്ര നിലവാരമാണ് SQL.

ചോദ്യങ്ങൾക്ക് ഉത്തരം നൽകാൻ സഹായിക്കുന്നതിന് ഡാറ്റാ സെറ്റുകൾ SQL-ൽ വിവരിച്ചിരിക്കുന്നു. SQL ഉപയോഗിക്കുമ്പോൾ, നിങ്ങൾ ശരിയായ വാക്യഘടന ഉപയോഗിക്കണം. ഒരു ഭാഷയുടെ ഘടകങ്ങൾ ശരിയായി സംയോജിപ്പിക്കാൻ അനുവദിക്കുന്ന നിയമങ്ങളുടെ ഒരു കൂട്ടമാണ് വാക്യഘടന. SQL വാക്യഘടന ഇംഗ്ലീഷ് വാക്യഘടനയെ അടിസ്ഥാനമാക്കിയുള്ളതാണ് കൂടാതെ വിഷ്വൽ ബേസിക് ഫോർ ആപ്ലിക്കേഷനുകൾ (VBA) വാക്യഘടനയുമായി നിരവധി ഘടകങ്ങൾ പങ്കിടുന്നു.

ഉദാഹരണത്തിന്, ലളിതം SQL പ്രസ്താവന, മേരി എന്ന പേരിലുള്ള കോൺടാക്റ്റുകളുടെ അവസാന പേരുകളുടെ ഒരു ലിസ്റ്റ് വീണ്ടെടുക്കുന്നത് ഇതുപോലെയായിരിക്കാം:

അവസാന_പേര് തിരഞ്ഞെടുക്കുക
കോൺടാക്റ്റുകളിൽ നിന്ന്
എവിടെ ഫസ്റ്റ്_നെയിം = "മേരി";

കുറിപ്പ്: SQL ഭാഷ ഡാറ്റയിൽ പ്രവർത്തനങ്ങൾ നടത്തുന്നതിന് മാത്രമല്ല, പട്ടികകൾ പോലുള്ള ഡാറ്റാബേസ് ഒബ്ജക്റ്റുകളുടെ ഘടന സൃഷ്ടിക്കുന്നതിനും മാറ്റുന്നതിനും ഉപയോഗിക്കുന്നു. ഡാറ്റാബേസ് ഒബ്‌ജക്റ്റുകൾ സൃഷ്ടിക്കുന്നതിനും പരിഷ്‌ക്കരിക്കുന്നതിനും ഉപയോഗിക്കുന്ന SQL-ൻ്റെ ഭാഗത്തെ DDL എന്ന് വിളിക്കുന്നു. ഈ ലേഖനത്തിൽ DDL ഉൾപ്പെടുത്തിയിട്ടില്ല. കൂടുതൽ വിവരങ്ങൾക്ക്, ഒരു ഡാറ്റ ഡെഫനിഷൻ ചോദ്യം ഉപയോഗിച്ച് പട്ടികകളോ സൂചികകളോ സൃഷ്ടിക്കുക അല്ലെങ്കിൽ പരിഷ്ക്കരിക്കുക എന്നത് കാണുക.

പ്രസ്താവനകൾ തിരഞ്ഞെടുക്കുക

SQL-ലെ ഒരു കൂട്ടം ഡാറ്റയെ വിവരിക്കാൻ SELECT സ്റ്റേറ്റ്മെൻ്റ് ഉപയോഗിക്കുന്നു. ഇനിപ്പറയുന്നവ ഉൾപ്പെടെ, ഡാറ്റാബേസിൽ നിന്ന് വീണ്ടെടുക്കേണ്ട ഡാറ്റയുടെ പൂർണ്ണമായ വിവരണം ഇതിൽ അടങ്ങിയിരിക്കുന്നു:

    ഡാറ്റ അടങ്ങുന്ന പട്ടികകൾ;

    വ്യത്യസ്ത ഉറവിടങ്ങളിൽ നിന്നുള്ള ഡാറ്റ തമ്മിലുള്ള കണക്ഷനുകൾ;

    തിരഞ്ഞെടുത്ത ഡാറ്റയെ അടിസ്ഥാനമാക്കിയുള്ള ഫീൽഡുകൾ അല്ലെങ്കിൽ കണക്കുകൂട്ടലുകൾ;

    അന്വേഷണ ഫലത്തിൽ ഉൾപ്പെടുത്തിയിരിക്കുന്ന ഡാറ്റ പാലിക്കേണ്ട തിരഞ്ഞെടുക്കൽ വ്യവസ്ഥകൾ;

    തരംതിരിക്കലിൻ്റെ ആവശ്യകതയും രീതിയും.

SQL പ്രസ്താവനകൾ

ക്ലോസുകൾ എന്ന് വിളിക്കപ്പെടുന്ന നിരവധി ഭാഗങ്ങൾ ചേർന്നതാണ് ഒരു SQL പ്രസ്താവന. ഒരു SQL പ്രസ്താവനയിലെ ഓരോ ക്ലോസിനും ഒരു ഉദ്ദേശ്യമുണ്ട്. ചില ഓഫറുകൾ ആവശ്യമാണ്. ഏറ്റവും സാധാരണയായി ഉപയോഗിക്കുന്ന SQL പ്രസ്താവനകൾ ചുവടെയുള്ള പട്ടിക കാണിക്കുന്നു.

SQL പ്രസ്താവന

വിവരണം

നിർബന്ധമാണ്

ആവശ്യമായ ഡാറ്റ അടങ്ങിയിരിക്കുന്ന ഫീൽഡുകൾ നിർവചിക്കുന്നു.

SELECT ക്ലോസിൽ വ്യക്തമാക്കിയ ഫീൽഡുകൾ അടങ്ങിയിരിക്കുന്ന പട്ടികകൾ നിർവ്വചിക്കുന്നു.

ഫലങ്ങളിൽ ഉൾപ്പെടുത്തിയിട്ടുള്ള എല്ലാ റെക്കോർഡുകളും പാലിക്കേണ്ട ഫീൽഡ് തിരഞ്ഞെടുക്കൽ വ്യവസ്ഥകൾ നിർവചിക്കുന്നു.

ഫലങ്ങളുടെ അടുക്കൽ ക്രമം നിർണ്ണയിക്കുന്നു.

അഗ്രഗേഷൻ ഫംഗ്‌ഷനുകൾ അടങ്ങുന്ന ഒരു SQL പ്രസ്താവനയിൽ, SELECT ക്ലോസിൽ ഒരു സംഗ്രഹ മൂല്യം കണക്കാക്കാത്ത ഫീൽഡുകൾ വ്യക്തമാക്കുന്നു.

അത്തരം ഫീൽഡുകൾ ഉണ്ടെങ്കിൽ മാത്രം

അഗ്രഗേഷൻ ഫംഗ്‌ഷനുകൾ അടങ്ങുന്ന ഒരു SQL സ്റ്റേറ്റ്‌മെൻ്റ്, SELECT ക്ലോസിൽ ഒരു സംഗ്രഹ മൂല്യം കണക്കാക്കുന്ന ഫീൽഡുകൾക്ക് ബാധകമായ വ്യവസ്ഥകൾ നിർവചിക്കുന്നു.

SQL നിബന്ധനകൾ

ഓരോ SQL വാക്യവും സംഭാഷണത്തിൻ്റെ ഭാഗങ്ങളുമായി താരതമ്യപ്പെടുത്താവുന്ന പദങ്ങൾ ഉൾക്കൊള്ളുന്നു. താഴെയുള്ള പട്ടിക SQL നിബന്ധനകളുടെ തരങ്ങൾ കാണിക്കുന്നു.

SQL കാലാവധി

സംഭാഷണത്തിൻ്റെ താരതമ്യപ്പെടുത്താവുന്ന ഭാഗം

നിർവ്വചനം

ഉദാഹരണം

ഐഡൻ്റിഫയർ

നാമം

ഒരു ഫീൽഡ് നാമം പോലെയുള്ള ഒരു ഡാറ്റാബേസ് ഒബ്ജക്റ്റ് തിരിച്ചറിയാൻ ഉപയോഗിക്കുന്ന ഒരു പേര്.

ഉപഭോക്താക്കൾ.[ഫോൺ നമ്പർ]

ഓപ്പറേറ്റർ

ക്രിയ അല്ലെങ്കിൽ ക്രിയ

ഒരു പ്രവർത്തനത്തെ പ്രതിനിധീകരിക്കുന്ന അല്ലെങ്കിൽ പരിഷ്‌ക്കരിക്കുന്ന ഒരു കീവേഡ്.

സ്ഥിരമായ

നാമം

ഒരു സംഖ്യ അല്ലെങ്കിൽ NULL പോലെ മാറാത്ത ഒരു മൂല്യം.

ആവിഷ്കാരം

വിശേഷണം

ഒരൊറ്റ മൂല്യം കണക്കാക്കാൻ രൂപകൽപ്പന ചെയ്‌തിരിക്കുന്ന ഐഡൻ്റിഫയറുകൾ, ഓപ്പറേറ്റർമാർ, സ്ഥിരാങ്കങ്ങൾ, ഫംഗ്‌ഷനുകൾ എന്നിവയുടെ സംയോജനം.

>= ഉൽപ്പന്നങ്ങൾ.[വില]

അടിസ്ഥാന SQL ക്ലോസുകൾ: തിരഞ്ഞെടുക്കുക, നിന്ന്, എവിടെ നിന്ന്

SQL പ്രസ്താവനകളുടെ പൊതുവായ ഫോർമാറ്റ് ഇതാണ്:

ഫീൽഡ്_1 തിരഞ്ഞെടുക്കുക
പട്ടിക_1 ൽ നിന്ന്
എവിടെയാണ് മാനദണ്ഡം_1
;

കുറിപ്പുകൾ:

    SQL പ്രസ്താവനകളിലെ ലൈൻ ബ്രേക്കുകളെ ആക്സസ് മാനിക്കുന്നില്ല. ഇതൊക്കെയാണെങ്കിലും, ഓരോ വാക്യവും ആരംഭിക്കാൻ ശുപാർശ ചെയ്യുന്നു പുതിയ വരഅതിനാൽ SQL പ്രസ്താവന എഴുതിയ വ്യക്തിക്കും മറ്റുള്ളവർക്കും വായിക്കാൻ എളുപ്പമാണ്.

    എല്ലാ SELECT പ്രസ്താവനയും ഒരു അർദ്ധവിരാമത്തിൽ അവസാനിക്കുന്നു (;). അർദ്ധവിരാമം അവസാന വാക്യത്തിൻ്റെ അവസാനത്തിലോ അല്ലെങ്കിൽ SQL പ്രസ്താവനയുടെ അവസാനം ഒരു പ്രത്യേക വരിയിലോ ദൃശ്യമാകും.

ആക്‌സസിലെ ഉദാഹരണം

ആക്‌സസിൽ ഒരു SQL പ്രസ്താവന എങ്ങനെയായിരിക്കുമെന്ന് ചുവടെയുള്ള ഉദാഹരണം കാണിക്കുന്നു ലളിതമായ അഭ്യർത്ഥനഓരോ സാമ്പിളും.

1. ക്ലോസ് തിരഞ്ഞെടുക്കുക

2. ക്ലോസിൽ നിന്ന്

3. എവിടെ ക്ലോസ്

SQL വാക്യഘടന എങ്ങനെ പ്രവർത്തിക്കുന്നുവെന്ന് മനസിലാക്കാൻ നമുക്ക് വാക്യം അനുസരിച്ച് ഉദാഹരണം നോക്കാം.

ക്ലോസ് തിരഞ്ഞെടുക്കുക

തിരഞ്ഞെടുക്കുക, കമ്പനി

ഇതൊരു SELECT ക്ലോസ് ആണ്. അതിൽ രണ്ട് ഐഡൻ്റിഫയറുകൾ ("[ഇമെയിൽ വിലാസം]", "കമ്പനി" എന്നിവയ്ക്ക് ശേഷം ഒരു (SELECT) പ്രസ്താവന അടങ്ങിയിരിക്കുന്നു.

ഐഡൻ്റിഫയറിൽ സ്‌പെയ്‌സുകൾ ഉണ്ടെങ്കിൽ അല്ലെങ്കിൽ പ്രത്യേക അടയാളങ്ങൾ(ഉദാഹരണത്തിന്, "ഇമെയിൽ വിലാസം"), അത് ചതുരാകൃതിയിലുള്ള ബ്രാക്കറ്റുകളിൽ ഉൾപ്പെടുത്തിയിരിക്കണം.

SELECT ക്ലോസ് ഫീൽഡുകൾ അടങ്ങിയിരിക്കുന്ന പട്ടികകൾ വ്യക്തമാക്കാൻ നിങ്ങളോട് ആവശ്യപ്പെടുന്നില്ല, കൂടാതെ ഫലങ്ങളിൽ ഉൾപ്പെടുത്തിയിരിക്കുന്ന ഡാറ്റ പാലിക്കേണ്ട തിരഞ്ഞെടുക്കൽ വ്യവസ്ഥകൾ നിങ്ങൾക്ക് വ്യക്തമാക്കാൻ കഴിയില്ല.

ഒരു SELECT പ്രസ്താവനയിൽ, SELECT ക്ലോസ് എല്ലായ്‌പ്പോഴും FROM ക്ലോസിന് മുമ്പായി വരുന്നു.

ക്ലോസിൽ നിന്ന്

കോൺടാക്റ്റുകളിൽ നിന്ന്

ഇത് ഒരു ക്ലോസ് ആണ്. അതിൽ ഒരു (FROM) പ്രസ്താവനയും തുടർന്ന് ഒരു ഐഡൻ്റിഫയറും (കോൺടാക്റ്റുകൾ) അടങ്ങിയിരിക്കുന്നു.

FROM ക്ലോസ് തിരഞ്ഞെടുക്കേണ്ട ഫീൽഡുകൾ വ്യക്തമാക്കുന്നില്ല.

എവിടെ ക്ലോസ്

എവിടെ സിറ്റി="സിയാറ്റിൽ"

ഇതാണ് WHERE ക്ലോസ്. അതിൽ ഒരു (WHERE) പ്രസ്താവനയും തുടർന്ന് (City="Rostov") എന്ന പദപ്രയോഗവും അടങ്ങിയിരിക്കുന്നു.

SELECT, FROM, WHERE എന്നീ ക്ലോസുകൾ ഉപയോഗിച്ച് നിങ്ങൾക്ക് ചെയ്യാൻ കഴിയുന്ന നിരവധി കാര്യങ്ങളുണ്ട്. ഈ ഓഫറുകൾ ഉപയോഗിക്കുന്നതിനെക്കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക്, ഇനിപ്പറയുന്ന ലേഖനങ്ങൾ കാണുക:

സോർട്ടിംഗ് ഫലങ്ങൾ: ഓർഡർ പ്രകാരം

Microsoft Excel പോലെ, ഒരു ടേബിളിൽ ഒരു ചോദ്യത്തിൻ്റെ ഫലങ്ങൾ അടുക്കാൻ ആക്സസ് നിങ്ങളെ അനുവദിക്കുന്നു. ഓർഡർ ബൈ ക്ലോസ് ഉപയോഗിക്കുന്നതിലൂടെ, ചോദ്യം എക്സിക്യൂട്ട് ചെയ്യുമ്പോൾ ഫലങ്ങൾ എങ്ങനെ അടുക്കും എന്നും നിങ്ങൾക്ക് വ്യക്തമാക്കാം. ഒരു ഓർഡർ ബൈ ക്ലോസ് ഉപയോഗിക്കുകയാണെങ്കിൽ, അത് SQL പ്രസ്താവനയുടെ അവസാനം ദൃശ്യമാകണം.

ഓർഡർ ബൈ ക്ലോസിൽ അടുക്കേണ്ട ഫീൽഡുകളുടെ ഒരു ലിസ്റ്റ് അടങ്ങിയിരിക്കുന്നു, അടുക്കൽ പ്രയോഗിക്കുന്ന അതേ ക്രമത്തിൽ.

ഉദാഹരണത്തിന്, ഫലങ്ങൾ ആദ്യം "കമ്പനി" ഫീൽഡ് അവരോഹണ ക്രമത്തിൽ അടുക്കേണ്ടതുണ്ടെന്നും തുടർന്ന് രേഖകൾ ഉണ്ടെങ്കിൽ ഒരേ മൂല്യംഫീൽഡുകൾ "കമ്പനി", - ആരോഹണ ക്രമത്തിൽ "ഇമെയിൽ വിലാസം" എന്ന ഫീൽഡ് ഉപയോഗിച്ച് അവയെ അടുക്കുക. ക്ലോസ് പ്രകാരം ഓർഡർ ഇതുപോലെ കാണപ്പെടും:

കമ്പനി DESC പ്രകാരം ഓർഡർ ചെയ്യുക,

കുറിപ്പ്:ഡിഫോൾട്ടായി, ആക്‌സസ് മൂല്യങ്ങളെ ആരോഹണ ക്രമത്തിൽ അടുക്കുന്നു (A മുതൽ Z വരെ, ചെറുത് മുതൽ വലുത് വരെ). പകരം അവരോഹണ ക്രമത്തിൽ മൂല്യങ്ങൾ അടുക്കുന്നതിന്, നിങ്ങൾ DESC കീവേഡ് വ്യക്തമാക്കണം.

ഓർഡർ ബൈ ക്ലോസിനെ കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക്, ഓർഡർ ബൈ ക്ലോസ് ലേഖനം കാണുക.

സംഗ്രഹ ഡാറ്റ ഉപയോഗിച്ച് പ്രവർത്തിക്കുന്നു: ഗ്രൂപ്പ് ബൈ, ക്ലോസുകൾ ഉള്ളത്

ചിലപ്പോൾ നിങ്ങൾ സംഗ്രഹ ഡാറ്റ ഉപയോഗിച്ച് പ്രവർത്തിക്കേണ്ടതുണ്ട്, അതായത് മാസത്തെ മൊത്തം വിൽപ്പന അല്ലെങ്കിൽ സ്റ്റോക്കിലുള്ള ഏറ്റവും ചെലവേറിയ ഇനങ്ങൾ. ഇത് ചെയ്യുന്നതിന്, SELECT ക്ലോസ് ഫീൽഡിന് ഒരു മൊത്തത്തിലുള്ള പ്രവർത്തനം പ്രയോഗിക്കുന്നു. ഉദാഹരണത്തിന്, ഓരോ കമ്പനിയുടെയും ഇമെയിൽ വിലാസങ്ങളുടെ എണ്ണം ലഭിക്കുന്നതിന് നിങ്ങൾ ഒരു അന്വേഷണം നടത്തുകയാണെങ്കിൽ, SELECT ക്ലോസ് ഇതുപോലെയായിരിക്കാം:

ഒരു പ്രത്യേക അഗ്രഗേറ്റ് ഫംഗ്ഷൻ ഉപയോഗിക്കാനുള്ള കഴിവ്, ഫീൽഡിലെ ഡാറ്റയുടെ തരത്തെയും ആവശ്യമുള്ള എക്സ്പ്രഷനെയും ആശ്രയിച്ചിരിക്കുന്നു. ലഭ്യമായ അഗ്രഗേറ്റ് ഫംഗ്‌ഷനുകളെക്കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക്, SQL സ്റ്റാറ്റിസ്റ്റിക്കൽ ഫംഗ്‌ഷനുകൾ കാണുക.

ഒരു അഗ്രഗേറ്റ് ഫംഗ്‌ഷനിൽ ഉപയോഗിക്കാത്ത ഫീൽഡുകൾ വ്യക്തമാക്കുന്നു: ഗ്രൂപ്പ് ബൈ ക്ലോസ്

അഗ്രഗേറ്റ് ഫംഗ്‌ഷനുകൾ ഉപയോഗിക്കുമ്പോൾ, നിങ്ങൾ സാധാരണയായി ഒരു ഗ്രൂപ്പ് ബൈ ക്ലോസ് സൃഷ്‌ടിക്കേണ്ടതുണ്ട്. ഗ്രൂപ്പ് ബൈ ക്ലോസ് അഗ്രഗേറ്റ് ഫംഗ്‌ഷൻ ബാധകമല്ലാത്ത എല്ലാ ഫീൽഡുകളും വ്യക്തമാക്കുന്നു. അന്വേഷണത്തിലെ എല്ലാ ഫീൽഡുകൾക്കും മൊത്തം ഫംഗ്‌ഷനുകൾ ബാധകമാണെങ്കിൽ, നിങ്ങൾ ഒരു ഗ്രൂപ്പ് ബൈ ക്ലോസ് സൃഷ്‌ടിക്കേണ്ടതില്ല.

GROUP BY ക്ലോസ്, WHERE ക്ലോസ് ഇല്ലെങ്കിൽ, WHERE അല്ലെങ്കിൽ FROM ക്ലോസ് ഉടൻ പിന്തുടരേണ്ടതാണ്. SELECT ക്ലോസിൻ്റെ അതേ ക്രമത്തിൽ GROUP BY ക്ലോസ് ഫീൽഡുകൾ ലിസ്റ്റ് ചെയ്യുന്നു.

നമുക്ക് മുമ്പത്തെ ഉദാഹരണം തുടരാം. SELECT ക്ലോസിൽ, അഗ്രഗേറ്റ് ഫംഗ്‌ഷൻ [ഇമെയിൽ വിലാസം] ഫീൽഡിന് മാത്രമേ ബാധകമാകൂ എങ്കിൽ, GROUP BY ക്ലോസ് ഇതുപോലെ കാണപ്പെടും:

കമ്പനി പ്രകാരം ഗ്രൂപ്പ്

ഗ്രൂപ്പ് ബൈ ക്ലോസിനെ കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക്, ഗ്രൂപ്പ് ബൈ ക്ലോസ് എന്ന ലേഖനം കാണുക.

ഗ്രൂപ്പിംഗ് വ്യവസ്ഥകൾ ഉപയോഗിച്ച് സമാഹരിച്ച മൂല്യങ്ങൾ നിയന്ത്രിക്കുന്നു: HAVING ക്ലോസ്

ഫലങ്ങൾ പരിമിതപ്പെടുത്തുന്നതിന് നിങ്ങൾക്ക് വ്യവസ്ഥകൾ വ്യക്തമാക്കണമെങ്കിൽ, എന്നാൽ നിങ്ങൾ അവ പ്രയോഗിക്കാൻ ആഗ്രഹിക്കുന്ന ഫീൽഡ് ഉപയോഗിക്കുന്നു മൊത്തത്തിലുള്ള പ്രവർത്തനം, WHERE ക്ലോസ് ഉപയോഗിക്കാൻ കഴിയില്ല. പകരം HAVING ക്ലോസ് ഉപയോഗിക്കണം. HAVING ക്ലോസ് WHERE ക്ലോസ് പോലെ തന്നെ പ്രവർത്തിക്കുന്നു, എന്നാൽ സംഗ്രഹിച്ച ഡാറ്റയ്ക്കായി ഉപയോഗിക്കുന്നു.

ഉദാഹരണത്തിന്, SELECT ക്ലോസിലെ ആദ്യ ഫീൽഡിൽ AVG ഫംഗ്ഷൻ (ശരാശരി കണക്കാക്കുന്നത്) പ്രയോഗിക്കുന്നുവെന്ന് കരുതുക:

COUNT(), കമ്പനി തിരഞ്ഞെടുക്കുക

COUNT ഫംഗ്‌ഷൻ്റെ മൂല്യത്തെ അടിസ്ഥാനമാക്കി നിങ്ങൾക്ക് അന്വേഷണ ഫലങ്ങൾ പരിമിതപ്പെടുത്തണമെങ്കിൽ, WHERE ക്ലോസിലെ ഈ ഫീൽഡിലേക്ക് നിങ്ങൾക്ക് ഒരു തിരഞ്ഞെടുപ്പ് വ്യവസ്ഥ പ്രയോഗിക്കാൻ കഴിയില്ല. പകരം, HAVING ക്ലോസിൽ വ്യവസ്ഥ സ്ഥാപിക്കണം. ഉദാഹരണത്തിന്, ഒരു കമ്പനിക്ക് ഒന്നിലധികം ഇമെയിൽ വിലാസങ്ങൾ ഉണ്ടെങ്കിൽ മാത്രം നിങ്ങളുടെ അന്വേഷണം വരികൾ നൽകണമെങ്കിൽ, നിങ്ങൾക്ക് ഇനിപ്പറയുന്ന HAVING ക്ലോസ് ഉപയോഗിക്കാം:

COUNT()>1 ഉണ്ട്

കുറിപ്പ്:ഒരു ചോദ്യത്തിൽ എവിടെയും ഉപയോഗിക്കാത്ത ഫീൽഡുകൾക്കായുള്ള തിരഞ്ഞെടുക്കൽ വ്യവസ്ഥകളോടെ ഒരു WHERE ക്ലോസും HAVING ക്ലോസും ഉൾപ്പെടുത്താം. സ്റ്റാറ്റിസ്റ്റിക്കൽ പ്രവർത്തനങ്ങൾ, WHERE ക്ലോസിൽ വ്യക്തമാക്കിയിട്ടുണ്ട്, കൂടാതെ സ്റ്റാറ്റിസ്റ്റിക്കൽ ഫംഗ്ഷനുകളിൽ ഉപയോഗിക്കുന്ന ഫീൽഡുകൾക്കുള്ള വ്യവസ്ഥകൾ HAVING ക്ലോസിൽ വ്യക്തമാക്കിയിട്ടുണ്ട്.

HAVING ക്ലോസിനെക്കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക്, HAVING ക്ലോസ് ലേഖനം കാണുക.

അന്വേഷണ ഫലങ്ങൾ സംയോജിപ്പിക്കുന്നു: UNION ഓപ്പറേറ്റർ

UNION ഓപ്പറേറ്റർ ഒരേസമയം ഒന്നിലധികം സമാനമായ തിരഞ്ഞെടുത്ത അന്വേഷണങ്ങൾ നൽകിയ എല്ലാ ഡാറ്റയും സംയോജിത സെറ്റായി കാണുന്നതിന് ഉപയോഗിക്കുന്നു.

രണ്ട് SELECT പ്രസ്താവനകൾ ഒന്നായി സംയോജിപ്പിക്കാൻ UNION ഓപ്പറേറ്റർ നിങ്ങളെ അനുവദിക്കുന്നു. ലയിപ്പിക്കേണ്ട SELECT പ്രസ്താവനകൾ ഉണ്ടായിരിക്കണം ഒരേ നമ്പർഒരേ അല്ലെങ്കിൽ അനുയോജ്യമായ ഡാറ്റ തരങ്ങളുള്ള ഔട്ട്പുട്ട് ഫീൽഡുകളുടെ ക്രമവും. ഒരു ചോദ്യം എക്സിക്യൂട്ട് ചെയ്യുമ്പോൾ, പൊരുത്തപ്പെടുന്ന ഓരോ സെറ്റ് ഫീൽഡുകളിൽ നിന്നുമുള്ള ഡാറ്റ ഒരൊറ്റ ഔട്ട്പുട്ട് ഫീൽഡിലേക്ക് സംയോജിപ്പിച്ചിരിക്കുന്നു, അതിനാൽ ഓരോ SELECT സ്റ്റേറ്റ്മെൻ്റിൻ്റെ അത്രയും ഫീൽഡുകൾ അന്വേഷണ ഔട്ട്പുട്ടിനുണ്ട്.

കുറിപ്പ്:ജോയിൻ അന്വേഷണങ്ങളിൽ, സംഖ്യാ, ടെക്‌സ്‌റ്റ് ഡാറ്റ തരങ്ങൾ അനുയോജ്യമാണ്.

UNION ഓപ്പറേറ്റർ ഉപയോഗിച്ച്, ഡ്യൂപ്ലിക്കേറ്റ് വരികൾ ഉണ്ടെങ്കിൽ, അന്വേഷണ ഫലങ്ങളിൽ ഉൾപ്പെടുത്തണമോ എന്ന് നിങ്ങൾക്ക് വ്യക്തമാക്കാം. ഇത് ചെയ്യുന്നതിന്, എല്ലാ കീവേഡും ഉപയോഗിക്കുക.

രണ്ട് SELECT പ്രസ്താവനകൾ സംയോജിപ്പിക്കുന്നതിനുള്ള ഒരു അന്വേഷണത്തിന് ഇനിപ്പറയുന്ന അടിസ്ഥാന വാക്യഘടനയുണ്ട്:

ഫീൽഡ്_1 തിരഞ്ഞെടുക്കുക
പട്ടിക_1 ൽ നിന്ന്
യൂണിയൻ
ഫീൽഡ്_എ തിരഞ്ഞെടുക്കുക
പട്ടിക_എയിൽ നിന്ന്
;

ഉദാഹരണത്തിന്, നിങ്ങൾക്ക് "ഉൽപ്പന്നങ്ങൾ", "സേവനങ്ങൾ" എന്നിങ്ങനെ രണ്ട് പട്ടികകൾ ഉണ്ടെന്ന് കരുതുക. രണ്ട് ടേബിളുകളിലും ഉൽപ്പന്നത്തിൻ്റെയോ സേവനത്തിൻ്റെയോ പേര്, വില, വാറൻ്റി വിവരങ്ങൾ എന്നിവ ഉൾപ്പെടുന്ന ഫീൽഡുകളും അതുപോലെ വാഗ്ദാനം ചെയ്യുന്ന ഉൽപ്പന്നത്തിൻ്റെയോ സേവനത്തിൻ്റെയോ പ്രത്യേകതയെ സൂചിപ്പിക്കുന്ന ഒരു ഫീൽഡും അടങ്ങിയിരിക്കുന്നു. "ഉൽപ്പന്നങ്ങൾ", "സേവനങ്ങൾ" പട്ടികകൾ നൽകുന്നുണ്ടെങ്കിലും വത്യസ്ത ഇനങ്ങൾഗ്യാരൻ്റി, അടിസ്ഥാന വിവരങ്ങൾ ഒന്നുതന്നെയാണ് (ചില ഉൽപ്പന്നങ്ങളോ സേവനങ്ങളോ ഗുണനിലവാര ഗ്യാരണ്ടി നൽകിയാലും). രണ്ട് പട്ടികകളിൽ നിന്ന് നാല് ഫീൽഡുകളിൽ ചേരുന്നതിന് നിങ്ങൾക്ക് ഇനിപ്പറയുന്ന ജോയിൻ ക്വറി ഉപയോഗിക്കാം:

പേര്, വില, വാറൻ്റി_ലഭ്യം, എക്സ്ക്ലൂസീവ്_ഓഫർ എന്നിവ തിരഞ്ഞെടുക്കുക
ഉൽപ്പന്നങ്ങളിൽ നിന്ന്
യൂണിയൻ എല്ലാം
പേര്, വില, ഗ്യാരണ്ടി_ലഭ്യം, എക്സ്ക്ലൂസീവ്_ഓഫർ എന്നിവ തിരഞ്ഞെടുക്കുക
സേവനങ്ങളിൽ നിന്ന്
;

UNION ഓപ്പറേറ്റർ ഉപയോഗിച്ച് SELECT പ്രസ്താവനകൾ സംയോജിപ്പിക്കുന്നതിനെക്കുറിച്ചുള്ള കൂടുതൽ വിവരങ്ങൾക്ക്, കാണുക

MS SQL-ൽ നിന്ന് MySQL-ലേക്ക് മൈഗ്രേറ്റ് ചെയ്യുമ്പോൾ, ഡാറ്റ മൈഗ്രേറ്റ് ചെയ്യുന്നതിനു പുറമേ, ഡാറ്റാബേസിൽ സ്ഥിതി ചെയ്യുന്ന ആപ്ലിക്കേഷൻ കോഡും നിങ്ങൾ മൈഗ്രേറ്റ് ചെയ്യണം.

WorkSQL Workbench ടൂൾ എങ്ങനെ ഉപയോഗിക്കാമെന്ന് ഞങ്ങൾ മുമ്പ് ചർച്ച ചെയ്തു.

മൈഗ്രേഷൻ്റെ ഭാഗമായി, ഇത് പട്ടികകൾ പരിവർത്തനം ചെയ്യുകയും ഡാറ്റ പകർത്തുകയും ചെയ്യും, എന്നാൽ ഇത് ട്രിഗറുകൾ, കാഴ്ചകൾ അല്ലെങ്കിൽ സംഭരിച്ച നടപടിക്രമങ്ങൾ എന്നിവ പരിവർത്തനം ചെയ്യില്ല. നിങ്ങൾ അവയെ MySQL ഡാറ്റാബേസിലേക്ക് സ്വമേധയാ പരിവർത്തനം ചെയ്യണം.

ഈ പരിവർത്തനം സ്വമേധയാ നിർവഹിക്കുന്നതിന്, MS SQL, MySQL ചോദ്യങ്ങൾ തമ്മിലുള്ള അടിസ്ഥാന വ്യത്യാസങ്ങൾ നിങ്ങൾ മനസ്സിലാക്കണം.

എൻ്റെ പരിവർത്തന സമയത്ത് Microsoft SQLഒരു MySQL ഡാറ്റാബേസിലേക്കുള്ള സെർവർ, MySQL-ന് അനുയോജ്യമല്ലാത്ത ഇനിപ്പറയുന്ന MS SQL പ്രസ്താവനകളും അന്വേഷണങ്ങളും ഞാൻ കണ്ടു, അവ താഴെ പറയുന്ന രീതിയിൽ പരിവർത്തനം ചെയ്യേണ്ടിവന്നു.

1. സംഭരിച്ച നടപടിക്രമങ്ങൾ സൃഷ്ടിക്കുന്നു. വാക്യഘടന

സംഭരിച്ച നടപടിക്രമങ്ങൾ സൃഷ്ടിക്കുന്നതിനുള്ള അടിസ്ഥാന വാക്യഘടന വ്യത്യസ്തമാണ്.

MS SQL സംഭരിച്ചു, നടപടിക്രമം സൃഷ്ടിക്കൽ വാക്യഘടന:

നടപടിക്രമം സൃഷ്ടിക്കുക. @someString VarChar(150) BEGIN ആയി -- Sql അന്വേഷണങ്ങൾ ഇവിടെ പോകുന്നു END

MySQL-നുള്ള ഒരു നടപടിക്രമം സൃഷ്ടിക്കുന്നതിനുള്ള വാക്യഘടന ഇതാണ്:

സംഭരിച്ചിരിക്കുന്ന നടപടിക്രമം സൃഷ്ടിക്കുക ProcedureName(ചില സ്ട്രിംഗ് VarChar(150)) ആരംഭിക്കുക -- Sql അന്വേഷണങ്ങൾ ഇവിടെ പോകുന്നു END

2. താൽക്കാലിക പട്ടികകൾ സൃഷ്ടിക്കുന്നു

MS SQL കോഡിൽ, ആപ്ലിക്കേഷന് ആവശ്യമായ നിരവധി താൽക്കാലിക പട്ടികകൾ ഞാൻ സൃഷ്ടിച്ചിട്ടുണ്ട്. ഒരു താൽക്കാലിക പട്ടിക സൃഷ്ടിക്കുന്നതിനുള്ള വാക്യഘടന ചുവടെ കാണിച്ചിരിക്കുന്നതുപോലെ വ്യത്യാസപ്പെടുന്നു.

ഒരു താൽക്കാലിക പട്ടിക സൃഷ്ടിക്കുന്നതിനുള്ള MS SQL വാക്യഘടന:

ടേബിൾ സൃഷ്‌ടിക്കുക പിഴവ്)

ഒരു താൽക്കാലിക പട്ടിക സൃഷ്ടിക്കുന്നതിനുള്ള MySQL വാക്യഘടന ഇതാണ്:

താൽക്കാലിക പട്ടിക പട്ടികയുടെ പേര് (emp_id VARCHAR(10), emp_Name VARCHAR(50), emp_Code VARCHAR(30), emp_Department VARCHAR(30));

3. IF വാക്യഘടന

താഴെ കാണിച്ചിരിക്കുന്നതുപോലെ വാക്യഘടന വ്യത്യസ്തമായതിനാൽ MySQL-ലേക്ക് പരിവർത്തനം ചെയ്‌തതിനുശേഷം പ്രവർത്തിക്കാത്ത എൻ്റെ സംഭരിച്ച നടപടിക്രമങ്ങളിലും ട്രിഗറുകളിലും ഞാൻ നിരവധി നിബന്ധനകൾ ഉപയോഗിച്ചിട്ടുണ്ട്.

MS SQL IF അവസ്ഥ വാക്യഘടന:

എങ്കിൽ(@intSomeVal="") ആരംഭിക്കുക SET @intSomeVal=10 END

MySQL IF അവസ്ഥ വാക്യഘടന:

@intSomeVal=""എന്നാൽ @intSomeVal=10 സജ്ജമാക്കുക; ENDIF;

4. നിലവിലുണ്ടെങ്കിൽ

മറ്റൊരു സാധാരണ ഉപയോഗം, ഒരു വ്യവസ്ഥയാണെങ്കിൽ, അന്വേഷണം ഏതെങ്കിലും വരികൾ നൽകിയിട്ടുണ്ടോ ഇല്ലയോ എന്ന് പരിശോധിക്കുന്നതാണ്; അത് ഒന്നിലധികം വരികൾ നൽകുകയാണെങ്കിൽ, എന്തെങ്കിലും ചെയ്യുക. ഇതിനായി ഞാൻ MS SQL-ൽ IF EXISTS ഉപയോഗിച്ചു, അത് താഴെ വിവരിച്ചിരിക്കുന്നതുപോലെ MySQL IF കമാൻഡുകളിലേക്ക് പരിവർത്തനം ചെയ്യേണ്ടതുണ്ട്.

MS SQL ഇഫ് എക്സിറ്റ് ഉദാഹരണം:

നിലവിലുണ്ടെങ്കിൽ (#tableName-ൽ നിന്ന് 1 തിരഞ്ഞെടുക്കുക(NLOCK) ColName="empType") BEGIN -- Sql അന്വേഷണങ്ങൾ ഇവിടെ പോകുന്നു END

മുകളിൽ പറഞ്ഞതിന് തുല്യമായ MySQL, നിബന്ധന പാലിക്കുമ്പോൾ ഉപയോഗിക്കുന്നു:

IF(തിരഞ്ഞെടുക്കുക എണ്ണം(*) പട്ടികയുടെ പേര് എവിടെയാണ് ColName="empType") > 0 പിന്നെ -- Sql അന്വേഷണങ്ങൾ ഇവിടെ പോകുന്നു അവസാനിച്ചാൽ;

5. തീയതി പ്രവർത്തനങ്ങൾ

സംഭരിച്ച നടപടിക്രമത്തിനുള്ളിൽ ഡാറ്റ ഫംഗ്‌ഷനുകൾ ഉപയോഗിക്കുന്നത് വളരെ സാധാരണമാണ്. താഴെ കൊടുത്തിരിക്കുന്ന പട്ടിക MS SQL ഉം തമ്മിലുള്ള വ്യത്യാസം കാണിക്കുന്നു MySQL ഡാറ്റ, ബന്ധപ്പെട്ട പ്രവർത്തനങ്ങൾ.

MS SQL സെർവർMySQL സെർവർ
GETDATE()ഇപ്പോൾ()
SYSDATE()
CURRENT_TIMESTAMP()
GETDATE() + 1ഇപ്പോൾ() + ഇടവേള 1 ദിവസം
CURRENT_TIMESTAMP +ഇൻ്റർവാൾ 1 ദിവസം
DATEADD(dd, -1, GETDATE())കൂട്ടിച്ചേർക്കുക(ഇപ്പോൾ(), ഇടവേള -1 ദിവസം)
പരിവർത്തനം ചെയ്യുക(വർചാർ(19),GETDATE())DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')
പരിവർത്തനം ചെയ്യുക(വർചാർ(10),GETDATE(),110)DATE_FORMAT(ഇപ്പോൾ(),'%m-%d-%Y')
പരിവർത്തനം ചെയ്യുക(വർചാർ(24),GETDATE(),113)DATE_FORMAT(ഇപ്പോൾ(),'%d %b %Y %T:%f')
പരിവർത്തനം ചെയ്യുക(വർചാർ(11),ഗെറ്റ്ഡേറ്റ്(),6)DATE_FORMAT(ഇപ്പോൾ(),'%d %b %y')

6. വേരിയബിളുകൾ പ്രഖ്യാപിക്കുന്നു

MS SQL സംഭരിച്ച നടപടിക്രമങ്ങളിൽ, "ആരംഭിക്കുക", "അവസാനം" എന്നിവയ്ക്കിടയിൽ എവിടെയെങ്കിലും വേരിയബിളുകൾ പ്രഖ്യാപിക്കാം.

എന്നിരുന്നാലും, MySql-ൽ "ആരംഭിക്കുക" സംഭരിച്ച നടപടിക്രമം പ്രഖ്യാപിച്ചതിന് ശേഷം മാത്രമേ നിങ്ങൾ അവ പ്രഖ്യാപിക്കേണ്ടതുള്ളൂ. ഇടയിൽ ഒരു വേരിയബിൾ പ്രഖ്യാപിക്കുന്നത് അനുവദനീയമല്ല.

7. ആദ്യത്തെ N റെക്കോർഡുകൾ തിരഞ്ഞെടുക്കുക

MS SQL-ൽ, ആദ്യത്തെ കുറച്ച് റെക്കോർഡുകൾ മാത്രം തിരഞ്ഞെടുക്കണമെങ്കിൽ നിങ്ങൾ SELECT, TOP ഉപയോഗിക്കും. ഉദാഹരണത്തിന്, ആദ്യത്തെ 10 റെക്കോർഡുകൾ തിരഞ്ഞെടുക്കുന്നതിന്, നിങ്ങൾ ഇനിപ്പറയുന്നവ ചെയ്യണം:

പട്ടികയിൽ നിന്ന് ടോപ്പ് 10 * തിരഞ്ഞെടുക്കുക;

MySQL-ൽ, താഴെ കാണിച്ചിരിക്കുന്നതുപോലെ നിങ്ങൾ TOP-ന് പകരം LIMIT ഉപയോഗിക്കേണ്ടിവരും.

പട്ടിക പരിധി 10 ൽ നിന്ന് * തിരഞ്ഞെടുക്കുക;

8. പൂർണ്ണസംഖ്യയെ ചാറിലേക്ക് പരിവർത്തനം ചെയ്യുക

MS SQL-ൽ നിങ്ങൾ ചെയ്യും ഇനിപ്പറയുന്ന പ്രവർത്തനങ്ങൾ(ഫംഗ്ഷനുകൾ പരിവർത്തനം ചെയ്യുക) ഒരു പൂർണ്ണസംഖ്യയെ പ്രതീകമാക്കി മാറ്റാൻ.

പരിവർത്തനം (വർചാർ(50), കുറച്ച് ഇൻ്റർവാൾ)

MySQL-ൽ, താഴെ കാണിച്ചിരിക്കുന്നതുപോലെ ഒരു പൂർണ്ണസംഖ്യയെ പ്രതീകമാക്കി മാറ്റാൻ നിങ്ങൾ CAST ഫംഗ്ഷൻ ഉപയോഗിക്കും.

CAST(ചിലത് CHAR ആയി IntVal)

9. കോൺകാറ്റനേഷൻ ഓപ്പറേറ്റർ

സംഭരിച്ച നടപടിക്രമത്തിനുള്ളിൽ നിങ്ങൾ ധാരാളം ഡാറ്റ കൈകാര്യം ചെയ്യുകയാണെങ്കിൽ, ചില സ്ട്രിംഗ് കോൺകറ്റനേഷൻ ചെയ്യാൻ നിങ്ങൾ ആഗ്രഹിച്ചേക്കാം.

MS SQL-ൽ കോൺകാറ്റനേഷൻ ഓപ്പറേറ്റർ + ചിഹ്നം. അത്തരം ഉപയോഗത്തിൻ്റെ ഒരു ഉദാഹരണം ചുവടെ കാണിച്ചിരിക്കുന്നു.

SET @someString = "%|" + @someStringVal + "|%"

MySQL-ൽ, നിങ്ങൾ AnSi മോഡ് ഉപയോഗിക്കുകയാണെങ്കിൽ, അത് MS SQL-ലേതിന് സമാനമാണ്. ആ. + ചിഹ്നം, സംയോജനത്തിനായി പ്രവർത്തിക്കും.

പക്ഷേ, സ്ഥിരസ്ഥിതി മോഡിൽ, MySQL-ൽ, നമ്മൾ CONCAT (“str1”, “str2”, “str3”.. “strN”) എന്ന ഫംഗ്‌ഷൻ ഉപയോഗിക്കേണ്ടതുണ്ട്.

SET someString = CONCAT("%|", someStringVal, "|%");

ആദ്യ ഭാഗത്തിൽ, MERGE കമാൻഡ് ഒഴികെ, അതിൻ്റെ ഏതാണ്ട് മുഴുവൻ കമാൻഡുകളും ഉപയോഗിച്ച് ഞങ്ങൾ ഇതിനകം തന്നെ DML ഭാഷയിൽ അൽപ്പം സ്പർശിച്ചു.

വ്യക്തിപരമായ അനുഭവത്തിൽ നിന്ന് വികസിപ്പിച്ചെടുത്ത എൻ്റെ സ്വന്തം ക്രമം അനുസരിച്ച് ഞാൻ DML നെ കുറിച്ച് സംസാരിക്കും. വഴിയിൽ, ശ്രദ്ധ കേന്ദ്രീകരിക്കേണ്ട "വഴുവഴുപ്പുള്ള" സ്ഥലങ്ങളെക്കുറിച്ചും സംസാരിക്കാൻ ഞാൻ ശ്രമിക്കും; ഈ "സ്ലിപ്പറി" സ്ഥലങ്ങൾ SQL ഭാഷയുടെ പല ഭാഷകളിലും സമാനമാണ്.

കാരണം പാഠപുസ്തകം വിശാലമായ വായനക്കാർക്കായി സമർപ്പിച്ചിരിക്കുന്നു (പ്രോഗ്രാമർമാർ മാത്രമല്ല), അപ്പോൾ വിശദീകരണം ചിലപ്പോൾ ഉചിതമായിരിക്കും, അതായത്. നീണ്ടതും മടുപ്പിക്കുന്നതുമാണ്. പ്രൊഫഷണൽ പ്രവർത്തനത്തിൻ്റെ ഫലമായി പ്രായോഗികമായി പ്രധാനമായും ലഭിച്ച മെറ്റീരിയലിനെക്കുറിച്ചുള്ള എൻ്റെ കാഴ്ചപ്പാടാണിത്.

ഈ ട്യൂട്ടോറിയലിൻ്റെ പ്രധാന ലക്ഷ്യം, ഘട്ടം ഘട്ടമായി, SQL ഭാഷയുടെ സത്തയെക്കുറിച്ച് പൂർണ്ണമായ ധാരണ വികസിപ്പിക്കുകയും അതിൻ്റെ നിർമ്മാണങ്ങൾ എങ്ങനെ ശരിയായി പ്രയോഗിക്കാമെന്ന് നിങ്ങളെ പഠിപ്പിക്കുകയും ചെയ്യുക എന്നതാണ്. ഈ മേഖലയിലെ പ്രൊഫഷണലുകൾക്ക് ഈ മെറ്റീരിയലിലൂടെ കടന്നുപോകാൻ താൽപ്പര്യമുണ്ടാകാം, ഒരുപക്ഷേ അവർക്ക് സ്വയം പുതിയ എന്തെങ്കിലും പഠിക്കാൻ കഴിഞ്ഞേക്കാം, അല്ലെങ്കിൽ അവരുടെ മെമ്മറി പുതുക്കുന്നതിന് ഇത് വായിക്കുന്നത് ഉപയോഗപ്രദമാകും. എല്ലാവർക്കും ഇത് രസകരമായി തോന്നുമെന്ന് ഞാൻ പ്രതീക്ഷിക്കുന്നു.

കാരണം MS SQL ഡാറ്റാബേസ് ഡയലക്റ്റിലെ DML, SELECT കൺസ്ട്രക്‌റ്റിൻ്റെ വാക്യഘടനയുമായി വളരെ അടുത്ത് ബന്ധപ്പെട്ടിരിക്കുന്നു, അതിനാൽ ഞാൻ DML നെ കുറിച്ച് സംസാരിക്കാൻ തുടങ്ങും. എൻ്റെ അഭിപ്രായത്തിൽ, ഡിഎംഎൽ ഭാഷയിലെ ഏറ്റവും പ്രധാനപ്പെട്ട നിർമ്മിതിയാണ് SELECT നിർമ്മാണം, കാരണം അത് അല്ലെങ്കിൽ അതിൻ്റെ ഭാഗങ്ങൾ കാരണം, ആവശ്യമായ ഡാറ്റ ഡാറ്റാബേസിൽ നിന്ന് വീണ്ടെടുക്കുന്നു.

DML ഭാഷയിൽ ഇനിപ്പറയുന്ന നിർമ്മിതികൾ അടങ്ങിയിരിക്കുന്നു:

  • തിരഞ്ഞെടുക്കുക - ഡാറ്റ തിരഞ്ഞെടുക്കൽ
  • INSERT - പുതിയ ഡാറ്റ ചേർക്കുന്നു
  • അപ്ഡേറ്റ് - ഡാറ്റ അപ്ഡേറ്റ്
  • ഇല്ലാതാക്കുക - ഡാറ്റ ഇല്ലാതാക്കുന്നു
  • MERGE - ഡാറ്റ ലയനം

ഈ ഭാഗത്ത്, SELECT കമാൻഡിൻ്റെ അടിസ്ഥാന വാക്യഘടന മാത്രമേ ഞങ്ങൾ നോക്കൂ, അത് ഇതുപോലെ കാണപ്പെടുന്നു:

കോളം_ലിസ്റ്റ് തിരഞ്ഞെടുക്കുക അല്ലെങ്കിൽ * ഉറവിടത്തിൽ നിന്ന് എവിടെ ഫിൽട്ടർ ചെയ്യുക അടുക്കുക_എക്‌സ്‌പ്രഷൻ പ്രകാരം ഓർഡർ ചെയ്യുക
SELECT പ്രസ്താവനയുടെ വിഷയം വളരെ വിശാലമാണ്, അതിനാൽ ഈ ഭാഗത്ത് ഞാൻ അതിൻ്റെ അടിസ്ഥാന ഘടനകളിൽ മാത്രം ശ്രദ്ധ കേന്ദ്രീകരിക്കും. അടിസ്ഥാനകാര്യങ്ങൾ നന്നായി അറിയാതെ നിങ്ങൾക്ക് കൂടുതൽ സങ്കീർണ്ണമായ ഘടനകൾ പഠിക്കാൻ കഴിയില്ലെന്ന് ഞാൻ വിശ്വസിക്കുന്നു, കാരണം... അപ്പോൾ എല്ലാം ഈ അടിസ്ഥാന രൂപകൽപ്പനയെ ചുറ്റിപ്പറ്റിയാണ് (സബ്ക്വറികൾ, ജോയിൻസ് മുതലായവ).

കൂടാതെ, ഈ ഭാഗത്തിൻ്റെ ഭാഗമായി, ഞാൻ TOP ഓഫറിനെക്കുറിച്ചും സംസാരിക്കും. അടിസ്ഥാന വാക്യഘടനയിൽ ഈ വാചകം ഞാൻ മനഃപൂർവ്വം സൂചിപ്പിച്ചിട്ടില്ല, കാരണം... വ്യത്യസ്ത SQL ഭാഷകളിൽ ഇത് വ്യത്യസ്തമായി നടപ്പിലാക്കുന്നു.

DDL ഭാഷ കൂടുതൽ സ്റ്റാറ്റിക് ആണെങ്കിൽ, അതായത്. അതിൻ്റെ സഹായത്തോടെ, കർക്കശമായ ഘടനകൾ സൃഷ്ടിക്കപ്പെടുന്നു (പട്ടികകൾ, ബന്ധങ്ങൾ മുതലായവ), തുടർന്ന് ഡിഎംഎൽ ഭാഷ ചലനാത്മകമാണ്, ഇവിടെ നിങ്ങൾക്ക് വ്യത്യസ്ത രീതികളിൽ ശരിയായ ഫലങ്ങൾ ലഭിക്കും.

ഘട്ടം ഘട്ടമായുള്ള രീതിയിലും പരിശീലനം തുടരും, അതായത്. വായിക്കുമ്പോൾ, നിങ്ങളുടെ സ്വന്തം കൈകൊണ്ട് ഉദാഹരണം പൂർത്തിയാക്കാൻ നിങ്ങൾ ഉടൻ ശ്രമിക്കണം. അപ്പോൾ നിങ്ങൾ ലഭിച്ച ഫലം വിശകലനം ചെയ്യുകയും അവബോധപൂർവ്വം മനസ്സിലാക്കാൻ ശ്രമിക്കുകയും ചെയ്യുക. എന്തെങ്കിലും അവ്യക്തമായി തുടരുകയാണെങ്കിൽ, ഉദാഹരണത്തിന്, ഒരു ഫംഗ്‌ഷൻ്റെ അർത്ഥം, സഹായത്തിനായി ഇൻ്റർനെറ്റിലേക്ക് തിരിയുക.

ആദ്യ ഭാഗത്തിൽ DDL+DML ഉപയോഗിച്ച് സൃഷ്ടിച്ച ടെസ്റ്റ് ഡാറ്റാബേസിൽ ഉദാഹരണങ്ങൾ കാണിക്കും.

ആദ്യ ഭാഗത്തിൽ ഒരു ഡാറ്റാബേസ് സൃഷ്ടിക്കാത്തവർക്ക് (എല്ലാവർക്കും DDL ഭാഷയിൽ താൽപ്പര്യമുണ്ടാകില്ല എന്നതിനാൽ), അവർക്ക് ഇനിപ്പറയുന്ന സ്ക്രിപ്റ്റ് ഉപയോഗിക്കാം:

ടെസ്റ്റ് ഡാറ്റാബേസ് സൃഷ്ടിക്കൽ സ്ക്രിപ്റ്റ്

ഒരു ഡാറ്റാബേസ് സൃഷ്‌ടിക്കുന്നു ഡാറ്റാബേസ് ടെസ്റ്റ് ഗോ -- ടെസ്റ്റ് ഡാറ്റാബേസ് നിലവിലെ ഉപയോഗം ടെസ്റ്റ് ഗോ ആക്കുക -- റഫറൻസ് ടേബിളുകൾ സൃഷ്‌ടിക്കുക പട്ടിക സ്ഥാനങ്ങൾ സൃഷ്‌ടിക്കുക (ഐഡി ഇൻറ്റ് ഐഡൻ്റിറ്റി(1,1) ശൂന്യമായ നിയന്ത്രണമല്ല PK_Positions പ്രാഥമിക കീ, Nvarchar(30) Nvarchar(30) പട്ടിക വകുപ്പുകൾ (ID int IDENTITY(1,1) NULL നിയന്ത്രണമല്ല PK_Departments പ്രാഥമിക കീ, പേര് nvarchar(30) NULL അല്ല) GO -- ഡാറ്റ സഹിതം റഫറൻസ് ടേബിളുകൾ പൂരിപ്പിക്കുക IDENTITY_INSERT സ്ഥാനങ്ങൾ സജ്ജീകരിക്കുക (ഇൻസേർട്ട്, സ്ഥാനങ്ങൾ, INSERT 1) N"അക്കൌണ്ടൻ്റ്" ), (2,N"ഡയറക്ടർ"), (3,N"പ്രോഗ്രാമർ"), (4,N"സീനിയർ പ്രോഗ്രാമർ") ഐഡൻ്റിറ്റി_ഇൻസേർട്ട് സ്ഥാനങ്ങൾ സജ്ജീകരിക്കുക. (1,N "അഡ്‌മിനിസ്‌ട്രേഷൻ"), (2,N"അക്കൗണ്ടിംഗ്"), (3,N"IT") ഐഡൻ്റിറ്റി_ഇൻസേർട്ട് ഡിപ്പാർട്ട്‌മെൻ്റുകൾ ഓഫ് ഗോ -- ജീവനക്കാരെ ഉപയോഗിച്ച് ഒരു ടേബിൾ സൃഷ്‌ടിക്കുക. 30), ജന്മദിന തീയതി , ഇമെയിൽ nvarchar(30), PositionID int, DepartmentID int, HireDate തീയതി അസാധുവായ നിയന്ത്രണമല്ല DF_Employees_HireDate DEFAULT SYSDATETIME(), ManagerID int, CONSTRAINT PK_MLYDEployees PK_MLOYEDEPLYDK partmentID ഫോറിൻ കീ(DepartmentID) റഫറൻസ് വകുപ്പുകൾ( ID), CONSTRA INT FK_Employees_PositionID ഫോറിൻ കീ(PositionID) റഫറൻസ് സ്ഥാനങ്ങൾ(ID), പരിമിതമായ FK_Employees_ManagerID ഫോറിൻ കീ (മാനേജർഐഡി) REFERENCES ജീവനക്കാർ(മെയിൽ) CK_Employees_ID പരിശോധന (1000 നും 1999 നും ഇടയിലുള്ള ID), INDEX IDX_Employ ees_Name(Name)) GO - - ഡാറ്റ ഉപയോഗിച്ച് ഇത് പൂരിപ്പിക്കുക ജീവനക്കാർ (ID,Name,Birthday,Email,PositionID,DepartmentID,ManagerID)VALUES (1000,N"Ivanov I.I.","19550219"," ചേർക്കുക [ഇമെയിൽ പരിരക്ഷിതം]",2,1,NULL), (1001,N"പെട്രോവ് പി.പി.","19831203"," [ഇമെയിൽ പരിരക്ഷിതം]",3,3,1003), (1002,N"Sidorov S.S.","19760607"," [ഇമെയിൽ പരിരക്ഷിതം]",1,2,1000), (1003,N"ആന്ദ്രീവ് എ.എ.","19820417"," [ഇമെയിൽ പരിരക്ഷിതം]",4,3,1000)

അത്രയേയുള്ളൂ, ഇപ്പോൾ ഞങ്ങൾ ഡിഎംഎൽ ഭാഷ പഠിക്കാൻ തയ്യാറാണ്.

തിരഞ്ഞെടുക്കുക - ഡാറ്റ തിരഞ്ഞെടുക്കൽ ഓപ്പറേറ്റർ

ഒന്നാമതായി, സജീവമായ അന്വേഷണ എഡിറ്ററിനായി, ഡ്രോപ്പ്-ഡൗൺ ലിസ്റ്റിൽ തിരഞ്ഞെടുത്ത് അല്ലെങ്കിൽ "യുഎസ്ഇ ടെസ്റ്റ്" കമാൻഡ് ഉപയോഗിച്ച് നിലവിലെ ഡാറ്റാബേസ് ടെസ്റ്റ് നടത്താം.

SELECT എന്നതിൻ്റെ ഏറ്റവും അടിസ്ഥാന രൂപത്തിൽ നമുക്ക് ആരംഭിക്കാം:

ജീവനക്കാരിൽ നിന്ന് * തിരഞ്ഞെടുക്കുക
ഈ ചോദ്യത്തിൽ, എംപ്ലോയീസ് ടേബിളിൽ നിന്ന് എല്ലാ കോളങ്ങളും ("*" എന്ന് സൂചിപ്പിക്കുന്നത്) തിരികെ നൽകാൻ ഞങ്ങൾ ആവശ്യപ്പെടുന്നു - നിങ്ങൾക്ക് ഇത് "എല്ലാ_ഫീൽഡുകളും എംപ്ലോയീസ്_ടേബിളിൽ നിന്ന് തിരഞ്ഞെടുക്കുക" എന്ന് വായിക്കാം. ഒരു ക്ലസ്റ്റേർഡ് ഇൻഡക്സ് ഉണ്ടെങ്കിൽ, മടങ്ങിയ ഡാറ്റ മിക്കവാറും അത് വഴി അടുക്കും, ഈ സാഹചര്യത്തിൽ ഐഡി കോളം (എന്നാൽ ഇത് പ്രധാനമല്ല, കാരണം മിക്ക കേസുകളിലും ഓർഡർ പ്രകാരം ഞങ്ങൾ തന്നെ അടുക്കുന്നത് വ്യക്തമായി വ്യക്തമാക്കും ...) :

ഐഡി പേര് ജന്മദിനം ഇമെയിൽ സ്ഥാനം ഐഡി വകുപ്പ് ഐഡി വാടക തീയതി മാനേജർ ഐ.ഡി
1000 ഇവാനോവ് I.I. 1955-02-19 [ഇമെയിൽ പരിരക്ഷിതം] 2 1 2015-04-08 ശൂന്യം
1001 പെട്രോവ് പി.പി. 1983-12-03 [ഇമെയിൽ പരിരക്ഷിതം] 3 3 2015-04-08 1003
1002 സിഡോറോവ് എസ്.എസ്. 1976-06-07 [ഇമെയിൽ പരിരക്ഷിതം] 1 2 2015-04-08 1000
1003 ആൻഡ്രീവ് എ.എ. 1982-04-17 [ഇമെയിൽ പരിരക്ഷിതം] 4 3 2015-04-08 1000

പൊതുവേ, MS SQL ഡയലക്‌റ്റിൽ ഒരു SELECT ചോദ്യത്തിൻ്റെ ഏറ്റവും ലളിതമായ രൂപത്തിൽ ഒരു FROM ബ്ലോക്ക് അടങ്ങിയിരിക്കണമെന്നില്ല, ഈ സാഹചര്യത്തിൽ ചില മൂല്യങ്ങൾ ലഭിക്കുന്നതിന് നിങ്ങൾക്ക് ഇത് ഉപയോഗിക്കാം:

5550/100*15, SYSDATETIME(), -- ഡാറ്റാബേസ് സിസ്റ്റം തീയതി ലഭിക്കുന്നത് SIN(0)+COS(0)

(കോളം പേര് ഇല്ല) (കോളം പേര് ഇല്ല) (കോളം പേര് ഇല്ല)
825 2015-04-11 12:12:36.0406743 1

(5550/100*15) എന്ന പദപ്രയോഗം 825 എന്ന ഫലം നൽകി എന്നത് ശ്രദ്ധിക്കുക, എന്നിരുന്നാലും നമ്മൾ ഒരു കാൽക്കുലേറ്ററിൽ കണക്കാക്കിയാൽ മൂല്യം (832.5) ആയിരിക്കും. ഞങ്ങളുടെ പദപ്രയോഗത്തിൽ എല്ലാ സംഖ്യകളും പൂർണ്ണസംഖ്യകളാണെന്ന കാരണത്താലാണ് ഫലം 825 ലഭിച്ചത്, അതിനാൽ ഫലം ഒരു പൂർണ്ണസംഖ്യയാണ്, അതായത്. (5550/100) നമുക്ക് 55 നൽകുന്നു, അല്ല (55.5).

MS SQL-ൽ ഇനിപ്പറയുന്ന ലോജിക് പ്രവർത്തിക്കുന്നുവെന്ന് ഓർമ്മിക്കുക:

  • പൂർണ്ണസംഖ്യ / പൂർണ്ണസംഖ്യ = പൂർണ്ണസംഖ്യ (അതായത് ഈ സാഹചര്യത്തിൽ പൂർണ്ണസംഖ്യ വിഭജനം സംഭവിക്കുന്നു)
  • യഥാർത്ഥ / പൂർണ്ണസംഖ്യ = യഥാർത്ഥമായത്
  • പൂർണ്ണസംഖ്യ / യഥാർത്ഥ = യഥാർത്ഥ
ആ. ഫലം ഒരു വലിയ തരത്തിലേക്ക് പരിവർത്തനം ചെയ്യപ്പെടുന്നു, അതിനാൽ അവസാന 2 കേസുകളിൽ നമുക്ക് ഒരു യഥാർത്ഥ സംഖ്യ ലഭിക്കും (ഗണിതത്തിലെന്നപോലെ ചിന്തിക്കുക - യഥാർത്ഥ സംഖ്യകളുടെ ശ്രേണി പൂർണ്ണസംഖ്യകളുടെ പരിധിയേക്കാൾ വലുതാണ്, അതിനാൽ ഫലം അതിലേക്ക് പരിവർത്തനം ചെയ്യപ്പെടുന്നു):

തിരഞ്ഞെടുക്കുക 123/10, -- 12 123./10, -- 12.3 123/10. -- 12.3
ഇവിടെ (123.) = (123.0), ഈ സാഹചര്യത്തിൽ 0 ഉപേക്ഷിക്കാനും പോയിൻ്റ് മാത്രം ശേഷിക്കാനും കഴിയും.

ഇതേ യുക്തി മറ്റ് ഗണിത പ്രവർത്തനങ്ങൾക്കും ബാധകമാണ്, എന്നാൽ വിഭജനത്തിൻ്റെ കാര്യത്തിൽ ഈ സൂക്ഷ്മത കൂടുതൽ പ്രസക്തമാണ്.

അതിനാൽ, സംഖ്യാ നിരകളുടെ ഡാറ്റ തരം ശ്രദ്ധിക്കുക. ഇതൊരു പൂർണ്ണസംഖ്യയാണെങ്കിൽ, നിങ്ങൾക്ക് ഒരു യഥാർത്ഥ ഫലം ലഭിക്കണമെങ്കിൽ, ഒരു പരിവർത്തനം ഉപയോഗിക്കുക, അല്ലെങ്കിൽ സ്ഥിരാങ്കമായി സൂചിപ്പിച്ചിരിക്കുന്ന സംഖ്യയ്ക്ക് ശേഷം ഒരു ഡോട്ട് ഇടുക (123.).

ഫീൽഡുകൾ പരിവർത്തനം ചെയ്യാൻ നിങ്ങൾക്ക് CAST അല്ലെങ്കിൽ CONVERT ഫംഗ്‌ഷൻ ഉപയോഗിക്കാം. ഉദാഹരണത്തിന്, നമുക്ക് ID ഫീൽഡ് ഉപയോഗിക്കാം, ഇത് int എന്ന തരത്തിലുള്ളതാണ്:

ഐഡി തിരഞ്ഞെടുക്കുക, ഐഡി/100, -- ഇവിടെ പൂർണ്ണസംഖ്യ വിഭജനം സംഭവിക്കും CAST(ID AS ഫ്ലോട്ട്)/100, -- ഫ്ലോട്ട് തരത്തിലേക്ക് പരിവർത്തനം ചെയ്യാൻ CAST ഫംഗ്‌ഷൻ ഉപയോഗിക്കുക CONVERT(float,ID)/100, -- CONVERT ഫംഗ്‌ഷൻ ഉപയോഗിക്കുക ഫ്ലോട്ട് ഐഡി/100 എന്ന തരത്തിലേക്ക് പരിവർത്തനം ചെയ്യാൻ. -- ജീവനക്കാരിൽ നിന്നുള്ള ഒരു യഥാർത്ഥ സംഖ്യയാണ് ഡിനോമിനേറ്റർ എന്ന് വ്യക്തമാക്കി പരിവർത്തനം ഉപയോഗിക്കുക

ഐഡി (കോളം പേര് ഇല്ല) (കോളം പേര് ഇല്ല) (കോളം പേര് ഇല്ല) (കോളം പേര് ഇല്ല)
1000 10 10 10 10.000000
1001 10 10.01 10.01 10.010000
1002 10 10.02 10.02 10.020000
1003 10 10.03 10.03 10.030000

ഒരു കുറിപ്പിൽ. ORACLE ഡാറ്റാബേസിൽ, FROM ബ്ലോക്ക് ഇല്ലാത്ത വാക്യഘടന അസ്വീകാര്യമാണ്; അവിടെ, ഈ ആവശ്യത്തിനായി, ഡ്യുവൽ സിസ്റ്റം ടേബിൾ ഉപയോഗിക്കുന്നു, അതിൽ ഒരു വരി അടങ്ങിയിരിക്കുന്നു:

5550/100*15 തിരഞ്ഞെടുക്കുക, -- കൂടാതെ ORACLE-ൽ ഫലം 832.5 sysdate, sin(0)+cos(0) എന്നതിന് തുല്യമായിരിക്കും.


കുറിപ്പ്.പല RDB-കളിലെയും പട്ടികയുടെ പേരിന് മുമ്പായി സ്കീമ നാമം ഉണ്ടായിരിക്കാം:

dbo. ജീവനക്കാരിൽ നിന്ന് * തിരഞ്ഞെടുക്കുക -- dbo – സ്കീമ നാമം

ഒരു സ്കീമ എന്നത് ഒരു ഡാറ്റാബേസിൻ്റെ ലോജിക്കൽ യൂണിറ്റാണ്, അതിന് അതിൻ്റേതായ പേരുണ്ട് കൂടാതെ പട്ടികകൾ, കാഴ്ചകൾ മുതലായവ പോലുള്ള ഡാറ്റാബേസ് ഒബ്ജക്റ്റുകൾ ഗ്രൂപ്പുചെയ്യാൻ നിങ്ങളെ അനുവദിക്കുന്നു.

വ്യത്യസ്ത ഡാറ്റാബേസുകളിലെ ഒരു സ്കീമയുടെ നിർവചനം വ്യത്യാസപ്പെടാം; ചില സന്ദർഭങ്ങളിൽ, സ്കീമ ഡാറ്റാബേസ് ഉപയോക്താവുമായി നേരിട്ട് ബന്ധപ്പെട്ടിരിക്കുന്നു, അതായത്. ഈ സാഹചര്യത്തിൽ, സ്കീമയും ഉപയോക്താവും പര്യായപദങ്ങളാണെന്നും സ്കീമയിൽ സൃഷ്ടിച്ച എല്ലാ വസ്തുക്കളും പ്രധാനമായും ഈ ഉപയോക്താവിൻ്റെ ഒബ്ജക്റ്റുകളാണെന്നും നമുക്ക് പറയാം. MS SQL-ൽ, ഒരു സ്കീമ ഒരു സ്വതന്ത്ര ലോജിക്കൽ യൂണിറ്റാണ്, അത് സ്വന്തമായി സൃഷ്ടിക്കാൻ കഴിയും (സ്കീമ സൃഷ്ടിക്കുക കാണുക).

ഡിഫോൾട്ടായി, MS SQL ഡാറ്റാബേസിൽ dbo (ഡാറ്റാബേസ് ഉടമ) എന്ന പേരിൽ ഒരു സ്കീമ സൃഷ്ടിക്കപ്പെടുന്നു, കൂടാതെ എല്ലാ സൃഷ്ടിച്ച ഒബ്ജക്റ്റുകളും ഈ സ്കീമയിൽ സ്ഥിരസ്ഥിതിയായി സൃഷ്ടിക്കപ്പെടുന്നു. അതനുസരിച്ച്, ഒരു ചോദ്യത്തിൽ ഒരു പട്ടികയുടെ പേര് ഞങ്ങൾ ലളിതമായി വ്യക്തമാക്കിയാൽ, അത് നിലവിലെ ഡാറ്റാബേസിൻ്റെ dbo സ്കീമയിൽ തിരയപ്പെടും. ഒരു നിർദ്ദിഷ്‌ട സ്‌കീമയിൽ ഒരു ഒബ്‌ജക്‌റ്റ് സൃഷ്‌ടിക്കണമെങ്കിൽ, സ്‌കീമയുടെ പേരിനൊപ്പം ഒബ്‌ജക്‌റ്റ് നാമവും ഞങ്ങൾ മുൻകൂട്ടി നൽകേണ്ടതുണ്ട്, ഉദാഹരണത്തിന്, “പട്ടിക സൃഷ്‌ടിക്കുക schema_name.table_name(...)”.

MS SQL-ൻ്റെ കാര്യത്തിൽ, സ്കീമയുടെ പേരിന് മുമ്പായി സ്കീമ സ്ഥിതിചെയ്യുന്ന ഡാറ്റാബേസിൻ്റെ പേരും ഉണ്ടായിരിക്കാം:

* Test.dbo.Employees-ൽ നിന്ന് തിരഞ്ഞെടുക്കുക -- database_name.schema_name.table
ഈ വിശദീകരണം ഉപയോഗപ്രദമാകും, ഉദാഹരണത്തിന്:

  • ഒരു അഭ്യർത്ഥനയിൽ, വ്യത്യസ്ത സ്‌കീമകളിലോ ഡാറ്റാബേസുകളിലോ ഉള്ള ഒബ്‌ജക്‌റ്റുകൾ ഞങ്ങൾ ആക്‌സസ് ചെയ്യുന്നു
  • നിങ്ങൾ ഒരു സ്കീമയിൽ നിന്നോ ഡാറ്റാബേസിൽ നിന്നോ മറ്റൊന്നിലേക്ക് ഡാറ്റ കൈമാറേണ്ടതുണ്ട്
  • ഒരു ഡാറ്റാബേസിൽ ആയിരിക്കുമ്പോൾ, നിങ്ങൾ മറ്റൊരു ഡാറ്റാബേസിൽ നിന്ന് ഡാറ്റ അഭ്യർത്ഥിക്കേണ്ടതുണ്ട്
  • ഇത്യാദി.
ഡാറ്റാബേസ് ആർക്കിടെക്ചർ, പ്രത്യേകിച്ച് വലിയ ഡാറ്റാബേസുകൾ വികസിപ്പിക്കുമ്പോൾ ഉപയോഗിക്കുന്നതിന് ഉപയോഗപ്രദമായ വളരെ സൗകര്യപ്രദമായ ഉപകരണമാണ് സ്കീമ.

കൂടാതെ, അഭ്യർത്ഥന വാചകത്തിൽ നമുക്ക് ഒറ്റ-വരി "-- ...", മൾട്ടി-ലൈൻ "/* ... */" എന്നീ രണ്ട് കമൻ്റുകളും ഉപയോഗിക്കാമെന്ന കാര്യം മറക്കരുത്. അഭ്യർത്ഥന വലുതും സങ്കീർണ്ണവുമാണെങ്കിൽ, കുറച്ച് സമയത്തിന് ശേഷം അതിൻ്റെ ഘടനയെ ഓർത്തുവെക്കാനോ മനസ്സിലാക്കാനോ അഭിപ്രായങ്ങൾ നിങ്ങളെയോ മറ്റാരെങ്കിലുമോ വളരെയധികം സഹായിക്കും.

പട്ടികയിൽ ധാരാളം നിരകൾ ഉണ്ടെങ്കിൽ, പ്രത്യേകിച്ച് പട്ടികയിൽ ഇനിയും ധാരാളം വരികൾ ഉണ്ടെങ്കിൽ, കൂടാതെ ഞങ്ങൾ നെറ്റ്‌വർക്കിലൂടെ ഡാറ്റാബേസിലേക്ക് അന്വേഷണങ്ങൾ നടത്തുകയാണെങ്കിൽ, നേരിട്ടുള്ള ലിസ്റ്റിംഗ് ഉപയോഗിച്ച് തിരഞ്ഞെടുക്കുന്നതാണ് നല്ലത്. നിങ്ങൾക്ക് ആവശ്യമുള്ള ഫീൽഡുകൾ, കോമകളാൽ വേർതിരിച്ചിരിക്കുന്നു:

ഐഡി തിരഞ്ഞെടുക്കുക, ജീവനക്കാരിൽ നിന്ന് പേര്

ആ. പട്ടികയിൽ നിന്ന് ഐഡിയും നെയിം ഫീൽഡുകളും തിരികെ നൽകിയാൽ മതിയെന്ന് ഞങ്ങൾ ഇവിടെ പറയുന്നു. ഫലം ഇനിപ്പറയുന്നതായിരിക്കും (വഴി, നെയിം ഫീൽഡ് സൃഷ്ടിച്ച സൂചിക ഉപയോഗിക്കാൻ ഇവിടെ ഒപ്റ്റിമൈസർ തീരുമാനിച്ചു):

ഐഡി പേര്
1003 ആൻഡ്രീവ് എ.എ.
1000 ഇവാനോവ് I.I.
1001 പെട്രോവ് പി.പി.
1002 സിഡോറോവ് എസ്.എസ്.

ഒരു കുറിപ്പിൽ.ചില സമയങ്ങളിൽ ഡാറ്റ എങ്ങനെ വീണ്ടെടുക്കുന്നു എന്ന് നോക്കുന്നത് ഉപയോഗപ്രദമാണ്, ഉദാഹരണത്തിന്, ഏത് സൂചികകളാണ് ഉപയോഗിക്കുന്നതെന്ന് കണ്ടെത്താൻ. “ഡിസ്‌പ്ലേ എസ്റ്റിമേറ്റ് എക്‌സിക്യൂഷൻ പ്ലാൻ” ബട്ടണിൽ ക്ലിക്ക് ചെയ്‌ത് അല്ലെങ്കിൽ “യഥാർത്ഥ എക്‌സിക്യൂഷൻ പ്ലാൻ ഉൾപ്പെടുത്തുക - ഫലത്തിൽ യഥാർത്ഥ അന്വേഷണ നിർവ്വഹണ പ്ലാൻ ഉൾപ്പെടുത്തുക” (ഈ സാഹചര്യത്തിൽ, ഞങ്ങൾക്ക് യഥാക്രമം യഥാർത്ഥ പ്ലാൻ മാത്രമേ കാണാനാകൂ അഭ്യർത്ഥന നടപ്പിലാക്കിയ ശേഷം):

ഒരു ചോദ്യം ഒപ്റ്റിമൈസ് ചെയ്യുമ്പോൾ എക്സിക്യൂഷൻ പ്ലാൻ വിശകലനം വളരെ ഉപകാരപ്രദമാണ്; ഏതൊക്കെ സൂചികകളാണ് നഷ്‌ടമായത് അല്ലെങ്കിൽ ഏതൊക്കെ സൂചികകൾ ഉപയോഗിക്കാത്തതും നീക്കംചെയ്യാൻ കഴിയുന്നതും കണ്ടെത്താൻ ഇത് നിങ്ങളെ അനുവദിക്കുന്നു.

നിങ്ങൾ ഇപ്പോൾ DML പഠിക്കാൻ തുടങ്ങിയെങ്കിൽ, ഇപ്പോൾ ഇത് നിങ്ങൾക്ക് അത്ര പ്രധാനമല്ല, ശ്രദ്ധിക്കുക, നിങ്ങൾക്ക് അതിനെക്കുറിച്ച് സുരക്ഷിതമായി മറക്കാൻ കഴിയും (ഒരുപക്ഷേ നിങ്ങൾക്ക് ഇത് ഒരിക്കലും ആവശ്യമില്ല) - ഞങ്ങളുടെ പ്രാരംഭ ലക്ഷ്യം DML ഭാഷയുടെ അടിസ്ഥാനകാര്യങ്ങൾ പഠിക്കുക എന്നതാണ്. അവ എങ്ങനെ ശരിയായി ഉപയോഗിക്കാമെന്ന് മനസിലാക്കുക, ഒപ്റ്റിമൈസേഷൻ ഇതിനകം ഒരു പ്രത്യേക കലയാണ്. ഒരു വിഷയ വീക്ഷണകോണിൽ നിന്ന് ശരിയായ ഫലം നൽകുന്ന ശരിയായി എഴുതിയ ഒരു ചോദ്യം നിങ്ങളുടെ പക്കലുണ്ടെന്നത് ചിലപ്പോൾ വളരെ പ്രധാനമാണ്, കൂടാതെ വ്യക്തിഗത ആളുകൾ അത് ഇതിനകം ഒപ്റ്റിമൈസ് ചെയ്യുന്നു. ആദ്യം, ലക്ഷ്യം നേടുന്നതിന് ഏത് മാർഗവും ഉപയോഗിച്ച് ചോദ്യങ്ങൾ എങ്ങനെ ശരിയായി എഴുതാമെന്ന് നിങ്ങൾ പഠിക്കേണ്ടതുണ്ട്. നിങ്ങൾ ഇപ്പോൾ നേടേണ്ട പ്രധാന ലക്ഷ്യം നിങ്ങളുടെ അന്വേഷണത്തിന് ശരിയായ ഫലങ്ങൾ നൽകുകയെന്നതാണ്.

പട്ടിക അപരനാമങ്ങൾ ക്രമീകരിക്കുന്നു

നിരകൾ ലിസ്റ്റുചെയ്യുമ്പോൾ, FROM ബ്ലോക്കിൽ സ്ഥിതിചെയ്യുന്ന പട്ടികയുടെ പേര് അവയ്ക്ക് മുമ്പായി നൽകാം:

ജീവനക്കാരിൽ നിന്ന് Employees.ID, Employees.പേര് തിരഞ്ഞെടുക്കുക

എന്നാൽ ഈ വാക്യഘടന സാധാരണയായി ഉപയോഗിക്കുന്നതിന് അസൗകര്യമാണ്, കാരണം പട്ടികയുടെ പേര് ദൈർഘ്യമേറിയതായിരിക്കാം. ഈ ആവശ്യങ്ങൾക്കായി, സാധാരണയായി ചെറിയ പേരുകൾ വ്യക്തമാക്കുകയും ഉപയോഗിക്കുകയും ചെയ്യുന്നു - അപരനാമങ്ങൾ:

എംപ്ലോയീസ് എന്ന നിലയിൽ emp.ID, emp.Name തിരഞ്ഞെടുക്കുക
അഥവാ

എംപ്ലോയീസ് emp-ൽ നിന്ന് emp.ID, emp.Name തിരഞ്ഞെടുക്കുക -- AS കീവേഡ് ഒഴിവാക്കാം (ഞാൻ ഈ ഓപ്ഷൻ തിരഞ്ഞെടുക്കുന്നു)

ഇവിടെ emp എന്നത് എംപ്ലോയീസ് ടേബിളിൻ്റെ അപരനാമമാണ്, അത് ഈ SELECT പ്രസ്താവനയുടെ സന്ദർഭത്തിൽ ഉപയോഗിക്കാനാകും. ആ. ഈ SELECT പ്രസ്‌താവനയുടെ പശ്ചാത്തലത്തിൽ ഞങ്ങൾ പട്ടികയ്‌ക്ക് ഒരു പുതിയ പേര് നൽകുന്നു എന്ന് നമുക്ക് പറയാം.

തീർച്ചയായും, ഈ സാഹചര്യത്തിൽ, അന്വേഷണ ഫലങ്ങൾ "സെലക്ട് ഐഡി, ജീവനക്കാരുടെ പേര്" എന്നതിന് തുല്യമായിരിക്കും. എന്തുകൊണ്ടാണ് ഇത് ആവശ്യമായി വരുന്നത് എന്നത് പിന്നീട് വ്യക്തമാകും (ഈ ഭാഗത്ത് പോലും ഇല്ല), ഇപ്പോൾ പട്ടികയുടെ പേര് നേരിട്ട് അല്ലെങ്കിൽ ഒരു അപരനാമം ഉപയോഗിച്ച് കോളത്തിൻ്റെ പേരിന് മുമ്പായി (വ്യക്തമാക്കാം) എന്ന് ഞങ്ങൾ ഓർക്കുന്നു. ഇവിടെ നിങ്ങൾക്ക് രണ്ട് കാര്യങ്ങളിൽ ഒന്ന് ഉപയോഗിക്കാം, അതായത്. നിങ്ങൾ ഒരു അപരനാമം സജ്ജീകരിക്കുകയാണെങ്കിൽ, നിങ്ങൾ അത് ഉപയോഗിക്കേണ്ടതുണ്ട്, എന്നാൽ നിങ്ങൾക്ക് ഇനി പട്ടികയുടെ പേര് ഉപയോഗിക്കാൻ കഴിയില്ല.

ഒരു കുറിപ്പിൽ. ORACLE-ൽ, AS കീവേഡ് ഇല്ലാതെ ഒരു പട്ടിക അപരനാമം വ്യക്തമാക്കുന്നതിനുള്ള ഓപ്ഷൻ മാത്രമേ അനുവദിക്കൂ.

DISTINCT - ഡ്യൂപ്ലിക്കേറ്റ് വരികൾ നിരസിക്കുന്നു

അന്വേഷണ ഫലത്തിൽ നിന്ന് തനിപ്പകർപ്പ് വരികൾ നിരസിക്കാൻ DISTINCT കീവേഡ് ഉപയോഗിക്കുന്നു. ഏകദേശം പറഞ്ഞാൽ, ആദ്യം DISTINCT ഓപ്ഷൻ ഇല്ലാതെ ഒരു ചോദ്യം എക്സിക്യൂട്ട് ചെയ്യുന്നത് സങ്കൽപ്പിക്കുക, തുടർന്ന് ഫലത്തിൽ നിന്ന് എല്ലാ തനിപ്പകർപ്പുകളും നിരസിക്കുക. ഒരു ഉദാഹരണം ഉപയോഗിച്ച് കൂടുതൽ വ്യക്തതയ്ക്കായി നമുക്ക് ഇത് തെളിയിക്കാം:

ഡെമോൺസ്‌ട്രേഷനായി നമുക്ക് ഒരു താൽക്കാലിക ടേബിൾ സൃഷ്‌ടിക്കാം ടേബിൾ സൃഷ്‌ടിക്കുക (ID,Col1, Col2,Col3)VALUES (1,"A","A","A"), (2,"A","B","C"), (3,"C"," A","B "), (4,"A","A","B"), (5,"B","B","B"), (6,"A","A" ,"B") , (7,"A","A","A"), (8,"C","A","B"), (9,"C","A"," B"), ( 10,"A","A","B"), (11,"A",NULL,"B"), (12,"A",NULL,"B") - നമുക്ക് നോക്കാം #ട്രാഷിൽ നിന്ന് DISTINCT SELECT Col1,Col2,Col3 എന്ന ഓപ്‌ഷൻ ഇല്ലാതെ എന്ത് അഭ്യർത്ഥന നൽകുന്നു -- DISTINCT SELECT DISTINCT ഓപ്‌ഷൻ Col1,Col2,Col3 #ട്രാഷിൽ നിന്ന് -- താൽകാലിക പട്ടിക ഇല്ലാതാക്കുക DROP TABLE #Trash

ദൃശ്യപരമായി, ഇത് ഇതുപോലെ കാണപ്പെടും (എല്ലാ തനിപ്പകർപ്പുകളും ഒരേ നിറത്തിൽ അടയാളപ്പെടുത്തിയിരിക്കുന്നു):

കൂടുതൽ പ്രായോഗിക ഉദാഹരണം ഉപയോഗിച്ച് ഇത് എവിടെ പ്രയോഗിക്കാമെന്ന് നോക്കാം - എംപ്ലോയീസ് ടേബിളിൽ നിന്ന് ഞങ്ങൾ അദ്വിതീയ ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡൻ്റിഫയറുകൾ മാത്രമേ തിരികെ നൽകൂ (അതായത്, ജീവനക്കാർ രജിസ്റ്റർ ചെയ്തിട്ടുള്ള വകുപ്പുകളുടെ ഐഡികൾ ഞങ്ങൾ കണ്ടെത്തും):

ജീവനക്കാരിൽ നിന്ന് വ്യത്യസ്തമായ വകുപ്പ് ഐഡി തിരഞ്ഞെടുക്കുക

ഇവിടെ നമുക്ക് 4 വരികൾ ലഭിച്ചു, കാരണം... ഞങ്ങളുടെ പട്ടികയിൽ ആവർത്തിക്കുന്ന കോമ്പിനേഷനുകളൊന്നുമില്ല (DepartmentID, PositionID).

നമുക്ക് ഒരു നിമിഷം DDL-ലേക്ക് മടങ്ങാം.

ഡെമോ ഉദാഹരണങ്ങൾക്കായുള്ള ഡാറ്റ തീർന്നുപോകാൻ തുടങ്ങിയതിനാൽ, കൂടുതൽ വിശദമായും വ്യക്തമായും സംസാരിക്കാൻ ഞങ്ങൾ ആഗ്രഹിക്കുന്നതിനാൽ, നമുക്ക് ഞങ്ങളുടെ തൊഴിൽ പട്ടിക അൽപ്പം വിപുലീകരിക്കാം. കൂടാതെ, "ആവർത്തനമാണ് പഠനത്തിൻ്റെ മാതാവ്" എന്ന് അവർ പറയുന്നതുപോലെ, നമുക്ക് ഒരു ചെറിയ DDL ഓർമ്മിക്കാം, കൂടാതെ, നമുക്ക് വീണ്ടും കുറച്ച് മുന്നോട്ട് പോയി അപ്‌ഡേറ്റ് പ്രസ്താവന പ്രയോഗിക്കാം:

ഞങ്ങൾ പുതിയ കോളങ്ങൾ സൃഷ്ടിക്കുന്നു ALTER TABLE ജീവനക്കാർ അവസാന നാമം nvarchar(30) ചേർക്കുക, -- അവസാന നാമം FirstName nvarchar(30), -- ആദ്യനാമം MiddleName nvarchar(30), -- മധ്യനാമം Salary float, -- ചില യൂണിറ്റുകളിൽ തീർച്ചയായും ശമ്പളം BonusPercent float -- GO ശമ്പളത്തിൽ നിന്ന് ബോണസ് കണക്കാക്കുന്നതിനുള്ള ശതമാനം -- ഡാറ്റ ഉപയോഗിച്ച് അവ പൂരിപ്പിക്കുക (ചില ഡാറ്റ മനഃപൂർവ്വം ഒഴിവാക്കിയിരിക്കുന്നു) ജീവനക്കാരെ അപ്‌ഡേറ്റ് ചെയ്യുക അവസാനനാമം=N"Ivanov", FirstName=N"Ivan", MiddleName=N"Ivanovich", ശമ്പളം=5000,ബോണസ് ശതമാനം= 50 എവിടെ ഐഡി=1000 -- ഇവാനോവ് ഐ.ഐ. ജീവനക്കാരുടെ അപ്‌ഡേറ്റ് അവസാനനാമം=N"Petr",FirstName=N"Petr",MiddleName=N"Petr",Salary=1500,BonusPercent= 15 WHERE ID=1001 -- Petrov P.P. ജീവനക്കാരുടെ അപ്‌ഡേറ്റ് അവസാനത്തെ പേര്=N"സിഡോർ",ആദ്യനാമം=N"സിഡോർ",മധ്യനാമം=NULL, ശമ്പളം=2500,BonusPercent=NULL എവിടെ ഐഡി=1002 -- Sidorov S.S. ജീവനക്കാരുടെ അപ്‌ഡേറ്റ് അവസാനനാമം=N"ആന്ദ്രീവ്",ആദ്യനാമം=N"ആന്ദ്രേ",മധ്യനാമം=NULL, ശമ്പളം=2000,BonusPercent= 30 എവിടെ ഐഡി=1003 -- Andreev A.A.

ഡാറ്റ വിജയകരമായി അപ്‌ഡേറ്റ് ചെയ്‌തുവെന്ന് ഉറപ്പാക്കാം:

ജീവനക്കാരിൽ നിന്ന് * തിരഞ്ഞെടുക്കുക

ഐഡി പേര് പേരിന്റെ അവസാന ഭാഗം പേരിന്റെ ആദ്യഭാഗം പേരിന്റെ മധ്യഭാഗം ശമ്പളം ബോണസ് ശതമാനം
1000 ഇവാനോവ് I.I. ഇവാനോവ് ഇവാൻ ഇവാനോവിച്ച് 5000 50
1001 പെട്രോവ് പി.പി. പെട്രോവ് പീറ്റർ പെട്രോവിച്ച് 1500 15
1002 സിഡോറോവ് എസ്.എസ്. സിഡോറോവ് സിഡോർ ശൂന്യം 2500 ശൂന്യം
1003 ആൻഡ്രീവ് എ.എ. ആൻഡ്രീവ് ആന്ദ്രേ ശൂന്യം 2000 30

അന്വേഷണ നിരകൾക്കായി അപരനാമങ്ങൾ ക്രമീകരിക്കുന്നു

എഴുതുന്നതിനേക്കാൾ ഇവിടെ കാണിക്കുന്നത് എളുപ്പമാണെന്ന് ഞാൻ കരുതുന്നു:

തിരഞ്ഞെടുക്കുക -- കണക്കാക്കിയ കോളത്തിന് പേര് നൽകുക LastName+" "+FirstName+" "+MiddleName പൂർണ്ണമായ പേര്, -- ഇരട്ട ഉദ്ധരണികൾ ഉപയോഗിക്കുക, കാരണം ഒരു സ്‌പെയ്‌സ് ഉപയോഗിക്കുന്നത് HireDate ആയി "സ്വീകരണ തീയതി", -- ചതുര ബ്രാക്കറ്റുകളുടെ ഉപയോഗം, കാരണം സ്പേസ് ജന്മദിനം ആയി ഉപയോഗിക്കുന്നു [ജനന തീയതി], -- AS എന്ന വാക്ക് ആവശ്യമില്ല, ജീവനക്കാരിൽ നിന്നുള്ള ശമ്പളം ZP

പൂർണ്ണമായ പേര് രസീത് തീയതി ജനനത്തീയതി ZP
ഇവാനോവ് ഇവാൻ ഇവാനോവിച്ച് 2015-04-08 1955-02-19 5000
പെട്രോവ് പീറ്റർ പെട്രോവിച്ച് 2015-04-08 1983-12-03 1500
ശൂന്യം 2015-04-08 1976-06-07 2500
ശൂന്യം 2015-04-08 1982-04-17 2000

നമുക്ക് കാണാനാകുന്നതുപോലെ, ഞങ്ങൾ വ്യക്തമാക്കിയ കോളം അപരനാമങ്ങൾ ഫലമായുണ്ടാകുന്ന പട്ടികയുടെ തലക്കെട്ടിൽ പ്രതിഫലിക്കുന്നു. യഥാർത്ഥത്തിൽ, കോളം അപരനാമങ്ങളുടെ പ്രധാന ലക്ഷ്യം ഇതാണ്.

ദയവായി ശ്രദ്ധിക്കുക, കാരണം അവസാനത്തെ 2 ജീവനക്കാർക്ക് മധ്യനാമം വ്യക്തമാക്കിയിട്ടില്ല (NULL മൂല്യം), തുടർന്ന് "LastName+" "+FirstName+" "+MiddleName" എന്ന പദപ്രയോഗത്തിൻ്റെ ഫലവും NULL ഞങ്ങൾക്ക് തിരികെ നൽകി.

MS SQL-ൽ സ്ട്രിംഗുകൾ ചേരുന്നതിന് (ചേർക്കുക, കൂട്ടിച്ചേർക്കുക) "+" ചിഹ്നം ഉപയോഗിക്കുന്നു.

NULL ഉൾപ്പെടുന്ന എല്ലാ പദപ്രയോഗങ്ങളും (ഉദാഹരണത്തിന്, NULL കൊണ്ട് വിഭജിക്കുക, NULL ഉപയോഗിച്ച് കൂട്ടിച്ചേർക്കുക) NULL തിരികെ നൽകുമെന്ന് ഓർമ്മിക്കുക.

ഒരു കുറിപ്പിൽ.
ORACLE-ൻ്റെ കാര്യത്തിൽ, സ്ട്രിംഗുകൾ കൂട്ടിച്ചേർക്കാൻ "||" ഓപ്പറേറ്റർ ഉപയോഗിക്കുന്നു ഒപ്പം "അവസാന നാമം||" "||ആദ്യനാമം||" "||മിഡിൽനെയിം" പോലെ കാണപ്പെടും. ORACLE-നെ സംബന്ധിച്ചിടത്തോളം, ഇതിന് സ്ട്രിംഗ് തരങ്ങൾക്ക് ഒരു അപവാദം ഉണ്ടെന്നത് ശ്രദ്ധിക്കേണ്ടതാണ്, അവയ്ക്ക് NULL ഉം ശൂന്യമായ സ്ട്രിംഗും "" ഒന്നുതന്നെയാണ്, അതിനാൽ ORACLE-ൽ അവസാനത്തെ 2 ജീവനക്കാരായ “സിഡോർ സിഡോർ”, “ആൻഡ്രി” എന്നിവർക്ക് അത്തരമൊരു പദപ്രയോഗം തിരികെ നൽകും. ആൻഡ്രീവ്". ORACLE 12c-ൻ്റെ സമയത്ത്, എനിക്കറിയാവുന്നിടത്തോളം, ഈ സ്വഭാവം മാറ്റുന്ന ഒരു ഓപ്ഷനും ഇല്ല (ഞാൻ തെറ്റാണെങ്കിൽ, ദയവായി എന്നെ തിരുത്തുക). ഇവിടെ ഇത് നല്ലതോ ചീത്തയോ എന്ന് വിലയിരുത്താൻ എനിക്ക് ബുദ്ധിമുട്ടാണ്, കാരണം... ചില സന്ദർഭങ്ങളിൽ, ഒരു NULL സ്ട്രിംഗിൻ്റെ സ്വഭാവം MS SQL-ലും മറ്റുള്ളവയിൽ ORACLE-ലും ഉള്ളതുപോലെ കൂടുതൽ സൗകര്യപ്രദമാണ്.

ORACLE-ൽ, മുകളിൽ ലിസ്റ്റ് ചെയ്തിരിക്കുന്ന എല്ലാ കോളം അപരനാമങ്ങളും സാധുവാണ്, ഒഴികെ [...].


ISNULL ഫംഗ്‌ഷൻ ഉപയോഗിച്ച് നിർമ്മാണം വേലിയിറക്കാതിരിക്കാൻ, MS SQL-ൽ നമുക്ക് CONCAT ഫംഗ്‌ഷൻ ഉപയോഗിക്കാം. നമുക്ക് 3 ഓപ്ഷനുകൾ പരിഗണിക്കുകയും താരതമ്യം ചെയ്യുകയും ചെയ്യാം:

LastName+" "+FirstName+" "+MiddleName FullName1, -- ശൂന്യമായ സ്ട്രിംഗുകൾ ഉപയോഗിച്ച് NULL മാറ്റിസ്ഥാപിക്കുന്നതിനുള്ള 2 ഓപ്‌ഷനുകൾ "" (ഒരാക്കിളിലെ അതേ സ്വഭാവമാണ് ഞങ്ങൾക്ക് ലഭിക്കുന്നത്) ISNULL(അവസാന നാമം,"")+""+ISNULL(ആദ്യനാമം," ")+ " "+ISNULL(Middlename,"") FullName2, CONCAT(അവസാനനാമം," ",ആദ്യപ്പേര്," ",മധ്യനാമം) പൂർണ്ണനാമം3 ജീവനക്കാരിൽ നിന്ന്

പൂർണ്ണനാമം1 പൂർണ്ണനാമം2 പൂർണ്ണനാമം3
ഇവാനോവ് ഇവാൻ ഇവാനോവിച്ച് ഇവാനോവ് ഇവാൻ ഇവാനോവിച്ച് ഇവാനോവ് ഇവാൻ ഇവാനോവിച്ച്
പെട്രോവ് പീറ്റർ പെട്രോവിച്ച് പെട്രോവ് പീറ്റർ പെട്രോവിച്ച് പെട്രോവ് പീറ്റർ പെട്രോവിച്ച്
ശൂന്യം സിഡോറോവ് സിഡോർ സിഡോറോവ് സിഡോർ
ശൂന്യം ആൻഡ്രീവ് ആൻഡ്രി ആൻഡ്രീവ് ആൻഡ്രി

MS SQL-ൽ, തുല്യ ചിഹ്നം ഉപയോഗിച്ച് അപരനാമങ്ങളും വ്യക്തമാക്കാം:

തിരഞ്ഞെടുക്കുക "സ്വീകരണ തീയതി"=ഹൈർഡേറ്റ്, -- "..." കൂടാതെ […] കൂടാതെ നിങ്ങൾക്ക് "..." [ജനന തീയതി]=ജന്മദിനം, ZP=ജീവനക്കാരുടെ ശമ്പളം

ഒരു അപരനാമം വ്യക്തമാക്കുന്നതിന് AS കീവേഡ് അല്ലെങ്കിൽ തുല്യ ചിഹ്നം ഉപയോഗിക്കുന്നത് ഒരുപക്ഷേ അഭിരുചിയുടെ കാര്യമാണ്. എന്നാൽ മറ്റുള്ളവരുടെ അഭ്യർത്ഥനകൾ വിശകലനം ചെയ്യുമ്പോൾ, ഈ അറിവ് ഉപയോഗപ്രദമാകും.

അവസാനമായി, ലാറ്റിൻ പ്രതീകങ്ങളും അക്കങ്ങളും മാത്രം ഉപയോഗിച്ച് അപരനാമങ്ങൾക്കായി പേരുകൾ സജ്ജീകരിക്കുന്നതാണ് നല്ലതെന്ന് ഞാൻ പറയും, "...", "...", […] എന്നിവയുടെ ഉപയോഗം ഒഴിവാക്കുക, അതായത്, പട്ടികകൾക്ക് പേരിടുമ്പോൾ ഞങ്ങൾ ഉപയോഗിച്ച അതേ നിയമങ്ങൾ ഉപയോഗിക്കുക. . കൂടാതെ, ഉദാഹരണങ്ങളിൽ ഞാൻ അത്തരം പേരുകൾ മാത്രമേ ഉപയോഗിക്കൂ, കൂടാതെ "...", "..." കൂടാതെ […].

അടിസ്ഥാന SQL അരിത്മെറ്റിക് ഓപ്പറേറ്റർമാർ


കണക്ക് ഓപ്പറേറ്റർമാരുടെ എക്സിക്യൂഷൻ മുൻഗണന ഗണിതശാസ്ത്രത്തിലെ പോലെ തന്നെയാണ്. ആവശ്യമെങ്കിൽ, പരാൻതീസിസ് ഉപയോഗിച്ച് ഓപ്പറേറ്റർമാരുടെ പ്രയോഗത്തിൻ്റെ ക്രമം മാറ്റാവുന്നതാണ് - (a+b)*(x/(y-z)).

NULL ഉപയോഗിച്ചുള്ള ഏതൊരു പ്രവർത്തനവും NULL ഉൽപ്പാദിപ്പിക്കുമെന്ന് ഞാൻ ഒരിക്കൽ കൂടി ആവർത്തിക്കുന്നു, ഉദാഹരണത്തിന്: 10+NULL, NULL*15/3, 100/NULL - ഇതെല്ലാം NULL-ൽ കലാശിക്കും. ആ. ലളിതമായി പറഞ്ഞാൽ, നിർവചിക്കാത്ത മൂല്യത്തിന് ഒരു നിശ്ചിത ഫലം നൽകാൻ കഴിയില്ല. നിങ്ങളുടെ ചോദ്യം രചിക്കുമ്പോൾ ഇത് കണക്കിലെടുക്കുക, ആവശ്യമെങ്കിൽ, ISNULL, COALESCE ഫംഗ്ഷനുകൾ ഉപയോഗിച്ച് NULL മൂല്യങ്ങൾ കൈകാര്യം ചെയ്യുക:

ID, പേര്, ശമ്പളം/100*ഫലം 1 ആയി ബോണസ് ശതമാനം തിരഞ്ഞെടുക്കുക, -- NULL മൂല്യങ്ങൾ പ്രോസസ്സ് ചെയ്യാതെ തന്നെ ശമ്പളം/100*ISNULL(BonusPercent,0) ഫലത്തിൽ 2, -- ISNULL ഫംഗ്‌ഷൻ ഉപയോഗിക്കുക Salary/100*COALESCE,(BonusPercent) ഫലം3 - - ജീവനക്കാരിൽ നിന്നുള്ള COALESCE എന്ന ഫംഗ്‌ഷൻ ഉപയോഗിക്കുക

COALESCE ഫംഗ്‌ഷനെക്കുറിച്ച് ഞാൻ നിങ്ങളോട് കുറച്ച് പറയും:

COALESCE (expr1, expr2, ..., exprn) - മൂല്യങ്ങളുടെ പട്ടികയിൽ നിന്ന് ആദ്യത്തെ NULL അല്ലാത്ത മൂല്യം നൽകുന്നു.

COALESCE (f1, f1*f2, f2*f3) val തിരഞ്ഞെടുക്കുക -- ഈ സാഹചര്യത്തിൽ മൂന്നാമത്തെ മൂല്യം തിരികെ നൽകും (null f1, 2 f2, 3 f3) q

ഞാൻ കൂടുതലും DML നിർമ്മിതികളെക്കുറിച്ച് സംസാരിക്കുന്നതിലാണ് ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്നത്, ഉദാഹരണങ്ങളിൽ ദൃശ്യമാകുന്ന ഫംഗ്ഷനുകളെ കുറിച്ച് ഞാൻ സംസാരിക്കില്ല. ഒരു പ്രത്യേക ഫംഗ്‌ഷൻ എന്താണ് ചെയ്യുന്നതെന്ന് നിങ്ങൾക്ക് മനസ്സിലാകുന്നില്ലെങ്കിൽ, ഇൻ്റർനെറ്റിൽ അതിൻ്റെ വിവരണത്തിനായി നോക്കുക, നിങ്ങൾക്ക് ഒരേസമയം ഫംഗ്‌ഷനുകളുടെ ഗ്രൂപ്പ് വഴി വിവരങ്ങൾക്കായി തിരയാനും കഴിയും, ഉദാഹരണത്തിന്, Google “MS SQL സ്ട്രിംഗ് ഫംഗ്‌ഷനുകൾ”, “MS SQL” എന്നിവയിൽ തിരയുന്നതിലൂടെ. ഗണിത പ്രവർത്തനങ്ങൾ" അല്ലെങ്കിൽ "MS SQL പ്രവർത്തനങ്ങൾ" NULL പ്രോസസ്സിംഗ്." ഫംഗ്ഷനുകളിൽ ധാരാളം വിവരങ്ങൾ ഉണ്ട്, നിങ്ങൾക്ക് അത് എളുപ്പത്തിൽ കണ്ടെത്താനാകും. ഉദാഹരണത്തിന്, MSDN ലൈബ്രറിയിൽ, നിങ്ങൾക്ക് COALESCE ഫംഗ്ഷനെ കുറിച്ച് കൂടുതൽ കണ്ടെത്താനാകും:

MSDN-ൽ നിന്നുള്ള ക്ലിപ്പിംഗ് COALESCE, CASE എന്നിവയുടെ താരതമ്യം

COALESCE എക്സ്പ്രഷൻ CASE എക്സ്പ്രഷനുള്ള ഒരു വാക്യഘടന കുറുക്കുവഴിയാണ്. ഇതിനർത്ഥം COALESCE(expression1,...n) ഇനിപ്പറയുന്ന CASE എക്‌സ്‌പ്രഷൻ ആയി ക്വറി ഒപ്റ്റിമൈസർ മാറ്റിയെഴുതിയിരിക്കുന്നു എന്നാണ്:

കേസ് എപ്പോൾ (എക്സ്പ്രഷൻ1 അസാധുവല്ല) പിന്നെ എക്സ്പ്രഷൻ1 എപ്പോൾ (എക്സ്പ്രഷൻ2 ശൂന്യമല്ല) പിന്നെ എക്സ്പ്രഷൻ2 ... മറ്റെല്ലാ എക്സ്പ്രഷൻഎൻ അവസാനം

ഉദാഹരണത്തിന്, വിഭജനത്തിൻ്റെ (%) ശേഷിക്കുന്ന ഭാഗം നിങ്ങൾക്ക് എങ്ങനെ ഉപയോഗിക്കാമെന്ന് നോക്കാം. നിങ്ങൾക്ക് റെക്കോർഡുകൾ ഗ്രൂപ്പുകളായി വിഭജിക്കേണ്ടിവരുമ്പോൾ ഈ ഓപ്പറേറ്റർ വളരെ ഉപയോഗപ്രദമാണ്. ഉദാഹരണത്തിന്, പേഴ്സണൽ നമ്പറുകൾ (ഐഡി) പോലും ഉള്ള എല്ലാ ജീവനക്കാരെയും പിൻവലിക്കാം, അതായത്. 2 കൊണ്ട് ഹരിക്കാവുന്ന ഐഡികൾ:

ഐഡി തിരഞ്ഞെടുക്കുക, ജീവനക്കാരുടെ പേര് എവിടെ ഐഡി%2=0 -- 2 കൊണ്ട് ഹരിക്കുമ്പോൾ ബാക്കി 0 ആണ്

ഓർഡർ പ്രകാരം - അന്വേഷണ ഫലം അടുക്കുന്നു

ഒരു ചോദ്യത്തിൻ്റെ ഫലം അടുക്കാൻ ക്ലോസ് പ്രകാരം ഓർഡർ ഉപയോഗിക്കുന്നു.

ലാസ്റ്റ് നെയിം, ഫസ്റ്റ് നെയിം, ജീവനക്കാരുടെ ശമ്പളം, അവസാന നാമം, ആദ്യനാമം എന്നിവ പ്രകാരം ഓർഡർ ചെയ്യുക -- ഫലം 2 കോളങ്ങളായി ഓർഡർ ചെയ്യുക - അവസാന നാമം, തുടർന്ന് ആദ്യ നാമം

ഒരു കുറിപ്പിനായി.ആരോഹണ ക്രമത്തിൽ അടുക്കുന്നതിന് ഒരു ASC കീവേഡ് ഉണ്ട്, എന്നാൽ ആരോഹണ ക്രമം ഡിഫോൾട്ടായതിനാൽ, നിങ്ങൾക്ക് ഈ ഓപ്ഷനെ കുറിച്ച് മറക്കാൻ കഴിയും (ഞാൻ ഈ ഓപ്ഷൻ ഉപയോഗിച്ച സമയം എനിക്ക് ഓർമയില്ല).

SELECT ക്ലോസിൽ ലിസ്റ്റുചെയ്തിട്ടില്ലാത്ത ഫീൽഡുകളും ORDER BY ക്ലോസിൽ ഉപയോഗിക്കാമെന്നത് ശ്രദ്ധിക്കേണ്ടതാണ് (DISTINCT ഉപയോഗിക്കുമ്പോൾ ഒഴികെ, അത് ഞാൻ ചുവടെ ചർച്ച ചെയ്യും). ഒരു ഉദാഹരണമായി, ഞാൻ TOP ഓപ്ഷൻ ഉപയോഗിച്ച് അൽപ്പം മുന്നോട്ട് പോകും, ​​ഉദാഹരണത്തിന്, ഏറ്റവും ഉയർന്ന ശമ്പളമുള്ള 3 ജീവനക്കാരെ നിങ്ങൾക്ക് എങ്ങനെ തിരഞ്ഞെടുക്കാമെന്ന് കാണിക്കും, രഹസ്യാത്മകതയ്ക്കായി ഞാൻ ശമ്പളം തന്നെ കാണിക്കരുത് എന്ന് കണക്കിലെടുക്കുന്നു:

ടോപ്പ് 3 തിരഞ്ഞെടുക്കുക -- ജീവനക്കാരുടെ മുഴുവൻ ഫല ഐഡിയിൽ നിന്നും അവസാനത്തെ പേര്, ആദ്യനാമം എന്നിവയിൽ നിന്നും ആദ്യ 3 റെക്കോർഡുകൾ മാത്രം തിരികെ നൽകുക -- ശമ്പളത്തിൻ്റെ അവരോഹണ ക്രമത്തിൽ ഫലം അടുക്കുക

ഐഡി പേരിന്റെ അവസാന ഭാഗം പേരിന്റെ ആദ്യഭാഗം
1000 ഇവാനോവ് ഇവാൻ
1002 സിഡോറോവ് സിഡോർ

തീർച്ചയായും, നിരവധി ജീവനക്കാർക്ക് ഒരേ ശമ്പളം ഉണ്ടായിരിക്കാമെന്ന ഒരു കേസ് ഇവിടെയുണ്ട്, കൂടാതെ ഏത് മൂന്ന് ജീവനക്കാരാണ് ഈ അഭ്യർത്ഥന തിരികെ നൽകുകയെന്ന് പറയാൻ പ്രയാസമാണ്; ഇത് ടാസ്‌ക് ഡയറക്ടറുമായി പരിഹരിക്കണം. ഈ ടാസ്‌ക് മാനേജറുമായി ചർച്ച ചെയ്‌തതിന് ശേഷം, നിങ്ങൾ സമ്മതിക്കുകയും ഇനിപ്പറയുന്ന ഓപ്ഷൻ ഉപയോഗിക്കാൻ തീരുമാനിക്കുകയും ചെയ്തു - ജനനത്തീയതി (അതായത് ഞങ്ങൾ യുവാക്കളെ വിലമതിക്കുന്നു), കൂടാതെ നിരവധി ജീവനക്കാരുടെ ജനനത്തീയതി ഒത്തുവന്നാൽ (എല്ലാത്തിനുമുപരി, ഇതും ഒഴിവാക്കിയിട്ടില്ല), തുടർന്ന് നിങ്ങൾക്ക് ഐഡി മൂല്യങ്ങളുടെ അവരോഹണ ക്രമത്തിൽ മൂന്നാമതൊരു സോർട്ടിംഗ് നടത്താം (സാമ്പിളിൽ അവസാനത്തേത് ഉയർന്ന ഐഡി ഉള്ളവ ആയിരിക്കും - ഉദാഹരണത്തിന്, അവസാനം സ്വീകരിച്ചവർ, നമുക്ക് പറയാം ജീവനക്കാരുടെ നമ്പറുകൾ ക്രമാനുഗതമായി നൽകുന്നു:

ടോപ്പ് 3 തിരഞ്ഞെടുക്കുക -- ജീവനക്കാരുടെ സാലറി ഡെസ്‌സി പ്രകാരം ഓർഡർ ചെയ്ത മുഴുവൻ ഫല ഐഡി, അവസാന നാമം, ആദ്യനാമം എന്നിവയിൽ നിന്നും ആദ്യത്തെ 3 റെക്കോർഡുകൾ മാത്രം തിരികെ നൽകുക, -- 1. ശമ്പള ജന്മദിനം അനുസരിച്ച് ഫലം അവരോഹണ ക്രമത്തിൽ അടുക്കുക, -- 2. തുടർന്ന് ജനനത്തീയതി പ്രകാരം ഐഡി DESC -- 3 . കൂടാതെ ഫലത്തിൻ്റെ പൂർണ്ണമായ അവ്യക്തതയ്ക്കായി, ഐഡി പ്രകാരം അടുക്കുന്നത് ചേർക്കുക

ആ. അഭ്യർത്ഥനയുടെ ഫലം പ്രവചനാതീതമാക്കാൻ നിങ്ങൾ ശ്രമിക്കണം, അതുവഴി ഈ പ്രത്യേക ആളുകളെ "ബ്ലാക്ക് ലിസ്റ്റിൽ" ഉൾപ്പെടുത്തിയിരിക്കുന്നത് എന്തുകൊണ്ടാണെന്ന് നിങ്ങൾക്ക് വിശദീകരിക്കാൻ കഴിയും, അതായത്. സ്ഥാപിത നിയമങ്ങൾക്കനുസൃതമായി എല്ലാം സത്യസന്ധമായി തിരഞ്ഞെടുത്തു.

നിങ്ങൾക്ക് ഓർഡർ പ്രകാരം വ്യത്യസ്‌ത പദപ്രയോഗങ്ങൾ ഉപയോഗിച്ച് അടുക്കാനും കഴിയും:

കോൺകാറ്റ് പ്രകാരം ഓർഡർ ചെയ്ത ജീവനക്കാരിൽ നിന്ന് അവസാന നാമം, ആദ്യനാമം തിരഞ്ഞെടുക്കുക (അവസാന നാമം," ", ആദ്യനാമം) -- എക്സ്പ്രഷൻ ഉപയോഗിക്കുക

ഓർഡർ പ്രകാരം കോളങ്ങൾക്കായി വ്യക്തമാക്കിയ അപരനാമങ്ങളും നിങ്ങൾക്ക് ഉപയോഗിക്കാം:

ജീവനക്കാരുടെ ഓർഡറിൽ നിന്ന് കോൺകാറ്റ് (അവസാനനാമം," ",ആദ്യനാമം) തിരഞ്ഞെടുക്കുക -- ഒരു അപരനാമം ഉപയോഗിക്കുക

DISTINCT ക്ലോസ് ഉപയോഗിക്കുമ്പോൾ, SELECT ബ്ലോക്കിൽ ലിസ്റ്റ് ചെയ്തിരിക്കുന്ന കോളങ്ങൾ മാത്രമേ ORDER BY ക്ലോസിൽ ഉപയോഗിക്കാൻ കഴിയൂ എന്നത് ശ്രദ്ധിക്കേണ്ടതാണ്. ആ. DISTINCT ഓപ്പറേഷൻ പ്രയോഗിച്ചതിന് ശേഷം, ഞങ്ങൾക്ക് ഒരു പുതിയ ഡാറ്റ സെറ്റ് ലഭിക്കും, ഒരു പുതിയ നിരകൾ. ഇക്കാരണത്താൽ, ഇനിപ്പറയുന്ന ഉദാഹരണം പ്രവർത്തിക്കില്ല:

ID പ്രകാരമുള്ള ജീവനക്കാരുടെ വേർതിരിവ് അവസാന നാമം, ആദ്യനാമം, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക -- DISTINCT ഉപയോഗിച്ച് ഞങ്ങൾക്ക് ലഭിച്ച സെറ്റിൽ ഐഡി ഇല്ല

ആ. ഫലം ഉപയോക്താവിന് തിരികെ നൽകുന്നതിന് മുമ്പ്, തത്ഫലമായുണ്ടാകുന്ന സെറ്റിലേക്ക് ഓർഡർ ബൈ ക്ലോസ് പ്രയോഗിക്കുന്നു.

കുറിപ്പ് 1.നിങ്ങൾക്ക് ഓർഡർ പ്രകാരമുള്ള ക്ലോസിലെ SELECT എന്നതിൽ ലിസ്റ്റ് ചെയ്തിരിക്കുന്ന നിരകളുടെ നമ്പറുകളും ഉപയോഗിക്കാം:

ജീവനക്കാരുടെ അവസാന നാമം, ആദ്യനാമം, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക -- 3 DESC എന്ന ക്രമത്തിൽ അടുക്കുക, -- 1. അവരോഹണ ശമ്പളം 1, -- 2. അവസാന നാമം 2 -- 3. പേരിൻ്റെ ആദ്യ പേര്

തുടക്കക്കാർക്ക് ഇത് സൗകര്യപ്രദവും പ്രലോഭനപരവുമാണ്, പക്ഷേ ഈ സോർട്ടിംഗ് ഓപ്ഷൻ മറക്കുകയും ഒരിക്കലും ഉപയോഗിക്കാതിരിക്കുകയും ചെയ്യുന്നതാണ് നല്ലത്.

ഈ സാഹചര്യത്തിൽ (ഫീൽഡുകൾ വ്യക്തമായി ലിസ്റ്റുചെയ്തിരിക്കുമ്പോൾ), ഈ ഓപ്ഷൻ ഇപ്പോഴും സ്വീകാര്യമാണെങ്കിൽ, "*" ഉപയോഗിക്കുമ്പോൾ ഈ ഓപ്ഷൻ ഒരിക്കലും ഉപയോഗിക്കാതിരിക്കുന്നതാണ് നല്ലത്. എന്തുകൊണ്ട് - കാരണം, ഉദാഹരണത്തിന്, ആരെങ്കിലും പട്ടികയിലെ നിരകളുടെ ക്രമം മാറ്റുകയോ നിരകൾ ഇല്ലാതാക്കുകയോ ചെയ്താൽ (ഇതൊരു സാധാരണ സാഹചര്യമാണ്), നിങ്ങളുടെ അന്വേഷണം തുടർന്നും പ്രവർത്തിച്ചേക്കാം, പക്ഷേ തെറ്റായി, കാരണം സോർട്ടിംഗ് ഇതിനകം തന്നെ മറ്റ് നിരകൾ വഴി ചെയ്യാൻ കഴിയും, മാത്രമല്ല ഈ പിശക് വളരെ വേഗം കണ്ടെത്താനാകാത്തതിനാൽ ഇത് വഞ്ചനാപരമാണ്.

നിരകൾ വ്യക്തമായി ലിസ്റ്റുചെയ്‌തിട്ടുണ്ടെങ്കിൽ, മുകളിലുള്ള സാഹചര്യത്തിൽ, അന്വേഷണം ഒന്നുകിൽ പ്രവർത്തിക്കുന്നത് തുടരും, മാത്രമല്ല ശരിയായി (എല്ലാം വ്യക്തമായി നിർവചിച്ചിരിക്കുന്നതിനാൽ), അല്ലെങ്കിൽ ഈ കോളം നിലവിലില്ലാത്ത ഒരു പിശക് അത് എറിയുകയും ചെയ്യും.

അതിനാൽ കോളം നമ്പറുകൾ പ്രകാരം അടുക്കുന്നതിനെക്കുറിച്ച് നിങ്ങൾക്ക് സുരക്ഷിതമായി മറക്കാൻ കഴിയും.

കുറിപ്പ് 2.
MS SQL-ൽ, ആരോഹണ ക്രമത്തിൽ അടുക്കുമ്പോൾ, NULL മൂല്യങ്ങൾ ആദ്യം പ്രദർശിപ്പിക്കും.

ജീവനക്കാരുടെ ഓർഡറിൽ നിന്ന് ബോണസ് ശതമാനം തിരഞ്ഞെടുക്കുക

അതനുസരിച്ച്, DESC ഉപയോഗിക്കുമ്പോൾ അവ അവസാനമായിരിക്കും

ബോണസ് ശതമാനം ഡെസ്‌സി പ്രകാരം ജീവനക്കാരുടെ ഓർഡറിൽ നിന്ന് ബോണസ് ശതമാനം തിരഞ്ഞെടുക്കുക

NULL മൂല്യങ്ങൾ അടുക്കുന്നതിനുള്ള ലോജിക് നിങ്ങൾക്ക് മാറ്റണമെങ്കിൽ, എക്സ്പ്രഷനുകൾ ഉപയോഗിക്കുക, ഉദാഹരണത്തിന്:

ISNULL പ്രകാരം ജീവനക്കാരുടെ ഓർഡറിൽ നിന്ന് ബോണസ് ശതമാനം തിരഞ്ഞെടുക്കുക (ബോണസ് ശതമാനം,100)

ORACLE ഈ ആവശ്യത്തിനായി രണ്ട് ഓപ്ഷനുകൾ നൽകുന്നു: NULLS FIRST, NULLS LAST (സ്ഥിരസ്ഥിതിയായി ഉപയോഗിക്കുന്നു). ഉദാഹരണത്തിന്:

ജീവനക്കാരുടെ ഓർഡറിൽ നിന്ന് ബോണസ് ശതമാനം തിരഞ്ഞെടുക്കുക.

ഒരു പ്രത്യേക ഡാറ്റാബേസിലേക്ക് മാറുമ്പോൾ ഇത് ശ്രദ്ധിക്കുക.

ടോപ്പ് - നിർദ്ദിഷ്ട റെക്കോർഡുകളുടെ എണ്ണം തിരികെ നൽകുക

MSDN-ൽ നിന്ന് എക്‌സ്‌ട്രാക്‌റ്റ് ചെയ്യുക.ടോപ്പ്-നിർദ്ദിഷ്‌ട സംഖ്യയിലോ ശതമാനത്തിലോ സജ്ജമാക്കിയ അന്വേഷണ ഫലത്തിൽ തിരികെ നൽകിയ വരികളുടെ എണ്ണം പരിമിതപ്പെടുത്തുന്നു. ഒരു ഓർഡർ ബൈ ക്ലോസുമായി സംയോജിച്ച് ഒരു TOP ക്ലോസ് ഉപയോഗിക്കുമ്പോൾ, ക്രമീകരിച്ച ഫലത്തിൻ്റെ ആദ്യ N ​​വരികളിൽ ഫല സെറ്റ് പരിമിതപ്പെടുത്തിയിരിക്കുന്നു. അല്ലെങ്കിൽ, ആദ്യ N ​​വരികൾ വ്യക്തമാക്കാത്ത ക്രമത്തിൽ തിരികെ നൽകും.

സാധാരണയായി ഈ പദപ്രയോഗം ഒരു ഓർഡർ ബൈ ക്ലോസ് ഉപയോഗിച്ചാണ് ഉപയോഗിക്കുന്നത്, കൂടാതെ ഫല സെറ്റിൽ നിന്ന് ആദ്യത്തെ N വരികൾ തിരികെ നൽകേണ്ട ഉദാഹരണങ്ങൾ ഞങ്ങൾ ഇതിനകം പരിശോധിച്ചു.

ഓർഡർ പ്രകാരം, ഈ ക്ലോസ് സാധാരണയായി നമുക്ക് അജ്ഞാതമായ ഒരു ടേബിളിലേക്ക് നോക്കേണ്ടിവരുമ്പോൾ ഉപയോഗിക്കാറുണ്ട്, അതിൽ ധാരാളം റെക്കോർഡുകൾ ഉണ്ടായിരിക്കാം, ഈ സാഹചര്യത്തിൽ നമുക്ക്, ഉദാഹരണത്തിന്, ആദ്യത്തെ 10 വരികൾ മാത്രം തിരികെ നൽകാൻ ആവശ്യപ്പെടാം, പക്ഷേ വ്യക്തത ഞങ്ങൾ 2 മാത്രം പറയും:

ജീവനക്കാരിൽ നിന്ന് ടോപ്പ് 2 * തിരഞ്ഞെടുക്കുക

ഫല ഗണത്തിൽ നിന്ന് വരികളുടെ അനുബന്ധ ശതമാനം തിരികെ നൽകുന്നതിന് നിങ്ങൾക്ക് PERCENT എന്ന വാക്ക് വ്യക്തമാക്കാനും കഴിയും:

ജീവനക്കാരിൽ നിന്ന് മികച്ച 25 ശതമാനം * തിരഞ്ഞെടുക്കുക

എൻ്റെ പരിശീലനത്തിൽ, വരികളുടെ എണ്ണം അനുസരിച്ചുള്ള സാമ്പിൾ ആണ് മിക്കപ്പോഴും ഉപയോഗിക്കുന്നത്.

TOP ഉപയോഗിച്ച് നിങ്ങൾക്ക് WITH TIES ഓപ്ഷനും ഉപയോഗിക്കാം, ഇത് അവ്യക്തമായ സോർട്ടിംഗിൻ്റെ കാര്യത്തിൽ എല്ലാ വരികളും തിരികെ നൽകാൻ സഹായിക്കും, അതായത്. ഈ വാചകം TOP N സെലക്ഷനിൽ വരുന്ന വരികൾക്ക് തുല്യമായ എല്ലാ വരികളും തിരികെ നൽകും; തൽഫലമായി, N-ൽ കൂടുതൽ വരികൾ തിരഞ്ഞെടുക്കാം. പ്രകടനത്തിനായി 1500 ശമ്പളമുള്ള മറ്റൊരു "പ്രോഗ്രാമർ" ചേർക്കാം:

ജീവനക്കാരെ ചേർക്കുക (ഐഡി, പേര്, ഇമെയിൽ, പൊസിഷൻ ഐഡി, ഡിപ്പാർട്ട്മെൻ്റ് ഐഡി, മാനേജർ ഐഡി, ശമ്പളം) മൂല്യങ്ങൾ(1004,N"നിക്കോളേവ് എൻ.എൻ."," [ഇമെയിൽ പരിരക്ഷിതം]",3,3,1003,1500)

2000 ശമ്പളമുള്ള സ്ഥാനവും വകുപ്പും സൂചിപ്പിക്കാതെ മറ്റൊരു ജീവനക്കാരനെ ചേർക്കാം:

ജീവനക്കാരെ ചേർക്കുക (ഐഡി, പേര്, ഇമെയിൽ, പൊസിഷൻ ഐഡി, ഡിപ്പാർട്ട്മെൻ്റ് ഐഡി, മാനേജർ ഐഡി, ശമ്പളം) മൂല്യങ്ങൾ(1005,N"അലക്‌സാൻഡ്റോവ് എ.എ."," [ഇമെയിൽ പരിരക്ഷിതം]",NULL,NULL,1000,2000)

ഇപ്പോൾ നമുക്ക് വിത്ത് ടൈസ് ഓപ്ഷൻ ഉപയോഗിച്ച്, 3 ജീവനക്കാരുടെ ശമ്പളവുമായി പൊരുത്തപ്പെടുന്ന എല്ലാ ജീവനക്കാരെയും ഏറ്റവും ചെറിയ ശമ്പളത്തിൽ തിരഞ്ഞെടുക്കാം (എനിക്ക് എന്താണ് ലഭിക്കുന്നതെന്ന് കൂടുതൽ വ്യക്തമാകുമെന്ന് ഞാൻ പ്രതീക്ഷിക്കുന്നു):

ടൈസ് ഐഡി, പേര്, ശമ്പളം അനുസരിച്ച് ജീവനക്കാരുടെ ശമ്പളത്തിൽ നിന്ന് ടോപ്പ് 3 തിരഞ്ഞെടുക്കുക

ഇവിടെ, TOP 3 സൂചിപ്പിച്ചിട്ടുണ്ടെങ്കിലും, അഭ്യർത്ഥന 4 റെക്കോർഡുകൾ നൽകി, കാരണം TOP 3 (1500 ഉം 2000 ഉം) നൽകിയ ശമ്പള മൂല്യം 4 ജീവനക്കാരിൽ കണ്ടെത്തി. ദൃശ്യപരമായി ഇത് ഇതുപോലെ പ്രവർത്തിക്കുന്നു:

ഒരു കുറിപ്പിൽ.
TOP വ്യത്യസ്ത ഡാറ്റാബേസുകളിൽ വ്യത്യസ്ത രീതികളിൽ നടപ്പിലാക്കുന്നു; MySQL-ൽ ഇതിനായി ഒരു പരിധി ക്ലോസ് ഉണ്ട്, അതിൽ നിങ്ങൾക്ക് ആരംഭ ഓഫ്സെറ്റ് അധികമായി സജ്ജമാക്കാൻ കഴിയും.

ORACLE 12c-ൽ, TOP, LIMIT എന്നിവയുടെ പ്രവർത്തനക്ഷമത സംയോജിപ്പിച്ച് അവർ സ്വന്തം അനലോഗും അവതരിപ്പിച്ചു - "ORACLE OFFSET FETCH" എന്ന വാക്കുകൾക്കായി തിരയുക. പതിപ്പ് 12c ന് മുമ്പ്, ഈ ആവശ്യത്തിനായി സാധാരണയായി ROWNUM എന്ന വ്യാജ കോളം ഉപയോഗിച്ചിരുന്നു.


നിങ്ങൾ DISTINCT, TOP ക്ലോസുകൾ ഒരേ സമയം പ്രയോഗിച്ചാൽ എന്ത് സംഭവിക്കും? ഇത്തരം ചോദ്യങ്ങൾക്ക് പരീക്ഷണങ്ങളിലൂടെ എളുപ്പത്തിൽ ഉത്തരം കണ്ടെത്താനാകും. പൊതുവേ, ഭയപ്പെടരുത്, പരീക്ഷണങ്ങൾക്ക് മടിയാകരുത്, കാരണം ... അതിൽ ഭൂരിഭാഗവും പരിശീലനത്തിലൂടെയാണ് പഠിക്കുന്നത്. SELECT പ്രസ്താവനയിലെ പദ ക്രമം ഇപ്രകാരമാണ്: DISTINCT ആദ്യം വരുന്നു, തുടർന്ന് TOP, അതായത്. നിങ്ങൾ യുക്തിസഹമായി ചിന്തിക്കുകയും ഇടത്തുനിന്ന് വലത്തോട്ട് വായിക്കുകയും ചെയ്യുകയാണെങ്കിൽ, ആദ്യം ഡ്യൂപ്ലിക്കേറ്റുകൾ നിരസിക്കുന്നത് പ്രയോഗിക്കും, തുടർന്ന് ഈ സെറ്റിനെ അടിസ്ഥാനമാക്കി TOP നിർമ്മിക്കപ്പെടും. ശരി, ഇത് അങ്ങനെയാണോ എന്ന് പരിശോധിച്ച് ഉറപ്പാക്കാം:

ജീവനക്കാരുടെ ശമ്പളം ക്രമത്തിൽ നിന്ന് വ്യത്യസ്തമായ ടോപ്പ് 2 ശമ്പളം തിരഞ്ഞെടുക്കുക

ശമ്പളം
1500
2000

ആ. തൽഫലമായി, ഞങ്ങൾക്ക് ഏറ്റവും ചെറിയ 2 ശമ്പളം ലഭിച്ചു. തീർച്ചയായും, ചില ജീവനക്കാർക്കുള്ള ശമ്പളം വ്യക്തമാക്കിയേക്കില്ല (NULL), കാരണം ഇത് ചെയ്യാൻ സ്കീം ഞങ്ങളെ അനുവദിക്കുന്നു. അതിനാൽ, ചുമതലയെ ആശ്രയിച്ച്, ഒന്നുകിൽ ഓർഡർ പ്രകാരം NULL മൂല്യങ്ങൾ പ്രോസസ്സ് ചെയ്യാൻ ഞങ്ങൾ തീരുമാനിക്കുന്നു, അല്ലെങ്കിൽ ശമ്പളം NULL ആയ എല്ലാ രേഖകളും നിരസിക്കുക, ഇതിനായി ഞങ്ങൾ WHERE ക്ലോസ് പഠിക്കാൻ പോകുന്നു.

എവിടെ - വരി തിരഞ്ഞെടുക്കൽ അവസ്ഥ

ഈ വാചകം നൽകിയിരിക്കുന്ന വ്യവസ്ഥ പ്രകാരം റെക്കോർഡുകൾ ഫിൽട്ടർ ചെയ്യാൻ ഉപയോഗിക്കുന്നു. ഉദാഹരണത്തിന്, "ഐടി" വകുപ്പിൽ ജോലി ചെയ്യുന്ന എല്ലാ ജീവനക്കാരെയും നമുക്ക് തിരഞ്ഞെടുക്കാം (അതിൻ്റെ ഐഡി=3):

ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി=3 -- അവസാനനാമം, ആദ്യനാമം പ്രകാരം ഐടി ഓർഡർ ചെയ്യുക

ഐഡി പേരിന്റെ അവസാന ഭാഗം പേരിന്റെ ആദ്യഭാഗം ശമ്പളം
1004 ശൂന്യം ശൂന്യം 1500
1003 ആൻഡ്രീവ് ആന്ദ്രേ 2000
1001 പെട്രോവ് പീറ്റർ 1500

ഓർഡർ ബൈ കമാൻഡിന് മുമ്പായി WHERE ക്ലോസ് എഴുതിയിരിക്കുന്നു.

പ്രാരംഭ ജീവനക്കാരുടെ സെറ്റിലേക്ക് കമാൻഡുകൾ പ്രയോഗിക്കുന്നതിനുള്ള ക്രമം ഇപ്രകാരമാണ്:

  1. എവിടെ - വ്യക്തമാക്കിയിട്ടുണ്ടെങ്കിൽ, മുഴുവൻ ജീവനക്കാരുടെയും ആദ്യ പടി, വ്യവസ്ഥയെ തൃപ്തിപ്പെടുത്തുന്ന രേഖകൾ മാത്രം തിരഞ്ഞെടുക്കുക എന്നതാണ്
  2. DISTINCT - വ്യക്തമാക്കിയിട്ടുണ്ടെങ്കിൽ, എല്ലാ തനിപ്പകർപ്പുകളും നിരസിക്കപ്പെടും
  3. ഓർഡർ പ്രകാരം - വ്യക്തമാക്കിയിട്ടുണ്ടെങ്കിൽ, ഫലം അടുക്കും
  4. ടോപ്പ് - വ്യക്തമാക്കിയിട്ടുണ്ടെങ്കിൽ, ക്രമീകരിച്ച ഫലത്തിൽ നിന്ന് നിശ്ചിത എണ്ണം റെക്കോർഡുകൾ മാത്രമേ നൽകൂ

വ്യക്തതയ്ക്കായി നമുക്ക് ഒരു ഉദാഹരണം നോക്കാം:

ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി=3 ശമ്പള പ്രകാരം ഓർഡർ ചെയ്യുന്ന ജീവനക്കാരിൽ നിന്ന് വ്യത്യസ്തമായ ടോപ്പ് 1 ശമ്പളം തിരഞ്ഞെടുക്കുക

ദൃശ്യപരമായി ഇത് ഇതുപോലെ കാണപ്പെടും:

NULL നായി പരിശോധിക്കുന്നത് ഒരു തുല്യ ചിഹ്നത്തോടെയല്ല, മറിച്ച് IS NULL, IS NULL ഓപ്പറേറ്റർമാർ എന്നിവ ഉപയോഗിച്ചാണ് ചെയ്യുന്നത് എന്നത് ശ്രദ്ധിക്കേണ്ടതാണ്. "=" (തുല്യ ചിഹ്നം) ഓപ്പറേറ്റർ ഉപയോഗിച്ച് നിങ്ങൾക്ക് NULL-ൽ താരതമ്യം ചെയ്യാൻ കഴിയില്ലെന്ന് ഓർക്കുക, കാരണം പദപ്രയോഗത്തിൻ്റെ ഫലവും NULL ന് തുല്യമായിരിക്കും.

ഉദാഹരണത്തിന്, ഡിപ്പാർട്ട്‌മെൻ്റ് വ്യക്തമാക്കിയിട്ടില്ലാത്ത എല്ലാ ജീവനക്കാരെയും നമുക്ക് തിരഞ്ഞെടുക്കാം (അതായത് ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി അസാധുവാണ്):

ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി ശൂന്യമായിരിക്കുന്നിടത്ത് ജീവനക്കാരിൽ നിന്ന് ഐഡി തിരഞ്ഞെടുക്കുക

ഇപ്പോൾ, ഒരു ഉദാഹരണമായി, ബോണസ് ശതമാനം മൂല്യം വ്യക്തമാക്കിയിട്ടുള്ള എല്ലാ ജീവനക്കാർക്കുമുള്ള ബോണസ് കണക്കാക്കാം (അതായത്, ബോണസ് ശതമാനം ശൂന്യമല്ല):

ഐഡി, പേര്, ശമ്പളം/100*ബോണസ് ശതമാനം ബോണസ് ശതമാനം അസാധുവാണെങ്കിൽ ജീവനക്കാരിൽ നിന്ന് ബോണസായി

അതെ, നിങ്ങൾ അതിനെക്കുറിച്ച് ചിന്തിക്കുകയാണെങ്കിൽ, BonusPercent മൂല്യം പൂജ്യത്തിന് (0) തുല്യമായിരിക്കും, കൂടാതെ മൂല്യം ഒരു മൈനസ് ചിഹ്നത്തിലും നൽകാം, കാരണം ഞങ്ങൾ ഈ ഫീൽഡിൽ നിയന്ത്രണങ്ങളൊന്നും ഏർപ്പെടുത്തിയിട്ടില്ല.

ശരി, പ്രശ്നത്തെക്കുറിച്ച് പറഞ്ഞതിന് ശേഷം, അത് പരിഗണിക്കാൻ ഞങ്ങളോട് പറഞ്ഞു (ബോണസ് ശതമാനം<=0 или BonusPercent IS NULL), то это означает что у сотрудника так же нет бонуса. Для начала, как нам сказали, так и сделаем, реализуем это при помощи логического оператора OR и NOT:

ഐഡി, പേര്, ശമ്പളം/100*ബോണസ് ശതമാനം ബോണസായി അല്ലാത്ത ജീവനക്കാരിൽ നിന്ന് (ബോണസ് ശതമാനം<=0 OR BonusPercent IS NULL)

ആ. ഇവിടെയാണ് ഞങ്ങൾ ബൂളിയൻ ഓപ്പറേറ്റർമാരെ കുറിച്ച് പഠിക്കാൻ തുടങ്ങിയത്. ബ്രാക്കറ്റുകളിലെ എക്സ്പ്രഷൻ "(ബോണസ് ശതമാനം<=0 OR BonusPercent IS NULL)» проверяет на то что у сотрудника нет бонуса, а NOT инвертирует это значение, т.е. говорит «верни всех сотрудников которые не сотрудники у которых нет бонуса».

(BonusPercent>0 ഉം BonusPercent IS NULL) എന്ന എക്‌സ്‌പ്രഷൻ ഉപയോഗിച്ച് "ബോണസ് ഉള്ള എല്ലാ ജീവനക്കാരെയും തിരികെ കൊണ്ടുവരിക" എന്ന് പറഞ്ഞുകൊണ്ട് ഈ പദപ്രയോഗം മാറ്റിയെഴുതാനും കഴിയും:

ഐഡി, പേര്, ശമ്പളം/100*ബോണസ് ശതമാനം ബോണസ് ശതമാനം>0, ബോണസ് ശതമാനം അസാധുവല്ലാത്തിടത്ത് ജീവനക്കാരിൽ നിന്ന് ബോണസായി

കൂടാതെ WHERE ബ്ലോക്കിൽ നിങ്ങൾക്ക് ഗണിത ഓപ്പറേറ്ററുകളും ഫംഗ്ഷനുകളും ഉപയോഗിച്ച് വിവിധ തരത്തിലുള്ള എക്സ്പ്രഷനുകൾ പരിശോധിക്കാൻ കഴിയും. ഉദാഹരണത്തിന്, ISNULL ഫംഗ്‌ഷനുള്ള ഒരു എക്‌സ്‌പ്രഷൻ ഉപയോഗിച്ച് സമാനമായ ഒരു പരിശോധന നടത്താം:

ഐഡി, പേര്, ശമ്പളം/100*ബോണസ് ശതമാനം ബോണസായി ജീവനക്കാരിൽ നിന്ന് അസാധുവാകുന്നിടത്ത് (ബോണസ് ശതമാനം,0)>0

ബൂളിയൻ ഓപ്പറേറ്റർമാരും ലളിതമായ താരതമ്യ ഓപ്പറേറ്റർമാരും

അതെ, നമുക്ക് ഇവിടെ ഗണിതശാസ്ത്രമില്ലാതെ ചെയ്യാൻ കഴിയില്ല, അതിനാൽ നമുക്ക് ബൂളിയൻ, ലളിതമായ താരതമ്യ ഓപ്പറേറ്ററുകളിലേക്ക് ഒരു ചെറിയ ഉല്ലാസയാത്ര നടത്താം.

SQL-ൽ 3 ബൂളിയൻ ഓപ്പറേറ്റർമാർ മാത്രമേയുള്ളൂ - കൂടാതെ, അല്ലെങ്കിൽ അല്ലാത്തവ:

ഓരോ ബൂളിയൻ ഓപ്പറേറ്റർക്കും, വ്യവസ്ഥകൾ അസാധുവാകുമ്പോൾ ഫലം എന്തായിരിക്കുമെന്ന് കാണിക്കുന്ന സത്യ പട്ടികകൾ നിങ്ങൾക്ക് നൽകാം:

വ്യവസ്ഥകൾ രൂപീകരിക്കുന്നതിന് ഇനിപ്പറയുന്ന ലളിതമായ താരതമ്യ ഓപ്പറേറ്റർമാർ ഉപയോഗിക്കുന്നു:

കൂടാതെ NULL-നുള്ള മൂല്യം/എക്‌സ്‌പ്രഷൻ പരിശോധിക്കുന്നതിന് 2 ഓപ്പറേറ്റർമാരുണ്ട്:

NULL ആണ് NULL സമത്വത്തിനായുള്ള പരിശോധന
NULL അല്ല NULL അസമത്വത്തിനായുള്ള പരിശോധന

മുൻഗണന: 1) എല്ലാ താരതമ്യ ഓപ്പറേറ്റർമാർ; 2) അല്ല; 3) ഒപ്പം; 4) അല്ലെങ്കിൽ.

സങ്കീർണ്ണമായ ലോജിക്കൽ എക്സ്പ്രഷനുകൾ നിർമ്മിക്കുമ്പോൾ, പരാൻതീസിസുകൾ ഉപയോഗിക്കുന്നു:

((വ്യവസ്ഥ1, വ്യവസ്ഥ2) അല്ലെങ്കിൽ അല്ല(നിലവാരം3, വ്യവസ്ഥ4, വ്യവസ്ഥ5)) അല്ലെങ്കിൽ (...)

കൂടാതെ, പരാൻതീസിസ് ഉപയോഗിച്ച്, നിങ്ങൾക്ക് കണക്കുകൂട്ടലുകളുടെ സ്റ്റാൻഡേർഡ് ക്രമം മാറ്റാൻ കഴിയും.

ഇവിടെ ഞാൻ ബൂളിയൻ ബീജഗണിതത്തെക്കുറിച്ച് ഒരു ആശയം നൽകാൻ ശ്രമിച്ചു. നിങ്ങൾക്ക് കാണാനാകുന്നതുപോലെ, കൂടുതൽ സങ്കീർണ്ണമായ വ്യവസ്ഥകൾ എഴുതുന്നതിന്, നിങ്ങൾക്ക് യുക്തിയില്ലാതെ ചെയ്യാൻ കഴിയില്ല, എന്നാൽ അതിൽ അധികമൊന്നും ഇവിടെ ഇല്ല (AND, OR, NOT) അത് ആളുകൾ കണ്ടുപിടിച്ചതാണ്, അതിനാൽ എല്ലാം തികച്ചും യുക്തിസഹമാണ്.

നമുക്ക് രണ്ടാം ഭാഗത്തിൻ്റെ അവസാനത്തിലേക്ക് പോകാം

നിങ്ങൾക്ക് കാണാനാകുന്നതുപോലെ, SELECT ഓപ്പറേറ്ററിൻ്റെ അടിസ്ഥാന വാക്യഘടനയെക്കുറിച്ച് പോലും നമുക്ക് വളരെക്കാലം സംസാരിക്കാൻ കഴിയും, എന്നാൽ ലേഖനത്തിൻ്റെ പരിധിയിൽ തുടരുന്നതിന്, ഞാൻ ഒടുവിൽ അധിക ലോജിക്കൽ ഓപ്പറേറ്റർമാരെ കാണിക്കും - ഇടയിലും, അകത്തും, ഇഷ്ടപ്പെടും.

ഇടയിൽ - ഒരു ശ്രേണിയിൽ ഉൾപ്പെടുത്തുന്നത് പരിശോധിക്കുന്നു

Test_value start_value നും end_value നും ഇടയിൽ

പദപ്രയോഗങ്ങൾക്ക് മൂല്യങ്ങളായി പ്രവർത്തിക്കാൻ കഴിയും.

നമുക്ക് ഒരു ഉദാഹരണം നോക്കാം:

2000-നും 3000-നും ഇടയിലുള്ള ശമ്പളം -- 2000-3000 റേഞ്ചിൽ ശമ്പളമുള്ള ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക

യഥാർത്ഥത്തിൽ, BETWEEN എന്നത് ഫോമിൻ്റെ ലളിതമായ ഒരു നൊട്ടേഷനാണ്:

ജീവനക്കാരുടെ ഐഡി, പേര്, ശമ്പളം, ശമ്പളം>=2000, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക<=3000 -- все у кого ЗП в диапозоне 2000-3000

BETWEEN എന്ന വാക്കിന് മുമ്പ് NOT എന്ന വാക്ക് ഉപയോഗിക്കാൻ കഴിയില്ല, അത് മൂല്യം നിർദ്ദിഷ്ട പരിധിക്കുള്ളിലല്ലെന്ന് പരിശോധിക്കും:

2000-നും 3000-നും ഇടയിൽ ശമ്പളം ലഭിക്കാത്ത ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക -- NOT(ശമ്പളം>=2000-ഉം ശമ്പളവും<=3000)

അതനുസരിച്ച്, നിങ്ങൾ BETWEEN, IN, LIKE എന്നിവ ഉപയോഗിക്കുകയാണെങ്കിൽ, കൂടാതെ കൂടാതെ അല്ലെങ്കിൽ എന്നിവ ഉപയോഗിച്ച് നിങ്ങൾക്ക് അവയെ മറ്റ് വ്യവസ്ഥകളുമായി സംയോജിപ്പിക്കാനും കഴിയും:

2000-നും 3000-നും ഇടയിൽ ശമ്പളം ലഭിക്കുന്ന ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക -- 2000-3000 റേഞ്ചിൽ ശമ്പളമുള്ളവരും വകുപ്പ് ഐഡി=3 -- വകുപ്പ് 3-ലെ ജീവനക്കാരെ മാത്രം കണക്കിലെടുക്കുക.

IN - മൂല്യങ്ങളുടെ പട്ടികയിൽ ഉൾപ്പെടുത്തുന്നുണ്ടോയെന്ന് പരിശോധിക്കുക

ഈ ഓപ്പറേറ്റർക്ക് ഇനിപ്പറയുന്ന ഫോം ഉണ്ട്:

Test_value IN (മൂല്യം1, മൂല്യം2, ...)

ഒരു ഉദാഹരണം ഉപയോഗിച്ച് കാണിക്കുന്നത് എളുപ്പമാണെന്ന് ഞാൻ കരുതുന്നു:

3 അല്ലെങ്കിൽ 4 സ്ഥാനത്തുള്ള (3,4) സ്ഥാനത്തുള്ള ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക

ആ. ഇത് അടിസ്ഥാനപരമായി ഇനിപ്പറയുന്ന പദപ്രയോഗത്തിന് സമാനമാണ്:

ഉദ്യോഗാർത്ഥികളിൽ നിന്ന് ഐഡി, പേര്, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക.

അല്ലാത്ത സാഹചര്യത്തിൽ ഇത് സമാനമായിരിക്കും (ഡിപ്പാർട്ട്‌മെൻ്റ് 3, 4 എന്നിവയിൽ നിന്നുള്ളവ ഒഴികെ എല്ലാവരെയും ഞങ്ങൾക്ക് ലഭിക്കും):

ഉദ്യോഗാർത്ഥികളിൽ നിന്ന് ഐഡി, പേര്, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക.

NOT IN ഉള്ള ഒരു ചോദ്യം കൂടാതെ ഇനിപ്പറയുന്നവ ഉപയോഗിച്ച് പ്രകടിപ്പിക്കാനും കഴിയും:

ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ശമ്പളം എന്നിവ തിരഞ്ഞെടുക്കുക<>3ആൻഡ് പൊസിഷൻ ഐഡി<>4 -- പൊസിഷൻ ഐഡിക്ക് തുല്യമാണ് (3,4)

IN നിർമ്മാണം ഉപയോഗിച്ച് NULL മൂല്യങ്ങൾക്കായി തിരയുന്നത് പ്രവർത്തിക്കില്ല, കാരണം NULL=NULL പരിശോധിക്കുന്നത് NULL നൽകുന്നു, ശരിയല്ല:

ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡിയിൽ (1,2, NULL) ഉള്ള ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, വകുപ്പ് ഐഡി തിരഞ്ഞെടുക്കുക -- ഫലത്തിൽ NULL രേഖകൾ ഉൾപ്പെടുത്തില്ല

ഈ സാഹചര്യത്തിൽ, ചെക്ക് പല വ്യവസ്ഥകളായി വിഭജിക്കുക:

ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി (1,2) -- 1 അല്ലെങ്കിൽ 2 അല്ലെങ്കിൽ ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി അസാധുവാണ് -- അല്ലെങ്കിൽ ശൂന്യമാണ് ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി തിരഞ്ഞെടുക്കുക

അല്ലെങ്കിൽ നിങ്ങൾക്ക് ഇതുപോലുള്ള എന്തെങ്കിലും എഴുതാം:

ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ഡിപ്പാർട്ട്മെൻ്റ് ഐഡി തിരഞ്ഞെടുക്കുക.

ഈ സാഹചര്യത്തിൽ, ആദ്യ ഓപ്ഷൻ കൂടുതൽ ശരിയും വിശ്വസനീയവുമാണെന്ന് ഞാൻ കരുതുന്നു. ശരി, മറ്റ് ഘടനകൾ എന്തെല്ലാം നിർമ്മിക്കാമെന്ന് തെളിയിക്കുന്നതിനുള്ള ഒരു ഉദാഹരണം മാത്രമാണ് ഇത്.

NULL-മായി ബന്ധപ്പെട്ട ഇതിലും കൂടുതൽ വഞ്ചനാപരമായ പിശക് പരാമർശിക്കേണ്ടതാണ്, NOT IN കൺസ്ട്രക്‌റ്റ് ഉപയോഗിക്കുമ്പോൾ ഇത് സംഭവിക്കാം. ഉദാഹരണത്തിന്, ഡിപ്പാർട്ട്‌മെൻ്റ് 1 അല്ലെങ്കിൽ ഡിപ്പാർട്ട്‌മെൻ്റ് വ്യക്തമാക്കിയിട്ടില്ലാത്തവരെ ഒഴികെയുള്ള എല്ലാ ജീവനക്കാരെയും തിരഞ്ഞെടുക്കാൻ ശ്രമിക്കാം, അതായത്. NULL തുല്യമാണ്. ഒരു പരിഹാരമെന്ന നിലയിൽ, ഇനിപ്പറയുന്ന ഓപ്ഷൻ സ്വയം നിർദ്ദേശിക്കുന്നു:

ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി ഇല്ലാത്തിടത്ത് ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി തിരഞ്ഞെടുക്കുക (1, NULL)

എന്നാൽ ചോദ്യം എക്സിക്യൂട്ട് ചെയ്‌തതിന് ശേഷം, ഇനിപ്പറയുന്നവ കാണുമെന്ന് ഞങ്ങൾ പ്രതീക്ഷിച്ചെങ്കിലും ഞങ്ങൾക്ക് ഒരു വരി പോലും ലഭിക്കില്ല:

വീണ്ടും, ഇവിടെ തമാശ കളിച്ചത് മൂല്യങ്ങളുടെ പട്ടികയിൽ വ്യക്തമാക്കിയ NULL ആണ്.

എന്തുകൊണ്ടാണ് ഈ കേസിൽ ഒരു ലോജിക്കൽ പിശക് സംഭവിച്ചതെന്ന് നോക്കാം. AND ഉപയോഗിച്ച് ചോദ്യം വിപുലീകരിക്കാം:

ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി എവിടെയായിരുന്നോ ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി എന്നിവ തിരഞ്ഞെടുക്കുക<>1, ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി<>NULL -- ഈ NULL ചെക്ക് കാരണമാണ് പ്രശ്നം - ഈ അവസ്ഥ എല്ലായ്പ്പോഴും NULL തിരികെ നൽകും

ശരിയായ അവസ്ഥ (ഡിപ്പാർട്ട്മെൻ്റ് ഐഡി<>NULL) ഇവിടെ എപ്പോഴും നമുക്ക് അനിശ്ചിതത്വം നൽകും, അതായത്. ശൂന്യം. ഇപ്പോൾ AND ഓപ്പറേറ്ററിനായുള്ള ട്രൂട്ട് ടേബിൾ ഓർക്കുക, അവിടെ (TRUE AND NULL) NULL നൽകുന്നു. ആ. ഇടത് അവസ്ഥ പാലിക്കുമ്പോൾ (ഡിപ്പാർട്ട്മെൻ്റ് ഐഡി<>1) നിർവചിക്കാത്ത ശരിയായ അവസ്ഥ കാരണം, മുഴുവൻ എക്‌സ്‌പ്രഷനും (ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി) നിർവചിക്കാത്ത മൂല്യത്തിൽ ഞങ്ങൾ അവസാനിക്കും<>1, ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി<>NULL), അതിനാൽ ഫലത്തിൽ സ്ട്രിംഗ് ഉൾപ്പെടുത്തില്ല.

വ്യവസ്ഥ ഇനിപ്പറയുന്ന രീതിയിൽ ശരിയായി തിരുത്തിയെഴുതാം:

ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി (1)-ൽ ഇല്ലാത്തിടത്ത് ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി തിരഞ്ഞെടുക്കുക -- അല്ലെങ്കിൽ ഈ സാഹചര്യത്തിൽ ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി മാത്രം<>1 കൂടാതെ ഡിപ്പാർട്ട്‌മെൻ്റ് ഐഡി അസാധുവല്ല -- കൂടാതെ NOT NULL എന്ന് പ്രത്യേകം പരിശോധിക്കുക

സബ്ക്വറികൾക്കൊപ്പം IN ഉപയോഗിക്കാനും കഴിയും, എന്നാൽ ഈ ട്യൂട്ടോറിയലിൻ്റെ തുടർന്നുള്ള ഭാഗങ്ങളിൽ ഞങ്ങൾ ഈ ഫോമിലേക്ക് മടങ്ങും.

ലൈക്ക് - ഒരു പാറ്റേൺ ഉപയോഗിച്ച് ഒരു സ്ട്രിംഗ് പരിശോധിക്കുന്നു

ഞാൻ ഈ ഓപ്പറേറ്ററെ കുറിച്ച് അതിൻ്റെ ഏറ്റവും ലളിതമായ രൂപത്തിൽ മാത്രമേ സംസാരിക്കൂ, അത് ഒരു സ്റ്റാൻഡേർഡ് ആണ്, കൂടാതെ SQL ഭാഷയുടെ മിക്ക ഭാഷകളും പിന്തുണയ്ക്കുന്നു. ഈ രൂപത്തിൽ പോലും, ഒരു സ്ട്രിംഗിൻ്റെ ഉള്ളടക്കം പരിശോധിക്കേണ്ട നിരവധി പ്രശ്നങ്ങൾ പരിഹരിക്കാൻ ഇത് ഉപയോഗിക്കാം.

ഈ ഓപ്പറേറ്റർക്ക് ഇനിപ്പറയുന്ന ഫോം ഉണ്ട്:

സ്ട്രിംഗ്_പാറ്റേൺ പോലെയുള്ള ടെസ്റ്റ്_സ്ട്രിംഗ്

"pattern_string"-ൽ ഇനിപ്പറയുന്ന പ്രത്യേക പ്രതീകങ്ങൾ ഉപയോഗിക്കാം:

  1. അടിവരയിട്ട “_” എന്നതിൻ്റെ അർത്ഥം ഏതൊരു പ്രതീകത്തിനും അതിൻ്റെ സ്ഥാനം നേടാനാകും എന്നാണ്
  2. "%" എന്ന ശതമാനം ചിഹ്നം - അതിൻറെ സ്ഥാനത്ത് എത്ര പ്രതീകങ്ങൾ വേണമെങ്കിലും എടുക്കാം എന്ന് പറയുന്നു
“%” ചിഹ്നമുള്ള ഉദാഹരണങ്ങൾ നോക്കാം (പ്രായോഗികമായി, ഇത് പലപ്പോഴും ഉപയോഗിക്കുന്നു):

സെലക്ട് ഐഡി, "പെറ്റ്%" പോലെയുള്ള ജീവനക്കാരുടെ പേര് -- "പെറ്റ്" സെലക്ട് ഐഡി എന്ന അക്ഷരങ്ങളിൽ തുടങ്ങുന്ന പേരിൻ്റെ പേര്, "%ov" പോലെയുള്ള ജീവനക്കാരുടെ അവസാന നാമം -- "ov" SELECT ഐഡിയിൽ അവസാനിക്കുന്ന അവസാന നാമം, "%re%" പോലെയുള്ള അവസാന നാമം എവിടെയായിരുന്നോ ജീവനക്കാരിൽ നിന്നുള്ള അവസാന നാമം -- ആരുടെ അവസാന നാമത്തിൽ "re" എന്ന കോമ്പിനേഷൻ അടങ്ങിയിരിക്കുന്നു

“_” ചിഹ്നമുള്ള ഉദാഹരണങ്ങൾ നോക്കാം:

"_etrov" പോലെയുള്ള അവസാന നാമം ജീവനക്കാരിൽ നിന്ന് തിരഞ്ഞെടുക്കുക ഐഡി, അവസാന നാമം -- ഏതെങ്കിലും ആദ്യ പ്രതീകവും തുടർന്നുള്ള അക്ഷരങ്ങളും "etrov" SELECT ID, അവസാന നാമം "____ov" പോലെയുള്ള അവസാന നാമം -- ഏതെങ്കിലും നാല് പ്രതീകങ്ങൾ ഉൾക്കൊള്ളുന്ന അവസാന നാമം തുടർന്നുള്ള അക്ഷരങ്ങൾ "ov"

ESCAPE ഉപയോഗിച്ച്, "_", "%" എന്നീ പ്രത്യേക പ്രതീകങ്ങളുടെ ചെക്കിംഗ് ഇഫക്റ്റ് റദ്ദാക്കുന്ന ഒരു രക്ഷപ്പെടൽ പ്രതീകം നിങ്ങൾക്ക് വ്യക്തമാക്കാൻ കഴിയും. ഒരു സ്ട്രിംഗിൽ ഒരു ശതമാനം ചിഹ്നമോ അണ്ടർ സ്‌കോറോ നേരിട്ട് പരിശോധിക്കണമെങ്കിൽ ഈ ക്ലോസ് ഉപയോഗിക്കുന്നു.

എസ്‌കേപ്പ് പ്രദർശിപ്പിക്കുന്നതിന്, നമുക്ക് മാലിന്യം ഒരു എൻട്രിയിൽ ഇടാം:

എംപ്ലോയീസ് സെറ്റ് ഫസ്റ്റ് നെയിം അപ്ഡേറ്റ് ചെയ്യുക = "ഇത് %" അടങ്ങുന്ന ട്രാഷ് ആണ് എവിടെ ഐഡി=1005

കൂടാതെ, ഇനിപ്പറയുന്ന ചോദ്യങ്ങൾ എന്താണ് തിരികെ നൽകുന്നത് എന്ന് നോക്കാം:

"%!%%" എസ്കേപ്പ് "!" പോലെയുള്ള ആദ്യനാമം എവിടെയുള്ള ജീവനക്കാരിൽ നിന്ന് * തിരഞ്ഞെടുക്കുക -- വരിയിൽ "%" ചിഹ്നം അടങ്ങിയിരിക്കുന്നു * ജീവനക്കാരിൽ നിന്ന് തിരഞ്ഞെടുക്കുക -- വരിയിൽ "_" ചിഹ്നം അടങ്ങിയിരിക്കുന്നു

സമ്പൂർണ്ണ പൊരുത്തത്തിനായി നിങ്ങൾക്ക് ഒരു സ്ട്രിംഗ് പരിശോധിക്കണമെങ്കിൽ, ലൈക്ക് എന്നതിന് പകരം "=" ചിഹ്നം ഉപയോഗിക്കുന്നതാണ് നല്ലത്:

ആദ്യനാമം = "പീറ്റർ" എവിടെയായിരുന്നാലും ജീവനക്കാരിൽ നിന്ന് * തിരഞ്ഞെടുക്കുക

ഒരു കുറിപ്പിൽ.
MS SQL-ൽ, ലൈക്ക് ഓപ്പറേറ്റർ ടെംപ്ലേറ്റിൽ, നിങ്ങൾക്ക് സാധാരണ എക്സ്പ്രഷനുകൾ ഉപയോഗിച്ച് ഒരു തിരയൽ വ്യക്തമാക്കാനും കഴിയും; ഈ ഓപ്പറേറ്ററുടെ സ്റ്റാൻഡേർഡ് കഴിവുകൾ നിങ്ങൾക്ക് പര്യാപ്തമല്ലെങ്കിൽ ഇൻ്റർനെറ്റിൽ അതിനെക്കുറിച്ച് വായിക്കുക.

സാധാരണ എക്സ്പ്രഷനുകൾ ഉപയോഗിച്ച് തിരയാൻ ORACLE REGEXP_LIKE ഫംഗ്ഷൻ ഉപയോഗിക്കുന്നു.

സ്ട്രിംഗുകളെ കുറിച്ച് കുറച്ച്

യൂണികോഡ് പ്രതീകങ്ങളുടെ സാന്നിധ്യത്തിനായി ഒരു സ്ട്രിംഗ് പരിശോധിക്കുന്ന സാഹചര്യത്തിൽ, ഉദ്ധരണികൾക്ക് മുമ്പായി നിങ്ങൾ N എന്ന പ്രതീകം സ്ഥാപിക്കേണ്ടതുണ്ട്, അതായത്. എൻ"...". എന്നാൽ ഞങ്ങളുടെ പട്ടികയിലെ എല്ലാ പ്രതീക ഫീൽഡുകളും യൂണികോഡ് ഫോർമാറ്റിൽ (nvarchar ടൈപ്പ്) ആയതിനാൽ, ഈ ഫീൽഡുകൾക്കായി നിങ്ങൾക്ക് എല്ലായ്പ്പോഴും ഈ ഫോർമാറ്റ് ഉപയോഗിക്കാം. ഉദാഹരണം:

ഐഡി തിരഞ്ഞെടുക്കുക, ജീവനക്കാരിൽ നിന്ന് പേര് N"പെറ്റ്%" പോലെയുള്ള പേര് എവിടെയാണ്, ഐഡി തിരഞ്ഞെടുക്കുക, ജീവനക്കാരിൽ നിന്നുള്ള അവസാന നാമം എവിടെയാണ് LastName=N"Petrov"

ശരിയായി ചെയ്യുമ്പോൾ, varchar (ASCII) തരം ഫീൽഡുമായി താരതമ്യപ്പെടുത്തുമ്പോൾ, നിങ്ങൾ "..." ഉപയോഗിച്ച് ടെസ്റ്റുകൾ ഉപയോഗിക്കാൻ ശ്രമിക്കണം, കൂടാതെ nvarchar (യൂണികോഡ്) എന്ന് ടൈപ്പുചെയ്യുന്നതിന് ഒരു ഫീൽഡ് താരതമ്യം ചെയ്യുമ്പോൾ, നിങ്ങൾ N ഉപയോഗിച്ച് ടെസ്റ്റുകൾ ഉപയോഗിക്കാൻ ശ്രമിക്കണം. ...". അന്വേഷണ നിർവ്വഹണ വേളയിൽ വ്യക്തമായ തരത്തിലുള്ള പരിവർത്തനങ്ങൾ ഒഴിവാക്കുന്നതിനാണ് ഇത് ചെയ്യുന്നത്. ഒരു ഫീൽഡിൽ (INSERT) മൂല്യങ്ങൾ ചേർക്കുമ്പോൾ അല്ലെങ്കിൽ അവ അപ്ഡേറ്റ് ചെയ്യുമ്പോൾ (അപ്ഡേറ്റ് ചെയ്യുക) ഞങ്ങൾ ഇതേ നിയമം ഉപയോഗിക്കുന്നു.

സ്ട്രിംഗുകൾ താരതമ്യം ചെയ്യുമ്പോൾ, ഡാറ്റാബേസ് ക്രമീകരണങ്ങൾ (കോലേഷൻ) അനുസരിച്ച്, സ്ട്രിംഗ് താരതമ്യം കേസ്-ഇൻസെൻസിറ്റീവ് ആയിരിക്കാം ("പെട്രോവ്" = "പെട്രോവ്") അല്ലെങ്കിൽ കേസ് സെൻസിറ്റീവ് ("പെട്രോവ്" ആയിരിക്കുമ്പോൾ" എന്ന കാര്യം പരിഗണിക്കേണ്ടതാണ്.<>"പെട്രോവ്").
ഒരു കേസ്-സെൻസിറ്റീവ് ക്രമീകരണത്തിൻ്റെ കാര്യത്തിൽ, നിങ്ങൾക്ക് ഒരു കേസ്-സെൻസിറ്റീവ് തിരയൽ നടത്തണമെങ്കിൽ, ഉദാഹരണത്തിന്, നിങ്ങൾക്ക് വലത്, ഇടത് എക്സ്പ്രഷനുകൾ ഒരു കേസിലേക്ക് മുൻകൂട്ടി പരിവർത്തനം ചെയ്യാം - മുകളിലോ താഴെയോ:

ഐഡി തിരഞ്ഞെടുക്കുക, മുകളിലുള്ളിടത്ത് ജോലിക്കാരിൽ നിന്ന് പേര് (പേര്) മുകളിലുള്ളത് (N"പെറ്റ്%") -- അല്ലെങ്കിൽ താഴ്ന്നത് (N"പെറ്റ്%") പോലെയുള്ളത് (N"പെറ്റ്%") തിരഞ്ഞെടുക്കുക ഐഡി, അവസാനത്തെ പേര് ജീവനക്കാരിൽ നിന്ന് മുകളിൽ എവിടെയാണ് (അറ്റത്തെ ഭാഗം) N"Petrov") -- അല്ലെങ്കിൽ LOWER(LastName)=LOWER(N"Petrov")

തീയതികളെക്കുറിച്ച് കുറച്ച്

ഒരു തീയതി പരിശോധിക്കുമ്പോൾ, നിങ്ങൾക്ക് സ്ട്രിംഗുകൾ പോലെ ഒറ്റ ഉദ്ധരണികൾ "..." ഉപയോഗിക്കാം.

MS SQL-ലെ പ്രാദേശിക ക്രമീകരണങ്ങൾ പരിഗണിക്കാതെ തന്നെ, നിങ്ങൾക്ക് ഇനിപ്പറയുന്ന തീയതി വാക്യഘടന "YYYYMMDD" (സ്‌പെയ്‌സുകളില്ലാതെ വർഷം, മാസം, ദിവസം ഒരുമിച്ച്) ഉപയോഗിക്കാം. MS SQL എപ്പോഴും ഈ തീയതി ഫോർമാറ്റ് മനസ്സിലാക്കും:

"19800101" നും "19891231" നും ഇടയിലുള്ള ജന്മദിനം എവിടെയായിരുന്നാലും ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ജന്മദിനം എന്നിവ തിരഞ്ഞെടുക്കുക -- 80കളിലെ ജീവനക്കാർ ജന്മദിനത്തിനനുസരിച്ച് ഓർഡർ ചെയ്യുക

ചില സാഹചര്യങ്ങളിൽ, DATEFROMPARTS ഫംഗ്‌ഷൻ ഉപയോഗിച്ച് തീയതി സജ്ജീകരിക്കുന്നത് കൂടുതൽ സൗകര്യപ്രദമാണ്:

ജീവനക്കാരിൽ നിന്ന് ഐഡി, പേര്, ജന്മദിനം എന്നിവ തിരഞ്ഞെടുക്കുക

DATETIMEFROMPARTS എന്നതിന് സമാനമായ ഒരു ഫംഗ്‌ഷനുമുണ്ട്, അത് തീയതിയും സമയവും സജ്ജീകരിക്കാൻ ഉപയോഗിക്കുന്നു (തീയതി സമയ തരത്തിന്).

നിങ്ങൾക്ക് ഒരു സ്ട്രിംഗ് ഒരു തീയതിയിലേക്കോ തീയതി സമയ മൂല്യത്തിലേക്കോ പരിവർത്തനം ചെയ്യണമെങ്കിൽ, നിങ്ങൾക്ക് CONVERT ഫംഗ്‌ഷൻ ഉപയോഗിക്കാം:

പരിവർത്തനം തിരഞ്ഞെടുക്കുക(തീയതി,"12.03.2015",104), പരിവർത്തനം(തീയതിസമയം,"2014-11-30 17:20:15",120)

104, 120 എന്നീ മൂല്യങ്ങൾ സ്ട്രിംഗിൽ ഏത് തീയതി ഫോർമാറ്റാണ് ഉപയോഗിക്കുന്നതെന്ന് സൂചിപ്പിക്കുന്നു. "MS SQL CONVERT" എന്നതിനായി തിരയുന്നതിലൂടെ നിങ്ങൾക്ക് MSDN ലൈബ്രറിയിൽ എല്ലാ സാധുവായ ഫോർമാറ്റുകളുടെയും വിവരണം കണ്ടെത്താനാകും.

MS SQL-ൽ തീയതികൾക്കൊപ്പം പ്രവർത്തിക്കുന്നതിന് ധാരാളം ഫംഗ്ഷനുകൾ ഉണ്ട്, "തീയതികൾക്കൊപ്പം പ്രവർത്തിക്കുന്നതിനുള്ള ms sql ഫംഗ്ഷനുകൾ" നോക്കുക.

കുറിപ്പ്.എസ്‌ക്യുഎൽ ഭാഷയുടെ എല്ലാ ഭാഷാഭേദങ്ങൾക്കും തീയതികൾക്കൊപ്പം പ്രവർത്തിക്കുന്നതിന് അവരുടേതായ ഫംഗ്‌ഷനുകൾ ഉണ്ട്, അവയ്‌ക്കൊപ്പം പ്രവർത്തിക്കുന്നതിന് അവരുടേതായ സമീപനം പ്രയോഗിക്കുന്നു.

സംഖ്യകളെക്കുറിച്ചും അവയുടെ പരിവർത്തനങ്ങളെക്കുറിച്ചും അൽപ്പം

ഈ വിഭാഗത്തിലെ വിവരങ്ങൾ ഐടി സ്പെഷ്യലിസ്റ്റുകൾക്ക് കൂടുതൽ ഉപയോഗപ്രദമാകും. നിങ്ങൾ ഒരാളല്ലെങ്കിൽ, ഡാറ്റാബേസിൽ നിന്ന് നിങ്ങൾക്ക് ആവശ്യമായ വിവരങ്ങൾ നേടുന്നതിന് ചോദ്യങ്ങൾ എങ്ങനെ എഴുതാമെന്ന് മനസിലാക്കുക എന്നതാണ് നിങ്ങളുടെ ലക്ഷ്യം എങ്കിൽ, നിങ്ങൾക്ക് അത്തരം സൂക്ഷ്മതകൾ ആവശ്യമില്ലായിരിക്കാം, എന്നാൽ ഏത് സാഹചര്യത്തിലും, നിങ്ങൾക്ക് പെട്ടെന്ന് വാചകത്തിലൂടെ പോയി കുറിപ്പുകൾ എടുക്കാം. , കാരണം. നിങ്ങൾ എസ്‌ക്യുഎൽ പഠിക്കാൻ തുടങ്ങിയിട്ടുണ്ടെങ്കിൽ, നിങ്ങൾ ഇതിനകം ഐടിയിൽ ചേരുകയാണ്.

CAST കൺവേർഷൻ ഫംഗ്‌ഷനിൽ നിന്ന് വ്യത്യസ്തമായി, പരിവർത്തന ശൈലിക്ക് (ഫോർമാറ്റ്) ഉത്തരവാദിയായ CONVERT ഫംഗ്‌ഷനിൽ നിങ്ങൾക്ക് ഒരു മൂന്നാം പാരാമീറ്റർ വ്യക്തമാക്കാൻ കഴിയും. വ്യത്യസ്ത ഡാറ്റാ തരങ്ങൾക്ക് അവരുടേതായ ശൈലികൾ ഉണ്ടായിരിക്കാം, അത് ലഭിച്ച ഫലത്തെ ബാധിച്ചേക്കാം. CONVERT ഫംഗ്‌ഷൻ ഉപയോഗിച്ച് ഒരു സ്‌ട്രിംഗിൻ്റെ തീയതി, തീയതി സമയ തരങ്ങളിലേക്ക് പരിവർത്തനം ചെയ്യുന്നത് പരിഗണിക്കുമ്പോൾ ഞങ്ങൾ സ്റ്റൈലുകളുടെ ഉപയോഗത്തെക്കുറിച്ച് ഇതിനകം സ്‌പർശിച്ചിട്ടുണ്ട്.

നിങ്ങൾക്ക് MSDN-ൽ CAST, CONVERT ഫംഗ്‌ഷനുകൾ, ശൈലികൾ എന്നിവയെക്കുറിച്ച് കൂടുതൽ വായിക്കാം - “CAST, ConVERT ഫംഗ്‌ഷനുകൾ (Transact-SQL)”: msdn.microsoft.com/ru-ru/library/ms187928.aspx

ഉദാഹരണങ്ങൾ ലളിതമാക്കാൻ, ട്രാൻസാക്റ്റ്-എസ്‌ക്യുഎൽ ഭാഷാ പ്രസ്‌താവനകൾ DECLARE, SET എന്നിവ ഇവിടെ ഉപയോഗിക്കും.

തീർച്ചയായും, ഒരു പൂർണ്ണസംഖ്യയെ ഒരു യഥാർത്ഥ സംഖ്യയിലേക്ക് പരിവർത്തനം ചെയ്യുന്ന കാര്യത്തിൽ (ഈ പാഠത്തിൻ്റെ തുടക്കത്തിൽ ഞാൻ നൽകിയത്, പൂർണ്ണസംഖ്യയും യഥാർത്ഥ വിഭജനവും തമ്മിലുള്ള വ്യത്യാസം പ്രകടിപ്പിക്കുന്നതിനായി), പരിവർത്തനത്തിൻ്റെ സൂക്ഷ്മതകളെക്കുറിച്ചുള്ള അറിവ് അത്ര നിർണായകമല്ല, കാരണം അവിടെ ഞങ്ങൾ യഥാർത്ഥ പരിവർത്തനത്തിലേക്ക് ഒരു പൂർണ്ണസംഖ്യ നടത്തി (ഇതിൻ്റെ ശ്രേണി പൂർണ്ണസംഖ്യകളുടെ ശ്രേണിയേക്കാൾ വളരെ വലുതാണ്):

@min_int int SET പ്രഖ്യാപിക്കുക @min_int=-2147483648 പ്രഖ്യാപിക്കുക @max_int int SET @max_int=2147483647 SELECT -- (-2147483648) @min_int,CAST(@min_int4, float-4mint, 7 float8), 47 @max_int ,CAST(@max_int AS float),CONVERT(float,@max_int), -- സംഖ്യാ(16,6) @min_int/1., -- (-2147483648.000000) @max_int/1. -- 2147483647.000000

(1.) കൊണ്ട് ഹരിച്ചാൽ ലഭിച്ച പരോക്ഷമായ പരിവർത്തനത്തിൻ്റെ രീതി വ്യക്തമാക്കുന്നത് ഒരുപക്ഷേ വിലപ്പെട്ടതല്ല, കാരണം ലഭിച്ച ഫലത്തിൻ്റെ തരത്തിൽ കൂടുതൽ നിയന്ത്രണത്തിനായി വ്യക്തമായ പരിവർത്തനങ്ങൾ നടത്താൻ ശ്രമിക്കുന്നത് ഉചിതമാണ്. എന്നിരുന്നാലും, ദശാംശ ബിന്ദുവിന് ശേഷം ഒരു നിശ്ചിത എണ്ണം അക്കങ്ങളോടെ, ടൈപ്പ് ന്യൂമെറിക്കിൻ്റെ ഫലം ലഭിക്കണമെങ്കിൽ, ഒരു പൂർണ്ണസംഖ്യ മൂല്യത്തെ (1., 1.0, 1.00, മുതലായവ) കൊണ്ട് ഗുണിക്കാൻ MS SQL-ൽ ഒരു ട്രിക്ക് ഉപയോഗിക്കാം. :

@int int SET പ്രഖ്യാപിക്കുക @int=123 തിരഞ്ഞെടുക്കുക @int*1., -- സംഖ്യാ(12, 0) - 0 ദശാംശസ്ഥാനങ്ങൾ @int*1.0, -- സംഖ്യാ(13, 1) - 1 ദശാംശസ്ഥാനം @int*1.00, -- സംഖ്യാ(14, 2) - 2 പ്രതീകങ്ങൾ -- ചിലപ്പോൾ വ്യക്തമായ പരിവർത്തനം നടത്തുന്നതാണ് നല്ലത് എങ്കിലും CAST(@int AS സംഖ്യാ(20, 0)), -- 123 CAST(@int AS സംഖ്യ(20, 1) ), -- 123.0 CAST(@int AS സംഖ്യാ(20, 2)) -- 123.00

ചില സന്ദർഭങ്ങളിൽ, പരിവർത്തനത്തിൻ്റെ വിശദാംശങ്ങൾ വളരെ പ്രധാനമാണ്, കാരണം... അവ ലഭിച്ച ഫലത്തിൻ്റെ കൃത്യതയെ ബാധിക്കുന്നു, ഉദാഹരണത്തിന്, ഒരു സംഖ്യാ മൂല്യത്തിൽ നിന്ന് ഒരു സ്ട്രിംഗിലേക്ക് (varchar) പരിവർത്തനം നടത്തുമ്പോൾ. പണവും ഫ്ലോട്ട് മൂല്യങ്ങളും varchar ആയി പരിവർത്തനം ചെയ്യുന്നതിനുള്ള ഉദാഹരണങ്ങൾ നോക്കാം:

പണം varchar-ലേക്ക് പരിവർത്തനം ചെയ്യുമ്പോഴുള്ള പെരുമാറ്റം DECLARE @money money SET @money = 1025.123456789 -- 1025.1235 ലേക്ക് ഒരു പരോക്ഷമായ പരിവർത്തനം ഉണ്ടാകും, കാരണം SELECT @money, -- 1025.1235 -- ഡിഫോൾട്ടായി, CAST, CONVERT എന്നിവ ഒരേപോലെയാണ് (അതായത്, ഏകദേശം പറഞ്ഞാൽ, സ്റ്റൈൽ 0 പ്രയോഗിക്കുന്നു) CAST(@money as varchar(20)) എന്ന ദശാംശ പോയിൻ്റിന് ശേഷം പണത്തിൻ്റെ തരം 4 അക്കങ്ങൾ മാത്രമേ സംഭരിക്കുന്നുള്ളൂ. , -- 1025.12 CONVERT(varchar(20), @money), -- 1025.12 CONVERT(varchar(20), @money, 0), -- 1025.12 (സ്റ്റൈൽ 0 - ആയിരത്തിലൊന്ന് സെപ്പറേറ്ററും 2 ദശാംശ സ്ഥാനങ്ങളും (സ്ഥിര ഫോർമാറ്റ്)) പരിവർത്തനം ചെയ്യുക( varchar(20), @money, 1), -- 1.025.12 (ശൈലി 1 - ആയിരത്തിലൊന്ന് സെപ്പറേറ്ററും 2 ദശാംശ സ്ഥാനങ്ങളും ഉപയോഗിക്കുന്നു) CONVERT(varchar(20), @money, 2) -- 1025.1235 (style 2 - സെപ്പറേറ്റർ ഇല്ല, ദശാംശ പോയിൻ്റിന് ശേഷം 4 അക്കങ്ങൾ)

ഫ്ലോട്ട് വാർച്ചറിലേക്ക് മാറ്റുമ്പോൾ പെരുമാറ്റം DECLARE @float1 float SET @float1 = 1025.123456789 പ്രഖ്യാപിക്കുക @float2 float SET @float2 = 1231025.123456789 SELECT @float1, -- 10256-SELECT @float1, -- 10255. 12345679 -- ഡിഫോൾട്ടായി, CAST ഉം CONVERT ഉം ഒരേപോലെ പ്രവർത്തിക്കുന്നു (അതായത്, ഏകദേശം പറഞ്ഞാൽ, സ്റ്റൈൽ 0 ഉപയോഗിക്കുന്നു) -- ശൈലി 0 - 6 അക്കങ്ങളിൽ കൂടരുത്. എക്‌സ്‌പോണൻഷ്യൽ നൊട്ടേഷൻ ഉപയോഗിക്കുന്നത് അനിവാര്യത കൊണ്ടാണ് -- varchar CAST(@float1 varchar(20) ആയി), -- 1025.12 CONVERT(varchar(20), @float1), -- 1025.12 CONVERT(varchar(varchar( 20 ), @float1, 0), -- 1025.12 CAST(@float2 varchar(20)), -- 1.23103e+006 CONVERT(varchar(20), @float2), -- 1.23103e+006 CONVERT(varchar( 20 ), @float2, 0), -- 1.23103e+006 -- style 1 - എപ്പോഴും 8 അക്കങ്ങൾ. അക്കങ്ങൾക്കുള്ള ശാസ്ത്രീയ നൊട്ടേഷൻ എപ്പോഴും ഉപയോഗിക്കുന്നു. -- ഫ്ലോട്ടിനുള്ള ഈ ശൈലിയും വളരെ കൃത്യമല്ല CONVERT(varchar(20), @float1, 1), -- 1.0251235e+003 CONVERT(varchar(20), @float2, 1), -- 1.2310251e+006 - - ശൈലി 2 - എപ്പോഴും 16 ബിറ്റുകൾ. അക്കങ്ങൾക്കുള്ള ശാസ്ത്രീയ നൊട്ടേഷൻ എപ്പോഴും ഉപയോഗിക്കുന്നു. -- ഇവിടെ കൃത്യത മികച്ചതാണ് പരിവർത്തനം(varchar(30), @float1, 2), -- 1.025123456789000e+003 - ശരി പരിവർത്തനം(varchar(30), @float2, 2) -- 1.231025123405689e+OK+5676

ഉദാഹരണത്തിൽ നിന്ന് കാണാൻ കഴിയുന്നതുപോലെ, ഫ്ലോട്ടിംഗ് തരങ്ങൾ ഫ്ലോട്ട് ചെയ്യുന്നു, ചില സന്ദർഭങ്ങളിൽ യഥാർത്ഥത്തിൽ ഒരു വലിയ പിശക് സൃഷ്ടിക്കാൻ കഴിയും, പ്രത്യേകിച്ചും ഒരു സ്ട്രിംഗിലേക്കും പിന്നിലേക്കും പരിവർത്തനം ചെയ്യുമ്പോൾ (ഇത് വിവിധ തരം സംയോജനങ്ങളിൽ സംഭവിക്കാം, ഉദാഹരണത്തിന്, ഡാറ്റ കൈമാറുമ്പോൾ. ടെക്സ്റ്റ് ഫയലുകൾ ഒരു സിസ്റ്റത്തിൽ നിന്ന് മറ്റൊന്നിലേക്ക്) .

നിങ്ങൾക്ക് ഒരു നിശ്ചിത ചിഹ്നം വരെയുള്ള കൃത്യത വ്യക്തമായി നിയന്ത്രിക്കണമെങ്കിൽ, 4-ൽ കൂടുതൽ, ഡാറ്റ സംഭരിക്കുന്നതിന് ദശാംശം/സംഖ്യാ തരം ഉപയോഗിക്കുന്നത് ചിലപ്പോൾ നല്ലതാണ്. 4 പ്രതീകങ്ങൾ മതിയെങ്കിൽ, നിങ്ങൾക്ക് പണത്തിൻ്റെ തരം ഉപയോഗിക്കാം - ഇത് ഏകദേശം സംഖ്യയുമായി (20,4) യോജിക്കുന്നു.

ദശാംശവും സംഖ്യയും പ്രഖ്യാപിക്കുക @money money സെറ്റ് @മണി = 1025.123456789 -- 1025.1235 പ്രഖ്യാപിക്കുക @float1 float SET @float1 = 1025.123456789 DECLARE @float2 float1 = 2ECLARE @float2 float1 =265 DECLARE @float320595 മെറിക് ന്യൂമെറിക്(28,9) സെറ്റ് @ന്യൂമെറിക് = 1025.123456789 തിരഞ്ഞെടുക്കുക കാസ്റ്റ്( @സംഖ്യകൾ varchar(20)), -- 1025.12345679 CONVERT(varchar(20), @numeric), -- 1025.12345679 CAST(@മണി അക്കമായി(28,9)), -- 1025.1203500000000000er (float1 float ,9)), -- 1025.123456789 CAST(@float2 അക്കമായി (28,9)) -- 1231025.123456789

കുറിപ്പ്.
MS SQL 2008 പതിപ്പ് മുതൽ, നിങ്ങൾക്ക് പകരം ഇനിപ്പറയുന്ന നിർമ്മാണം ഉപയോഗിക്കാം:
  • ms sql സെർവർ
  • ടാഗ് ചേർക്കുക