InterBase:如何创建包含多个表的视图?
InterBase: How to create view with a multible tables?
我正在使用 SQL 语句创建视图,但我一直遇到语法问题。
我的四张表是:
CREATE TABLE "BOOK_ORDER"
(
"ID" INTEGER NOT NULL,
"Open_Date" DATE NOT NULL,
"Close_Date" DATE,
"Student_ID" INTEGER NOT NULL,
"Book_ID" INTEGER NOT NULL,
CONSTRAINT "PK_ORDER_ID" PRIMARY KEY ("ID")
);
ALTER TABLE "BOOK_ORDER" ADD CONSTRAINT "FK_ORDER_BOOK" FOREIGN KEY ("Book_ID") REFERENCES BOOK ("ID") ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE "BOOK_ORDER" ADD CONSTRAINT "FK_ORDER_STUDENT" FOREIGN KEY ("Student_ID") REFERENCES STUDENTS ("STUDENT_ID") ON UPDATE CASCADE ON DELETE CASCADE;
CREATE TABLE "STUDENTS"
(
"STUDENT_ID" INTEGER NOT NULL,
"STUDENT_NAME" VARCHAR(50) NOT NULL,
"TICKET" INTEGER NOT NULL,
"GROUP_ID" INTEGER NOT NULL,
CONSTRAINT "PK_StUDENTS" PRIMARY KEY ("STUDENT_ID")
);
ALTER TABLE "STUDENTS" ADD CONSTRAINT "FK_GROUP" FOREIGN KEY ("GROUP_ID") REFERENCES GROUPS ("GROUP_ID") ON UPDATE CASCADE ON DELETE CASCADE;
CREATE TABLE "GROUPS"
(
"GROUP_ID" INTEGER NOT NULL,
"TITLE" VARCHAR(50) NOT NULL,
"CURATOR" VARCHAR(50) NOT NULL,
"CURATOR_TEL" VARCHAR(20) NOT NULL,
"FAC_ID" INTEGER NOT NULL,
CONSTRAINT "PK_GROUP" PRIMARY KEY ("GROUP_ID")
);
CREATE TABLE "BOOK"
(
"ID" INTEGER NOT NULL,
"CODE" INTEGER NOT NULL,
"Name" VARCHAR(50) NOT NULL,
"Year" DATE NOT NULL,
"Publishing_Office" VARCHAR(50) NOT NULL,
"Language" INTEGER NOT NULL,
CONSTRAINT "PK_BOOK_ID" PRIMARY KEY ("ID")
);
我需要显示有关订单的信息:OpenDate、CloseDate、Student、StudentGroup、Book。
您使用 CREATE VIEW view_name AS SELECT statement
的语法创建视图,其中 statement
是您的常规 SELECT 语句。
因此,你会这样做:
CREATE VIEW view_name AS
SELECT BOOK_ORDER.id, BOOK_ORDER.OpenDate, BOOK_ORDER.CloseDate, students.student_name, groups.title, book.name
FROM book_order, students, groups, book
WHERE book_order.student_id = students.student_id AND
book_order.book_id = book.id AND
students.group_id = groups.group_id
where 子句通过包含在 table 中重复一次的值来执行简单连接。我不能保证这会奏效,但这是一个好的开始。
此外,要从视图中获取数据,select 就像常规 table 一样,将视图作为 table 名称。
我正在使用 SQL 语句创建视图,但我一直遇到语法问题。
我的四张表是:
CREATE TABLE "BOOK_ORDER"
(
"ID" INTEGER NOT NULL,
"Open_Date" DATE NOT NULL,
"Close_Date" DATE,
"Student_ID" INTEGER NOT NULL,
"Book_ID" INTEGER NOT NULL,
CONSTRAINT "PK_ORDER_ID" PRIMARY KEY ("ID")
);
ALTER TABLE "BOOK_ORDER" ADD CONSTRAINT "FK_ORDER_BOOK" FOREIGN KEY ("Book_ID") REFERENCES BOOK ("ID") ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE "BOOK_ORDER" ADD CONSTRAINT "FK_ORDER_STUDENT" FOREIGN KEY ("Student_ID") REFERENCES STUDENTS ("STUDENT_ID") ON UPDATE CASCADE ON DELETE CASCADE;
CREATE TABLE "STUDENTS"
(
"STUDENT_ID" INTEGER NOT NULL,
"STUDENT_NAME" VARCHAR(50) NOT NULL,
"TICKET" INTEGER NOT NULL,
"GROUP_ID" INTEGER NOT NULL,
CONSTRAINT "PK_StUDENTS" PRIMARY KEY ("STUDENT_ID")
);
ALTER TABLE "STUDENTS" ADD CONSTRAINT "FK_GROUP" FOREIGN KEY ("GROUP_ID") REFERENCES GROUPS ("GROUP_ID") ON UPDATE CASCADE ON DELETE CASCADE;
CREATE TABLE "GROUPS"
(
"GROUP_ID" INTEGER NOT NULL,
"TITLE" VARCHAR(50) NOT NULL,
"CURATOR" VARCHAR(50) NOT NULL,
"CURATOR_TEL" VARCHAR(20) NOT NULL,
"FAC_ID" INTEGER NOT NULL,
CONSTRAINT "PK_GROUP" PRIMARY KEY ("GROUP_ID")
);
CREATE TABLE "BOOK"
(
"ID" INTEGER NOT NULL,
"CODE" INTEGER NOT NULL,
"Name" VARCHAR(50) NOT NULL,
"Year" DATE NOT NULL,
"Publishing_Office" VARCHAR(50) NOT NULL,
"Language" INTEGER NOT NULL,
CONSTRAINT "PK_BOOK_ID" PRIMARY KEY ("ID")
);
我需要显示有关订单的信息:OpenDate、CloseDate、Student、StudentGroup、Book。
您使用 CREATE VIEW view_name AS SELECT statement
的语法创建视图,其中 statement
是您的常规 SELECT 语句。
因此,你会这样做:
CREATE VIEW view_name AS
SELECT BOOK_ORDER.id, BOOK_ORDER.OpenDate, BOOK_ORDER.CloseDate, students.student_name, groups.title, book.name
FROM book_order, students, groups, book
WHERE book_order.student_id = students.student_id AND
book_order.book_id = book.id AND
students.group_id = groups.group_id
where 子句通过包含在 table 中重复一次的值来执行简单连接。我不能保证这会奏效,但这是一个好的开始。
此外,要从视图中获取数据,select 就像常规 table 一样,将视图作为 table 名称。