본문 바로가기
국비교육기관/수업

06일차_파이썬_함수 / 오라클 SQL_ORDERBY_논리조건

by 밀키스 2021. 3. 22.

@21.03.22

파이썬_함수(Def)

@함수 (function)

하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 코드의 집합

유지 보수를 용이하게 하기 위해서 사용

중복된 코드 최소화

@Docstring => 해당하는 함수의 설명을 달아주는 방법.

'''  ''' 처럼 싱글 따옴표 3개 사이에 만든 함수의 설명을 달아주면, 주피터 노트북 기준 shift +tab 키를 통해서 설명을 볼 수 있다.

@함수 - 가변 매개변수(*)

함수 호출 시 몇 개의 매개변수가 전달될지 알 수 없다면, 사용자가 직접 매개변수의 개수를 정할 수 있도록 선언쓰  (ex - def 함수명(*매개변수):ㅇㅇㅇ  )
%* -> 애스터리스크, 아스타리카 라고 부름
가변 매개변수는 일반 매개변수보다 무조건 뒤에 위치해야함.
(매개변수1, 매개변수2, ... , 가변 매개변수)  이런식.

튜플로 들어감

@함수 - return

def add_sub(num1, num2):
	return num1+num2, num1-num2
result_add, result_sub = add_sub(10,7)
print(result_add)
print(result_sub)

이런식으로 def 의 경우 2개의 값을 반환할 수 있다. 위 처럼 각 변수에 담을 수도 있고, 그냥 튜플로 반환시킬 수도 있다.

@함수 - 매개변수 기본값 설정

#매개변수의 기본값 설정
def power(n1,power = 2):
    '''n1의 제곱을 구하는 함수'''
    return n1 ** power
print(power(3,3))
print(power(3))

위와 같이 기본적으로 값을 설정해 놓을 수도 있다. 3을 한번 더 넣으면 세제곱을 할테고, 안넣으면 기본인 2가 부여되어 그냥 제곱만 할것. 결과식은279이다.

 

아래는 주피터 노트북이다.

금일 오전 파이썬 수업은 죽는줄 알았다.... 징짜... 항상 수업전날 일하기 전날 일정있는 날 전날은 술좀 자제하자... 으음나ㅝ이ㅓㅏㅜ

 

 

오라클_SQL

 

@LIKE

사진의 설명과 같이 특정 문자가 포함되거나, 시작하거나, 끝나는 행을 찾을 수 있다.

설명처럼 언더바를 통해 문자 글자수 또한 조건으로 걸 수도 있다.

 

@IS NULL

where와 함께 사용. 해당 값이 없는 행을 찾을 수 있도록 도와주는 표현

 

@논리조건

@AND

그림과 같이 조건식을 '추가'할 때에 사용한다.

 

@OR

'AND' 연산자와 다르게 특정한 조건 중 하나만 만족하면 되도록 조건식을 설정한다. 결과는 위의 그림과 같다.

 

@NOT

'NOT' 연산자의 경우 위 그림처럼 사용한다. 사용할 때에는 5일차에 배웠던 '다른비교조건'의 4가지 구문과 함께 사용한다.  (한가지 주의는 'IS NULL'의 경우 NOT이 앞에 붙지 않고 중간에 붙는다.)

 

@우선순위규칙

 

말 그대로 우선순위에 따른 규칙표

예외적으로 위에서 OR 절을 먼저 발동되게 하고 싶다면

select last_name, job_id, salary
from employees
where (job_id = 'SA_REP'
or job_id = 'AD_PRES')
and salary > 15000

와 같이 조건식을 걸어주면 된다. 그러면 내가 원하는데로

'JOB_ID'가 'SA_REP' 혹은 'AD_PRES' 인 사람 중에서 봉급이 15000 보다 많은 사람을 걸러 출력시킬 수 있다.

@ORDER BY

행을 정렬할 때에 사용하는 절

위 사진처럼 SELECT 문의 가장 마지막에 사용하며, 기본값인 ASC(오름차순)대로 정렬된다. 만일 내림차순으로 보고 싶다면

select last_name, job_id, department_id, hire_date
from employees
order by hire_date desc

와 같이 마지막 줄에 달면된다.

%ORDER BY절은 WHERE절과 다르게 맨 마지막에 실행된다. 때문에, Alias 명을 사용할 수 있다.

 

%ORDER BY 다음에 숫자를 써도 발동은 된다.

select last_name, job_id, department_id, hire_date
from employees
order by 3

위 처럼 구문을 작성해도 오류가 나지 않는다. 이유인 즉슨, select를 통해 4개의 column을 불렀는데, 숫자 3은 3번째 열을 의미한다. 즉, department_id를 기준으로 오름차순 정렬된다는 뜻이다.

음.. 일단 사용은 하지 말라고 하신다. 배우는 입장이니까. 알고는 있자

 

@Multiple 정렬

멀티플 정렬, 그니까 ORDER BY절로 2개를 내림차순 정렬하면 일단, department_id를 기준으로 먼저 내림차순 정렬이 되고 해당 정렬 기준으로 그룹화하여 그 안에서 salary를 내림차순 정렬한다.

그니까 뭐.. 30은 30끼리 40은 40끼리 봉급을 내림차순 정렬함.

 

@SQL문제

10. 커미션을 받는 모든 사원들의 이름, 연봉 및 커미션을 출력하시오

- 연봉을 역순으로 정렬하고, 연봉은 ANNSAL로 출력하시오

select last_name, salary*12 as annsal, commission_pct
from employees
where commission_pct is not null
order by ANNSAL desc

간단한 SQL문젱... 지금까지 풀었던 9개 문제는 기록을 못했다. 생각해보니 좀 넣어 놓을걸...

SQL문제 풀이는 확실히 정처기 때와 비교해보면 실습이 더 잘들어오는듯 싶다. 전체적으로 어렵지 않으니 절들이나 표현법들만 잘 기억하고 있다면 절대 어려움을 겪지는 않을듯 싶다.

 

Alias ORDER BY절에 박아 넣을 때.

여기서 하나 주의할 점은 연봉을 "ANNSAL" 처럼 대문자로 나오도록 Alias 했지만, 만일 대문자가 아닌 소문자로 Alias시켜 버리면 에러가 ORDER BY절 부분에서 나버린다. 때문에 < order by "annsal" > 처럼 쌍따옴표를 붙혀서 실행을 해주어야 함.

 

11. 이름의 네번째 글자가 a인 사원의 이름을 조회하시오

select last_name
from employees
where last_name like '___a%'

LIKE를 활용한 문제. ' _ '(Under Bar)를 통해 글자 수를 설정하고 ' % '는 뒤에 뭐가 오든 상관 없음을 나타냄

 

12. 이름에 a 및 e 글자가 있는 사원의 이름을 조회하시오

select last_name
from employees
where last_name like '%a%'
and last_name like '%e%'

11번과 마찬가지로 LIKE를 활용한 문제. and를 통해 조건을 걸어 문제를 풀었다..

음... 대문자까지 고려하면 꽤나 거지 같이 될것 같다마는... 일단 문제는 소문자니까... 무튼? 뭔가 방법이 있지 않을까 싶다.

 

13. 급여가 2500,3500,7000이 아니며 직업이 SA_REP나 ST_CLERK인 사원의 이름과, 급여, 직업을 출력하시오

select last_name, salary, job_id
from employees
where salary not in (2500,3500,7000)
and job_id in ('SA_REP','ST_CLERK')

IN을 많이 활용한 문제... 으으으으음 솔직히 설명은 특별히 필요하지 않아야 하는게 맞지 않을까 싶다. 혹여나 SQL작성하는데 있어 까먹지 않기 위해 활용하는 법 정도는 계속 꾸준히 복기해보자.

 

14. 30번 부서내의 모든 직업들을 유일한 값으로 출력하시오. 90번 부서 또한 포함하고, 직업을 오름차순으로 출력하시오

select distinct job_id, department_id
from employees
where department_id in (30,90)
order by job_id

문제 말 자체가 어려웠던 문제. 유일하다는게 그냥 중복되는 값을 거르라는 뜻.

반응형

댓글