본문 바로가기
데이터베이스

[기초가 든든한 데이터베이스] 실습문제풀이 01 (CHAPTER 09, 국가정보 데이터베이스 구축 및 활용)

by 그릿er 2020. 7. 19.

 

 

 

**제 풀이는 개인적으로 푼 것이라 가장 알맞는 정답이 아닐 수 있습니다.

틀린 부분이 있다면 댓글로 살포시 알려주세요~**

 

 

 

 

1.1 데이터베이스 생성

 

데이터베이스 이름 : nation
  1. 데이터베이스
  2. 새 데이터베이스
  3. 이름 설정에서 nation 
로그인 이름 : nation
암호 : hit
기본 데이터베이스 : nation

nation 데이터베이스 역할 : db_owner
  1. 보안
  2. 새 로그인
  3. 로그인 이름(nation) 설정
  4. SQL server 인증 선택 후 암호(hit) 설정
  5. 왼쪽의 사용자 매핑 클릭
  6. 해당 데이터베이스(nation)이름 체크박스
  7. 아래쪽 db_owner 체크

책에 앞 부분에 나와 있는 과정이지만 한 번 정리해보았습니다.

 

 

 

 

1.2 테이블 생성

 

테이블 이름 열 이름 데이터 형식 제약조건 기본키 외래키 FK테이블 FK열
국가 이름 VARCHAR(60) NOT NULL PK      
영문이름 VARCHAR(60)          
지역 VARCHAR(60)          
인구 DECIMAL(11)          
gdp DECIMAL(14)          
CREATE TABLE 국가
(이름 VARCHAR(60) NOT NULL PRIMARY KEY
,영문이름 VARCHAR(60)
,지역 VARCHAR(60)
,인구 DECIMAL(11)
,gdp DECIMAL(14));

 

 

 

 

1.3 데이터 입력

 

데이터 입력 부분은 너무 길고 똑같은 패턴의 반복이라서 생략하겠습니다.

예시를 그대로 반복하시면 됩니다.

 

 

 

 

 

1.4 데이터 검색

 

① 지역 이름을 딱 한번만 출력하라.

SELECT DISTINCT 지역
FROM 국가;

 

 

② 인구가 2억명 이상인 국가의 이름을 검색하라. 여기서 2억명은 숫자 0이 8개인 200000000이다.

SELECT 이름
FROM 국가
WHERE 인구 >= 200000000;

 

 

③인구가 2억 이상인 국가의 이름과 1인당 GDP를 검색하라.

SELECT 이름, gdp/인구 AS '1인당 GDP'
FROM 국가
WHERE 인구 >= 200000000;

 

 

④ '중동' 지역에 위치하고 있는 국가의 이름과 백만명당 인구를 검색하되, 결과값이 정수가 아니면 반올림하라. 여기서 백만명은 숫자 0이 6개인 1000000이다.

SELECT 이름, ROUND(인구/1000000, 0) AS '백만명당 인구'
FROM 국가
WHERE 지역 = '중동';

 

 

⑤ '프랑스', '독일', '이탈리아'의 국가 이름과 인구를 검색하라.

SELECT 이름, 인구
FROM 국가
WHERE 이름 = '프랑스'
   OR 이름 = '독일'
   OR 이름 = '이탈리아';

 

 

⑥ 'United'라는 영문이 포함된 국가의 한글명과 영문명을 검색하라. 

(영문이름을 영문으로 저장하여 그 부분이 조금 다릅니다.)

SELECT 이름, 영문
FROM 국가
WHERE 영문 LIKE 'United%';

 

 

⑦ 테이블에 저장된 국가들의 인구 합계를 검색하라.

SELECT SUM(인구) AS '총인구'
FROM 국가;

 

 

⑧ 각 지역에 속한 국가수를 지역과 함께 검색하라.

SELECT 지역, COUNT(지역) AS '국가수'
FROM 국가
GROUP BY 지역;

 

 

 ⑨ 천만명 이상 인구를 가진 지역별 국가수를 검색하라. 여기서 천만명은 숫자 0이 7개인 10000000이다.

SELECT 지역, COUNT(지역) AS '국가수'
FROM 국가
WHERE 인구 >= 10000000
GROUP BY 지역;

 

 

 ⑩ 전체 인구가 1억 이상인 지역을 검색하라. 여기서 1억명은 숫자 0이 8개인 100000000이다.

SELECT DISTINCT 지역
FROM 국가
WHERE 인구 >= 100000000;

 

 

⑪ 인구가 '러시아'보다 많은 국가의 이름을 검색하라.

SELECT DISTINCT 이름
FROM 국가
WHERE 인구 > (SELECT 인구
			  FROM 국가
              WHERE 이름 = '러시아');

 

 

 ⑫ '그리스'와 '러시아'가 속한 지역에 속하는 국가의 모든 열을 검색하라.

SELECT *
FROM 국가
WHERE 지역 = (SELECT 지역
			  FROM 국가
              WHERE 이름 = '러시아')
   OR 지역 = (SELECT 지역
   			  FROM 국가
              WHERE 이름 = '그리스');

 

 

⑬ 1인당 GDP가 'United Kingdom'보다 많은 유럽 국가의 이름을 검색하라.

SELECT 이름
FROM 국가
WHERE 지역 = '유럽'
  AND gdp/인구 > (SELECT gdp/인구
  				  FROM 국가
                  WHERE 영문 = 'United Kingdom');

 

 

⑭ 인구가 사우디아라비아보다는 많고 캐나다보다는 적은 국가의 이름을 검색하라.

SELECT 이름
FROM 국가
WHERE 인구 > (SELECT 인구
			  FROM 국가
              WHERE 이름 = '사우디아라비아')
  AND 인구 < (SELECT 인구
  			  FROM 국가
              WHERE 이름 = '캐나다');