C, PHP, VB, .NET

Дневникът на Филип Петров


Архив за март, 2009

* Заявки Update

Публикувано на 30 март 2009 в раздел Бази от Данни.

Заявките от тип UPDATE се използват за обновяване на данни. Базовият синтаксис е:

UPDATE <име на таблица>
SET <правило за обновяване>
WHERE <условие>;

От примера с базата данни „banks“ можем да направим следните задачи: Прочети още…

.

 


* Лекар и математик

Публикувано на 24 март 2009 в раздел Математика.

Попитали лекар и математик дали са братя. Лекарят отговорил първи:

– Ние не сме братя, но ако бяхме от различен пол, пак нямаше да можем да сключим брак, защото по закон брак не може да се сключи от роднини до трети братовчеди включително.

Математикът добавил: Прочети още…

.

 


* Бъчонка и кана

Публикувано на 19 март 2009 в раздел Математика.

Един човек имал бъчонка с 10 литра вино и една празна кана. Веднъж той напълнил каната с вино и допълнил бъчонката със същото количество вода.

По-късно, след като изпил виното от каната, той отново напълнил каната от бъчонката, а бъчонката допълнил отново с вода. Тогава се оказало, че в бъчонката и каната има еднаква концентрация на вино и вода.

Колко литра побира каната? Прочети още…

.

 


* Псевдоними на колони и таблици

Публикувано на 19 март 2009 в раздел Бази от Данни.

Псевдонимите на колони ни улесняват да пишем по-ясни записи на заявките. Нeка разгледаме пример от предишната статия:

Задача: Изведете името на банката и средната сума на акаунтите в нея, но само за банките, които имат буквата “M” някъде в името на банковия клон:

mysql> SELECT banks.name, AVG(accounts.amount)
FROM banks JOIN branches ON branches.bank_code = banks.code
           JOIN accounts ON accounts.branch_id = branches.id
WHERE branches.name LIKE '%M%'
GROUP BY banks.name;
+-----------------+-------------+
| name            | AVG(amount) |
+-----------------+-------------+
| Societe General | 2821.020000 |
| Wells Fargo     | 2775.247500 |
+-----------------+-------------+
2 rows in set (0.00 sec)

Виждате, че резултатът е таблица с две колони. Имената им са съответно „name“ и „AVG(amount)“. Въпреки, че от гледна точка на програмиста това е напълно достатъчно, то не е лошо да ги именуваме с по-описателни имена. Например: Прочети още…

.

 


* Клауза HAVING

Публикувано на 17 март 2009 в раздел Бази от Данни.

Понякога се налага да филтрираме данните след като вече сме направили дадена калкулация. Фразата HAVING се използва за прилагане на условия върху групи (обикновено оформени чрез GROUP BY).

Ще демонстрираме това с пример. Вече знаем как можем да изкараме списък на клиентите и средните суми на техните сметки: Прочети още…

.

 


* Групиране на данни

Публикувано на 17 март 2009 в раздел Бази от Данни.

Когато имаме повтарящи се данни в дадена колона, можем да ги “групираме”. За целта се използва клаузата “GROUP BY”. Този оператор обикновено се прилага в комбинация с агрегатни функции. Целта е агрегатната функция да се приложи върху множество по-малки резултатни таблици, резултатите от които накрая да се обединят в една.

1. Да се изведе сумата на акаунти от тип 1 и сумата на акаунти от тип 2: Прочети още…

.

 


* Агрегатни функции

Публикувано на 17 март 2009 в раздел Бази от Данни.

Преди да започнем, нека разгледаме следната база от данни:

База Данни за банка

Ето и заявките за създаване на тази база от данни и да вмъкнем произволни данни в нея: Прочети още…

.

 


* Няколко задачи за ученици

Публикувано на 03 март 2009 в раздел Математика.

Следните задачи са предназначени за деца от различни възрасти. Някои от тях са за деца, някои за по-големи ученици. Смятам, че всички те ще са интересни и за по-възрастни читатели и затова реших да ги сложа тук. Намерих ги в книгата „Занимателни Фолклорни Задачи, Фокуси и Игри“ на Иван Ганчев от 2003г. Можете да я купите за 6лв. от книжарницата на ФМИ на СУ… Прочети още…

.

 


* Вложен SELECT

Публикувано на 01 март 2009 в раздел Бази от Данни.

Когато сме разделили базата от данни на множество класове обекти, много често се налага да „прескачаме“ през един или повече обекти. Това се получава, когато между два или повече класа обекти няма пряка връзка с външен ключ или друга колона, по която да бъдат сравнени.

От примера с базата от данни с университет това може да се получи, ако например поискаме да изкараме имената на всички преподаватели от университет с id=1. Ще видите, че в таблицата professors съществува връзка между преподавател и факултет, но няма пряка връзка до таблицата university. Затова ще бъде нужно да използваме веднъж връзката до факултета, след което връзката на факултета до университета: Прочети още…

.

 


* Многотаблични заявки SELECT

Публикувано на 01 март 2009 в раздел Бази от Данни.

Вече сте разбрали, че разделянето на една база от данни се прави с цел да се спести обем информация и да имаме колкото се може по-малко дублиране на такава. Това естествено е добре, но си има и цена – много често ни се налага да комбинираме информация едновременно от две или повече таблици. В тези случаи стандартният формат на еднотаблична заявка SELECT не върши работа.

В най-простия си вариант с две таблици, които сравняваме, те ще имат две колони, по които лесно ще бъдат сравнявани. От примера с базата от данни за университет, ако искаме да изкараме имената на преподавателите заедно с името на факултета, в който преподават, то ще се наложи да направим многотаблична заявка. Това е така, защото в таблицата professors няма колона, в която пазим името на факултета, а пазим само неговото id. Ето как се изпълнява въпросната многотаблична заявка: Прочети още…

.