POSTQUEL
POSTQUEL (англ. Postgres Query Language) — це первинна мова запитів, яка була створена для системи керування базами даних Postgres, нині PostgreSQL. Ця мова була створена командою розробників у 1985 році в Каліфорнійському університеті Берклі під керівництвом професора Майкла Стоунбрейкера. POSTQUEL базується на мові запитів QUEL і використовується у базі даних Ingres з кінця 1970-х років. У 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}
Посилання
- C. J. Date: A Critique of the SQL Database Language. SIGMOD Record 14(3): 8-54, 1984.
Джерело: стаття у Вікіпедії та історія редагувань (автори).