ഡാറ്റ വീണ്ടെടുക്കുമ്പോൾ, ഒരു നിശ്ചിത രൂപത്തിൽ അത് ലഭിക്കുന്നത് പ്രധാനമാണ്. ഏത് ഡാറ്റ തരത്തിലുമുള്ള ഏത് ഫീൽഡുകൾക്കും സോർട്ടിംഗ് ചെയ്യാവുന്നതാണ്. ഇത് സംഖ്യാ ഫീൽഡുകൾക്കുള്ള ആരോഹണ അല്ലെങ്കിൽ അവരോഹണ തരം ആകാം. പ്രതീക (ടെക്സ്റ്റ്) ഫീൽഡുകൾക്കായി, ഇത് അക്ഷരമാലാക്രമത്തിൽ അടുക്കാൻ കഴിയും, എന്നിരുന്നാലും സാരാംശത്തിൽ ഇത് ആരോഹണ അല്ലെങ്കിൽ അവരോഹണ ക്രമത്തിൽ അടുക്കുന്നു. ഇത് ഏത് ദിശയിലും നടത്താം - A മുതൽ Z വരെ, തിരിച്ചും Z മുതൽ A വരെ.
ക്രമപ്പെടുത്തൽ പ്രക്രിയയുടെ സാരാംശം ഒരു നിശ്ചിത ക്രമത്തിലേക്ക് ക്രമം കുറയ്ക്കുക എന്നതാണ്. "അൽഗരിതങ്ങൾ അടുക്കുന്നു" എന്ന ലേഖനത്തിൽ നിങ്ങൾക്ക് അടുക്കുന്നതിനെക്കുറിച്ച് കൂടുതലറിയാൻ കഴിയും. ഉദാഹരണത്തിന്, ആരോഹണ ക്രമത്തിൽ ഒരു അനിയന്ത്രിതമായ സംഖ്യാ ക്രമം അടുക്കുന്നു:
2, 4, 1, 5, 9
ഒരു ഓർഡർ ക്രമത്തിൽ കലാശിക്കണം:
1, 2, 4, 5, 6
അതുപോലെ, സ്ട്രിംഗ് മൂല്യങ്ങളുടെ ആരോഹണ ക്രമത്തിൽ അടുക്കുമ്പോൾ:
ഇവാനോവ് ഇവാൻ, പെട്രോവ് പെറ്റർ, ഇവാനോവ് ആൻഡ്രി
ഫലം ഇതായിരിക്കണം:
ഇവാനോവ് ആന്ദ്രേ, ഇവാനോവ് ഇവാൻ, പെട്രോവ് പെട്രോവ്
ഇവിടെ "ആൻഡ്രി ഇവാനോവ്" എന്ന വരി തുടക്കത്തിലേക്ക് നീങ്ങി, കാരണം സ്ട്രിംഗുകളുടെ താരതമ്യം സ്വഭാവമനുസരിച്ച് നടക്കുന്നു. രണ്ട് വരികളും "ഇവാനോവ്" എന്ന ഒരേ പ്രതീകങ്ങളിൽ നിന്നാണ് ആരംഭിക്കുന്നത്. "ആൻഡ്രി" എന്ന വാക്കിലെ "A" എന്ന ചിഹ്നം "Ivan" എന്ന വാക്കിലെ "I" എന്നതിനേക്കാൾ അക്ഷരമാലയിൽ നേരത്തെ വരുന്നതിനാൽ, ഈ വരി നേരത്തെ സ്ഥാപിക്കും.
ഒരു SQL അന്വേഷണത്തിൽ അടുക്കുന്നു
സോർട്ടിംഗ് നടത്താൻ, നിങ്ങൾ ക്വറി സ്ട്രിംഗിലേക്ക് ഓർഡർ ബൈ കമാൻഡ് ചേർക്കേണ്ടതുണ്ട്. ഈ കമാൻഡിന് ശേഷം, സോർട്ടിംഗ് നടത്തുന്ന ഫീൽഡ് സൂചിപ്പിച്ചിരിക്കുന്നു.
ഉദാഹരണങ്ങൾക്ക്, ഞങ്ങൾ ഗുഡ്സ് ടേബിൾ സാധനങ്ങൾ ഉപയോഗിക്കുന്നു:
സംഖ്യ (ഇനം നമ്പർ) | തലക്കെട്ട് (പേര്) | വില (വില) |
1 | മന്ദാരിൻ | 50 |
2 | തണ്ണിമത്തൻ | 120 |
3 | ഒരു പൈനാപ്പിൾ | 80 |
4 | വാഴപ്പഴം | 40 |
ഇവിടെയുള്ള ഡാറ്റ ഇതിനകം തന്നെ "സംഖ്യ" കോളം വഴി ഓർഡർ ചെയ്തിട്ടുണ്ട്. ഇപ്പോൾ, അക്ഷരമാലാക്രമത്തിൽ അടുക്കിയ ഉൽപ്പന്നങ്ങളുള്ള ഒരു പട്ടിക പ്രദർശിപ്പിക്കുന്ന ഒരു ചോദ്യം നിർമ്മിക്കാം:
തിരഞ്ഞെടുക്കുക * ശീർഷകം അനുസരിച്ച് സാധനങ്ങൾ ഓർഡർ ചെയ്യുക
ചരക്കുകളിൽ നിന്ന് * തിരഞ്ഞെടുക്കുക - സാധനങ്ങളുടെ പട്ടികയിൽ നിന്ന് എല്ലാ ഫീൽഡുകളും തിരഞ്ഞെടുക്കാൻ വ്യക്തമാക്കുന്നു;
ഓർഡർ പ്രകാരം - സോർട്ടിംഗ് കമാൻഡ്;
ശീർഷകം - സോർട്ടിംഗ് നടത്തുന്ന കോളം.
അത്തരമൊരു അഭ്യർത്ഥന നടപ്പിലാക്കുന്നതിൻ്റെ ഫലം ഇപ്രകാരമാണ്:
സംഖ്യ | തലക്കെട്ട് | വില |
3 | ഒരു പൈനാപ്പിൾ | 80 |
2 | തണ്ണിമത്തൻ | 120 |
4 | വാഴപ്പഴം | 40 |
1 | മന്ദാരിൻ | 50 |
നിങ്ങൾക്ക് ഏതെങ്കിലും പട്ടിക ഫീൽഡുകൾക്കായി അടുക്കാനും കഴിയും.
സോർട്ടിംഗ് ദിശ
ഡിഫോൾട്ടായി, ഓർഡർ ബൈ കമാൻഡ് ആരോഹണ ക്രമത്തിൽ അടുക്കുന്നു. അടുക്കൽ ദിശ സ്വമേധയാ നിയന്ത്രിക്കുന്നതിന്, കോളത്തിൻ്റെ പേരിന് ശേഷം ASC (ആരോഹണം) അല്ലെങ്കിൽ DESC (അവരോഹണം) എന്ന കീവേഡ് ഉപയോഗിക്കുക. അതിനാൽ, വിലകളുടെ അവരോഹണ ക്രമത്തിൽ ഞങ്ങളുടെ പട്ടിക പ്രദർശിപ്പിക്കുന്നതിന്, നിങ്ങൾ ഇതുപോലെയുള്ള ചോദ്യം ചോദിക്കേണ്ടതുണ്ട്:
തിരഞ്ഞെടുക്കുക * ചരക്കുകളിൽ നിന്ന് വില ഡെസ്ക് പ്രകാരം ഓർഡർ ചെയ്യുക
ആരോഹണ വില അനുസരിച്ച് അടുക്കുക:
തിരഞ്ഞെടുക്കുക * വില ASC പ്രകാരമുള്ള സാധനങ്ങളുടെ ഓർഡർ
ഒന്നിലധികം ഫീൽഡുകൾ പ്രകാരം അടുക്കുന്നു
SQL ഒരേസമയം ഒന്നിലധികം ഫീൽഡുകൾ പ്രകാരം അടുക്കാൻ അനുവദിക്കുന്നു. ഇത് ചെയ്യുന്നതിന്, ഓർഡർ ബൈ കമാൻഡിന് ശേഷം, ആവശ്യമുള്ള ഫീൽഡുകൾ കോമകളാൽ വേർതിരിച്ചിരിക്കുന്നു. അടുക്കൽ ഫീൽഡുകൾ വ്യക്തമാക്കിയ അതേ ക്രമത്തിൽ അന്വേഷണ ഫലത്തിൻ്റെ ക്രമം ക്രമീകരിക്കും.
കോളം1 | കോളം2 | കോളം3 |
3 | 1 | സി |
1 | 3 | സി |
2 | 2 | ബി |
2 | 1 | ബി |
1 | 2 | എ |
1 | 3 | എ |
3 | 4 | എ |
ഇനിപ്പറയുന്ന നിയമങ്ങൾ അനുസരിച്ച് പട്ടിക അടുക്കാം:
തിരഞ്ഞെടുക്കുക * മൈറ്റബിൾ ഓർഡറിൽ നിന്ന് കോളം1 ASC, കോളം2 DESC, കോളം3 ASC
ആ. ആദ്യ നിര ആരോഹണം ചെയ്യുന്നു, രണ്ടാമത്തേത് അവരോഹണം ചെയ്യുന്നു, മൂന്നാമത്തേത് വീണ്ടും ആരോഹണം ചെയ്യുന്നു. ചോദ്യം ആദ്യ നിരയിലൂടെ വരികൾ ക്രമീകരിക്കും, തുടർന്ന്, ആദ്യ നിയമം ലംഘിക്കാതെ, രണ്ടാമത്തെ നിര വഴി. പിന്നെ, നിലവിലുള്ള നിയമങ്ങൾ ലംഘിക്കാതെ, മൂന്നാമത്തേത് അനുസരിച്ച്. ഫലം ഇതുപോലെയുള്ള ഒരു ഡാറ്റ സെറ്റ് ആയിരിക്കും:
കോളം1 | കോളം2 | കോളം3 |
1 | 3 | എ |
1 | 3 | സി |
1 | 2 | എ |
2 | 2 | ബി |
2 | 1 | ബി |
3 | 1 | എ |
3 | 1 | സി |
ഒരു ചോദ്യത്തിൽ കമാൻഡ് പ്രകാരം ഓർഡർ ചെയ്യുക
വരികൾ അടുക്കുന്നത് മിക്കപ്പോഴും ഡാറ്റ തിരഞ്ഞെടുക്കുന്നതിനുള്ള ഒരു വ്യവസ്ഥയോടെയാണ് നടത്തുന്നത്. WHERE തിരഞ്ഞെടുക്കൽ വ്യവസ്ഥയ്ക്ക് ശേഷം ഓർഡർ ബൈ കമാൻഡ് സ്ഥാപിക്കുന്നു. ഉദാഹരണത്തിന്, 100 റുബിളിൽ താഴെ വിലയുള്ള ഉൽപ്പന്നങ്ങൾ ഞങ്ങൾ തിരഞ്ഞെടുക്കുന്നു, അക്ഷരമാലാക്രമത്തിൽ പേര് പ്രകാരം അടുക്കി:
തിരഞ്ഞെടുക്കുക * 100 വിലയുള്ള സാധനങ്ങളിൽ നിന്ന്വില ASC പ്രകാരം ഓർഡർ ചെയ്യുക
ഈ അധ്യായം ഒരു പട്ടികയിൽ അവതരിപ്പിച്ച മൂല്യങ്ങളെ നിയന്ത്രിക്കുന്ന കമാൻഡുകൾ അവതരിപ്പിക്കുന്നു. നിങ്ങൾ ഈ അധ്യായം പൂർത്തിയാക്കുമ്പോൾ, നിങ്ങൾക്ക് ഒരു പട്ടികയിൽ വരികൾ സ്ഥാപിക്കാനും അവ ഇല്ലാതാക്കാനും ഓരോ വരിയിലും പ്രതിനിധീകരിക്കുന്ന വ്യക്തിഗത മൂല്യങ്ങൾ മാറ്റാനും കഴിയും. രൂപീകരണത്തിലെ ചോദ്യങ്ങളുടെ ഉപയോഗം കാണിക്കും മുഴുവൻ ഗ്രൂപ്പ്വരികൾ തിരുകുക, മൂല്യങ്ങൾ മാറുന്നതും വരികൾ ഇല്ലാതാക്കുന്നതും നിയന്ത്രിക്കാൻ ഒരു പ്രവചനം എങ്ങനെ ഉപയോഗിക്കാം. ഈ അധ്യായത്തിലെ മെറ്റീരിയൽ ഒരു ഡാറ്റാബേസിൽ വിവരങ്ങൾ എങ്ങനെ സൃഷ്ടിക്കാമെന്നും കൈകാര്യം ചെയ്യാമെന്നും കാണിക്കുന്ന ഒരു സമ്പൂർണ്ണ അറിവ് ഉൾക്കൊള്ളുന്നു. പ്രവചനങ്ങൾ രൂപകൽപ്പന ചെയ്യുന്നതിനുള്ള കൂടുതൽ ശക്തമായ വഴികൾ അടുത്ത അധ്യായത്തിൽ ചർച്ചചെയ്യും.
DML ലാംഗ്വേജ് മോഡിഫിക്കേഷൻ കമാൻഡുകൾ
മൂന്ന് ഡിഎംഎൽ (ഡാറ്റ മാനിപുലേഷൻ ലാംഗ്വേജ്) കമാൻഡുകൾ ഉപയോഗിച്ച് ഫീൽഡുകളിൽ മൂല്യങ്ങൾ ചേർക്കാനും നീക്കംചെയ്യാനും കഴിയും: INSERT, UPDATE, DELETE. ആശയക്കുഴപ്പത്തിലാകരുത്, അവയെല്ലാം മോഡിഫിക്കേഷൻ കമാൻഡുകളായി SQL-ൽ നേരത്തെ സൂചിപ്പിച്ചിരുന്നു.മൂല്യങ്ങൾ പ്രവേശിക്കുന്നു
INSERT മോഡിഫിക്കേഷൻ കമാൻഡ് ഉപയോഗിച്ചാണ് SQL-ലെ എല്ലാ വരികളും നൽകിയത്. ഏറ്റവും ലളിതമായ രൂപത്തിൽ, INSERT ഇനിപ്പറയുന്ന വാക്യഘടന ഉപയോഗിക്കുന്നു: INSERT INTO
സെന്റ് പീറ്റേഴ്സ്ബർഗ് |
||||
പട്ടിക 5.5
"ഓർഡറുകൾ"
പട്ടിക ഫീൽഡ് നാമങ്ങൾ
"വിൽപ്പനക്കാർ" പട്ടിക:
pnom - വിൽപ്പനക്കാരൻ്റെ അദ്വിതീയ നമ്പർ, പ്രാഥമിക കീ;
പേര് - വിൽപ്പനക്കാരൻ്റെ പേര്;
നഗരം - വിൽപ്പനക്കാരൻ സ്ഥിതിചെയ്യുന്ന നഗരം;
com - വിൽപ്പന കമ്മീഷൻ.
പട്ടിക "ഉപഭോക്താക്കൾ":
അറിയുക - അദ്വിതീയ ഉപഭോക്തൃ നമ്പർ, പ്രാഥമിക കീ;
pnom - വിൽപ്പനക്കാരൻ്റെ നമ്പർ, വിദേശ കീ.
പട്ടിക "ഓർഡറുകൾ":
prnom - തനതായ ഓർഡർ നമ്പർ, പ്രാഥമിക കീ;
സമ്പ്ർ - ഓർഡറിൻ്റെ തുക (യെൻ);
datpr - ഓർഡർ ലഭിച്ച തീയതി;
znom - ഓർഡർ ചെയ്യുന്ന ഉപഭോക്താവിൻ്റെ എണ്ണം, വിദേശ കീ;
pm - ഓർഡർ വിൽക്കുന്ന വിൽപ്പനക്കാരൻ്റെ നമ്പർ, വിദേശ കീ.
അരി. 5.2 കണക്ഷൻ ഡയഗ്രം
സ്റ്റാറ്റിക്, ഡൈനാമിക് ഭാഷകളുണ്ട് SQL പ്രോഗ്രാമിംഗ്. IN സ്റ്റാറ്റിക് ഭാഷഎല്ലാ വസ്തുക്കളുടെയും അർത്ഥങ്ങൾ വ്യക്തമായി രേഖപ്പെടുത്തിയിട്ടുണ്ട്. IN ചലനാത്മക ഭാഷഒബ്ജക്റ്റ് മൂല്യങ്ങൾക്ക് പകരം SQL, പരാമീറ്ററുകൾ ഉപയോഗിക്കുന്നു, അതിനുള്ള ഡാറ്റ ഉപയോക്താവ് സംവേദനാത്മകമായി നൽകിയതോ അല്ലെങ്കിൽ മറ്റ് പട്ടികകളിൽ നിന്ന് (ഡാറ്റാബേസുകൾ) പ്രോഗ്രാം എക്സിക്യൂഷൻ സമയത്ത് കടമെടുത്തതോ ആണ്.
സ്റ്റാറ്റിക് പ്രോഗ്രാമിംഗ് ഭാഷ SQL
SQL ഭാഷയിൽ, പ്രവർത്തനങ്ങളുടെ മൂന്ന് പ്രധാന ഗ്രൂപ്പുകളെ വേർതിരിച്ചറിയാൻ സാധിക്കും: സൃഷ്ടിക്കൽ (സൃഷ്ടിക്കുക), അപ്ഡേറ്റ് (ഇൻസേർട്ട്, അപ്ഡേറ്റ്, ഡിലീറ്റ്), അന്വേഷണം (തിരഞ്ഞെടുക്കുക). അവർക്കുണ്ട് ഇനിപ്പറയുന്ന മാനദണ്ഡങ്ങൾ, ഇതിൽ ഇനിപ്പറയുന്ന നൊട്ടേഷൻ ഉപയോഗിക്കുന്നു: | - ചിഹ്നത്തിന് മുമ്പുള്ള എല്ലാം അതിനെ പിന്തുടരുന്നവ ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കാം; () - ചിഹ്നം പ്രയോഗിക്കുന്നതിനുള്ള ഒരൊറ്റ യൂണിറ്റ്; - ഓപ്ഷണൽ എക്സ്പ്രഷൻ; ... – ആവർത്തിക്കുന്നു അനിയന്ത്രിതമായ നമ്പർഒരിക്കല്; - അനിയന്ത്രിതമായ നിരവധി തവണ ആവർത്തിച്ചു, എന്നാൽ ഏത് സംഭവവും ഒരു കോമയാൽ വേർതിരിച്ചിരിക്കുന്നു.
(5.1)
ഡാറ്റ തരങ്ങൾ "INTEGER, CHARACTER, DECIMAL, NUMERIC, SMALLINT, FLOAT, REAL, PRECISION, LONG, VARCHAR, DATE, TIME എന്നിവ ആകാം. അവസാനത്തെ നാല് തരങ്ങൾ SQL സ്റ്റാൻഡേർഡിൽ ഉൾപ്പെടുത്തിയിട്ടില്ല, പക്ഷേ അത് പിന്തുണച്ചേക്കാം.
നിര തരം (പട്ടിക തരം) ഇതായിരിക്കാം: തനത്, പ്രാഥമിക കീ, പരിശോധിക്കുക<предикат>,ഡിഫോൾട്ട്=<список полей>, റഫറൻസ്<имя таблицы> [(<имя столбца>.,...)|.
(5.3)
(5.4)
മൂന്ന് തരം SQL ഉണ്ട്: ഇൻ്ററാക്ടീവ്, നെസ്റ്റഡ്, ഇൻലൈൻ.
ഉപഭോക്താവിൻ്റെ ഉപയോഗത്തിനായി ഔട്ട്പുട്ട് ഉൽപ്പാദിപ്പിക്കുന്നതിന് ഡാറ്റാബേസിൽ നേരിട്ട് പ്രവർത്തിക്കാൻ ഇൻ്ററാക്ടീവ് SQL ഉപയോഗിക്കുന്നു.
എംബഡഡ് SQL എന്നത് പ്രോഗ്രാമുകൾക്കുള്ളിൽ സ്ഥാപിച്ചിട്ടുള്ള SQL കമാൻഡുകൾ ഉൾക്കൊള്ളുന്നു, അവ സാധാരണയായി മറ്റൊരു ഭാഷയിൽ (COBOL അല്ലെങ്കിൽ Pascal പോലുള്ളവ) എഴുതുന്നു. ഇത് അത്തരം പ്രോഗ്രാമുകളെ കൂടുതൽ ശക്തവും ഫലപ്രദവുമാക്കുന്നു.
ഞങ്ങൾ പ്രാഥമികമായി (റഫറൻസുകളുടെ അഭാവത്തിൽ) സംവേദനാത്മക ഭാഷ പരിഗണിക്കും.
♦ ഇൻ്ററാക്ടീവ് SQL ഭാഷ
ഹൈലൈറ്റ് ചെയ്യുന്നത് സാധ്യമാണ്:
- DDL (ഡാറ്റ വിവരണ ഭാഷ) ഒരു സ്കീമ വിവരണ ഭാഷയാണ്, ANSI-യിൽ ഡാറ്റാബേസിൽ ഒബ്ജക്റ്റുകൾ (പട്ടികകൾ, സൂചികകൾ, കാഴ്ചകൾ) സൃഷ്ടിക്കുന്ന കമാൻഡുകൾ അടങ്ങിയിരിക്കുന്നു;
- ഡിഎംഎൽ (ഡാറ്റ മാനിപുലേഷൻ ലാംഗ്വേജ്) എന്നത് ഏത് സമയത്തും ടേബിളുകളിൽ എന്ത് മൂല്യങ്ങളാണ് അവതരിപ്പിക്കുന്നതെന്ന് നിർണ്ണയിക്കുന്ന ഒരു കൂട്ടം കമാൻഡുകൾ;
- ഡിസിഡി (ഡാറ്റ കൺട്രോൾ ലാംഗ്വേജ്) ചില പ്രവർത്തനങ്ങൾ ചെയ്യാൻ ഉപയോക്താവിനെ അനുവദിച്ചിട്ടുണ്ടോ എന്ന് നിർവചിക്കുന്ന ടൂളുകൾ ഉൾക്കൊള്ളുന്നു.
അതിൻ്റെ കേന്ദ്രത്തിൽ, SQL ഭാഷ ഒരു പ്രത്യേക ഡിക്ലറേറ്റീവ് ചോദ്യ ഭാഷയാണ്, അതിനാൽ ഏറ്റവും കൂടുതൽ കോമ്പിനേഷനുകൾ നിലവിലുണ്ട് നടപടിക്രമങ്ങൾ തിരഞ്ഞെടുക്കുക. എന്നിരുന്നാലും, ഡാറ്റാബേസുമായി പ്രവർത്തിക്കുന്നതിൻ്റെ സാങ്കേതിക ചക്രം അനുസരിച്ച് കമാൻഡുകൾ ക്രമീകരിക്കുന്നത് കൂടുതൽ സൗകര്യപ്രദമാണ്:
- 1) ഒരു ഡാറ്റാബേസ് സൃഷ്ടിക്കൽ - പട്ടിക ഘടനകൾ, കാഴ്ചകൾ സൃഷ്ടിക്കൽ, ഡാറ്റ ഉപയോഗിച്ച് ഡാറ്റാബേസ് പൂരിപ്പിക്കൽ, സമഗ്രത ഉറപ്പാക്കൽ, ആക്സസ് സിസ്റ്റം (അനുമതികൾ), ഡാറ്റ നിഘണ്ടു, മൾട്ടി-യൂസർ മോഡ്;
- 2) ഡാറ്റാബേസ് ഉപയോഗിച്ച് - അന്വേഷിക്കുക വിവിധ രൂപങ്ങൾ(അപ്ഡേറ്റ് ഉൾപ്പെടെ).
ഒരു ഡാറ്റാബേസ് സൃഷ്ടിക്കുന്നു
പട്ടിക ഘടന. CREATE TABLE കമാൻഡ് (എക്സ്പ്രഷൻ (5.1)) ഉപയോഗിച്ചാണ് പട്ടികകൾ (ശൂന്യം) സൃഷ്ടിക്കുന്നത്.
(5.5)
CREATE TABLE കമാൻഡ് അടിസ്ഥാനപരമായി ഒരു പട്ടികയുടെ പേര്, ഒരു നിർദ്ദിഷ്ട ക്രമത്തിൽ വ്യക്തമാക്കിയ നിര നാമങ്ങളുടെ ഒരു കൂട്ടം, ഡാറ്റ തരങ്ങൾ, നിര വലുപ്പങ്ങൾ എന്നിവ വ്യക്തമാക്കുന്നു.
പട്ടികകൾ സൃഷ്ടിച്ച ഉപയോക്താവിൻ്റെ ഉടമസ്ഥതയിലുള്ളതാണ്, കൂടാതെ ഉടമസ്ഥതയിലുള്ള എല്ലാ പട്ടികകളുടെയും പേരുകൾ ഈ ഉപയോക്താവിന്, പരസ്പരം വ്യത്യസ്തമായിരിക്കണം, അതുപോലെ തന്നിരിക്കുന്ന പട്ടികയ്ക്കുള്ളിലെ എല്ലാ നിരകളുടെയും പേരുകൾ. പട്ടികയിലെ നിരകളുടെ ക്രമം നിർണ്ണയിക്കുന്നത് അവ ലിസ്റ്റുചെയ്തിരിക്കുന്ന ക്രമത്തിലാണ്.
താൽക്കാലിക പട്ടികകൾ സൃഷ്ടിക്കാൻ SQL നിങ്ങളെ അനുവദിക്കുന്നു, അതിൻ്റെ "ആജീവനാന്തം" ഡാറ്റാബേസ് സെഷനാണ് (ഡാറ്റാബേസ് തുറക്കുന്നത് മുതൽ അടയ്ക്കുന്നത് വരെയുള്ള സമയം).
ഒരു പട്ടിക ആഗോളമാകാം, അതായത്, അത് സൃഷ്ടിച്ച മുഴുവൻ ആപ്ലിക്കേഷൻ പ്രോഗ്രാമിലേക്കും ആക്സസ് ചെയ്യാൻ കഴിയും:
ഗ്ലോബൽ ടെമ്പററി ടേബിൾ സെല്ലർമാരെ സൃഷ്ടിക്കുക
(സംഖ്യ പൂർണ്ണസംഖ്യ,
പേര് ചാർ (10),
സിറ്റി ചാർ (10),
കോം ദശാംശം);
ഇത് പ്രാദേശികമാകാം, അത് സൃഷ്ടിച്ച പ്രോഗ്രാം മൊഡ്യൂളിലേക്ക് മാത്രം ആക്സസ് ചെയ്യാൻ കഴിയും:
പ്രാദേശിക താൽക്കാലിക ടേബിൾ വെണ്ടർമാരെ സൃഷ്ടിക്കുക
(സംഖ്യ പൂർണ്ണസംഖ്യ,
പേര് ചാർ (10),
സിറ്റി ചാർ (10),
കോം ദശാംശം);
ഒരു ടേബിൾ സൃഷ്ടിച്ച ശേഷം അത് മാറ്റുന്നത് ALTER TABLE കമാൻഡ് ഉപയോഗിച്ചാണ് ചെയ്യുന്നത്. സാധാരണ, ഇത് ഒരു പട്ടികയിലേക്ക് നിരകൾ ചേർക്കുന്നു. ഇത് ചിലപ്പോൾ നിരകൾ നീക്കംചെയ്യുകയോ വലുപ്പം മാറ്റുകയോ ചെയ്തേക്കാം, ചില പ്രോഗ്രാമുകളിൽ നിയന്ത്രണങ്ങൾ ചേർക്കുകയോ നീക്കം ചെയ്യുകയോ ചെയ്തേക്കാം. ഒരു പട്ടികയിലേക്ക് ഒരു കോളം ചേർക്കാൻ, ഫോർമാറ്റ് ഉപയോഗിക്കുക:
ആൾട്ടർ ടേബിൾ<имя таблицы>ചേർക്കുക<имя поля>
<тип данных> <размер>;
പട്ടികയിലെ എല്ലാ വരികൾക്കും ഒരു NULL മൂല്യത്തോടുകൂടിയ കോളം അവസാനമായി ചേർക്കും.
കമാൻഡ് പ്രകാരമാണ് നീക്കം ചെയ്യുന്നത്
ഡ്രോപ്പ് ടേബിൾ<имя таблицы>;
പട്ടിക ഇല്ലാതാക്കാൻ നിങ്ങൾ അതിൻ്റെ സ്രഷ്ടാവായിരിക്കണം.
സൂചികകൾ അതേ രീതിയിൽ സൃഷ്ടിക്കുകയും ഇല്ലാതാക്കുകയും ചെയ്യുന്നു.
അടിസ്ഥാന പട്ടിക (5.5) അതിൻ്റെ ഏറ്റവും ലളിതമായ രൂപത്തിൽ അവതരിപ്പിക്കുകയും കൂടുതൽ വികസിപ്പിക്കുകയും ചെയ്യും: മറ്റ് പട്ടികകൾ പിന്നീട് സൃഷ്ടിക്കപ്പെടും. ഇനി നമുക്ക് ഒരു കാഴ്ച സൃഷ്ടിക്കുന്നത് നോക്കാം.
ജീവിവർഗങ്ങളുടെ ഘടനയും ഉള്ളടക്കവും.നിങ്ങൾ ഇപ്പോൾ സൃഷ്ടിച്ച പട്ടികയെ അടിസ്ഥാന പട്ടിക എന്ന് വിളിക്കുന്നു. നിങ്ങൾക്ക് ഒരു കാഴ്ച (കാണുക) സൃഷ്ടിക്കാൻ കഴിയും - ഉള്ളടക്കങ്ങൾ എടുത്തതോ മറ്റ് പട്ടികകളിൽ നിന്ന് ഉരുത്തിരിഞ്ഞതോ ആയ പട്ടികകൾ. CREATE VIEW കമാൻഡ് ഉപയോഗിച്ചാണ് കാഴ്ച സൃഷ്ടിച്ചിരിക്കുന്നത്:
മോസ്കോ 1 കാഴ്ച സൃഷ്ടിക്കുക
വിൽപ്പനക്കാരിൽ നിന്ന്
എവിടെ നഗരം = "മോസ്കോ";
മോസ്കോ 1 - പ്രകടനം (കാഴ്ച). ഇത് വിവര സുരക്ഷാ ആവശ്യങ്ങൾക്കായി ഉപയോഗിക്കുന്നു, ഓരോ തവണയും ഒരു അഭ്യർത്ഥന നടത്തുമ്പോൾ അത് കണക്കാക്കുന്നു, അതിനാൽ ഡാറ്റ സ്വയമേവ അപ്ഡേറ്റ് ചെയ്യപ്പെടും. മറ്റേതൊരു അടിസ്ഥാന ടേബിളും പോലെ ഇത് ഉപയോഗിക്കാൻ കഴിയും, എന്നാൽ ആക്സസ്, അപ്ഡേറ്റ് നടപടിക്രമങ്ങൾ എന്നിവയ്ക്ക് പ്രത്യേകതകൾ ഉണ്ട്.
ധാരാളം കാഴ്ച തരങ്ങൾ വായിക്കാൻ മാത്രമുള്ളതാണ്. ഇതിനർത്ഥം അവരെ അന്വേഷിക്കാൻ കഴിയും, എന്നാൽ പരിഷ്ക്കരണ കമാൻഡുകൾ അവരെ ബാധിക്കില്ല എന്നാണ്.
കാഴ്ച നിർവചനങ്ങളിൽ അനുവദനീയമല്ലാത്ത ചില തരത്തിലുള്ള അന്വേഷണങ്ങളുണ്ട്: ഒരൊറ്റ കാഴ്ച ഒരൊറ്റ അന്വേഷണത്തെ അടിസ്ഥാനമാക്കിയുള്ളതായിരിക്കണം; യൂണിയനും യൂണിയനും എല്ലാം, മൊത്തത്തിലുള്ള പ്രവർത്തനങ്ങൾ, നിർവചനത്തിൽ DISTINCT, കാഴ്ചകൾക്കൊപ്പം പ്രവർത്തിക്കുമ്പോൾ കണക്കാക്കിയ ഫീൽഡുകൾ അനുവദനീയമല്ല; കാഴ്ചകൾ നിർവചിക്കുന്നതിൽ ഒരിക്കലും ഓർഡർ പ്രകാരം ഉപയോഗിക്കില്ല.
കാഴ്ചകൾ നീക്കം ചെയ്യുന്നത് (അതിൻ്റെ ഉടമ) കമാൻഡ് വഴിയാണ്
ഡ്രോപ്പ് വ്യൂ<имя вида>.
ഡാറ്റ ഉപയോഗിച്ച് ഡാറ്റാബേസ് പൂരിപ്പിക്കൽ. DML (ഡാറ്റ മാനിപുലേഷൻ ലാംഗ്വേജ്) കമാൻഡുകൾ ഉപയോഗിച്ച് ഫീൽഡുകളിൽ മൂല്യങ്ങൾ ചേർക്കാനും നീക്കംചെയ്യാനും കഴിയും INSERT, DELETE - എക്സ്പ്രഷനുകൾ (5.2), (5.3). അതിനാൽ, ഉദാഹരണത്തിന്, വിൽപ്പനക്കാരുടെ പട്ടികയിലേക്ക് ഒരു വരി നൽകുന്നതിന്, നിങ്ങൾക്ക് ഇനിപ്പറയുന്ന വ്യവസ്ഥ ഉപയോഗിക്കാം;
വിൽപ്പനക്കാരിലേക്ക് തിരുകുക
മൂല്യങ്ങൾ(", "സ്ട്രോക്കോവ്", "മോസ്കോ", .12);
നിങ്ങൾക്ക് ഒരു ശൂന്യമായ മൂല്യം (NULL) ചേർക്കാനും കഴിയും.
ഏത് ക്രമത്തിലും പട്ടിക നിരകൾ വ്യക്തമാക്കാൻ കഴിയും, ഉദാഹരണത്തിന്,
ഉപഭോക്താക്കളിലേക്ക് തിരുകുക (നഗരം, പേര്, നമ്പർ)
മൂല്യങ്ങൾ ("മോസ്കോ", "ഇവാനോവ്", 2001);
തെറ്റായി നൽകിയ വരികൾ DELETE കമാൻഡ് ഉപയോഗിച്ച് ഇല്ലാതാക്കുന്നു. ഇതിന് നൽകിയ വരികൾ മാത്രമേ ഇല്ലാതാക്കാൻ കഴിയൂ, വ്യക്തിഗത ഫീൽഡ് മൂല്യങ്ങളല്ല, അതിനാൽ ഫീൽഡ് പാരാമീറ്റർ ഓപ്ഷണൽ അല്ലെങ്കിൽ ലഭ്യമല്ല. "വിൽപ്പനക്കാർ" പട്ടികയുടെ മുഴുവൻ ഉള്ളടക്കങ്ങളും ഇല്ലാതാക്കാൻ, നിങ്ങൾ നൽകണം:
വിൽപ്പനക്കാരിൽ നിന്ന് ഇല്ലാതാക്കുക;
പട്ടിക ഇപ്പോൾ ശൂന്യമാണ്, DROP TABLE കമാൻഡ് ഉപയോഗിച്ച് ശാശ്വതമായി ഇല്ലാതാക്കാൻ കഴിയും. സാധാരണയായി നിങ്ങൾ ഒരു പട്ടികയിൽ നിന്ന് ചില നിർദ്ദിഷ്ട വരികൾ മാത്രമേ നീക്കംചെയ്യാൻ ആഗ്രഹിക്കുന്നുള്ളൂ, അത് ഒരു പ്രവചനം ഉപയോഗിച്ചാണ് ചെയ്യുന്നത്. ഉദാഹരണത്തിന്, വിൽപ്പനക്കാരുടെ പട്ടികയിൽ നിന്ന് വിൽപ്പനക്കാരനായ കോസ്ലോവിൻ്റെ ഡാറ്റ നീക്കംചെയ്യുന്നതിന്, നിങ്ങൾക്ക് നൽകാം
വിൽപ്പനക്കാരിൽ നിന്ന് ഇല്ലാതാക്കുക
എവിടെ pnom = 1003;
INSERT, DELETE കമാൻഡുകളും UPDATE കമാൻഡും ഡാറ്റാബേസ് പ്രവർത്തിപ്പിക്കുമ്പോൾ അപ്ഡേറ്റ് നടപടിക്രമത്തിൽ ഉപയോഗിക്കുന്നു.
വ്യായാമം ചെയ്യുക (സുരക്ഷ) സമഗ്രത.പട്ടികകളിൽ നിയന്ത്രണങ്ങൾ സജ്ജമാക്കാൻ നിങ്ങളെ അനുവദിക്കുന്ന CREATE TABLE കമാൻഡിൻ്റെ ഒരു വ്യതിയാനമാണിത്.
കോളത്തിൻ്റെ പേരിൻ്റെ അവസാനത്തിലും ഡാറ്റ തരത്തിന് ശേഷവും കോമയ്ക്ക് മുമ്പും ഒരു കോളം കൺസ്ട്രെയിൻ്റ് ചേർത്തിരിക്കുന്നു. പട്ടികയുടെ പേരിൻ്റെ അവസാനത്തിൽ, അവസാന നിരയുടെ പേരിന് ശേഷം എന്നാൽ അവസാന പരാന്തീസിസിന് മുമ്പായി പട്ടിക നിയന്ത്രണങ്ങൾ സ്ഥാപിച്ചിരിക്കുന്നു:
പട്ടിക സൃഷ്ടിക്കുക<имя таблицы>
പട്ടിക നിയന്ത്രണം > (<имя столбца>
[, <имя столбца> ]...);
നമുക്ക് ചില നിയന്ത്രണങ്ങൾ പട്ടികപ്പെടുത്താം.
- 1. NOT NULL കമാൻഡ് അവതരിപ്പിച്ചുകൊണ്ട് ശൂന്യമായ (NULL) പോയിൻ്ററുകൾ ഒഴിവാക്കുന്നു.
- 2. ഡാറ്റ അദ്വിതീയതയും പ്രാഥമിക കീകളും.
ഒരു പട്ടിക സൃഷ്ടിക്കുമ്പോൾ ഒരു ഫീൽഡിൽ ഒരു UNIQUE കോളം പരിമിതപ്പെടുത്തുന്നത്, മറ്റൊരു വരിയിൽ ഇതിനകം നിലവിലുള്ള ഒരു വരിയിലേക്ക് ആ ഫീൽഡിലേക്ക് പ്രവേശിക്കാനുള്ള ഏതൊരു ശ്രമവും നിരസിക്കും. NULL അല്ല എന്ന് പ്രഖ്യാപിച്ചിട്ടുള്ള ഫീൽഡുകൾക്ക് മാത്രമേ ഈ നിയന്ത്രണം ബാധകമാകൂ.
- 3. SQL ഒരു പ്രാഥമിക കീ നിയന്ത്രണത്തോടെ പ്രാഥമിക കീകളെ നേരിട്ട് പിന്തുണയ്ക്കുന്നു. പ്രാഥമിക കീകൾ NULL മൂല്യങ്ങൾ ഉണ്ടാകരുത്. ഇതിനർത്ഥം, ഒരു UNIQUE പരിമിതിയിലെ ഫീൽഡുകൾ പോലെ, ഒരു പ്രാഥമിക കീ നിയന്ത്രണത്തിൽ ഉപയോഗിക്കുന്ന ഏത് ഫീൽഡും ഇതിനകം തന്നെ NULL അല്ല എന്ന് പ്രഖ്യാപിച്ചിരിക്കണം.
- 4. ഫീൽഡ് മൂല്യങ്ങളിൽ നിയന്ത്രണങ്ങൾ. ഇതിനായി CHECK കൺസ്ട്രൈൻ്റ് ഉപയോഗിക്കുന്നു: ഒരു പിശക് തടയാൻ തെറ്റായ ഉൾപ്പെടുത്തൽ"comm" ൻ്റെ മൂല്യങ്ങൾ, ഞങ്ങൾ ഒരു കോളം നിയന്ത്രണം ഏർപ്പെടുത്തും - പരിശോധിക്കുക ("comm" I എന്നതിനേക്കാൾ കുറവാണ്).
മുകളിൽ പറഞ്ഞവ ഫോമിൽ അവതരിപ്പിക്കാം
ടേബിൾ വെണ്ടർമാരെ സൃഷ്ടിക്കുക
സിറ്റി ചാർ (10),
comm ദശാംശം പരിശോധിക്കുക (comm< 1));
നിയന്ത്രണ മൂല്യങ്ങളുടെ ഇടവേളകളും സെറ്റുകളും വ്യക്തമാക്കാം.
ആദ്യം നമുക്ക് "ഓർഡറുകൾ" പട്ടിക ഉണ്ടാക്കാം:
ടേബിൾ ഓർഡറുകൾ സൃഷ്ടിക്കുക
(പ്രോൺ പൂർണ്ണസംഖ്യ ശൂന്യമല്ല, അദ്വിതീയമല്ല,
ഉയർന്ന ദശാംശം,
datepr തീയതി ശൂന്യമല്ല,
മൂല്യ പൂർണ്ണസംഖ്യ ശൂന്യമല്ല,
pnom പൂർണ്ണസംഖ്യ NULL അല്ല);
5. സ്ഥിര മൂല്യങ്ങൾ നമ്പർ ആയി സജ്ജമാക്കുക.
DEFAULT മൂല്യം CREATE TABLE കമാൻഡിൽ ഒരു കോളം പരിമിതി പോലെ തന്നെ വ്യക്തമാക്കിയിരിക്കുന്നു.
ഓഫീസ് ഓറലിലാണ് സ്ഥിതി ചെയ്യുന്നതെങ്കിൽ, ഭൂരിഭാഗം വിൽപ്പനക്കാരും ഓറലിലാണ് താമസിക്കുന്നതെങ്കിൽ, സ്ഥിരസ്ഥിതിയായി:
ടേബിൾ വെണ്ടർമാരെ സൃഷ്ടിക്കുക
(നാമം പൂർണ്ണസംഖ്യ ശൂന്യമല്ല, അദ്വിതീയമല്ല,
പേര് ചാർ(10) ശൂന്യമല്ല തനത്,
സിറ്റി ചാർ(10) ഡിഫോൾട്ട് = "കഴുകൻ",
comm ദശാംശം പരിശോധിക്കുക (comm< 1);
6. വിദേശ കീ നിയന്ത്രണങ്ങൾ (റഫറൻഷ്യൽ ഇൻ്റഗ്രിറ്റി). CREATE TABLE (അല്ലെങ്കിൽ ALTER TABLE) കമാൻഡിൽ SQL റഫറൻഷ്യൽ സമഗ്രത നിലനിർത്തുന്നു വിദേശ നിയന്ത്രണംവാക്യഘടനയുള്ള കീ
വിദേശ കീ<список полей>റഫറൻസുകൾ
പാരൻ്റ് കീ ഉള്ള പട്ടിക > [<список полей>.
"വിൽപ്പനക്കാർ" എന്ന പട്ടികയെ സൂചിപ്പിക്കുന്ന ഒരു വിദേശ കീയായി നിർവചിച്ചിരിക്കുന്ന "pnom" എന്ന ഫീൽഡ് ഉപയോഗിച്ച് നമുക്ക് "ഉപഭോക്താക്കൾ" എന്ന ഒരു പട്ടിക സൃഷ്ടിക്കാം:
ടേബിൾ ഉപഭോക്താക്കളെ സൃഷ്ടിക്കുക
(വിജ്ഞാന പൂർണ്ണസംഖ്യ ശൂന്യമായ പ്രാഥമിക കീ വിൻ്റർ ചാർ(10), സിറ്റി ചാർ(10),
pnom പൂർണ്ണസംഖ്യ,
ഫോറിൻ കീ (Pnom) റഫറൻസുകൾ വിൽപ്പനക്കാർ (Pnom);
നിയന്ത്രണം പ്രത്യേകം അവതരിപ്പിക്കാം:
നിയന്ത്രണ ഉപയോഗപ്രദമായ വിദേശ കീ (മാസം)
റഫറൻസുകൾ വിൽപ്പനക്കാർ (Pnom);
ഒരു നിയന്ത്രണത്തിൻ്റെ ഈ ആമുഖം സൗകര്യപ്രദമാണ്, കാരണം പട്ടിക സൃഷ്ടിക്കൽ പ്രോഗ്രാം മാറ്റാതെ തന്നെ മറ്റൊരു പദപ്രയോഗം നേരിട്ട് ഇല്ലാതാക്കാനോ എഴുതാനോ ഇത് നിങ്ങളെ അനുവദിക്കുന്നു. ഒരു തടസ്സം നീക്കം ചെയ്യുന്നു
ഡ്രോപ്പ് കൺസ്ട്രൈൻ്റ് ഫീൽഡ്_നോം;
മേശ നിറഞ്ഞാൽ പ്രത്യേകിച്ചും സൗകര്യപ്രദമാണ്.
പാരൻ്റ് കീ അദ്വിതീയമായിരിക്കണം കൂടാതെ അസാധുവായ മൂല്യങ്ങളൊന്നും അടങ്ങിയിരിക്കരുതെന്നും ശ്രദ്ധിക്കുക. ഒരു വിദേശ കീ പ്രഖ്യാപിക്കുമ്പോൾ പാരൻ്റ് കീക്ക് ഇത് പര്യാപ്തമല്ല. SQL ഇരട്ട മൂല്യങ്ങളെക്കുറിച്ച് ഉറപ്പുണ്ടായിരിക്കണം അല്ലെങ്കിൽ ശൂന്യമായ മൂല്യങ്ങൾ(NULL) പാരൻ്റ് കീയിൽ നൽകിയിട്ടില്ല, അതായത്.
ടേബിൾ വെണ്ടർമാരെ സൃഷ്ടിക്കുക
(നാമം പൂർണ്ണസംഖ്യ ശൂന്യമായ പ്രാഥമിക കീ അല്ല,
പേര് ചാർ (10) ശൂന്യമല്ല,
സിറ്റി ചാർ (10),
കോം ദശാംശം);
ടേബിൾ ഉപഭോക്താക്കളെ സൃഷ്ടിക്കുക
വിൻ്റർ ചാർ (10) ശൂന്യമല്ല,
സിറ്റി ചാർ (10),
വിദേശ രാജ്യങ്ങൾ (πηομ) റഫറൻസുകൾ വിൽപ്പനക്കാർ,
UNIQUE (znom, pnom);
ടേബിൾ ഓർഡറുകൾ സൃഷ്ടിക്കുക
(prn പൂർണ്ണസംഖ്യ ശൂന്യമായ പ്രാഥമിക കീ അല്ല,
ഉയർന്ന ദശാംശം,
datepr തീയതി ശൂന്യമല്ല,
മൂല്യ പൂർണ്ണസംഖ്യ NULL അല്ല
pnom പൂർണ്ണസംഖ്യ NULL അല്ല
ഫോറിൻ കീ (znom, pnom) റഫറൻസുകൾ
ഉപഭോക്താക്കൾ (Znom, Pnom);
അങ്ങനെ, മൂന്ന് പട്ടികകളും സൃഷ്ടിക്കപ്പെടുകയും അവ തമ്മിലുള്ള ബന്ധം സ്ഥാപിക്കുകയും ചെയ്യുന്നു.
നിലവിലെ പാരൻ്റ് കീ റഫറൻസ് മൂല്യം മാറ്റുകയോ ഇല്ലാതാക്കുകയോ ചെയ്യണമെങ്കിൽ, നിങ്ങൾക്ക് മൂന്ന് ഓപ്ഷനുകൾ ഉണ്ട്:
- 1) മാറ്റങ്ങളെ നിയന്ത്രിക്കുക അല്ലെങ്കിൽ നിരോധിക്കുക (ANSI രീതിയിൽ), പാരൻ്റ് കീയിലെ മാറ്റങ്ങൾ നിയന്ത്രിച്ചിരിക്കുന്നു എന്ന് സൂചിപ്പിക്കുന്നു (നിയന്ത്രിച്ചിരിക്കുന്നു);
- 2) നിങ്ങൾക്ക് പാരൻ്റ് കീയിൽ മാറ്റം വരുത്താനും അതുവഴി വിദേശ കീയിൽ യാന്ത്രിക മാറ്റങ്ങൾ വരുത്താനും കഴിയും, അതായത് കാസ്കേഡ് മാറ്റം (CASCADES);
- 3) പാരൻ്റ് കീയിൽ ഒരു മാറ്റം വരുത്തി സ്വയമേവ വിദേശ കീ NULL ആയി സജ്ജീകരിക്കുക (വിദേശ കീയിൽ NULLS അനുവദനീയമാണെന്ന് കരുതുക) - ഒരു ശൂന്യമായ വിദേശ കീ മാറ്റം (NULL).
ഉദാഹരണത്തിന്, അപ്ഡേറ്റ് ചെയ്ത് നശിപ്പിക്കുക
ടേബിൾ ഉപഭോക്താക്കളെ സൃഷ്ടിക്കുക
(പൂർണ്ണസംഖ്യ ശൂന്യമായ പ്രാഥമിക കീ അല്ല,
വിൻ്റർ ചാർ (10) ശൂന്യമല്ല, സിറ്റി ചാർ (10),
കാസ്കേഡുകളുടെ അപ്ഡേറ്റ്,
നിയന്ത്രിത വിൽപ്പനക്കാരെ ഇല്ലാതാക്കുക);
നിങ്ങൾ ഇപ്പോൾ "സെല്ലേഴ്സ്" ടേബിളിൽ നിന്ന് സ്ട്രോക്കോവ് നീക്കം ചെയ്യാൻ ശ്രമിക്കുകയാണെങ്കിൽ, "pnom" ഫീൽഡ് "ഉപഭോക്താക്കൾ", ഇവാനോവ്, ക്രാബോവ് എന്നിവയുടെ മൂല്യം മറ്റൊരു നിയുക്ത വിൽപ്പനക്കാരന് മാറ്റുന്നത് വരെ കമാൻഡ് സാധുവായിരിക്കില്ല.
അതേ സമയം, നിങ്ങൾക്ക് സ്ട്രോക്കോവിനായുള്ള "Pnom" ഫീൽഡിൻ്റെ മൂല്യം 1009 ആയി മാറ്റാൻ കഴിയും, കൂടാതെ ഇവാനോവ്, ക്രാബ്സ് എന്നിവയുടെ ഡാറ്റയ്ക്കായി, "Pnom" ഫീൽഡിൻ്റെ മൂല്യങ്ങളും യാന്ത്രികമായി മാറും.
NULL (ശൂന്യമായ) മാറ്റങ്ങളും സാധ്യമാണ്. ഉദാഹരണത്തിന്,
ടേബിൾ ഓർഡറുകൾ സൃഷ്ടിക്കുക
prnom integer NULL പ്രാഥമിക കീ അല്ല,
ഉയർന്ന ദശാംശം,
datepr തീയതി ശൂന്യമല്ല,
3HOM പൂർണ്ണമായ റഫറൻസുകളല്ല ഉപഭോക്താക്കൾ,
mon integer റഫറൻസ് വിൽപ്പനക്കാർ,
CASCADES ഉപഭോക്താക്കളുടെ അപ്ഡേറ്റ്,
CASCADES ഉപഭോക്താക്കളെ ഇല്ലാതാക്കുക,
CASCADES വിൽപ്പനക്കാരുടെ അപ്ഡേറ്റ്,
വിൽപ്പനക്കാരുടെ നൾസ് ഇല്ലാതാക്കുക);
സ്വാഭാവികമായും, "വെണ്ടേഴ്സ്" ടേബിളിൽ NULL ഇഫക്റ്റ് ഉള്ള ഒരു DELETE കമാൻഡിൽ, NOT NULL കൺസ്ട്രൈൻ്റ് "pnom" ഫീൽഡിൽ നിന്നും നീക്കം ചെയ്യണം.
SQL ഭാഷ ഉപയോഗിച്ച്, ഒരു ഡാറ്റാബേസ്, സംഭരിച്ച നടപടിക്രമം, ജനറേറ്റർ, കൗണ്ടർ, ട്രിഗർ എന്നിവ നിർവചിക്കാനാകും.
ഡാറ്റാബേസ് ഇതുപോലെയാണ് രൂപീകരിച്ചിരിക്കുന്നത്:
ഡാറ്റാബേസ് സൃഷ്ടിക്കുക "d:...a1 .gdb"
പാസ്വേഡ് "മാസ്റ്റർകീ"
ഡിഫോൾട്ട് പ്രതീക സെറ്റ് WIN 1251
സംഭരിച്ച നടപടിക്രമം:
നടപടിക്രമം തയ്യാറാക്കുക റഷോദ്_തോവര(IN_Tovar varchar (20))
മടക്കങ്ങൾ (OUT_Tovar varchar(20))
ഉൽപ്പന്നം തിരഞ്ഞെടുക്കുന്നതിന്
എവിടെ ഉൽപ്പന്നം=: IN_Tovar
ജനറേറ്റർ രണ്ട് നടപടിക്രമങ്ങളാൽ വ്യക്തമാക്കിയിരിക്കുന്നു:
നടപടിക്രമം സൃഷ്ടിക്കുക Get_N_Rash;
ജനറേറ്റർ RASHOD_N_Rash മുതൽ 1 വരെ സജ്ജമാക്കുക;
നടപടിക്രമം സൃഷ്ടിക്കുക Get_N_Rash
റിട്ടേണുകൾ (NR പൂർണ്ണസംഖ്യ)
NR=Gen_ID(RASHOD_N_Rash, 1);
കാസ്കേഡ് അപ്ഡേറ്റ് ട്രിഗർ:
TRIGGER BU_ഇനം സജീവമാക്കുക
എങ്കിൽ (OLD.TovarONEW.Tovar) പിന്നെ
സെറ്റ് ഉൽപ്പന്നം=പുതിയ.ടോവർ
എവിടെ ഉൽപ്പന്നം=പഴയ ടോവർ;
സിസ്റ്റംഅനുമതികൾ. ഡാറ്റയിലേക്കുള്ള പ്രവേശനം അനുവദിക്കുന്ന (പ്രിവിലേജുകൾ) അല്ലെങ്കിൽ നിരസിക്കുന്ന ഒരു സംവിധാനം സാധ്യമാണ്. ഡാറ്റാബേസ് അഡ്മിനിസ്ട്രേറ്റർമാർ തന്നെ ഉപയോക്താക്കളെ സൃഷ്ടിക്കുകയും അവർക്ക് പ്രത്യേകാവകാശങ്ങൾ നൽകുകയും ചെയ്യുന്നുവെന്ന് ഞങ്ങൾ നിങ്ങളെ ഓർമ്മിപ്പിക്കാം. എന്നിരുന്നാലും, പട്ടികകൾ സൃഷ്ടിക്കുന്ന ഉപയോക്താക്കൾക്കും ആ പട്ടികകൾ നിയന്ത്രിക്കാനുള്ള അവകാശമുണ്ട്.
എന്ന് നിശ്ചയിക്കുന്നത് പ്രിവിലേജാണ് നിർദ്ദിഷ്ട ഉപയോക്താവ്ഈ കമാൻഡ് പ്രവർത്തിപ്പിക്കുക.
SQL ഭാഷയെ അടിസ്ഥാനമാക്കിയുള്ള അവരുടെ നിർമ്മാണത്തിൻ്റെ അടിസ്ഥാന തത്വങ്ങൾ നമുക്ക് പരിഗണിക്കാം. ഇനിപ്പറയുന്ന മുൻഗണനകൾ വേർതിരിച്ചിരിക്കുന്നു (അവരോഹണ ക്രമത്തിൽ): റോൾ, ഉപയോക്താവ്, ഗ്രൂപ്പ്, പൊതു പ്രവേശനം(പബ്ലിക്).
അനുവദിക്കുന്നതും നിരോധിക്കുന്നതുമായ പ്രവർത്തനങ്ങളുണ്ട്.
ഫോമിൻ്റെ ഒരു ഓപ്പറേറ്ററാണ് അനുമതി നൽകുന്നത്
ഗ്രാൻ്റ്<вид операции>
ഓൺ<объект>
അത്<субъект>
അവസാന വരി ഉപയോഗത്തിനുള്ള അവകാശം കൈമാറ്റം ചെയ്യുന്നതിനെക്കുറിച്ച് സംസാരിക്കുന്നു.
ആത്മവിശ്വാസമുള്ള മാനേജ്മെൻ്റിന്, ഒരു ഡാറ്റാബേസ് അഡ്മിനിസ്ട്രേറ്ററുടെയും ഒബ്ജക്റ്റ് ഉടമയുടെയും (ഉദാഹരണത്തിന്, ഒരു പട്ടിക) സംയോജനം ആവശ്യമാണ്.
ഡാറ്റാബേസ് അഡ്മിനിസ്ട്രേറ്റർ നിർവ്വഹിക്കുന്ന ഇല്യ എന്ന ഉപയോക്താവിൻ്റെ (ഡാറ്റാബേസുകൾ സൃഷ്ടിക്കുന്നതിനുള്ള കഴിവ് നൽകിയിരിക്കുന്നത്) സൃഷ്ടിക്കുന്നത് കമാൻഡ് അനുസരിച്ചാണ് നിർണ്ണയിക്കുന്നത്
ഇല്യ എന്ന ഉപയോക്താവിനെ സൃഷ്ടിക്കുക
പ്രത്യേകാവകാശങ്ങളോടെ create.db;
ഈ ഉപയോക്താവിന് പ്രത്യേകാവകാശങ്ങൾ നഷ്ടപ്പെടുത്തുന്നത് കമാൻഡ് ഉപയോഗിച്ചാണ്
ഡ്രോപ്പ് ഉപയോക്താവ് ഇല്യ;
റോൾ സൃഷ്ടിക്കൽ (ഒരു പാസ്വേഡ് ഉപയോഗിച്ച്) കമാൻഡ് വഴിയാണ് നടപ്പിലാക്കുന്നത്
പാസ്വേഡ് = "12" ഉപയോഗിച്ച് ROLE create_db സൃഷ്ടിക്കുക;
ടീമിൻ്റെ റോൾ നഷ്ടപ്പെടുത്തലും
ഡ്രോപ്പ് റോൾ create_db;
പല തരത്തിലുള്ള പ്രവർത്തനങ്ങൾക്ക് അനുസൃതമായി നിരവധി തരം പ്രത്യേകാവകാശങ്ങളുണ്ട്. രണ്ട് SQL കമാൻഡുകൾ ഉപയോഗിച്ച് പ്രത്യേകാവകാശങ്ങൾ അനുവദിക്കുകയും പിൻവലിക്കുകയും ചെയ്യുന്നു: GRANT, REVOKE.
SQL പരിതസ്ഥിതിയിലെ ഓരോ ഉപയോക്താവിനും ഒരു പ്രത്യേക തിരിച്ചറിയൽ നാമം (ഐഡൻ്റിഫയർ - ഐഡി) അല്ലെങ്കിൽ നമ്പർ ഉണ്ട്.
അനുമതി ഐഡി ഉപയോക്തൃനാമമാണ്. നിലവിലെ കമാൻഡുമായി ബന്ധപ്പെട്ട ആക്സസ് ഐഡിയെ സൂചിപ്പിക്കുന്ന USER എന്ന പ്രത്യേക കീവേഡ് SQL-ന് ഉപയോഗിക്കാം. കമാൻഡ് വ്യാഖ്യാനിക്കുകയും അനുവദിക്കുകയും (അല്ലെങ്കിൽ നിരസിക്കുകയും ചെയ്യുന്നു).
ഒബ്ജക്റ്റ് പ്രത്യേകാവകാശങ്ങൾ ഉപയോക്താക്കളുമായും പട്ടികകളുമായും ബന്ധപ്പെട്ടിരിക്കുന്നു. ഒരു കാര്യം ഓർക്കുക, പട്ടിക സൃഷ്ടിച്ച ഉപയോക്താവ് (ഏത് തരത്തിലായാലും) ആ പട്ടികയുടെ ഉടമയാണ്: ആ ടേബിളിൽ അദ്ദേഹത്തിന് എല്ലാ പ്രത്യേകാവകാശങ്ങളും ഉണ്ട്, ആ പ്രത്യേകാവകാശങ്ങൾ മറ്റ് ഉപയോക്താക്കൾക്ക് കൈമാറാനും കഴിയും.
SELECT, INSERT, UPDATE, DELETE, REFERENCES കമാൻഡുകൾക്ക് പ്രത്യേകാവകാശങ്ങൾ ബാധകമാണ് (ഈ പട്ടികയുടെ ഒന്നോ അതിലധികമോ നിരകൾ പാരൻ്റ് കീയായി ഉപയോഗിക്കുന്ന ഒരു വിദേശ കീ നിർവചിക്കുന്നു).
നിലവാരമില്ലാത്ത കമാൻഡുകളിൽ ഒരു പട്ടികയിൽ ഒരു സൂചിക സൃഷ്ടിക്കാനുള്ള അവകാശം നൽകുന്ന INDEX, ഒരു ടേബിളിൽ ALTER TABLE കമാൻഡ് നടപ്പിലാക്കുന്ന ALTER എന്നിവ ഉൾപ്പെടുന്നു. GRANT കമാൻഡ് ഉപയോഗിക്കുന്ന ഉപയോക്താക്കൾക്ക് SQL എഞ്ചിൻ ഈ പ്രത്യേകാവകാശങ്ങൾ നൽകുന്നു.
ഉദാഹരണത്തിന്, ഇല്യ എന്ന ഉപയോക്താവിന് "ഉപഭോക്താക്കൾ" എന്ന ഒരു ടേബിൾ ഉണ്ട്, കൂടാതെ പീറ്ററിനെതിരെ ഒരു ചോദ്യം പ്രവർത്തിപ്പിക്കാൻ ഉപയോക്താവിനെ അനുവദിക്കാൻ ആഗ്രഹിക്കുന്നു:
പീറ്ററിന് ഉപഭോക്താക്കൾക്ക് ഗ്രാൻ്റ് തിരഞ്ഞെടുക്കൽ;
പീറ്ററിന് ഉപഭോക്തൃ പട്ടികയ്ക്കെതിരായ ചോദ്യങ്ങൾ നടപ്പിലാക്കാൻ കഴിയും, എന്നാൽ മറ്റൊരു ഉപയോക്താവിന് SELECT അവകാശം നൽകാനാവില്ല: പട്ടിക ഇപ്പോഴും ഇല്യയുടേതാണ്.
ഗ്രൂപ്പ് പ്രത്യേകാവകാശങ്ങളും സാധ്യമാണ്:
ഗ്രാൻ്റ് സെലക്ട് ചെയ്യുക, ഇല്യ, പീറ്ററിനുള്ള ഓർഡറുകൾ ചേർക്കുക;
UPDATE, REFERNCES കമാൻഡുകൾക്കായി നിങ്ങൾക്ക് പ്രത്യേക ഫീൽഡുകൾ വ്യക്തമാക്കാനും കഴിയും:
ഇല്യയ്ക്ക് വിൽക്കുന്നവരെക്കുറിച്ചുള്ള അപ്ഡേറ്റ് (കോം) ഗ്രാൻ്റ്;
ഈ പ്രത്യേകാവകാശം നിയന്ത്രിച്ചിരിക്കുന്ന ഒന്നോ അതിലധികമോ നിരകളുടെ ഒരു ലിസ്റ്റായി റഫറൻസ് പ്രത്യേകാവകാശം വ്യക്തമാക്കാം. ഉദാഹരണത്തിന്, ഇനിപ്പറയുന്ന കമാൻഡ് ഉപയോഗിച്ച് ഉപഭോക്തൃ പട്ടികയുടെ ഫീൽഡുകൾ പാരൻ്റ് കീ ടേബിളായി ഉപയോഗിക്കാനുള്ള അവകാശം ഇല്യയ്ക്ക് സ്റ്റെപാന് നൽകാൻ കഴിയും:
ഗ്രാൻ്റ് റഫറൻസുകൾ (ശീതകാലം, ചൂട്)
ഉപഭോക്താക്കൾക്ക് സ്റ്റെപാനിലേക്ക്;
GRANT കമാൻഡിന് ഒരു പ്രത്യേക അർത്ഥമുള്ള രണ്ട് ആർഗ്യുമെൻ്റുകൾ SQL പിന്തുണയ്ക്കുന്നു: എല്ലാ പ്രത്യേകാവകാശങ്ങളും (എല്ലാ പ്രത്യേകാവകാശങ്ങളും) അല്ലെങ്കിൽ കമാൻഡുകൾക്കുള്ള എല്ലാം, ഉപയോക്താക്കൾക്കുള്ള PUBLIC (പൊതുവായത്).
എല്ലാ ഉപഭോക്താക്കൾക്കും പൊതുവായി അനുവദിക്കുക;
ഒരു ഉപയോക്താവിന് അനുവദിച്ചിരിക്കുന്ന പ്രത്യേകാവകാശങ്ങൾ കൈമാറുന്നതിനുള്ള കഴിവ് ഗ്രാൻ്റ് ഓപ്ഷൻ ക്ലോസ് ഉപയോഗിച്ച് നടപ്പിലാക്കുന്നു.
ചിലപ്പോൾ ടേബിൾ സ്രഷ്ടാവ് മറ്റ് ഉപയോക്താക്കൾക്ക് തൻ്റെ ടേബിളിൽ പ്രത്യേകാവകാശങ്ങൾ നേടണമെന്ന് ആഗ്രഹിക്കുന്നു. ഒന്നോ അതിലധികമോ ആളുകൾ ഒരു ഡാറ്റാബേസിൽ നിരവധി (അല്ലെങ്കിൽ എല്ലാം) അടിസ്ഥാന ടേബിളുകൾ സൃഷ്ടിക്കുകയും തുടർന്ന് യഥാർത്ഥത്തിൽ അവരോടൊപ്പം പ്രവർത്തിക്കുന്നവർക്ക് അവയുടെ ഉത്തരവാദിത്തം നൽകുകയും ചെയ്യുന്ന സിസ്റ്റങ്ങളിലാണ് ഇത് സാധാരണയായി ചെയ്യുന്നത്. ഗ്രാൻ്റ് ഓപ്ഷൻ ക്ലോസ് ഉപയോഗിച്ച് ഇത് ചെയ്യാൻ SQL നിങ്ങളെ അനുവദിക്കുന്നു.
"ഉപഭോക്താക്കൾ" പട്ടികയിലെ SELECT പ്രത്യേകാവകാശത്തിലേക്ക് പീറ്ററിനുള്ള അവകാശം ഇല്യ കൈമാറട്ടെ:
Petr ലേക്ക് ഉപഭോക്താക്കളെ തിരഞ്ഞെടുക്കാൻ അനുവദിക്കുക
ഗ്രാൻ്റ് ഓപ്ഷനോടെ;
ഇൻ്റഗ് ചെക്ക് നടപടിക്രമം പ്രവർത്തിപ്പിക്കാൻ അനുവദിക്കുന്നത് സാധ്യമാണ്
integ_check നടപടിക്രമത്തിൽ
ഉദാഹരണത്തിന്, INSERT കമാൻഡിലെ പ്രത്യേകാവകാശം പിൻവലിക്കാവുന്നതാണ്:
പീറ്ററിൽ നിന്നുള്ള ഓർഡറുകൾ റദ്ദാക്കുക;
ലിസ്റ്റുകളും ഇവിടെ ഉപയോഗിക്കാം:
ഉൾപ്പെടുത്തൽ പിൻവലിക്കുക, പീറ്റർ, സ്റ്റെപാൻ എന്നിവരിൽ നിന്ന് ഉപഭോക്താക്കളെ ഇല്ലാതാക്കുക;
മുമ്പ് ചർച്ച ചെയ്ത തരങ്ങൾ ഉപയോഗിച്ച് പ്രത്യേകാവകാശങ്ങൾ സജ്ജമാക്കാൻ (അല്ലെങ്കിൽ അസാധുവാക്കൽ) സാധ്യമാണ്. ഉദാഹരണത്തിന്,
മോസ്കോ 1 കാഴ്ച സൃഷ്ടിക്കുക
ശീതകാലം തിരഞ്ഞെടുക്കുക, വിൽപ്പനക്കാരിൽ നിന്ന് പേര്;
"സെല്ലേഴ്സ്" ടേബിളിൽ തന്നെയല്ല, കാഴ്ചയിൽ (കാഴ്ച) SELECT പ്രത്യേകാവകാശം മോസ്കോ1 നൽകുന്നു:
മോസ്കോ 1-ന് വിക്ടറിലേക്ക് തിരഞ്ഞെടുക്കൽ അനുവദിക്കുക;
ഇനിപ്പറയുന്ന വരികളിലൂടെയും പ്രത്യേകാവകാശങ്ങൾ പരിമിതപ്പെടുത്താം:
മോസ്കോ 2 കാഴ്ച സൃഷ്ടിക്കുക
ഉപഭോക്താക്കളിൽ നിന്ന്
എവിടെ നഗരം = "സോച്ചി"
ചെക്ക് ഓപ്ഷൻ ഉപയോഗിച്ച്;
പീറ്ററിന് മോസ്കോ 2-ൽ അപ്ഡേറ്റ് നൽകുക;
"സിറ്റി" ഫീൽഡിൻ്റെ മൂല്യം സോച്ചി ഒഴികെയുള്ള മറ്റേതെങ്കിലും മൂല്യം ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുന്നതിൽ നിന്നും വിത്ത് ചെക്ക് ഓപ്ഷൻ ക്ലോസ് Petr-നെ തടയുന്നു.
കാഴ്ചകൾക്കൊപ്പം പ്രവർത്തിക്കാൻ നിരവധി ഓപ്ഷനുകൾ ഉണ്ട്.
ഏത് വലിപ്പത്തിലുള്ള സിസ്റ്റത്തിനും എപ്പോഴും ചില തരത്തിലുള്ള സൂപ്പർ യൂസർ ഉണ്ട് - മിക്കപ്പോഴും ഒരു ഡാറ്റാബേസ് അഡ്മിനിസ്ട്രേറ്റർ അല്ലെങ്കിൽ DBA. അദ്ദേഹത്തിന് ഇനിപ്പറയുന്ന സിസ്റ്റം പ്രത്യേകാവകാശങ്ങളുണ്ട്: കണക്റ്റ് (കണക്റ്റ്), റിസോഴ്സ് (റിസോഴ്സ്), DBA (ഡാറ്റാബേസ് അഡ്മിനിസ്ട്രേറ്റർ).
CONNECT എന്നത് രജിസ്റ്റർ ചെയ്യാനുള്ള അവകാശവും കാഴ്ചകളും പര്യായങ്ങളും സൃഷ്ടിക്കാനുള്ള അവകാശവും ഉൾക്കൊള്ളുന്നു, RESOURCE അടിസ്ഥാന പട്ടികകൾ സൃഷ്ടിക്കുന്നതിനുള്ള അവകാശം ഉൾക്കൊള്ളുന്നു, DBA എന്നത് ഉപയോക്താവിന് ഡാറ്റാബേസിൽ ഉയർന്ന അധികാരം നൽകുന്ന ഒരു പ്രത്യേകാവകാശമാണ്.
ചില സിസ്റ്റങ്ങൾക്ക് ഒരു പ്രത്യേക ഉപയോക്താവുണ്ട്, ചിലപ്പോൾ SYSADM അല്ലെങ്കിൽ SYS എന്ന് വിളിക്കുന്നു ( സിസ്റ്റം അഡ്മിനിസ്ട്രേറ്റർഏറ്റവും ഉയർന്ന അധികാരമുള്ള ഡാറ്റാബേസ്.
GRANT കമാൻഡ്, പരിഷ്ക്കരിച്ച രൂപത്തിൽ, ഒബ്ജക്റ്റ് പ്രിവിലേജുകൾക്കും സിസ്റ്റം പ്രിവിലേജുകൾക്കും ഉപയോഗിക്കാവുന്നതാണ്:
മിറോണിന് ഉറവിടം നൽകുക;
സ്വാഭാവികമായും, Myron എന്ന ഉപയോക്താവിനെ സൃഷ്ടിക്കണം.
ഉപയോക്താവിന് ഒരു പാസ്വേഡും ഉണ്ടായിരിക്കാം (ഉദാഹരണത്തിന്, ഇവാൻ). അപ്പോൾ കമാൻഡ് ഇതുപോലെ കാണപ്പെടുന്നു
ഇവാൻ തിരിച്ചറിഞ്ഞ ഫെഡോറുമായുള്ള ബന്ധം അനുവദിക്കുക;
ഇത് ഫെഡോർ എന്ന ഉപയോക്താവിനെ സൃഷ്ടിക്കുകയും രജിസ്റ്റർ ചെയ്യാനുള്ള അവകാശം നൽകുകയും പാസ്വേഡ് ഇവാൻ നൽകുകയും ചെയ്യും.
ലോഗിൻ ചെയ്യുന്നതിൽ നിന്ന് ഒരു ഉപയോക്താവിനെ തടയാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുവെങ്കിൽ, REVOKE-ൽ നിങ്ങൾ കണക്റ്റ് പ്രത്യേകാവകാശം ഉപയോഗിക്കണം, അത് ആ ഉപയോക്താവിനെ "നീക്കംചെയ്യുന്നു".
നിരോധനത്തിന് (ക്ലർക്ക് ഗ്രൂപ്പിനായി ന്യൂവ ഡാറ്റാബേസിൽ പട്ടികകൾ സൃഷ്ടിക്കുന്നതിന്) ഫോം ഉണ്ട്
ചില സമയങ്ങളിൽ ഒരു sql ചോദ്യത്തിൽ, ഒരു നിബന്ധന പാലിക്കുകയാണെങ്കിൽ, ഒരു ഫീൽഡ് (അല്ലെങ്കിൽ എക്സ്പ്രഷൻ) തിരഞ്ഞെടുക്കുകയും അല്ലെങ്കിൽ മറ്റൊരു ഫീൽഡ് (അല്ലെങ്കിൽ എക്സ്പ്രഷൻ) തിരഞ്ഞെടുക്കുകയും ചെയ്യേണ്ടത് ആവശ്യമാണ്, അതായത്. അവസ്ഥയെ ആശ്രയിച്ച് ഒരു ഫീൽഡ് അല്ലെങ്കിൽ എക്സ്പ്രഷൻ തിരഞ്ഞെടുക്കുന്നു. അല്ലെങ്കിൽ, വ്യവസ്ഥയെ ആശ്രയിച്ച് നിങ്ങൾ ഡാറ്റാബേസിലെ മൂല്യങ്ങൾ അപ്ഡേറ്റ് ചെയ്യേണ്ടതുണ്ട്. ഈ പ്രശ്നം പരിഹരിക്കാൻ, നിങ്ങൾ CASE പ്രസ്താവന ഉപയോഗിക്കേണ്ടതുണ്ട്. ഈ ഓപ്പറേറ്ററിന് 2 വാക്യഘടന ഓപ്ഷനുകൾ ഉണ്ട്, അവയിൽ ഓരോന്നിനും അതിൻ്റേതായ സാഹചര്യങ്ങളിൽ സൗകര്യപ്രദമാണ്. രണ്ട് രീതികളുടെയും വ്യക്തമായ ഉദാഹരണങ്ങൾ ഞാൻ നൽകും.
ഉദാഹരണം 1. ഫീൽഡിലെ മൂല്യത്തെ ആശ്രയിച്ച് വ്യത്യസ്ത ഫലങ്ങൾ പ്രദർശിപ്പിക്കുന്നു.
ഉൽപ്പന്ന നമ്പർ തിരഞ്ഞെടുക്കുക, വിഭാഗം = കേസ് ഉൽപ്പന്ന ലൈൻ എപ്പോൾ "ആർ" പിന്നെ "റോഡ്" എപ്പോൾ "എം" പിന്നെ "പർവ്വതം" എപ്പോൾ "ടി" പിന്നെ "ടൂറിംഗ്" എപ്പോൾ "എസ്" പിന്നെ "മറ്റ് വിൽപ്പന ഇനങ്ങൾ" അല്ലെങ്കിൽ "വില്പനയ്ക്കില്ല" അവസാനം, പേര് പ്രൊഡക്ഷനിൽ നിന്ന്. ഉൽപ്പന്ന നമ്പർ പ്രകാരം ഉൽപ്പന്ന ഓർഡർ
IN ഈ ഉദാഹരണത്തിൽഎല്ലാം ലളിതമാണ്: ProductLine = "R" ആണെങ്കിൽ, ഫലത്തിൻ്റെ തിരഞ്ഞെടുപ്പിൽ "Road" എന്ന വാചകം അടങ്ങിയിരിക്കും, ProductLine = "M" ആണെങ്കിൽ - ഫലങ്ങളിൽ നമുക്ക് "Mountain" ലഭിക്കും.
ഉദാഹരണം 2. ഫീൽഡിലെ മൂല്യത്തെ ആശ്രയിച്ച് വ്യത്യസ്ത വാചകം ലഭിക്കുന്നതിനുള്ള കൂടുതൽ സങ്കീർണ്ണമായ അവസ്ഥ.
ഉൽപ്പന്ന നമ്പർ, പേര്, "വില ശ്രേണി" = കേസ് എപ്പോൾ ലിസ്റ്റ് പ്രൈസ് = 0 തുടർന്ന് "എംഎഫ്ജി ഇനം - പുനർവിൽപ്പനയ്ക്കല്ല" എപ്പോൾ ലിസ്റ്റ് പ്രൈസ് തിരഞ്ഞെടുക്കുക< 50 THEN "Under $50" WHEN ListPrice >= 50, ലിസ്റ്റ് പ്രൈസ്< 250 THEN "Under $250" WHEN ListPrice >= 250, ലിസ്റ്റ് പ്രൈസ്< 1000 THEN "Under $1000" ELSE "Over $1000" END FROM Production.Product ORDER BY ProductNumber
ഉദാഹരണം 3. ഒരു അന്വേഷണത്തിൽ "ഇനി വേറെ ആണെങ്കിൽ" പോലെയുള്ള ഒരു നിർമ്മാണം ഉപയോഗിക്കുന്നു
ടെലിഫോൺ പ്രത്യേക നിർദ്ദേശങ്ങൾ അസാധുവാകുമ്പോൾ ആദ്യനാമം, അവസാന നാമം, ടെലിഫോൺ നമ്പർ, കേസ് എന്നിവ തിരഞ്ഞെടുക്കുക, തുടർന്ന് "എപ്പോൾ വേണമെങ്കിലും" മറ്റ് ടെലിഫോൺ പ്രത്യേക നിർദ്ദേശങ്ങൾ അവസാനിക്കുമ്പോൾ വ്യക്തിയിൽ നിന്ന് ബന്ധപ്പെടുമ്പോൾ.vAdditionalContactInfo
ഉദാഹരണം 4. ചോദ്യം അടുക്കുമ്പോൾ ഒരു വ്യവസ്ഥ ഉപയോഗിക്കുന്നത് ഓർഡർ പ്രകാരം ഓർഡർ ചെയ്യുന്നു
EmployeeID, EmployeeFIO, SalariedFlag എന്നിവ ജീവനക്കാരുടെ ഓർഡറിൽ നിന്ന് തിരഞ്ഞെടുക്കുക.
വ്യവസ്ഥയെ ആശ്രയിച്ച് ആദ്യം എല്ലാ മൂല്യങ്ങളും ലഭിക്കും (അതായത് ഒരു അധിക ഫീൽഡ് ലഭിക്കും), അതിനുശേഷം മുഴുവൻ അന്വേഷണ ഫലവും വ്യവസ്ഥയുടെ ഫലങ്ങൾ അനുസരിച്ച് അടുക്കും എന്നതാണ് ഒരു വ്യവസ്ഥ ഉപയോഗിച്ച് അടുക്കുന്നതിനുള്ള തത്വം. അതുകൊണ്ടാണ് അവസ്ഥയുടെ ഫലങ്ങൾ ഒരേ ഡാറ്റ തരത്തിലായിരിക്കണം.
ഉദാഹരണം 5. വ്യവസ്ഥ അനുസരിച്ച് പുതിയ ഡാറ്റ ഉപയോഗിച്ച് ഫീൽഡ് അപ്ഡേറ്റ് ചെയ്യുക.
ജീവനക്കാരുടെ സെറ്റ് അവധിക്കാല സമയം അപ്ഡേറ്റ് ചെയ്യുക = അവധി സമയങ്ങൾ< 10 THEN VacationHours + 40 ELSE VacationHours + 20 END OUTPUT Deleted.EmployeeID, Deleted.VacationHours AS BeforeValue, Inserted.VacationHours AS AfterValue WHERE SalariedFlag = 0
ഈ ഉദാഹരണത്തിൽ, VacationHours 10-ൽ കുറവാണെങ്കിൽ VacationHours ഫീൽഡിലേക്ക് 40 ചേർക്കും, അല്ലാത്തപക്ഷം 20 ചേർക്കുന്നു. അപ്ഡേറ്റുകൾ പൂർത്തിയായ ശേഷം, ചോദ്യം EmployeeID കോളങ്ങളും "മുമ്പ്" VacationHours ഫീൽഡിൻ്റെ മൂല്യവും ഉള്ള ഒരു പട്ടികയും പ്രദർശിപ്പിക്കും. അപ്ഡേറ്റ് "ശേഷം" എന്നിവയും.
- വിവർത്തനം
- ട്യൂട്ടോറിയൽ
നിങ്ങൾക്ക് “SELECT * WHERE a=b from c” അല്ലെങ്കിൽ “എവിടെ നിന്ന് a=b c ON *” തിരഞ്ഞെടുക്കുക?
നിങ്ങൾ എന്നെപ്പോലെയാണെങ്കിൽ, നിങ്ങൾ സമ്മതിക്കും: SQL എന്നത് ആദ്യം എളുപ്പമെന്ന് തോന്നുന്ന കാര്യങ്ങളിൽ ഒന്നാണ് (ഇംഗ്ലീഷ് പോലെ വായിക്കുന്നു!), എന്നാൽ ശരിയായ വാക്യഘടന കണ്ടെത്താൻ എങ്ങനെയെങ്കിലും നിങ്ങൾ എല്ലാ ലളിതമായ ചോദ്യങ്ങളും Google ചെയ്യേണ്ടതുണ്ട്.
തുടർന്ന് ചേരുന്നു, കൂട്ടിച്ചേർക്കൽ, സബ്ക്വറികൾ ആരംഭിക്കുന്നു, അത് പൂർണ്ണമായും ചവറ്റുകുട്ടയായി മാറുന്നു. ഇതുപോലൊന്ന്:
അംഗങ്ങളെ തിരഞ്ഞെടുക്കുക.ആദ്യ പേര് || "" || അംഗങ്ങൾ ) പുസ്തകങ്ങളിൽ നിന്ന്)) അംഗങ്ങൾ പ്രകാരം ഗ്രൂപ്പ്.ആദ്യനാമം, അംഗങ്ങൾ.അവസാനനാമം;
ബ്യൂ! SQL ആദ്യമായി കാണുകയാണെങ്കിൽ ഇത് ഏതൊരു പുതുമുഖത്തെയും അല്ലെങ്കിൽ ഒരു ഇൻ്റർമീഡിയറ്റ് ലെവൽ ഡെവലപ്പറെ പോലും ഭയപ്പെടുത്തും. എന്നാൽ അതെല്ലാം അത്ര മോശമല്ല.
അവബോധജന്യമായത് ഓർക്കാൻ എളുപ്പമാണ്, ഈ ഗൈഡ് ഉപയോഗിച്ച് പുതിയവർക്ക് SQL-ലേക്ക് പ്രവേശിക്കുന്നതിനുള്ള തടസ്സം കുറയ്ക്കാനും SQL നോക്കാനുള്ള ഒരു പുതിയ മാർഗം ഇതിനകം അനുഭവിച്ചവർക്ക് വാഗ്ദാനം ചെയ്യാനും ഞാൻ പ്രതീക്ഷിക്കുന്നു.
വ്യത്യസ്ത ഡാറ്റാബേസുകൾക്കിടയിൽ SQL വാക്യഘടന ഏതാണ്ട് സമാനമാണെങ്കിലും, ഈ ലേഖനം ചോദ്യങ്ങൾക്കായി PostgreSQL ഉപയോഗിക്കുന്നു. ചില ഉദാഹരണങ്ങൾ MySQL-ലും മറ്റ് ഡാറ്റാബേസുകളിലും പ്രവർത്തിക്കും.
1. മൂന്ന് മാന്ത്രിക വാക്കുകൾ
SQL-ൽ ധാരാളം ഉണ്ട് കീവേഡുകൾ, എന്നാൽ SELECT , FROM, WHERE എന്നിവ മിക്കവാറും എല്ലാ ചോദ്യങ്ങളിലും ഉണ്ട്. ഈ മൂന്ന് വാക്കുകൾ ഡാറ്റാബേസ് അന്വേഷണങ്ങൾ നിർമ്മിക്കുന്നതിൻ്റെ ഏറ്റവും അടിസ്ഥാനപരമായ വശങ്ങളെ പ്രതിനിധീകരിക്കുന്നുവെന്നും മറ്റ്, കൂടുതൽ സങ്കീർണ്ണമായ അന്വേഷണങ്ങൾ അവയുടെ മുകളിലുള്ള ആഡ്-ഓണുകൾ മാത്രമാണെന്നും കുറച്ച് കഴിഞ്ഞ് നിങ്ങൾ മനസ്സിലാക്കും.
2. ഞങ്ങളുടെ അടിസ്ഥാനം
ഈ ലേഖനത്തിൽ ഒരു ഉദാഹരണമായി ഞങ്ങൾ ഉപയോഗിക്കുന്ന ഡാറ്റാബേസ് നോക്കാം:
നമുക്ക് ഉണ്ട് പുസ്തക ലൈബ്രറിജനങ്ങളും. ഇഷ്യൂ ചെയ്ത പുസ്തകങ്ങൾ രേഖപ്പെടുത്താൻ പ്രത്യേക മേശയും ഉണ്ട്.
- പുസ്തകത്തിൻ്റെ ശീർഷകം, രചയിതാവ്, പ്രസിദ്ധീകരണ തീയതി, ലഭ്യത എന്നിവയെക്കുറിച്ചുള്ള വിവരങ്ങൾ "പുസ്തകങ്ങൾ" പട്ടിക സംഭരിക്കുന്നു. ഇത് ലളിതമാണ്.
- “അംഗങ്ങൾ” പട്ടികയിൽ - ലൈബ്രറിയിൽ സൈൻ അപ്പ് ചെയ്ത എല്ലാ ആളുകളുടെയും ആദ്യ, അവസാന പേരുകൾ.
- "കടം വാങ്ങൽ" പട്ടിക ലൈബ്രറിയിൽ നിന്ന് എടുത്ത പുസ്തകങ്ങളെക്കുറിച്ചുള്ള വിവരങ്ങൾ സംഭരിക്കുന്നു. ബുക്കിഡ് കോളം "ബുക്കുകൾ" പട്ടികയിൽ എടുത്ത പുസ്തകത്തിൻ്റെ ഐഡിയെ സൂചിപ്പിക്കുന്നു, കൂടാതെ മെമ്പർഡ് കോളം "അംഗങ്ങൾ" പട്ടികയിൽ നിന്നുള്ള അനുബന്ധ വ്യക്തിയെ സൂചിപ്പിക്കുന്നു. ഞങ്ങൾക്ക് ഒരു ഇഷ്യൂ തീയതിയും പുസ്തകം തിരികെ നൽകേണ്ട തീയതിയും ഉണ്ട്.
3. ലളിതമായ അഭ്യർത്ഥന
നമുക്ക് ഒരു ലളിതമായ അഭ്യർത്ഥനയോടെ ആരംഭിക്കാം: ഞങ്ങൾക്ക് ആവശ്യമാണ് പേരുകൾഒപ്പം ഐഡൻ്റിഫയറുകൾ(ഐഡി) "ഡാൻ ബ്രൗൺ" എന്ന എഴുത്തുകാരൻ എഴുതിയ എല്ലാ പുസ്തകങ്ങളുടെയും
അഭ്യർത്ഥന ഇതുപോലെയായിരിക്കും:
"id" ആയി bookid തിരഞ്ഞെടുക്കുക, പുസ്തകങ്ങളിൽ നിന്ന് ശീർഷകം എവിടെ രചയിതാവ്="Dan Brown";
കൂടാതെ ഫലം ഇതുപോലെയാണ്:
ഐഡി | തലക്കെട്ട് |
---|---|
2 | നഷ്ടപ്പെട്ട ചിഹ്നം |
4 | നരകയാതന |
വളരെ ലളിതം. എന്താണ് സംഭവിക്കുന്നതെന്ന് മനസിലാക്കാൻ അഭ്യർത്ഥന നോക്കാം.
3.1 മുതൽ - ഞങ്ങൾക്ക് ഡാറ്റ എവിടെ നിന്ന് ലഭിക്കും
ഇത് ഇപ്പോൾ വ്യക്തമാണെന്ന് തോന്നുമെങ്കിലും, പിന്നീട് ജോയിൻ ചെയ്യലിലും സബ്ക്വയറുകളിലും എത്തുമ്പോൾ FROM വളരെ പ്രധാനമാണ്.
അന്വേഷിക്കാൻ പട്ടികയിലേക്ക് പോയിൻ്റുകൾ നിന്ന്. ഇത് നിലവിലുള്ള ഒരു ടേബിളാകാം (മുകളിലുള്ള ഉദാഹരണത്തിലെന്നപോലെ), അല്ലെങ്കിൽ ജോയിൻസ് അല്ലെങ്കിൽ സബ്ക്വറികളിലൂടെ ഫ്ലൈയിൽ സൃഷ്ടിച്ച ഒരു പട്ടിക.
3.2 എവിടെ - എന്ത് ഡാറ്റയാണ് കാണിക്കുന്നത്
ഒരു ഫിൽട്ടർ പോലെയാണ് എവിടെ പ്രവർത്തിക്കുന്നത് ലൈനുകൾ, ഞങ്ങൾ ഔട്ട്പുട്ട് ചെയ്യാൻ ആഗ്രഹിക്കുന്നത്. ഞങ്ങളുടെ കാര്യത്തിൽ, രചയിതാവ് കോളത്തിലെ മൂല്യം "ഡാൻ ബ്രൗൺ" ആയ വരികൾ മാത്രമേ കാണാൻ ഞങ്ങൾ ആഗ്രഹിക്കുന്നുള്ളൂ.
3.3 തിരഞ്ഞെടുക്കുക - ഡാറ്റ എങ്ങനെ പ്രദർശിപ്പിക്കാം
ഇപ്പോൾ നമുക്ക് ആവശ്യമുള്ള പട്ടികയിൽ നിന്ന് ആവശ്യമായ എല്ലാ നിരകളും ഉണ്ട്, ഈ ഡാറ്റ കൃത്യമായി എങ്ങനെ പ്രദർശിപ്പിക്കണമെന്ന് ഞങ്ങൾ തീരുമാനിക്കേണ്ടതുണ്ട്. ഞങ്ങളുടെ കാര്യത്തിൽ, ഞങ്ങൾക്ക് പുസ്തക ശീർഷകങ്ങളും ഐഡികളും മാത്രമേ ആവശ്യമുള്ളൂ, അതിനാൽ അതാണ് ഞങ്ങൾ ചെയ്യുന്നത്. നമുക്ക് തിരഞ്ഞെടുക്കാം SELECT ഉപയോഗിക്കുന്നു. അതേ സമയം, AS ഉപയോഗിച്ച് നിങ്ങൾക്ക് കോളത്തിൻ്റെ പേര് മാറ്റാം.
ഒരു ലളിതമായ ഡയഗ്രം ഉപയോഗിച്ച് മുഴുവൻ ചോദ്യവും ദൃശ്യവൽക്കരിക്കാൻ കഴിയും:
4. കണക്ഷനുകൾ (ചേരുന്നു)
ലൈബ്രറിയിൽ നിന്ന് പരിശോധിച്ച എല്ലാ ഡാൻ ബ്രൗൺ പുസ്തകങ്ങളുടെയും ശീർഷകങ്ങൾ (അതുല്യമായിരിക്കണമെന്നില്ല) ഇപ്പോൾ നമുക്ക് കാണണം, ആ പുസ്തകങ്ങൾ എപ്പോൾ തിരികെ നൽകണം:
പുസ്തകങ്ങൾ.ശീർഷകം "ശീർഷകം" ആയി തിരഞ്ഞെടുക്കുക, കടം വാങ്ങുന്നതിൽ നിന്ന് "മടങ്ങുന്ന തീയതി" ആയി കടം വാങ്ങുക. റിട്ടേൺ ഡേറ്റ് എന്ന് തിരഞ്ഞെടുക്കുക.
ഫലമായി:
തലക്കെട്ട് | മടങ്ങിവരുന്ന തീയതി |
---|---|
നഷ്ടപ്പെട്ട ചിഹ്നം | 2016-03-23 00:00:00 |
നരകയാതന | 2016-04-13 00:00:00 |
നഷ്ടപ്പെട്ട ചിഹ്നം | 2016-04-19 00:00:00 |
മിക്കവാറും, അഭ്യർത്ഥന മുമ്പത്തേതിന് സമാനമാണ് ഒഴികെവിഭാഗങ്ങളിൽ നിന്ന്. അതിനർത്ഥം അതാണ് ഞങ്ങൾ മറ്റൊരു പട്ടികയിൽ നിന്ന് ഡാറ്റ അന്വേഷിക്കുകയാണ്. ഞങ്ങൾ "പുസ്തകങ്ങൾ" പട്ടികയിലോ "കടം വാങ്ങൽ" പട്ടികയിലോ ആക്സസ് ചെയ്യുന്നില്ല. പകരം ഞങ്ങൾ തിരിയുന്നു പുതിയ മേശ, ഈ രണ്ട് പട്ടികകളും ചേർന്ന് സൃഷ്ടിച്ചതാണ്.
കടം വാങ്ങൽ.bookid=books.bookid എന്നതിലെ പുസ്തകങ്ങളിൽ ചേരുക - ഇതാണ്, പരിഗണിക്കുക, പുതിയ മേശ, ബുക്കിഡ് മൂല്യങ്ങൾ പൊരുത്തപ്പെടുന്ന "ബുക്കുകൾ", "കടം വാങ്ങൽ" പട്ടികകളിൽ നിന്നുള്ള എല്ലാ റെക്കോർഡുകളും സംയോജിപ്പിച്ചാണ് ഇത് രൂപീകരിച്ചത്. അത്തരമൊരു ലയനത്തിൻ്റെ ഫലം ഇതായിരിക്കും:
മുകളിലുള്ള ഉദാഹരണത്തിലെ അതേ രീതിയിൽ ഞങ്ങൾ ഈ പട്ടിക അന്വേഷിക്കുന്നു. ഇതിനർത്ഥം ടേബിളുകളിൽ ചേരുമ്പോൾ, എങ്ങനെ ജോയിൻ ചെയ്യാം എന്നതിനെക്കുറിച്ച് മാത്രം നിങ്ങൾ വിഷമിക്കേണ്ടതുണ്ട്. തുടർന്ന് അഭ്യർത്ഥന "" എന്നതിലെന്നപോലെ വ്യക്തമാകും ലളിതമായ അഭ്യർത്ഥന» പോയിൻ്റ് 3 മുതൽ.
രണ്ട് ടേബിളുകൾ ഉപയോഗിച്ച് കുറച്ചുകൂടി സങ്കീർണ്ണമായ ജോയിൻ ചെയ്യാൻ ശ്രമിക്കാം.
"ഡാൻ ബ്രൗൺ" എന്ന രചയിതാവ് ലൈബ്രറിയിൽ നിന്ന് പുസ്തകങ്ങൾ എടുത്ത ആളുകളുടെ പേരുകളുടെ ആദ്യ, അവസാന പേരുകൾ ഇപ്പോൾ ലഭിക്കാൻ ഞങ്ങൾ ആഗ്രഹിക്കുന്നു.
ഇത്തവണ നമുക്ക് താഴെ നിന്ന് മുകളിലേക്ക് പോകാം:
ഘട്ടം ഘട്ടം 1- നമുക്ക് ഡാറ്റ എവിടെ നിന്ന് ലഭിക്കും? ഞങ്ങൾക്ക് ആവശ്യമുള്ള ഫലം ലഭിക്കുന്നതിന്, "അംഗം", "ബുക്കുകൾ" എന്നീ പട്ടികകളിൽ "കടം വാങ്ങൽ" പട്ടികയിൽ ചേരേണ്ടതുണ്ട്. ജോയിൻ വിഭാഗം ഇതുപോലെ കാണപ്പെടും:
കടം വാങ്ങലുകൾ കടം വാങ്ങലുകളിൽ പുസ്തകങ്ങളിൽ ചേരുക.bookid=books.bookid അംഗങ്ങളിൽ ചേരുക.memberid=borrowings.memberid
കണക്ഷൻ്റെ ഫലം ലിങ്കിൽ കാണാം.
ഘട്ടം 2- ഞങ്ങൾ എന്ത് ഡാറ്റയാണ് കാണിക്കുന്നത്? പുസ്തകത്തിൻ്റെ രചയിതാവ് "ഡാൻ ബ്രൗൺ" എന്ന ഡാറ്റയിൽ മാത്രമേ ഞങ്ങൾക്ക് താൽപ്പര്യമുള്ളൂ
WHERE books.author="Dan Brown"
ഘട്ടം 3- ഞങ്ങൾ എങ്ങനെയാണ് ഡാറ്റ കാണിക്കുന്നത്? ഇപ്പോൾ ഡാറ്റ ലഭിച്ചു, നിങ്ങൾ പുസ്തകങ്ങൾ എടുത്തവരുടെ പേരുകളും പേരുകളും പ്രദർശിപ്പിക്കേണ്ടതുണ്ട്:
അംഗങ്ങളെ തിരഞ്ഞെടുക്കുക
സൂപ്പർ! മൂന്ന് ഘടകങ്ങളും സംയോജിപ്പിച്ച് ഞങ്ങൾക്ക് ആവശ്യമായ അഭ്യർത്ഥന നടത്തുക മാത്രമാണ് അവശേഷിക്കുന്നത്:
അംഗങ്ങളെ തിരഞ്ഞെടുക്കുക
നമുക്ക് എന്ത് നൽകും:
പേരിന്റെ ആദ്യഭാഗം | പേരിന്റെ അവസാന ഭാഗം |
---|---|
മൈക്ക് | വില്ലിസ് |
എല്ലെൻ | ഹോർട്ടൺ |
എല്ലെൻ | ഹോർട്ടൺ |
കൊള്ളാം! എന്നാൽ പേരുകൾ ആവർത്തിക്കുന്നു (അവ അദ്വിതീയമല്ല). ഞങ്ങൾ ഇത് ഉടൻ ശരിയാക്കും.
5. സമാഹരണം
ഏകദേശം പറഞ്ഞാൽ, ഒന്നിലധികം വരികൾ ഒന്നായി പരിവർത്തനം ചെയ്യുന്നതിന് അഗ്രഗേഷനുകൾ ആവശ്യമാണ്. അതേ സമയം, അഗ്രഗേഷൻ സമയത്ത്, വ്യത്യസ്ത നിരകൾക്കായി വ്യത്യസ്ത യുക്തി ഉപയോഗിക്കുന്നു.
ഡ്യൂപ്ലിക്കേറ്റ് പേരുകൾ ദൃശ്യമാകുന്ന നമ്മുടെ ഉദാഹരണത്തിൽ നമുക്ക് തുടരാം. എലൻ ഹോർട്ടൺ ഒന്നിലധികം പുസ്തകങ്ങൾ എടുത്തിട്ടുണ്ടെന്ന് വ്യക്തമാണ്, എന്നാൽ ഇത് ഏറ്റവും കൂടുതൽ അല്ല ഏറ്റവും മികച്ച മാർഗ്ഗംഈ വിവരം കാണിക്കുക. നിങ്ങൾക്ക് മറ്റൊരു അഭ്യർത്ഥന നടത്താം:
അംഗങ്ങളെ തിരഞ്ഞെടുക്കുക .memberid WHERE books.author="Dan Brown" GROUP by members.firstname, members.lastname;
ഇത് ഞങ്ങൾക്ക് ആവശ്യമുള്ള ഫലം നൽകും:
പേരിന്റെ ആദ്യഭാഗം | പേരിന്റെ അവസാന ഭാഗം | കടമെടുത്ത പുസ്തകങ്ങളുടെ എണ്ണം |
---|---|---|
മൈക്ക് | വില്ലിസ് | 1 |
എല്ലെൻ | ഹോർട്ടൺ | 2 |
മിക്കവാറും എല്ലാ അഗ്രിഗേഷനുകളും ഒരു ഗ്രൂപ്പ് ബൈ ക്ലോസിനൊപ്പം വരുന്നു. ഈ കാര്യം ഒരു ചോദ്യത്തിലൂടെ വീണ്ടെടുക്കാൻ കഴിയുന്ന ഒരു പട്ടികയെ പട്ടികകളുടെ ഗ്രൂപ്പുകളായി മാറ്റുന്നു. ഓരോ ഗ്രൂപ്പും GROUP BY യിൽ ഞങ്ങൾ വ്യക്തമാക്കിയ നിരയുടെ ഒരു തനതായ മൂല്യവുമായി (അല്ലെങ്കിൽ മൂല്യങ്ങളുടെ ഗ്രൂപ്പ്) യോജിക്കുന്നു. ഞങ്ങളുടെ ഉദാഹരണത്തിൽ, മുമ്പത്തെ വ്യായാമത്തിൽ നിന്നുള്ള ഫലം ഒരു കൂട്ടം വരികളായി ഞങ്ങൾ പരിവർത്തനം ചെയ്യുന്നു. ഒന്നിലധികം വരികളെ ഒരു പൂർണ്ണസംഖ്യയായി (ഞങ്ങളുടെ കാര്യത്തിൽ, വരികളുടെ എണ്ണം) പരിവർത്തനം ചെയ്യുന്ന എണ്ണം ഉപയോഗിച്ച് ഞങ്ങൾ ഒരു സംഗ്രഹവും ചെയ്യുന്നു. ഈ അർത്ഥം ഓരോ ഗ്രൂപ്പിനും നൽകപ്പെടുന്നു.
ഫലത്തിലെ ഓരോ വരിയും ഓരോ ഗ്രൂപ്പിൻ്റെയും സമാഹരണത്തിൻ്റെ ഫലത്തെ പ്രതിനിധീകരിക്കുന്നു.
ഫലത്തിലെ എല്ലാ ഫീൽഡുകളും ഒന്നുകിൽ GROUP BY യിൽ വ്യക്തമാക്കണം അല്ലെങ്കിൽ അവയിൽ സംഗ്രഹം നടത്തണം എന്ന യുക്തിസഹമായ നിഗമനത്തിൽ ഒരാൾക്ക് എത്തിച്ചേരാം. കാരണം മറ്റെല്ലാ ഫീൽഡുകളും പരസ്പരം വ്യത്യാസപ്പെട്ടിരിക്കാം വ്യത്യസ്ത വരികൾ, നിങ്ങൾ അവ തിരഞ്ഞെടുക്കുകയാണെങ്കിൽ SELECT ", സാധ്യമായ മൂല്യങ്ങളിൽ ഏതാണ് എടുക്കേണ്ടതെന്ന് വ്യക്തമല്ല.
മുകളിലുള്ള ഉദാഹരണത്തിൽ, കൗണ്ട് ഫംഗ്ഷൻ എല്ലാ വരികളും പ്രോസസ്സ് ചെയ്തു (ഞങ്ങൾ വരികളുടെ എണ്ണം കണക്കാക്കുന്നതിനാൽ). തുക അല്ലെങ്കിൽ പരമാവധി പോലുള്ള മറ്റ് ഫംഗ്ഷനുകൾ നിർദ്ദിഷ്ട വരികൾ മാത്രം പ്രോസസ്സ് ചെയ്യുന്നു. ഉദാഹരണത്തിന്, ഓരോ രചയിതാവും എഴുതിയ പുസ്തകങ്ങളുടെ എണ്ണം കണ്ടെത്താൻ ഞങ്ങൾ ആഗ്രഹിക്കുന്നുവെങ്കിൽ, ഞങ്ങൾക്ക് ഇനിപ്പറയുന്ന ചോദ്യം ആവശ്യമാണ്:
രചയിതാവിനെ തിരഞ്ഞെടുക്കുക, പുസ്തകങ്ങളിൽ നിന്ന് തുക(സ്റ്റോക്ക്) രചയിതാവ് ഗ്രൂപ്പ്;
ഫലമായി:
രചയിതാവ് | തുക |
---|---|
റോബിൻ ശർമ്മ | 4 |
ഡാൻ ബ്രൗൺ | 6 |
ജോൺ ഗ്രീൻ | 3 |
അമീഷ് ത്രിപാഠി | 2 |
ഇവിടെ സം ഫംഗ്ഷൻ സ്റ്റോക്ക് കോളം മാത്രം പ്രോസസ്സ് ചെയ്യുകയും ഓരോ ഗ്രൂപ്പിലെയും എല്ലാ മൂല്യങ്ങളുടെയും ആകെത്തുക കണക്കാക്കുകയും ചെയ്യുന്നു.
6. സബ്ക്വറികൾ
വലിയ ചോദ്യങ്ങളിൽ ഉൾച്ചേർത്ത സാധാരണ SQL അന്വേഷണങ്ങളാണ് സബ്ക്വറികൾ. ലഭിച്ച ഫലത്തെ അടിസ്ഥാനമാക്കി അവയെ മൂന്ന് തരങ്ങളായി തിരിച്ചിരിക്കുന്നു.
6.1 ദ്വിമാന പട്ടിക
ഒന്നിലധികം കോളങ്ങൾ നൽകുന്ന ചോദ്യങ്ങളുണ്ട്. മുമ്പത്തെ അഗ്രഗേഷൻ വ്യായാമത്തിൽ നിന്നുള്ള ചോദ്യം ഒരു നല്ല ഉദാഹരണമാണ്. ഒരു സബ്ക്വറി ആയതിനാൽ, പുതിയ അന്വേഷണങ്ങൾ നടത്താനാകുന്ന മറ്റൊരു ടേബിൾ അത് തിരികെ നൽകും. മുമ്പത്തെ വ്യായാമത്തിൽ നിന്ന് തുടരുന്നു, "റോബിൻ ശർമ്മ" എന്ന രചയിതാവ് എഴുതിയ പുസ്തകങ്ങളുടെ എണ്ണം കണ്ടെത്താൻ ഞങ്ങൾ ആഗ്രഹിക്കുന്നുവെങ്കിൽ, സാധ്യമായ ഒരു മാർഗ്ഗം സബ്ക്വറികൾ ഉപയോഗിക്കുക എന്നതാണ്:
* തിരഞ്ഞെടുക്കൂ
ഫലമായി:
ഇങ്ങനെ എഴുതാം: ["റോബിൻ ശർമ്മ", "ഡാൻ ബ്രൗൺ"]
2. ഇപ്പോൾ ഞങ്ങൾ ഈ ഫലം ഒരു പുതിയ ചോദ്യത്തിൽ ഉപയോഗിക്കുന്നു:
ശീർഷകം തിരഞ്ഞെടുക്കുക, ബുക്കിഡ് രചയിതാവ് എവിടെയാണ് എന്നതിൽ നിന്ന് (രചയിതാവിനെ തിരഞ്ഞെടുക്കുക (രചയിതാവിനെ തിരഞ്ഞെടുക്കുക, ഗ്രൂപ്പ് ബൈ ഗ്രൂപ്പ് ബുക്കുകളിൽ നിന്ന് രചയിതാവിനെ തിരഞ്ഞെടുക്കുക, തുക(സ്റ്റോക്ക്)) ഫലങ്ങൾ എവിടെയാണ് തുക > 3);
ഫലമായി:
തലക്കെട്ട് | ബുക്ക് ചെയ്ത |
---|---|
നഷ്ടപ്പെട്ട ചിഹ്നം | 2 |
നിങ്ങൾ മരിക്കുമ്പോൾ ആരാണ് കരയുക? | 3 |
നരകയാതന | 4 |
ഇത് സമാനമാണ്:
ശീർഷകം തിരഞ്ഞെടുക്കുക, പുസ്തകങ്ങളിൽ നിന്ന് ബുക്ക് ചെയ്ത എഴുത്തുകാരൻ എവിടെയാണ് ("റോബിൻ ശർമ്മ", "ഡാൻ ബ്രൗൺ");
6.3 വ്യക്തിഗത മൂല്യങ്ങൾ
ഒരു വരിയും ഒരു കോളവും മാത്രമായി ഉണ്ടാകുന്ന അന്വേഷണങ്ങളുണ്ട്. അവ സ്ഥിരമായ മൂല്യങ്ങളായി കണക്കാക്കാനും താരതമ്യ ഓപ്പറേറ്റർമാർ പോലെയുള്ള മൂല്യങ്ങൾ ഉപയോഗിക്കുന്ന എവിടെയും ഉപയോഗിക്കാനും കഴിയും. അവ ദ്വിമാന പട്ടികകളായോ ഒറ്റ മൂലക ശ്രേണികളായോ ഉപയോഗിക്കാം.
ഉദാഹരണത്തിന്, ലൈബ്രറിയിൽ നിലവിലുള്ള ശരാശരിയേക്കാൾ കൂടുതലുള്ള എല്ലാ പുസ്തകങ്ങളെയും കുറിച്ചുള്ള വിവരങ്ങൾ നേടാം.
ശരാശരി ഈ രീതിയിൽ ലഭിക്കും:
പുസ്തകങ്ങളിൽ നിന്ന് ശരാശരി(സ്റ്റോക്ക്) തിരഞ്ഞെടുക്കുക;
എന്താണ് നമുക്ക് നൽകുന്നത്:
7. പ്രവർത്തനങ്ങൾ എഴുതുക
കൂടുതൽ സങ്കീർണ്ണമായ റീഡ് ഓപ്പറേഷനുകളെ അപേക്ഷിച്ച് മിക്ക ഡാറ്റാബേസ് റൈറ്റ് ഓപ്പറേഷനുകളും വളരെ ലളിതമാണ്.
7.1 അപ്ഡേറ്റ്
വാക്യഘടന അപ്ഡേറ്റ് അഭ്യർത്ഥനഅർത്ഥപരമായി ഒരു വായനാ അഭ്യർത്ഥന പോലെ തന്നെ. ഒരേയൊരു വ്യത്യാസം, SELECT ഉള്ള നിരകൾ തിരഞ്ഞെടുക്കുന്നതിന് പകരം, ഞങ്ങൾ SET ഉപയോഗിച്ച് അറിവ് സജ്ജമാക്കുന്നു എന്നതാണ്.
ഡാൻ ബ്രൗണിൻ്റെ എല്ലാ പുസ്തകങ്ങളും നഷ്ടപ്പെട്ടാൽ, നിങ്ങൾ അളവ് മൂല്യം പുനഃസജ്ജമാക്കേണ്ടതുണ്ട്. ഇതിനുള്ള ചോദ്യം ഇതായിരിക്കും:
പുസ്തകങ്ങൾ അപ്ഡേറ്റ് ചെയ്യുക സെറ്റ് സ്റ്റോക്ക്=0 എവിടെ രചയിതാവ്="ഡാൻ ബ്രൗൺ";
മുമ്പത്തെ അതേ കാര്യം എവിടെയാണ് ചെയ്യുന്നത്: വരികൾ തിരഞ്ഞെടുക്കുന്നു. വായിക്കുമ്പോൾ നമ്മൾ ഉപയോഗിച്ചിരുന്ന SELECT എന്നതിന് പകരം ഇപ്പോൾ നമ്മൾ SET ഉപയോഗിക്കുന്നു. എന്നിരുന്നാലും, ഇപ്പോൾ നിങ്ങൾ നിരയുടെ പേര് മാത്രമല്ല, തിരഞ്ഞെടുത്ത വരികളിൽ ഈ കോളത്തിന് ഒരു പുതിയ മൂല്യവും വ്യക്തമാക്കേണ്ടതുണ്ട്.
7.2 ഇല്ലാതാക്കുക
ഒരു ഡിലീറ്റ് ചോദ്യം എന്നത് കോളം പേരുകളില്ലാത്ത ഒരു സെലക്ട് അല്ലെങ്കിൽ അപ്ഡേറ്റ് ചോദ്യമാണ്. ഗൗരവമായി. SELECT, UPDATE എന്നിവ പോലെ, WHERE ബ്ലോക്ക് അതേപടി തുടരുന്നു: അത് ഇല്ലാതാക്കേണ്ട വരികൾ തിരഞ്ഞെടുക്കുന്നു. ഇല്ലാതാക്കൽ പ്രവർത്തനം മുഴുവൻ വരിയും നശിപ്പിക്കുന്നു, അതിനാൽ വ്യക്തിഗത നിരകൾ വ്യക്തമാക്കുന്നതിൽ അർത്ഥമില്ല. അതിനാൽ, ഡാൻ ബ്രൗൺ പുസ്തകങ്ങളുടെ എണ്ണം പുനഃസജ്ജമാക്കേണ്ടതില്ലെന്നും എല്ലാ റെക്കോർഡുകളും മൊത്തത്തിൽ ഇല്ലാതാക്കാൻ ഞങ്ങൾ തീരുമാനിക്കുകയാണെങ്കിൽ, ഞങ്ങൾക്ക് ഇനിപ്പറയുന്ന അഭ്യർത്ഥന നടത്താം:
എവിടെ രചയിതാവ്="ഡാൻ ബ്രൗൺ" എന്ന പുസ്തകങ്ങളിൽ നിന്ന് ഇല്ലാതാക്കുക;
7.3 തിരുകുക
ഒരുപക്ഷേ മറ്റ് തരത്തിലുള്ള അന്വേഷണങ്ങളിൽ നിന്ന് വ്യത്യസ്തമായ ഒരേയൊരു കാര്യം INSERT ആണ്. ഫോർമാറ്റ് ഇതാണ്:
x (a,b,c) VALUES (x, y, z) എന്നതിൽ ചേർക്കുക;
ഇവിടെ a , b , c എന്നത് നിരയുടെ പേരുകളും x , y, z എന്നിവ അതേ ക്രമത്തിൽ ആ നിരകളിൽ ചേർക്കേണ്ട മൂല്യങ്ങളുമാണ്. അടിസ്ഥാനപരമായി അതാണ്.
നമുക്ക് ഒന്ന് നോക്കാം നിർദ്ദിഷ്ട ഉദാഹരണം. "പുസ്തകങ്ങൾ" ടേബിളിനെ മുഴുവനായും ഉൾക്കൊള്ളുന്ന ഒരു INSERT അന്വേഷണം ഇതാ:
പുസ്തകങ്ങളിലേക്ക് തിരുകുക (ബുക്ക് ചെയ്തത്, ശീർഷകം, രചയിതാവ്, പ്രസിദ്ധീകരിച്ചത്, സ്റ്റോക്ക്) മൂല്യങ്ങൾ (1, "സിയോൺ ഓഫ് ഇക്ഷ്വാകു", "അമിഷ് ത്രിപാഠി","06-22-2015",2), (2, "നഷ്ടപ്പെട്ട ചിഹ്നം"," ഡാൻ ബ്രൗൺ","07-22-2010",3), (3,"നിങ്ങൾ മരിക്കുമ്പോൾ ആരാണ് കരയുക?","റോബിൻ ശർമ്മ","06-15-2006",4), (4,"ഇൻഫെർനോ" ,"ഡാൻ ബ്രൗൺ","05-05-2014",3), (5,"നമ്മുടെ നക്ഷത്രങ്ങളിലെ പിഴവ്","ജോൺ ഗ്രീൻ","01-03-2015",3);
8. പരിശോധിക്കുക
ഞങ്ങൾ അവസാനം എത്തി, ഞാൻ ഒരു ചെറിയ പരീക്ഷണം നിർദ്ദേശിക്കുന്നു. ലേഖനത്തിൻ്റെ തുടക്കത്തിൽ തന്നെ ആ അഭ്യർത്ഥന നോക്കുക. നിങ്ങൾക്ക് അത് മനസ്സിലാക്കാൻ കഴിയുമോ? SELECT , FROM , WHERE , GROUP by Sections എന്നിങ്ങനെ വിഭജിച്ച് ഉപചോദ്യങ്ങളുടെ വ്യക്തിഗത ഘടകങ്ങൾ നോക്കുക.
ഇവിടെ ഇത് കൂടുതൽ വായിക്കാവുന്ന രൂപത്തിൽ:
അംഗങ്ങളെ തിരഞ്ഞെടുക്കുക.ആദ്യ പേര് || "" || അംഗങ്ങൾ ) പുസ്തകങ്ങളിൽ നിന്ന്)) അംഗങ്ങൾ പ്രകാരം ഗ്രൂപ്പ്.ആദ്യനാമം, അംഗങ്ങൾ.അവസാനനാമം;
ഈ ചോദ്യം ലൈബ്രറിയിൽ നിന്ന് ഒരു പുസ്തകം പരിശോധിച്ച ആളുകളുടെ ഒരു ലിസ്റ്റ് നൽകുന്നു, അവരുടെ ആകെ എണ്ണം ശരാശരിയേക്കാൾ കൂടുതലാണ്.
ഫലമായി:
പൂർണ്ണമായ പേര് |
---|
ലിഡ ടൈലർ |
പ്രശ്നങ്ങളൊന്നുമില്ലാതെ നിങ്ങൾക്ക് അത് മനസിലാക്കാൻ കഴിഞ്ഞുവെന്ന് ഞാൻ പ്രതീക്ഷിക്കുന്നു. ഇല്ലെങ്കിൽ, നിങ്ങളുടെ അഭിപ്രായങ്ങളും ഫീഡ്ബാക്കും ഞാൻ സ്വാഗതം ചെയ്യുന്നു, അതുവഴി എനിക്ക് ഈ പോസ്റ്റ് മെച്ചപ്പെടുത്താൻ കഴിയും.
ടാഗുകൾ: ടാഗുകൾ ചേർക്കുക