POSTQUEL

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

POSTQUEL (англ. Postgres Query Language) — це первинна мова запитів, яка була створена для системи керування базами даних Postgres, на сьогоднішній день PostgreSQL. Ця мова була створена командою розробників у 1985 році в Каліфорнійському університеті Берклі, під керівництвом професора Майкла Стоунбрейкера. POSTQUEL базується на мові запитів QUEL і використовується у базі даних Ingres з кінця 70-х років. У 1995 році Ендрю Ю (Andrew Yu), а також Джоллі Чен (Jolly Chen) зробили заміну мови запитів у базі Postgres POSTQUEL на SQL. Отже, новий випуск системи керування базами даних назвали Postgres95.

Приклади запитів[ред. | ред. код]

Приклад1.1.1 Обчисліть заробітну платню, розділену на 18 років для співробітника Джонса.

 range of E is EMPLOYEE
 retrieve into W
 (COMP = E.Salary / (E.Age - 18))
 where E.Name = "Jones"

Приклад1.1.2 Еквівалентний оператор SQL:

 select (e.salary / (e.age - 18)) as comp
 from employee as e
 where e.name = "Jones"

QUEL, як правило, більш «нормалізується», ніж SQL. У той час, коли кожна основна команда SQL має формат, який, принаймні, дещо відрізняється від інших, а у QUEL один синтаксис використовується для всіх команд.

Наприклад, тут наведено приклад, який створює таблицю, вставляє рядок в неї, а потім витягує і модифікує дані, а також видаляє рядок, який був доданий (припускаючи, що ім'я це унікальне поле).

Приклад1.2.1

 create student(name = c10, age = i4, sex = c1, state = c2)
 range of s is student
 append to s (name = "philip", age = 17, sex = "m", state = "FL")
 retrieve (s.all) where s.state = "FL"
 replace s (age=s.age+1)
 retrieve (s.all)
 delete s where s.name="philip"

Аналогічна умова для SQL:

Приклад1.2.2

 create table student(name char(10), age int, sex char(1), state char(2))
 insert into student (name, age, sex, state) values ("philip", 17, "m", "FL")
 select * from student where state = "FL"
 update student set age=age+1
 select * from student
 delete from student where name="philip"

Зверніть увагу, що синтаксис значно варіюється між командами, і що навіть подібні команди, такі як вставка і оновлення використовуються з різними стилями.

Приклад1.3. Отримати розмір заробітної платні співробітника Ковальського:

 retrieve (STUFF.pay) from STUFF where STUFF.name = "Kowalski" 

Приклад1.4. Усі співробітники, яким більше 40 років:

 retrieve (P.name) from P in STUFF where P.age > 40

Приклад1.5. Знайти усі департаменти, які цілком займають один поверх:

 retrieve (DEPART.dname)
 where DEPART.floor NOT-IN {D.floor from D in DEPART where D.dname != DEPART.dname}

Додатковий матеріал для читання[ред. | ред. код]