SELECT Name, Age // 이름과 나이를 가져와라
FROM Passenger // 승객 정보에서
WHERE Age >= 40; // 나이가 40세 이상인 사람들의 정보
SELECT * FROM Passenger; // Passenger 테이블 출력하기
-- 1. 항공권을 예약한 승객의 이름을 구하시오.
SELECT Distinct PassengerName
FROM Passenger NATURAL JOIN Reservation;
-- 2. 항공권을 예약하지 않은 승객의 이름을 구하시오.
SELECT Distinct PassengerName
FROM Passenger AS P LEFT OUTER JOIN Reservation AS R ON P.PassengerNO = R.PassengerNo
WHERE R.PassengerNo IS NULL;
-- 3. 대한항공 비행기를 예약한 승객의 이름을 구하시오.
SELECT DISTINCT PassengerName
FROM Passenger NATURAL JOIN Reservation
NATURAL JOIN Flight
NATURAL JOIN Aircraft
WHERE Airline = '대한항공';
-- 4. 샌프란시스코에 내리는 승객들의 평균 나이를 구하시오.
SELECT AVG(Age) AS AvgAge
FROM Passenger NATURAL JOIN Reservation
NATURAL JOIN Flight
WHERE Arrival = '샌프란시스코';
-- 5. 2022년 10월에 예약한 승객의 이름을 구하시오.
SELECT DISTINCT PassengerName
FROM Passenger NATURAL JOIN Reservation
NATURAL JOIN Flight
WHERE ReservedDate BETWEEN '2022-10-01' AND '2022-10-31';
SELECT * FROM Aircraft
UNION
SELECT * FROM Aircraft;
-- 중복은 제거하기 때문에 UNION을 하거나 안 하거나 동일한 결과!
-- 6. 인천에서 탑승하고 샌프란시스코에 내리는 승객의 이름을 구하시오.
SELECT DISTINCT PassengerName
FROM Passenger NATURAL JOIN Reservation
NATURAL JOIN Flight
WHERE
Arrival = '샌프란시스코'
AND
Depareture = '인천';
# 동일한 결과값 출력
SELECT *
FROM Passenger NATURAL JOIN Reservation
NATURAL JOIN Flight
WHERE Arrival = '샌프란시스코'
INTERSECT
SELECT *
FROM Passenger NATURAL JOIN Reservation
NATURAL JOIN Flight
WHERE Depareture = '인천';
SELECT * FROM Flight;
SELECT * FROM Reservation;
-- 인천에서 탑승하고 프랑크푸르트에서 내리는 승객의 숫자를 구하시오
SELECT COUNT(*) FROM (
SELECT PassengerName
FROM Passenger AS P INNER JOIN Reservation AS R ON P.PassengerNo = R.PassengerNo
INNER JOIN Flight AS F ON R.FlightNo = F.FlightNo
WHERE Depareture = '인천'
INTERSECT
SELECT PassengerName
FROM Passenger AS P INNER JOIN Reservation AS R ON P.PassengerNo = R.PassengerNo
INNER JOIN Flight AS F ON R.FlightNo = F.FlightNo
WHERE Arrival = '프랑크푸르트') AS Result;
-- 나이가 가장 많은 사람의 이름을 구하시오
SELECT PassengerName
FROM Passenger
WHERE Age = (SELECT MAX(Age) FROM Passenger);
-- 5등급 이상인 승객의 이름을 구하시오
SELECT PassengerName
FROM Passenger
WHERE PassengerNo IN (SELECT PassengerNo FROM Passenger WHERE Grade >= 5);
-- 프랑크푸르트에 도학하는 항공편의 항공사를 구하시오
SELECT *
FROM Flight NATURAL JOIN Aircraft
WHERE Arrival = '프랑크푸르트';
SELECT Airline
FROM Aircraft
WHERE AircraftNo IN (SELECT AircraftNo FROM Flight WHERE Arrival = '프랑크푸르트');
# 또는
SELECT DISTINCT KindOfAircraft
FROM Aircraft AS A INNER JOIN Flight AS F ON A.AircraftNo = F.AircraftNo
WHERE Depareture = '인천' AND Arrival = '샌프란시스코';
# 또는
SELECT DISTINCT KindOfAircraft
FROM Aircraft AS A,
(SELECT * FROM Flight WHERE Depareture = '인천' AND Arrival = '샌프란시스코') AS F
WHERE
A.AircraftNo = F.AircraftNo;
-- 모든 탑승자의 출발지, 도착지, 출발시간, 운항 항공사를 구하시오
SELECT Arrival, Depareture, FlightDate, (SELECT Airline FROM Aircraft WHERE AircraftNo = F.AircraftNo)
FROM Flight AS F NATURAL JOIN Aircraft AS A;
-- 같은 등급의 평균 나이보다 많은 나이의 승객의 이름과 나이를 구하시오
SELECT AVG(Age), Grade
FROM Passenger
GROUP BY Grade;
SELECT *
FROM Passenger AS P1
WHERE Age > (SELECT AVG(Age), Grade FROM Passenger AS P2 WHERE P1.Grade = P2.Grade);
SELECT * FROM Passenger;
-- 각 등급별로 나이가 40세 이상인 승객을 구하시오
SELECT Grade, MIN(Age)
FROM Passenger
GROUP BY Grade
HAVING MIN(Age) > 40;
SELECT * FROM Passenger;
-- 8등급 이상인 승객의 숫자를 구하시오
SELECT COUNT(PassengerNo), Grade
FROM Passenger
GROUP BY Grade
HAVING COUNT(Grade) >= 8;
SELECT * FROM Passenger;
SELECT / FROM / WHERE 절 모두 서브 쿼리 사용 O
- GROUP BY
컬럼의 값을 기준으로 투플을 그룹화 함 - HAVING
그룹에 대한 조건식을 지정
INSERT INTO <Table Name>
[(Column Name 1, Column Name2, … Column Name n)]
VALUES (Value 1, Value 2 … Value n),
(Value 1, Value 2 … Value n),
(Value 1, Value 2 … Value n)
# BUT, Oracle 은 하나의 INSERT 문으로 여러 행 삽입 불가능!
DELETE 시, 데이터를 복구할























































'✎NHN Academy | JAVA' 카테고리의 다른 글
| NHN Academy - 2024.10.10(Thu) (1) | 2024.10.11 |
|---|---|
| NHN Academy - 2024.10.08(Tue) (1) | 2024.10.08 |
| NHN Academy - 2024.10.02(Wed) (3) | 2024.10.02 |
| NHN Academy - 2024.10.01(Tue) (1) | 2024.10.01 |
| NHN Academy - 2024.09.30(Mon) (5) | 2024.09.30 |