Кестелерді біріктіру (сыртқы байланыс)
Работа добавлена: 2016-07-26





5,6-зертханалық жұмыс

Кестелерді біріктіру (сыртқы байланыс)

Сонымен, откен сабақтың жалғасы ретінде бізге барлық цех номері мен тұтынушылардың  телефонын шығару керек. Егер біз ішкі біріктіруді қолданатын болсақ, онда келесі нәтижені аламыз:

Нәтижесінде кестелерде тек цех номері мен тұтынушылардың  телефоны ғана шығып тұр. Бізге барлықтары шығу үшін келесі сұранысты қолданамыз:

    SELECT  firma.name,mebel.mebel_vid

FROM  firma LEFT OUTER JOIN mebel

ON  firma.id_firma=mebel.id_pokupatel;

Қажетті қолданушылар мен техника атауын аламыз.Егер ешқандай техника алмаса, онда оның орнынаNULLнәтижесі шығады.

Сонымен , біздің сұранысқа кілттік сөзді енгіздік - LEFT OUTER JOIN, кестенің сол жағынан барлық жолдарды алу, және кілттік сөзді WHERE өзгерттік ON кілттік сөзіне.LEFT OUTER JOIN кілттік сөзінен басқаRIGHT OUTER JOIN кілттік сөзі қолдануға болады. Сол  жақ кестенің атауымен сәйкес оң жақ кестелер шығады. Толық сыртқы байланыс болады, екі кестеден  бір-бірімен байланысты жолдарды біріктіреді. Толық сыртқы байланыстың кілттік сөзі - FULL OUTER JOINСыртқы байланыстың синтаксисі:

    SELECT  кесте_аты1.баған атауы, кесте аты_2.баған аты

FROMкесте_аты БАЙЛАНЫС ТИПІ кесте аты_2

ONбайланыс шарты;

БАЙЛАНЫС ТИПІ- LEFT OUTER JOIN немесеRIGHT OUTER JOIN 

Жазбаларды топтау және COUNT() функция

Тауарлар туралы мәліметтерді білейік: 

Форумда қанша тауар бар екенін білу керек болса онда COUNT() дайын функциясын қолданамыз. Бұл функция қатар санын санайды.  Егер бұл функцияның аргументі ретінде*, онда кестенің барлық қатарын санайды. Егер аргумент ретінде баған атауы берілсе, онда көрсетілген баған бойынша катарлар ғана саналады. Біздің мысалды екі аргумент те бірдей нәтижені көрсетеді, себебі барлық бағандар типі NOT NULL . id_tovar  аргумент ретінде сұранысты алайық:

SELECT COUNT(id_mebel) FROMpribor;

Біздің кестемізде5 тауар бар.Әрбір тауар туралы білу керек болса.Ол үшін нөмірленген магазин атауларын топтау керек. SQL-де топтау үшін GROUP BY операторы қолданады. Біздің сұранысымыз:

    SELECTid_mebel, COUNT(id_mebel) FROM pribor

    GROUP BYid_mebel;

 GROUP BY  операторыid_tovarбаған бойынша ДҚБЖ деректерді топтауды көрсетеді(әр кесте- бөлек топ)әр топ үшін қатарларды санау: 

Бізде id=4 -біреу.Егер id_tovar жолында мағыналардың болмау мүмкіндіктері болса,онда бұндай жолдар бөлек топқаNULL типпен біріктіріледі.0-ден көп керек болса ондаWHEREоператорын қолданамыз, бірақ бұл оператор тек жолдармен ғана жұмыс істей алады, ал топтар үшін HAVING операторы қолданады:

SELECT id_mebel, COUNT(id_mebel) FROM mebel

GROUP BY id_mebel

    HAVING COUNT(id_mebel) > 0;

Нәтижесінде: 

WHERE операторына ұқсас  дәл сол шарттары HAVING операторында қолданылады, бірақ еске сақтайтын мәселе, WHERE жолдарды сұрыптайды, ал HAVING 

Өңдеу, жаңарту, деректерді жою.

Мысалы біздің форумға модераторлар керек. Ол үшін  tovar кестеге қолданушының ролі туралы жаңа бағанды қосу керек. Кестеге бағанды қосу үшін ALTER TABLE - ADD COLUMN операторы қолданады :

 

Баған орнын көрсету үшін кілттік сөз қолданылады: FIRST – жаңа баған бірінші болады, жәнеAFTER – қандай бағаннан кейін қандай бағанды орналастыру керек екенін білдіреді.

2 жаңа бағанды қосайық: біріншісі - kol , ал екіншісі- rating – қолданушы рейтингі. Екі бағанды да password-тан кейін қосайық:

 ALTER TABLE users ADD COLUMN kolint(10) AFTER pribor_vid,

    ADDCOLUMNratingvarchar(20) AFTERkol;

Деректерді бірнеше бағанда немесе бүкіл кестеде өзгертуге болады.Мысалы,қолданушылар номерлеріне сәйкес рейтингті беретін болсақ, онда алдыменkolбағанына деректерді енгіземіз:

 Ал енді рейтигкке  30 жоғары санына Профи енгізетін болсақ:

UPDATE pribor SET rating='Профи'

    WHERE kol>30;

Берілген шартқа байланысты 2 жолда да деректер өзгертілді.Егер шартты ензбесек барлық жолдарда жаңартулар пайда болады.Егер бізге Рейтинг атауы ұнамаса, в Репутация – reputation атауына өзгерткіміз келсе, онда ол үшін.CHANGE өзгерту операторын қолданамыз:

    ALTER TABLE кесте аты  CHANGE стакестенің ескі аты бағаннын жаңа аты типі;

Ratingатауын reputation өзгертейік:

    ALTER TABLE users CHANGE rating reputation varchar(20);

Обратите баған типі өзгертілмесе де міндетті түрде көрсетіледіегер бізге баған типін өзгерту керек болса, ондаMODIFY операторын қолданамыз:

    ALTER TABLE кесте аты MODIFY баған аты жаңа типі;

Соңғы қарастыратымыз - DELETE операторы , кестеден жолдарды жою үшін қолданылады:

DELETE FROMкесте аты

    WHEREшарт;

Кестеден2-версиялықid жою үшінid_tovar (id=2):

    DELETE FROM tovar

    WHERE id_tovar ='2';

Егер шартты жазбайтын болсақ, онда кестенің барлық деректері жойылып кетеді.ДҚБЖ деректерді тек мына жағдайда жояды, басқа кестелерден сыртқы кілті болатын болса. Мысалы , егер  Tovar  кестеден барлық деректерді жоятын болсақ , сұраныс жүзеге аспайды.