0

特定のテーブルからデータを抽出したいと思います。ただし、制約は、データを取得するために 2 つのリレーショナル ビューを使用する必要があることです。ビューを使用せずにデータを取得できますが、ビューを使用する必要があります。そして、私はdbが初めてです。皆さんが私を助けてくれることを願っています。したがって、2 つのテーブルのデータを使用する必要があると思います。しかし、私の理解では、2 つのテーブルを使用する必要はないと思います。皆さんがアドバイスできることを願っています。前に言ったように、データを抽出するには 2 つのビューを使用する必要があります。

 FlightTripNo Departure Destination FinalDestination
 - - - - - - - - - - - - - - - -
 05 Singapore Bangalore Chennai
 03 Sdyney Auckland

それが次の表です。

FLIGHTTRIP( FlightTripNo,PlaneNo)
PRIMARY KEY (FlightTripNo),

( 1, JET348)
( 2, TR1313)
( 3, TR287)
( 4, MY871P)
( 5, SQ777)
( 6, AI322X)

フライトストップテーブル

FLIGHTSTOP(  FlightTripNo, FlightStopNo, DEPARTURE, DESTINATION )    
PRIMARY KEY (FlightTripNo, FlightStopNo)
UNIQUE UNIQUE(FlightTripNo, DEPARTURE, DESTINATION)
FOREIGN KEY (FlightTripNo) REFERENCES FLIGHTTRIP(FlightTripNo)

INSERT INTO FLIGHTSTOP VALUES( 1, 1, 'Singapore', 'Malaysia');
INSERT INTO FLIGHTSTOP VALUES( 1, 2, 'Malaysia', 'Chennai');
INSERT INTO FLIGHTSTOP VALUES( 1, 3, 'Chennai', 'Bangalore');
INSERT INTO FLIGHTSTOP VALUES( 3, 1, 'Syndey', 'Auckland');
INSERT INTO FLIGHTSTOP VALUES( 5, 1, 'Singapore', 'Bangalore');
INSERT INTO FLIGHTSTOP VALUES( 5, 2, 'Bangalore', 'Chennai');
......
Total 400 records

これは、ビューを使用せずにどこまでやったかです。しかし、私はビューを使用する必要があります。そして2ビュー。ご意見をお聞かせください。

 SELECT FLIGHTSTOP.FlightTripNo,FLIGHTSTOP.FlightStopNo, FLIGHTSTOP.DEPARTURE AS ORIGIN,  FLIGHTSTOP.DESTINATION AS DESTINATION1, T2.DESTINATION AS DESTINATION2
 FROM FLIGHTSTOP LEFT JOIN FLIGHTSTOP T2 ON FLIGHTSTOP.FlightTripNo = T2.FlightTripNo AND   FLIGHTSTOP.DEPARTURE = T2.DEPARTURE
 WHERE FLIGHTSTOP.FlightTripNo IN (SELECT FlightTripNo FROM FLIGHTSTOP
                GROUP BY FlightTripNo
                HAVING COUNT(*) < 3)
                ORDER BY FLIGHTSTOP.FlightTripNo;
4

1 に答える 1

0

@NWestで述べたように、ビューはテーブルのようなデータベースオブジェクトです。ただし、それ自体ではデータを保存しません。ビューの概念は、実際にはSQLステートメントを格納することです。ビューを使用して複雑なSQLステートメントを保存すると、複雑なクエリがより簡単になります。さらに、ビューに対してSELECTステートメントを直接実行できる機能もあります。例えば:

create view emp_dept as select empno, ename, sal, dept.deptno, dname from emp, dept
where emp.deptno = dept.deptno and deptno=10;

これで、emp_deptという名前のビューが作成されます。テーブルのように、次のステートメントでビューをクエリできます。また、このビューを別のビューまたはテーブルと結合できます。

select ename, sal from emp_dept where sal>2000.

ビューのアイデアをお持ちいただければ幸いです。ここで、この概念を例として使用します。

于 2012-11-19T17:59:13.583 に答える