✎NHN Academy | JAVA

NHN Academy - 2024.10.07(Mon)

박순돌 2024. 10. 7. 15:41

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