JavaRush /Java блогы /Random-KK /Әзірлеуші сұхбаты: мәліметтер базасының сұрақтарын талдау...
Константин
Деңгей

Әзірлеуші сұхбаты: мәліметтер базасының сұрақтарын талдау

Топта жарияланған
Бәріңе сәлем! Біз барлығымыз бір мақсатқа - Java әзірлеушілері болу үшін жұмыс жасаймыз . Кәсіби маман болу жолындағы ең маңызды кезең техникалық сұхбат болуы мүмкін. Әдетте, сұхбат алушы бір-екі сұрақ қоя отырып, негізгі тақырыптарды өтеді. Бұл мақалада біз осындай негізгі тақырыптардың бірі туралы сөйлесетін боламыз - деректер базасы . Ең жиі кездесетін сұрақтарды қарастырайық және материалға терең бойламай жауап беруге тырысайық, өйткені бұл жағдайда кітаптың көлемі бізге жетпейді! Ендеше, кеттік.Әзірлеуші ​​сұхбаты: мәліметтер қоры сұрақтарын талдау – 1

1. Мәліметтер қоры дегеніміз не? Олар қандай түрлерге бөлінеді?

ДҚБЖ нені білдіреді?

Әзірлеуші ​​сұхбаты: мәліметтер қоры сұрақтарын талдау – 2Мәліметтер базасы (МҚ) өзара байланысты ақпаратты, негізінен үлкен көлемдерді сақтауға, өзгертуге және өңдеуге арналған ұйымдастырылған құрылым. Басқаша айтқанда, мәліметтер базасы – құрылымдық мәліметтер қоймасы. Мысалы, телефон кітапшасы.

Мәліметтер қорының түрлері

  1. Реляциялық мәліметтер базасы - бұл олардың арасында алдын ала анықталған қатынастары бар мәліметтер жиынтығы. Деректер бағандар мен жолдардан тұратын кестелер жиынтығы ретінде сақталады. Кестелер дерекқорда ұсынылған an objectілер туралы ақпаратты сақтайды. Әрбір кесте бағаны белгілі бір деректер түрін сақтайды және әрбір ұяшық төлсипат мәнін сақтайды.
  2. Реляциялық емес жүйелер (NoSQL) – икемді схемалары бар нақты деректер үлгілеріне арналған жүйелер. Басқаша айтқанда, бұл мәліметтерді кестелік схемалар, жолдар мен бағандар түрінде емес, басқа форматтарда сақтайтын мәліметтер базасы.
Реляциялық емес дерекқорлар туралы қосымша ақпаратты осы мақаладан оқи аласыз: Әзірлеушілерге арналған NoSQL нұсқаулығы . Мәліметтер қорын басқару жүйесі (ДҚБЖ) – бұл пайдаланушы мәліметтер қорын (МҚ) жасай алатын және оларда әртүрлі операцияларды орындай алатын бағдарламалық құралдардың жиынтығы: толықтыру, жаңарту, жою, таңдау және т.б. ДҚБЖ қауіпсіздігіне, тұтастығына, қауіпсіздігіне кепілдік береді. деректерді сақтау және дерекқор әкімшілігіне рұқсат беруге мүмкіндік береді. Мысал ретінде MySql реляциялық дерекқорға немесе реляциялық емес үшін MongoDB қатынасын қамтамасыз ететін ДҚБЖ болып табылады.

2. Нормализация дегеніміз не? Нормаланған пішін? Нормализацияның неше түрі бар? Алғашқы үшеуін атаңыз.

Нормалау - бұл артықшылықты және тәуелділіктердің сәйкессіздігін жою арқылы дерекқордың үлкен икемділігін қамтамасыз ететін дерекқордағы деректерді ұйымдастыру және құрылымдау процесі. Қалыпты форма – нормалау контекстінде қарастырылатын кестенің құрылымының қарапайымдылығы мен дұрыстығы жағынан сипаттайтын қасиеті. Қалыпты пішін кесте қанағаттандыруға тиісті талаптар жиынтығы ретінде анықталады. Барлығы алты қалыпты форма бар, бірақ іс жүзінде алғашқы үшеуден аспайды:
  1. Бірінші қалыпты форма:
    • Барлық атрибуттар қарапайым (яғни атомдық және бөлінбейтін);
    • Барлық деректер скаляр (яғни оң);
    • Қайталанатын жолдар жоқ (бұл үшін әрбір жол үшін бастапқы кілт жасалады).
  2. Екінші қалыпты форма:
    • Бірінші қалыпты форманың шарттары орындалады;
    • Әрбір кілт емес төлсипат бастапқы кілтке сілтеме жасайды.
  3. Үшінші қалыпты форма:
    • Екінші қалыпты топтың шарттары орындалады;
    • Кілттік емес өрістер басқа кілт емес өрістерден тәуелсіз: олар тек бастапқы кілтпен байланыстырылуы мүмкін.

3. Денормальизация

Денормальизация – әдетте артық деректерді қосу арқылы дерекқордан оқуды жылдамdate үшін, дерекқорды қалыпқа келтіру нысандарын әдейі қысқарту немесе бұзу. Жалпы, бұл қалыпқа келтіруге кері процесс. Бұл қалыпты формалар теориясы практикада әрқашан қолданыла бермейтіндіктен орын алады. Мысалы, атомдық емес құндылықтар әрқашан «зұлымдық» бола бермейді: кейде тіпті керісінше. Кейбір жағдайларда сұрауларды орындау кезінде, әсіресе ақпараттың үлкен көлемін өңдеу кезінде қосымша біріктірулер қажет. Бұл сайып келгенде өнімділікті жақсартуы мүмкін. Сұрауды орындауды жылдамdate үшін аналитикаға арналған дерекқорлар жиі нормадан ажыратылады. Мысалы, негізгі емес бағандар бір-бірімен байланысты болатын есептер үшін кейбір деректерді жиі таңдайсыз. Қалыпқа келтірудің үшінші түрін әдейі алып тастайсыз және үлгі алуды жеңілдету үшін барлығын бір кестеде біріктіресіз - басқа кестелерге қосымша сұраулар жасаудың қажеті жоқ.

4. Көрсеткіштер

Индекс – деректерді іздеуді жылдамдататын белгілі бір бағанмен кестемен немесе көрініспен байланыстырылған мәндердің сұрыпталған жиыны. Яғни, бұл индекстің бір түрі: фамorя бойынша іздеу кезінде бізге көмектесетін телефон кітапшасындағы әліпби сияқты. Егер дұрыс пайдаланылса, бұл мүмкіндік үлкен дерекқорлармен жұмыс істегенде өнімділікті айтарлықтай жақсартады. Немесе оны айтарлықтай төмендетуге болады. Іздеуді жылдамdate үшін бұл кілттер іздеу орындалатын теңдестірілген ағаш құрылымында сақталады. Әдетте, индекстер жиі ізделетін өрістерге енгізілуі керек. Сізде кем дегенде 10 мың жазба болған кезде индексті жасау туралы ойлану керек. Әйтпесе, сіз айтарлықтай нәтиже көрмейсіз, өйткені мерзімінен бұрын оңтайландыру - EVIL . Ал индекс жүйенің өнімділігіне қалай әсер етуі мүмкін деп сұрайсыз ба? Жаңа деректер енгізілгенде немесе ескі деректер жойылғанда, теңдестірілген ағаш құрылымы қайта есептеледі. Іс жүзінде деректер мен индекстер неғұрлым көп болса, соғұрлым көп ағаштарды санау керек. Жағдайды елестетіп көріңіз: сізде бұл кестеде шамамен 20 000 жазба және 7 индекс бар. Яғни, деректерді енгізу кезінде әрқайсысында 20 000 жазба бар 7 ағашты қайта есептеу керек. Дәлірек айтқанда, деректер жиі қосылатын/жойылатын кестелер үшін индекстерді пайдалану мүлдем ұсынылмайды. nullСоңында, мәні жиі кездесетін бағандарға арналған индекстер соншалықты тиімді болмайтынын атап өткім келеді , сондықтан оларды мұндай бағандарға қосудың қажеті жоқ.

SQL-дегі кластерленген және кластерлік емес индекстердің айырмашылығы неде?

Топтастырылған:

  • Таңдалған өріс үшін физикалық тәртіпті қамтамасыз етеді;
  • Егер кестеде кластерленген индекс болса, ол кластерленген деп аталады;
  • Әр кестеге бір индекстен артық қажет емес;
  • MySQL жүйесінде кластерленген индексті пайдаланушы нақты көрсетпейді, себебі кестеде БАСТАУЫШ КІЛТКЕ анықтамасаңыз, MySQL UNIQUEбарлық негізгі бағандар болатын бірінші индексті табады NOT NULLжәне InnoDB оны кластерленген индекс ретінде пайдаланады.

Кластерлік емес:

  • Бір кестеде 999-ға дейін кластерленбеген индекстер мүмкін;
  • Кестедегі нақты деректері бар жолдарға көрсеткішті қамтиды;
  • Физикалық тәртіпті қамтамасыз етпейді;
  • Кластерленбеген индекстер үшін сұрыпталған деректері бар бөлек кестелер бар, атап айтқанда, индекс орналасқан бір баған үшін бір кесте, сондықтан берілген өрістің бөлігі болып табылмайтын деректерді сұраған кезде сұрау алдымен орындалады. осы кестедегі өріс, содан кейін ғана бастапқы кестедегі жолға қарсы қосымша сұрау.
Кластерленбеген индекс жасау:
CREATE INDEX index_name ON table_name(column_name)

6. Құрама индекс дегеніміз не?

Құрама индекс – бір уақытта бірнеше бағандарға жіберу арқылы құрастырылған. Басқаша айтқанда, бұл бірнеше бағандардан тұратын күрделі көрсеткіш. Мұндай индекстер бір сұрауда бірнеше баған пайда болған кезде қолданылады. Құрама индексті құру:
CREATE INDEX index_name ON table_name(first_column_name, second_column_name, third_column_name)
Әдетте, бұл индекстер бірнеше бағандардағы деректер логикалық түрде байланысты болған кезде пайдаланылады.

7. Жабу көрсеткіші дегеніміз не? Бірегей индекс?

Жабық индекс – кестенің өзіне қол жеткізбей сұрауға жауап беруге жеткілікті индекс. Бұл индексті пайдалана отырып, сіз деректердің барлық жолын ала аласыз, бірақ іс жүзінде бұл қажет емес. Бастапқы кестеге тікелей өтудің қажеті жоқ және тек индексті пайдаланып жауап бере алатындықтан, қамту индекстерін пайдалану сәл жылдамырақ. Сонымен қатар, бағандар неғұрлым көп болса, индекстің өзі соғұрлым ауыр және баяу болатынын ұмытпаңыз. Сондықтан сіз мұны теріс пайдаланбауыңыз керек. Жоғарыда біз бірегей болуы мүмкін кластерленген және кластерлік емес индекстер туралы айттық . Бұл индекс кілті үшін екі өрістің бірдей мәні жоқ дегенді білдіреді. Әйтпесе, индекс бірегей болмайды, себебі бірнеше жолдар бірдей мәнді қамтуы мүмкін. Бірегей кластерлік емес индексті құру мысалы:
CREATE UNIQUE INDEX index_name ON table_name(column_name)

8. Бастапқы кілт дегеніміз не

Бастапқы кілт – деректер қоры кестесіндегі әрбір жолды анықтайтын кестедегі өріс. Кестеде осындай бір ғана өріс болуы мүмкін және барлық мәндер бірегей болуы керек. Сізге ештеңені еске түсірген жоқсыз ба? Әзірлеуші ​​сұхбаты: мәліметтер қоры сұрақтарын талдау – 3Өйткені, бастапқы кілт бірегей, кластерленген индекстен басқа ештеңе емес. Әдетте, кестені құру кезінде бастапқы кілттер жасалады:
CREATE TABLE table_name(
column_name int PRIMARY KEY,..)
Бұл бағанға шектеу автоматты түрде қосылады - NOT NULL. Сондай-ақ бұрыннан жасалған кесте үшін кілт орнатуға болады:
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
Егер бастапқы кілт жоғарыда сипатталған тәсілмен қосылса, онда бастапқы кілт ( column_name) ретінде көрсетілген өрістердің мәндері оларда нөл мәндердің жоқтығына көз жеткізу үшін тексеріледі (шектеу де қосылады - NOT NULL).

Шетелдік кілт дегеніміз не?

Сыртқы кілт – кестелер арасындағы қатынасты қамтамасыз ету үшін жасалған қасиет. Әдетте, сыртқы кілт ішкі кестедегі бағандарға орнатылады және негізгі кестедегі бағандардың біріне нұсқайды. Кестені құру кезінде келесідей көрсетуге болады:
CREATE TABLE table_name{
column_name int,..
FOREIGN KEY(column_name) REFERENCES another_table_name(another_table_column_name) }
Сонымен, кестені жасағаннан кейін:
ALTER TABLE table_name
ADD FOREIGN KEY(column_name) REFERENCES another_table_name(another_table_column_name));
Шетелдік кілттің әрекетін оған сілтеме жасайтын өрісті өңдеу кезінде орнатуға болады. Манипуляциялар келесі түрлерде болуы ON DELETEмүмкін ON UPDATE: Мүмкін мінез-құлық нұсқалары:
  • CASCADE— осы қасиет арқылы негізгі кестеде қатысты жолдар жойылғанда немесе өзгертілгенде тәуелді кестенің жолдары автоматты түрде жойылады немесе өзгертіледі;
  • SET NULL— осы сипатпен байланысты жол негізгі кестеден жойылғанда немесе жаңартылғанда, NULLсыртқы кілт бағанының мәні орнатылады;
  • NO ACTION— егер тәуелді кестеде қатысты жолдар болса, негізгі кестедегі жолдарды жою немесе өзгерту әрекеттерін қабылдамайды;
  • RESTRICT- эквивалентті NO ACTION;
  • SET DEFAULT- осы сипатпен негізгі кестеден қатысты жол жойылғанда немесе жаңартылғанда, сыртқы кілт бағанының әдепкі мәні (бар болса) орнатылады.
Қолдану мысалы:
CREATE TABLE table_name{
column_name int,..
FOREIGN KEY(column_name) REFERENCES another_table_name(another_table_column_name) ON UPDATE CASCADE ON DELETE CASCADE }
ON DELETEЕгер мінез-құлық және анық орнатылмаса ON UPDATE, мінез-құлық күйіне орнатылады RESTRICT.

10. Кестелер арасындағы байланыс түрлері (Join)

Кестелер арасындағы байланыс жалпы деректерге (өрістерге) негізделген. JOINБұл бір кестедегі жолдарды басқа кестедегі жолдармен сәйкестендіретін операция операторы арқылы орындалады . Салыстыру екі кестенің де бағандары іргелес болатындай етіп жасалады, бірақ оларды бөлек кестелерден алуға болады. Ал егер бізде үш кестеге ортақ өрістер болса, олардың деректерін бір ортақ кесте ретінде көрсете аламыз. Дегенмен, біріктірілген кестелер неғұрлым аз болса, сұраныс соғұрлым жылдам орындалатынын ескерген жөн. Сонымен, түрлері JOIN:
  • INNER JOIN- бірінші кестедегі екінші кестедегі кейбір деректерге сәйкес келетін деректерді ғана көрсететін байланыс. Қалғандары төмен түседі.Әзірлеуші ​​сұхбаты: мәліметтер қоры сұрақтарын талдау – 4
  • LEFT JOIN- бірінші кестедегі барлық деректерді және егер бар болса, екіншіден сәйкес деректерді көрсететін байланыс. Сәйкес деректер болмаса, екінші кестедегі деректерге арналған өрістер бос болады.Әзірлеуші ​​сұхбаты: мәліметтер қоры сұрақтарын талдау – 5
  • RIGHT JOIN- екінші кестедегі барлық мәліметтерді және егер бар болса, біріншіден сәйкес деректерді көрсететін байланыс. Сәйкес деректер болмаса, бірінші кестедегі деректерге арналған өрістер бос болады.Әзірлеуші ​​сұхбаты: мәліметтер қоры сұрақтарын талдау – 6
  • FULL JOIN- бірінші және екінші кестелердің барлық мәліметтерін көрсететін байланыс. Басқа кестеде қатысты деректер болмаса, сол деректерге арналған өрістер бос болады.Әзірлеуші ​​сұхбаты: мәліметтер қоры сұрақтарын талдау – 7
  • CROSS JOIN- бірінші кестенің әрбір жолы екінші кестенің әрбір жолына (әрқайсысына) біріктірілетін айқас біріктіру. Яғни, екі кестеде әрқайсысы 3 жолдан болса, осы біріктірілгеннен кейін біз 9 жолдың нәтижесін аламыз.Әзірлеуші ​​сұхбаты: мәліметтер қоры сұрақтарын талдау – 8
Мысал Join(inner):
SELECT *
FROM first_table
INNER JOIN second_table ON first_table.some_column = second_table.some_column

11. Мәліметтер қорындағы ACID қасиеті дегеніміз не?

A - Atomicity , ешқандай транзакцияның жүйеге ішінара бекітілмегенін қамтамасыз етеді. Оның барлық қосалқы операциялары орындалады немесе ешқайсысы орындалмайды. Мысалы, банктен басқа шотқа ақша аудару екі операцияны қамтиды:
  1. Банктік шотқа ақша аудару.
  2. Банктік шоттан белгілі бір шотқа ақша аудару.
Бірақ бәрі болуы мүмкін. Мысалы, олар банкке барады, содан кейін қандай да бір қателік орын алып, екінші операция аяқталмайды. Немесе керісінше: тек екінші операция орындалады. Демек, бұл әрекеттер бір транзакция аясында жүзеге асырылады және нәтиже не бәрі немесе жоқ. C - Жүйелілік : Әрбір сәтті транзакция әрқашан шешілетін нәтижелерді ғана жазады. Бұл барлық шектеулердің орындалуын қамтамасыз етеді (мысалы, NOT NULL), әйтпесе транзакция кері қайтарылады. Және - оқшаулау : транзакцияны орындау кезінде параллельді операциялар оның нәтижесіне әсер етпеуі керек. Бұл бізге соңғы емес деректер күйлерін барлығынан жасыру мүмкіндігін береді. Шын мәнінде, сондықтан сәтсіз транзакциялар ештеңені бұза алмайды. Сәл төменірек біз транзакцияларды оқшаулау деңгейлерімен танысамыз. D - Төзімділік : Егер транзакция аяқталса, ол енгізілген өзгерістер кейбір сәтсіздікке байланысты жойылмайтынына сенімді бола аласыз.

12. Транзакцияны оқшаулау деңгейлері

Әрбір оқшаулау деңгейі белгілі бір әрекеттерге (мүмкіндіктерге) мүмкіндік береді/тыйым салады:
  • фантомдық оқу - бір транзакцияның ішінде бір деректер сұрауы басқа (параллель) транзакция арқылы деректерді қосуға байланысты пайда болатын әртүрлі нәтижелер береді.
  • қайталанbyteын оқу - бір транзакцияның ішінде бір деректер сұрауы басқа (параллель) транзакциямен деректерді өзгерту немесе жою салдарынан туындайтын әртүрлі нәтижелерді береді.
  • «лас» оқу – кейін кері қайтарылмайтын транзакция арқылы қосылған немесе өзгертілген деректерді оқу;
  • жоғалған жаңарту - әртүрлі транзакциялар бір деректер блогын бір уақытта өзгерткенде, соңғысынан басқа барлық өзгерістер жоғалады (көп ағындағы «жарыс жағдайына» ұқсас).
Ыңғайлы болу үшін біз оқшаулау деңгейлерін және олардың мүмкіндіктерін кестеде қарастырамыз:
Оқшаулау деңгейлері Фантомдық оқу Қайталанbyteын оқу «лас» оқу жоғалған жаңарту
СЕРИЯЛЫҚ + + + +
REPEATABLE_READ - + + +
READ_COMMITTED - - + +
READ_UNCOMMITTED - - - +

13. SQL инъекциясы дегеніміз не?

SQL инъекциясыGET веб-сайтты бұзу әдістерінің бірі болып табылады, оның мәні сұраулар немесе cookie файлдары арқылы деректерге кейбір SQL codeын енгізу болып табылады POST. Егер веб-сайт осындай инъекцияларды орындаса, дерекқорға қол жеткізуге және қолданбаны бұзуға болады. Мысалы, біз кейбір айнымалының атын білеміз. column_nameТүрмен делік boolean. Жүйе инъекцияларға сезімтал болса, біз OR column_name=trueдерекқордан қажеттінің бәрін қосып, жаза аламыз. ORНЕМЕСЕ шартын жасайды және одан кейінгі өрнек әрқашан болады true, бұл бізді әрі қарай апарады. SQL инъекциясы сияқты веб-сайтқа шабуыл SQL сұрауларында пайдаланылатын кіріс деректерді дұрыс өңдеуге байланысты мүмкін. JDBC көмегімен дерекқорға қосылу кезінде сіз әртүрлі пайдаланасыз Statements. PreparedStatementҚауіпсіздікті арттыру үшін әдеттегінің орнына пайдалану керек Statement, өйткені пайдаланған кезде Statementсұрау жолдары мен мәндері жай ғана біріктіріліп, инъекцияларды жасауға мүмкіндік береді. Өз кезегінде, PreparedStatementарнайы сұрау үлгісі бар және оған деректер тырнақшалармен көрсетіледі. Нәтижесінде, SQL инъекциялары кейбір өрістің жолдық көрінісі ретінде ғана қабылданатын болады. SQL инъекцияларынан қорғау үшін сіз тұрақты өрнектерге негізделген тексерулерді пайдалана аласыз (тұрақты өрнектер туралы осы мақаладан толығырақ оқуға болады ). Собеседование разработчика: разбор вопросов по базам данных - 9Тағы бір опция - кіріс параметрлерінің таңбаларының санына шектеу қою: мысалы, 9999-дан аспайтын санды алу керек болса, төрт кіріс таңбасының шегі орындалады. Бұл SQL инъекциялары арқылы бұзу қаупін азайтады.Сіз Java тіліндегі қауіпсіздік туралы толығырақ «Java-дағы қауіпсіздік: үздік тәжірибелер» мақаласынан біле аласыз .

14. Сақталатын proceduresалар дегеніміз не? Сақталған функциялар? Триггер?

SQL-де сақталатын proceduresалар – бұл бір рет құрастырылатын және serverде сақталатын SQL нұсқауларының жиыны болып табылатын дерекқордағы нысан. Бір сөзбен айтқанда, бұл Java-дағы әдістердің аналогы. Сақталған proceduresалар қалыпты сұраулар мен қалыпты сұраулар үшін қол жетімді емес кейбір әрекеттер сияқты деректерде әрекеттерді орындай алады. Процедура бір рет жасалған, содан кейін аргументтерді беру арқылы шақырылатын SQL нысаны болып табылады. Бұл тәсілдің артықшылығы мынада, бұл нұсқауларды бірнеше рет қайта пайдалануға болады. Сақталған proceduresалар өнімділікті жақсартады, бағдарламалау мүмкіндіктерін жақсартады және деректер қауіпсіздігі мүмкіндіктерін қолдайды. Процедураны құруды қарастырайық:
CREATE PROCEDURE procedure_name (first_param some_type, second_param some_type..)
 begin
……...
 end
Процедураны шақыру:
CALL procedure_name (first_param, second_param…..);
Сақталған функция сақталатын proceduresаның бір түрі болып табылады. Функцияның айырмашылығы - ол әрқашан тек бір мәнді қайтарады, ал proceduresа мәндер жиынын қайтарады. Сақталған proceduresаларды кәдімгі SQL-мен араластыру мүмкін емес, бірақ сақталған функция мүмкін - бұл оның артықшылығы. Екінші жағынан, сақталған функциялардың proceduresаларға қарағанда әлдеқайда көп шектеулері бар. Сақталған функцияны құру:
CREATE FUNCTION function_name (first_param, second_param…..)
RETURNS some_type
 begin
……...
RETURN some_value;
end
Сақталған функцияны шақыру:
SELECT function_name(first_param, second_param…..);
Триггер – пайдаланушы тікелей шақырмайтын, бірақ деректер өзгертілген кезде іске қосылатын сақталатын proceduresаның басқа түрі. Яғни, бұл proceduresа белгілі бір шарттар орындалғанда белсендіріледі, мысалы, INSERTнемесе DELETE, немесе UPDATEберілген кестенің белгілі бір бағанындағы деректер. BEFOREТриггер іске қосылған кезде кілт сөздер (байланысты оқиғаға дейін триггер өрттері) немесе AFTER(оқиғадан кейін) арқылы анықталады .
CREATE TRIGGER trigger_name
ON table_name
AFTER INSERT
 begin
……...
 end

15. Жаттығу

Қалай болғанда да, сұхбатта ең көп таралған SQL сұрағы тәжірибе болады - мәселені шешу. Қандай тапсырмаларды кездестіретінін болжауға тырысудың қажеті жоқ, өйткені бәрі қарама-қарсы адамның қиялының күрделілігіне байланысты. Сондықтан, әртүрлі күрделіліктегі SQL сұрауларында жақсартудың жалғыз жұмыс нұсқасы болар еді. sql-ex.ru әртүрлі тапсырмаларды орындау үшін ресурс ретінде қызмет ете алады . Алғашқы жиырма тапсырманы орындағаннан кейін сіздің сұхбаттасыңыз сізді кез келген SQL тапсырмасымен қорқытуы өте қиын болады. Собеседование разработчика: разбор вопросов по базам данных - 11Мұның бәрі бүгінгі күні: осы мақаланы оқығаннан кейін деректер базасы туралы сұрақтар ешқандай қиындық немесе проблемалар тудырмайды деп үміттенемін. Назарларыңызға рахмет және тағы кездескенше!
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION