C, PHP, VB, .NET

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


Категория ‘Бази от Данни’

* Виртуални таблици (view)

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

Виртуалните таблици са още познати с директния си превод от английски език като "изгледи". На практика виртуалната таблица е съхранен SQL SELECT оператор, който си има собствено име в базата данни. Използва се когато често използваме едни и същи SELECT заявки.

Виртуалните таблици имат и редица други предимства:
- Различните потребители в системата могат да виждат едни и същи данни по различен начин;
- Удобни са за ограничаване се достъпа на потребителите до базовата таблица и така те могат да достъпват само данните, които извежда виртуалната таблица.

Виртуална таблица се създава чрез операторът CREATE VIEW: Прочети още...

.

 


* Заявки Delete

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

Подобно на INSERT, заявките от тип DELETE са с изключително прост синтаксис:

DELETE FROM <таблица>
WHERE <условие>;

Нека демонстрираме един пример с базата от данни "banks". Нека видим първо списък на акаунтите: Прочети още...

.

 


* Заявки Update

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

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

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

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

.

 


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

Публикувано на 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 в раздел Бази от Данни.

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

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

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

.

 


* Вложен SELECT

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

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

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

.

 


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

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

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

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

.

 


* Заявки за еднотабличен оператор SELECT

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

Заявките SELECT имат за цел да четат информация от таблица по дадени критерии. Най-общо казано синтаксисът е:

SELECT <редове от колони> FROM <таблица> WHERE <условие>;

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

.