|
| | |
|
Программирование
[38]
Java, JavaScript, C/C++, Delphi, Assembler, C#, MVC ASP.NET
|
Inet
[12]
Браузеры (Opera, Firefox, IE, ...), пейджеры (ICQ, QIP, ...), сайты, ...
|
HTML
[10]
Вопросы по верстке
|
Linux
[28]
Или "как же это заюзать?"
|
Софт
[8]
Matlab, Eclipse
|
Аппаратная часть
[5]
Архитектура ПК, VHDL, алгоритмы аппаратной части
|
Разное полезное
[12]
Как запомнить, пояснение пословиц
|
ГОСТ
[1]
Размеры по ГОСТам, законы, правила и прочее необходимое, что трудно найти в документации
|
СУБД
[6]
Postgres
|
Windows
[12]
Или заморочки с виндой. Восстановление после "работы" вирусов
|
select "Fam"|| ' ' ||"Name"||' '||"Otchestvo" as full_name from student; |
CREATE SEQUENCE foo_seq; CREATE TABLE foo ( foo_id integer NOT NULL DEFAULT nextval('foo_seq'), foo_name text, PRIMARY KEY (foo_id) );
|
DECLARE kod_gr varchar(6); nom_z varchar(6); stud_full_name varchar(72); BEGIN SELECT s."Fam"||' '||s."Name"||' '||s."Otchestvo" INTO stud_full_name FROM student s, EXAMEN e WHERE s.id=e.student_id; SELECT s.nom_zach into nom_z FROM student s, examen e WHERE s.id=e.student_id; SELECT s.kod_gr into kod_gr FROM student s, examen e WHERE s.id=e.student_id; EXECUTE 'INSERT INTO examen_log (prepod, date, old_mark, new_mark, student, nom_z, kod_gr) VALUES (USER, CURRENT_DATE, ' || OLD.mark || ', ' || NEW.mark || ', ''' || stud_full_name || ''', ''' || nom_z || ''', ''' || kod_gr || ''' );'; RETURN NULL; END;
|
age(timestamp, timestamp)
age(timestamp)
чтобы выделить, например, годы:
date_part('year',age(timestamp)) |
У операции реляционного деления два операнда - бинарное и унарное отношения. Результирующее отношение состоит из одноатрибутных кортежей, включающих значения первого атрибута кортежей первого операнда таких, что множество значений второго атрибута (при фиксированном значении первого атрибута) совпадает со множеством значений второго операнда.
SELECT DISTINCT A.X
FROM A
WHERE NOT EXIST
(SELECT *
FROM B
WHERE NOT EXIST
(SELECT *
FROM A A1
WHERE
A1.X = A.X AND
A1.Y = B.Y));
Замечание. Оператор SQL, реализующий деление отношений трудно запомнить, поэтому дадим пример эквивалентного преобразования выражений, представляющих суть запроса.
Пусть отношение A содержит данные о поставках деталей, отношение B содержит список всех деталей, которые могут поставляться. Атрибут X является номером поставщика, атрибут Y является номером детали.
Разделить отношение A на отношение B означает в данном примере "отобрать номера поставщиков, которые поставляют все детали".
Преобразуем текст выражения:
"Отобрать номера поставщиков, которые поставляют все детали" эквивалентно
"Отобрать те номера поставщиков из таблицы A, для которых не существует непоставляемых деталей в таблице B" эквивалентно
"Отобрать те номера поставщиков из таблицы A, для которых не существует тех номеров деталей из таблицы B, которые не поставляются этим поставщиком" эквивалентно
"Отобрать те номера поставщиков из таблицы A, для которых не существует тех номеров деталей из таблицы B, для которых не существует записей о поставках в таблице A для этого поставщика и этой детали".
Последнее выражение дословно переводится на язык SQL. При переводе выражения на язык SQL нужно учесть, что во внутреннем подзапросе таблица A должна быть переименована, для того чтобы отличать ее от экземпляра этой же таблицы, используемой во внешнем запросе.
A |
x |
/ |
x |
= |
A |
A |
y |
y |
B |
A |
z |
z |
C |
B |
x |
|
B |
y |
|
B |
z |
|
C |
x |
|
C |
y |
|
C |
z |
|
D |
x |
|
E |
y |
|
E |
z |
|
F |
x |
|
F |
z |
|
|
|
|
|
|
|
|
Файл postgresql.conf:
listen_addresses = '*'
Файл pg_hba.conf:
host all all 192.168.0.0/24 trust
- первое all - все базы
- второе all - все пользователи
- можно указать ип конкретной машины, тогда необходимо указать маску 32
- trust - подключение без пароля и вообще на полном доверии
ВАЖНО: после сохранения внесенных изменений необходимо перезапустить сервер (остановить и заново запустить сервис postgres). |
| |
| | |
|
|