C, PHP, VB, .NET

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


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

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

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

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

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

1. Извежда списък с имената и датата на основаване на всички университети:

SELECT name, founded
FROM university.university;

Резултатът ще бъде следният:

+---------------------+------------+
| name                | founded    |
+---------------------+------------+
| Sofia University    | 1889-01-29 |
| Techical University | 1941-06-12 |
+---------------------+------------+
2 rows in set (0.00 sec)

В тази заявка пропуснахме клаузата WHERE, т.е. ще извикаме списък от всички редове.

2. Списък на id и име на факултетите от университет с id=2:

SELECT id, name
FROM university.faculties
WHERE univ_id=2;

+----+----------------------------------+
| id | name                             |
+----+----------------------------------+
|  1 | Avtomatika                       |
|  2 | Elektronna Tehnika i Tehnologii  |
|  3 | Elektrotehnicheski               |
|  4 | Energo-mashinostroitelen         |
|  5 | Kompiutarni sistemi i upravlenie |
|  6 | Mashino-tehnologichen            |
+----+----------------------------------+
6 rows in set (0.00 sec)

Както виждате в този пример се използва външния ключ univ_id.

3. Име, фамилно име и телефон на преподавателите от факултет с id=4:

SELECT firstname, lastname, phone
FROM university.professors
WHERE faculty_id=4;

+-----------+----------+---------+
| firstname | lastname | phone   |
+-----------+----------+---------+
| Boncho    | Bonev    | 9652295 |
| Hristina  | Antonova | 9652359 |
| Ivailo    | Banov    | 9652209 |
| Emanuil   | Agoncev  | 9652436 |
| Hristo    | Petkov   | 9653629 |
+-----------+----------+---------+
5 rows in set (0.00 sec)

4. Списък на всички данни за преподаватели с първо име „Ivan“:

SELECT *
FROM university.professors
WHERE firstname="Ivan";

5. Възможно е използването на логическите оператори AND и OR. Следният пример показва всички преподаватели с първо име „Daniela“ и фамилно име „Gotceva“:

SELECT *
FROM university.professors
WHERE firstname="Daniela" AND lastname="Gotceva";

Следният пример показва списък с телефоните на преподавателите и първо име „Ivan“ или „Dimitar“:

SELECT *
FROM university.professors
WHERE firstname="Ivan" OR firstname="Dimitar";

6. Можете да използвате операторите за сравнение <, <=, =, >, >=, !=. Следният пример ще покаже телефоните на преподавателите с id>=20:

SELECT id, phone
FROM university.professors
WHERE id>=20;

7. Можете да правите проверка за неопределеност чрез оператора IS. Следният пример ще изведе имената и телефоните на преподавателите, чиито телефонни номера не са NULL:

SELECT firstname, lastname, phone
FROM university.professors
WHERE phone IS NOT NULL;

8. Както виждате подредбата на резултатът е неопределена. Чрез използване на допълнителна клауза „ORDER BY“ ние можем да подреждаме данните. В предишния пример сме подредили резултатите по първото име на преподавателите в азбучен ред:

SELECT firstname, lastname, phone
FROM university.professors
WHERE phone IS NOT NULL
ORDER BY firstname;

Възможно е и подреждане „наобратно“:

SELECT firstname, lastname, phone
FROM university.professors
WHERE phone IS NOT NULL
ORDER BY firstname DESC;

Ако искате да подредите по няколко полета, то ги изредете едно след друго. Първо ще се сортира по първото поле, после по второто и т.н. Например ако искаме да извлечем имената на всички преподаватели по азбучен ред, подредени първо по малкото си име, а после по фамилно ще напишем:

SELECT firstname, lastname, phone
FROM university.professors
ORDER BY firstname, lastname;

Добавяйки DESC след някой от параметрите ще обърнете реда на подреждането.

9. Чрез оператор IN можете да проверявате за принадлежност към множество. Ето пример за списък с имената и id на преподавателите от факултети 1, 3 и 5, подредени по азбучен ред на първото си име:

SELECT id, firstname, lastname
FROM university.professors
WHERE faculty_id IN (1, 3, 5)
ORDER BY firstname;

10. Чрез оператор LIKE можете да правите „маски“ за търсене. Следния пример ще изведе id, имената и телефона на всички преподаватели с първа буква на фамилното име „I“:

SELECT id, firstname, lastname, phone
FROM university.professors
WHERE lastname LIKE 'I%';

Виждате, че ключова роля играе символа ‘%’. Следващата заявка ще върне всички преподаватели, които имат буквата „P“ във фамилното си име:

SELECT id, firstname, lastname, phone
FROM university.professors
WHERE lastname LIKE '%P%';

11. Накрая ако не желаете да виждате всички резултати, а само част от тях, то може да се използва операторът LIMIT. Следния пример ще покаже само първите 10 резултата от заявка за показване на имената на всички преподаватели:

SELECT firstname, lastname
FROM professors
LIMIT 10;

Това е изключително подходящо при програми, които четат големи обеми от информация, като например статистики. Най-често подреждаме информацията по колона от тип timestamp в обратен ред и правим LIMIT, за да видим само последните записи, които ни интересуват.

Задача: Въведете учебни предмети, които изучавате в таблицата subjects и въведете ваши данни и данни на ваши колеги в таблицата students. Преди това използвайте оператор SELECT, за да намерите id на преподавателя, който води дадения предмет. Ако такъв преподавател не е въведен в базата данни – въведете го.

Задача: Въведете данни за изучаваните от вас предмети в таблицата „записани студенти“.

 



2 коментара


  1. Виктория каза:

    Въя вторият пример на 5. след SELECT не трябва ли да има phone,тъй като трябва да изкара номерата на преподавателите Иван или Димитър? :)

  2. Има го – заявката е „SELECT *“, т.е. „изведи всичко“. Това включва и телефона.

Добави коментар

Адресът на електронната поща няма да се публикува


*