Что, в этой модели, не так?
Создадим необходимые объекты (таблицы, ограничения, индексы):
CREATE TABLE CUSTOMER ("CUSTOMER_ID" NUMBER(10), "CUSTOMER_NAME" VARCHAR2(128) ) TABLESPACE MIRAVILD_DATA; COMMENT ON TABLE CUSTOMER IS 'Клиент'; COMMENT ON COLUMN CUSTOMER.CUSTOMER_ID IS 'Идентификатор клиента'; COMMENT ON COLUMN CUSTOMER.CUSTOMER_NAME IS 'Наименование клиента'; CREATE UNIQUE INDEX "U_IDX_CUSTOMER" ON "CUSTOMER" ("CUSTOMER_ID") TABLESPACE MIRAVILD_INDEX; ALTER TABLE "CUSTOMER" ADD CONSTRAINT "PK_CUSTOMER" PRIMARY KEY ("CUSTOMER_ID") USING INDEX "U_IDX_CUSTOMER" ENABLE VALIDATE; / CREATE TABLE GOODS ("GOODS_ID" NUMBER(10), "GOODS_NAME" VARCHAR2(128), "GOODS_PRICE" NUMBER(4,2) ) TABLESPACE MIRAVILD_DATA; COMMENT ON TABLE GOODS IS 'Товар'; COMMENT ON COLUMN GOODS.GOODS_ID IS 'Идентификатор товара'; COMMENT ON COLUMN GOODS.GOODS_NAME IS 'Наименование товара'; COMMENT ON COLUMN GOODS.GOODS_PRICE IS 'Цена товара'; CREATE UNIQUE INDEX "U_IDX_GOODS" ON "GOODS" ("GOODS_ID") TABLESPACE MIRAVILD_INDEX; ALTER TABLE "GOODS" ADD CONSTRAINT "PK_GOODS" PRIMARY KEY ("GOODS_ID") USING INDEX "U_IDX_GOODS" ENABLE VALIDATE; / CREATE TABLE "ORDER" ("ORDER_ID" NUMBER(10), "CUSTOMER_ID" NUMBER(10), "GOODS_ID" NUMBER(10), "GOODS_QUANTITY" INTEGER ) TABLESPACE MIRAVILD_DATA; COMMENT ON TABLE "ORDER" IS 'Заказ'; COMMENT ON COLUMN "ORDER"."ORDER_ID" IS 'Идентификатор заказа'; COMMENT ON COLUMN "ORDER"."CUSTOMER_ID" IS 'Идентификатор клиента'; COMMENT ON COLUMN "ORDER"."GOODS_ID" IS 'Идентификатор товара'; COMMENT ON COLUMN "ORDER"."GOODS_QUANTITY" IS 'Количество товара'; ALTER TABLE "ORDER" ADD CONSTRAINT "FK_CUSTOMER" FOREIGN KEY ("CUSTOMER_ID") REFERENCES "CUSTOMER" ("CUSTOMER_ID") ON DELETE CASCADE ENABLE; ALTER TABLE "ORDER" ADD CONSTRAINT "FK_GOODS" FOREIGN KEY ("GOODS_ID") REFERENCES "GOODS" ("GOODS_ID") ON DELETE CASCADE ENABLE; CREATE UNIQUE INDEX "U_IDX_ORDER" ON "ORDER" ("ORDER_ID") TABLESPACE MIRAVILD_INDEX; ALTER TABLE "ORDER" ADD CONSTRAINT "PK_ORDER" PRIMARY KEY ("ORDER_ID") USING INDEX "U_IDX_ORDER" ENABLE VALIDATE; /
Вопрос:
Для приведенной выше структуры таблиц напишите запрос без использования вложенных подзапросов, позволяющий получить имена ВСЕХ клиентов и количество принадлежащих им заказов.
SELECT c.customer_name, COUNT(o.order_id) AS cnt_orders FROM customer c LEFT JOIN "ORDER" o ON o.customer_id = c.customer_id GROUP BY c.customer_name; /
Вопрос:
Для приведенной выше структуры таблиц напишите запрос без использования вложенных подзапросов, позволяющий получить список имен клиентов, оформивших заказ, и названий заказанных ими товаров.
SELECT DISTINCT c.customer_name, g.goods_name FROM customer c JOIN "ORDER" o ON o.customer_id = c.customer_id JOIN "GOODS" g ON g.goods_id = o.goods_id; /
Вопрос:
Для приведенной выше структуры таблиц напишите запрос с использованием не более одного подзапроса, позволяющий получить список названий товаров с ценой не выше средней.
SELECT g.goods_name FROM "GOODS" g WHERE g.goods_price <= (SELECT AVG(g.goods_price) AS avg_price FROM "GOODS" g); /
P.S.
Конфигурация СУБД — Oracle Database 11g Express Edition Release 11.2.0.2.0
IDE — PL/SQL Developer Version 11.0.6.1776