SQL 공부

SQL 독학, 해커랭크(ORACLE) (1~15) DISTINCT, NOT LIKE, 서브쿼리, MOD, LENGTH, ORDERBY, ROWNUMBER

하양 :) 2023. 3. 1. 01:27
반응형
반응형

Adsp 자격증을 급하게 준비하면서 

SQLD 자격증도 접수기간이길래  아무 생각 없이 일단 접수는 해놨었다..

 

이렇게 정신없어질 줄은 몰랐지만... 😅

 

어찌저찌 Adsp는 잘 치고 온 것 같은데

SQLD는 또 어떻게 공부하나 조금은 심란해졌다.

 

수업 복습하고, 코딩마스터스 문제 풀고, Adsp 자격증 같이 준비하려니 토할 뻔 했지만

이제 뭘 집중해야할지 서서히 고민해봐야하는 시기인 것 같아 딱 정해보려 한다.

 

개념강의를 들으면서 앞부분을 조금 훑어보다 보니

이왕 자격증을 공부하는거 스스로도 SQL을 다룰 줄 아는 사람이 되면 좋겠다는 생각이 들었다.

자격증과 실무능력은 사실 별개의 문제니까..

 

그래서 자격증은 자격증이고

추가로 최소 하루에 1문제씩은 꾸준히 풀어보는 것을 목표로 차근차근 진행해보려 한다.

모르는 부분은 구글링을 해서라도 풀어내는 걸로 해보고

이 SQL 이라는 도구와 공부를 싫어하거나, 자책하지 않도록

괜히 무리하지도 말고,

혹시라도 못 지켰을 시에도 심란해하지말고 장기 마라톤이라 생각하고 달려보자!

 

오늘 마침 딱 3월1일이니까! 시작 🤠

 

아직 SQL 기본 구문에 대해서도 하나도 모르긴 하지만

차츰 나아지겠지?

 

나는 내가 듣는 강의 기준으로

ORACLE 로 공부하기로 했다.

 

오라클 기준으로 채점한 풀이-------------------------------------------------------------------------------------------------------

 

 

2023/03/01

1. 

해석 )

CITY 테이블에서 다음 조건에 맞는 모든 컬럼을 가져와라.

population > 100000

+

CountryCode = 'USA'

 

코드 )

SELECT * FROM CITY
WHERE POPULATION > 100000   AND  COUNTRYCODE = 'USA';

 


 

2.

해석 )

CITY 테이블에서 다음 조건에 맞는 NAME을 가져와라.

population > 120000

+

CountryCode = 'USA'

 

 

코드 )

select NAME from CITY
where POPLUATION > 120000 and COUNTRYCODE = 'USA';


3.

해석 )

CITY 테이블에서 모든 열의 모든 행을 가져와라.

 

 

코드 )

select * from CITY;


4.

해석 )

CITY 테이블에서 조건에 맞는 모든 행을 가져와라.

 

 

코드 )

select * from CITY

where ID = 1661 ;

 


5.

해석 )

CITY 테이블에서 조건에 맞는 모든 행을 가져와라.

COUNTRYCODE = 'JPN'

 

 

코드 )

select * from CITY

where COUNTRYCODE = 'JPN';

 


6.

해석 )

CITY 테이블에서 조건에 맞는 모든 name을 가져와라.

COUNTRYCODE = 'JPN'

 

 

코드 )

select NAME from CITY

where COUNTRYCODE = 'JPN';


7. 

 

해석 )

STATION 테이블에서 모든 CITY 와 STATE를 가져와라.

 

 

 

코드 )

select CITY, STATE from STATION;


8. 

해석 )

STATION 테이블에서 모든 CITY 를 가져와라.

ID가 짝수여야하고, 중복행 제거해라.

 

 

코드 1)

select distinct CITY from STATION

where mod(ID,2)=0;

 

코드 2)

select CITY from STATION
where mod(ID,2)=0
group by CITY;


9.

해석 )

STATION 테이블에서 총 CITY 개수에서 distinct CITY의 차(-)를 가져와라.

 

 

코드 )

select count(CITY) - count(distinct CITY) from STATION;

 


10. 

해석 )

STATION 테이블에서 제일 긴 이름의 CITY와 제일 짧은 이름의 CITY에 해당하고,

여러개라면 알파벳으로 정렬했을 때 맨 앞의 것으로 (CITY 이름, 알파벳 글자수)를 가져와라.

 

출력:

1. 제일 짧은 CITY 이름 , 글자수 (글자수 오름차순, CITY 오름차순)

2. 제일 긴 CITY 이름, 글자수 (글자수 내림차순, CITY 오름차순)

 

 

코드 )

select CITY, length(CITY)
from (select * from STATION order by length(CITY), CITY )
where ROWNUM = 1
UNION
select CITY, length(CITY)
from (select * from STATION order by length(CITY) DESC, CITY)
where ROWNUM = 1;

 


 

몰랐던 개념 확실히 하고 가기!

 FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY

이 순서대로 적용되기 때문에

정렬한 뒤 where를 적용시키려면 "서브쿼리"로 정렬을 미리 수행해야 한다.

정렬은 ASC(디폴트, 생략) / DESC(내림차순)

 


11. 

해석 )

STATION 테이블에서 a,e,i,o,u로 시작하는 CITY를 중복없이 가져와라.

 

힌트)

틀려서 영문을 몰랐는데 CITY는 모두 대문자로 이루어져있었다.

파이썬 쓰던 습관이 있어서 그냥 따옴표 구분없이 막 썼었는데

(')홑따옴표 : 문자열을 감싸주는 기호
(")쌍따옴표 : 컬럼명 등을 감싸주는 기호

라고 한다.

쌍따옴표를 쓰니까 오류가 나서 한참 헤맸다........................... 하

 

코드 )

select distinct CITY from STATION
where  lower(CITY) like 'a%'
       or lower(CITY) like 'e%' 
       or lower(CITY) like 'i%' 
       or lower(CITY) like 'o%'
       or lower(CITY) like 'u%';

 


12.

해석 )

STATION 테이블에서 a,e,i,o,u로 끝나는 CITY를 중복없이 가져와라.

 

 

코드 )

select distinct CITY from STATION
where  lower(CITY) like '%a'
       or lower(CITY) like '%e' 
       or lower(CITY) like '%i' 
       or lower(CITY) like '%o'
       or lower(CITY) like '%u';

 


13.

해석 )

STATION 테이블에서 a,e,i,o,u로 시작하면서, 끝나는 CITY를 중복없이 가져와라.

 

 

코드 )

select distinct CITY from (select CITY from STATION

where lower(CITY) like 'a%'
or lower(CITY) like 'e%' 
or lower(CITY) like 'i%' 
or lower(CITY) like 'o%'
or lower(CITY) like 'u%')


where  lower(CITY) like '%a'
       or lower(CITY) like '%e' 
       or lower(CITY) like '%i' 
       or lower(CITY) like '%o'
       or lower(CITY) like '%u';

 

첨언) like로 사용하려니 구문이 너무너무너무 길어진다.

비슷한 유형의 문제가 나온다면 다음엔 대체할 수 있는 다른 조건들을 좀 검색해봐야겠다.


14.

해석 )

STATION 테이블에서 a,e,i,o,u로 시작하지 않는 CITY를 중복없이 가져와라.

 

 

코드 )

select distinct CITY from STATION
where not lower(CITY) like 'a%'
and not lower(CITY) like 'e%' 
and not lower(CITY) like 'i%' 
and not lower(CITY) like 'o%'
and not lower(CITY) like 'u%';

 

not 컬럼 like '제외할 조건'

 


15.

해석 )

STATION 테이블에서 a,e,i,o,u로 끝나지 않는 CITY를 중복없이 가져와라.

 

 

코드 )

select distinct CITY from STATION
where not lower(CITY) like '%a'
and not lower(CITY) like '%e' 
and not lower(CITY) like '%i' 
and not lower(CITY) like '%o'
and not lower(CITY) like '%u';

반응형