UTS study

DATABASE #

jimmmy_jin 2024. 3. 10. 18:32

NASA.txt 로 SQL SELECT 문제 연습풀이.

 

1. Select the project name (projectName) and the mission number (missionNo) of all missions thatlanded on the moon ( missionType = 'LL')

 

문제를 풀기 전에 NASA.txt 안에 어떤 시트들이 존재하는지 확인하기 위해 \dt 로 List를 뽑아보았다.

1 번 문제를 풀기 위해 nasa2_mission 로 접근해서 좀 더 디테일한 정보를 확인함.

SELECT * FROM nasa2_mission;

그리고 1번에서 요구하는 내용 입력 
정답 -> SELECT projectnName, missionNo FROM nasa2_mission WHERE missionType = 'LL';

+ 여기서 "" 를 사용하면 에러가 남

 

3. List all astronaut names, year of birth, and year of death who were born before 1930 and whohave died. Order by year of birth

 

위의 조건을 검색하기 위해 SELECT astroname, birth, death from NASA2_astronaut 를 먼저 해주고

조건문으로 WHERE birth < 1930 and death is not null order by birth 를 해줬다

여기서 death 값을 찾기위해 death가 null 이 아닌 애들만 골라줌

 

4. Select missions of all projects (projectname, mission no) that lasted less than an hour. Show thehours and minutes of those missions.

 

SELECT projectname , missionNo, hours, minutes FROM NASA2_Missions WHERE hour < 1 ;

 

 

만약 문제에서 A표와 B표가 키로 연결되어있고 A와 B의 양쪽 모두의 조건이 필요하다면 Join을 사용해야한다.

Q. List the missions (projectname, missionno) and launchYear of all missions launched before 1990by any spacecraft called “Columbia”. Order by the launch year. With the given data, the result ofthe (correct) query will be:

 

Natural Join 한거

SELECT NASA2_Missions.projectname, NASA2_Missions.missionNo, launchyear FROM NASA2_Missions NATURAL JOIN NASA2_spacecraft  WHERE launchyear < 1990 and Craftname = 'Columbia' order by launchyear;

 

Natural Join 안 한거

SELECT NASA2_Missions.projectname, NASA2_Missions.missionNo, launchyear FROM NASA2_Missions, NASA2_spacecraft  WHERE NASA2_Missions.projectname = NASA2_spacecraft.projectname and NASA2_Missions.missionNo = NASA2_spacecraft.missionNo and launchyear < 1990 and spacecraft = 'Columbia' order by launchyear;

 

 

현재 NASA 시트에 문제점이 있다.

우주비행사 등록할때 2000년생 이상은 등록이 불가한 Constraint 가 설정되어있다.

ex) CONSTRAINT di_table_nasa2_astronaut_birth CHECK (birth >= 1900 AND birth <= 1999)

 

해당 조건을 업데이트 하고 싶었으나 딱히 방법은 없고 삭제후 재등록을 해야하는 것 같다.

기존 CONSTRAINT 삭제

ALTER TABLE your_table_name DROP CONSTRAINT di_table_nasa2_astronaut_birth;

새로운 CONSTRAINT 추가

ALTER TABLE your_table_name DROP CONSTRAINT di_table_nasa2_astronaut_birth;

여기에 원하는 조건문을 입력해주면

ALTER TABLE your_table_name ADD CONSTRAINT di_table_nasa2_astronaut_birth CHECK (birth >= 1920 AND birth <= 2000);

 

이제 2000년생 이후의 새로운 우주비행사를 등록할 수 있게된다.