Software/SQL

SQL 기초 2 - 김동원쌤- 국비지원무료교육

makeany 2022. 2. 6. 20:45
스마트인재개발원 홈페이지 주소는? 바로 여기!!!
 

스마트인재개발원

4차산업혁명시대를 선도하는 빅데이터, 인공지능, 사물인터넷 전문 '0원' 취업연계교육기관

www.smhrd.or.kr


 

오라클  SQL Ver. 9 명령어 수업

 수업일자: 20211124  수요일 오후

 

이 둘의 department_id 의미는 다르다. employees 테이블의 department_id는 사원이 근무하는 부서 번호를 말한다. 

모든 컬럼의 중복 제거. distinct.
null의 값은 아직 부서 배정을 받지 못한 사람. 그래서 12에서 하나를 뺀 11개 부서에 배정됨.

 

 

똑같은 것끼리 모으는 현상, 그룹화를 한다음 한개만 결과를 보여준다. 

첫번째 컬럼에서 그룹화 한 후, 두번째 컬럼에서 중복 제거. 

SELECT 기본문법

SELECT distinct * column alias from tabel_name -> 보고자 하는 데이터가 소유하고 있는 컬럼 -> 명시 컬럼 결과 추력

 

SELECT DISTINCT  그룹화를 먼저하고 중복제거 하기 때문에 성능에 좋지 않다.

* -> 모든 컬럼을 볼 때 사용.

특정 컬럼을 보고자 할 때는 컬럼 이름을 적고, 두 개 이상이면 콤마로 구분.

alias 열머리글(대문자). 컬럼 뒤에 위치한다. AS, 블랭크( 단일 문장, 대문자), " " 복수문장, 쓰여진 형식 그대로(대소문자 구분)



@ 복습문제

우리회사에 근무하는 사원의 이름과 연봉을 구하시오. 단 이름은 Name으로 연봉은 ANNSAL로 출력하시오.

명령어: select last_name "Name", salary*12 as ANNSAL from employees;

 

 


91페이지 2장

데이터 제한 및 정렬

where 을 이용한 조건. 정렬 방법.

항상 from 다음에 위치한다. 순서를 잘 기억해라. where을 조건절이라고 한다. 행을 제한하는 조건절.

실행순서는 from -> where -> select 순서. 순서 중요하다.

한마디로 where은 조건식을 나열해야 한다. 

이런 식으로 되어 있다. 이거 무조건 외워라.

조건식 =>컬럼 연산자 값 으로 되어 있다. 

107개의 department_id 중에 90으로 되어 있는 것을 찾는다.

값 사용시 문자/ 날짜 값인 경우에 반드시 작은 따옴표로 리터럴문자값이라는 것을 알려줘라.

'9' 라고 하면 9는 숫자가 아니라 문자다.

3번째 조건은 값을 사용시 테이블에 저장된 데이터 형식 그대로 사용해라. 아스키코드 값대로.

이렇게 나왔다고 '어! 데이터가 없네' 라고 생각하면 큰일난다. 한번더 점검해봐야 한다. 혹시 형식에 맞지 않게 쓰진 않았는지 체크해라.

@ 단일비교연산자

<> 이것을 != 으로도 사용하는데 이게 좀더 성능이 낫다.

@ 연습문제

왜 에러가 났냐면, 알리아스 명은 테이블 컬럼명이 아니기 때문이다. where에는 알리아스명을 사용할 수 없다.

실행은 되지만 도대체 무슨조건으로 last_name이 출력되었는지 모른다. 그래서 select 절에 where절의 조건과 일치하는 컬럼명도 적어줘라.


다음 비교 연산자. 엄청 자주 사용되고 있는 연산자다. 물론 시험에서도.

일부값을 근거로 검색할 때 like.

널값을 찾을 때 is null.


명령문 다음에는 컬럼 이름과 테이블 이름이 온다. 무조건. 

between A and B 에서 A는 하한값 B는 상한값. AB는 숫자값. 숫자나 날짜값에만 사용된다.

2020년 04월 01일 이렇게 쓴다. 우리나라는. to-char, to-date 를 이용하여 확인한다.

in(복수연산자)으로 똑같은 값 여러개를 동시에 찾을 수 있다.

명령어를 치기전에 꼭 결과값을 생각한 후에 엔터 쳐라. 데이터를 찬찬히 쳐다보면 깊게 해석할 수 있다.

 

전체가 아닌 일부값만 알고 있을때 like를 사용.

 between은 사잇값, in 같은값 여러개, like는 일부값 찾을 때.

S%는 S로 시작하는 거 다 찾아라. %S는 S로 끝나는 것. %S% S가 포함되는 것.

_하나는 문자하나를 의미한다.

 

 

만약 manager_id = null 인데 이건 값이 있어야지만 비교를 할 수 있는데 연산 수행이 안된다. 

AND 다음에는 조건식이 온다. AND는 중에서, 이면서 / OR는 거나로 해석된다. 

아스키코드 값으로 정렬된다. null=0 이다. 그래서 맨먼저 null 값 출력.

order by 절 뒤에는 어떤것도 올 수 없다. 마지막에 쓰고 마지막에 실행된다. 오름차순이 기본 셋팅. 

select list 절이 먼저 실행되고 나서 마지막에 order by절이 실행되기 때문에 알리아스를 쓸 수 있는 거다.

3번째 컬럼을 기준으로 정렬해라.

대문자 ANNSAL 컬럼이 없기 때문에 에러다.

이렇게 써야 한다. 출력이 되는 컬럼을 기준으로 정렬이 되는 구나. 이게 정답.

그룹화 후 그룹내에서 정렬처리.(멀티플 정렬 개념)

끝났다.