본문 바로가기

나 취준생/리눅스

리눅스로 SQL SELECT 문 구현하기

320x100

예제 : 이름이 ALLEN인 사원의 이름과 월급 출력하기


grep 'ALLEN' emp.txt | awk '{print $2, $6}'





예제 : 월급이 3000인 사원의 이름과 월급 출력하기


grep 3000 emp.txt | awk '{print $2,$6}'





예제 : 부서번호가 10인 사원들의 이름과 월급과 부서번호를 출력하기



근데 출력 값은 부서 번호가 10이 아닌 사원들도 출력되었다. 



그 이유는 ADASM는 월급에 '10'이 포함되어있고, MARTIN은 입사일에 '10'이 포함되어 있기 때문이다.


그럼 사실 여태까지 했던 다른 예제들도 불안정한 답이었다는 것이다.


이럴 땐 -w를 사용해야한다.


-w는 단어별 검색을 의미한다.


awk '{print $2,$6,$8}' emp.txt | grep -w '10'



comm 같은 다른 행의 영향을 받지 않도록 awk로 먼저 행을 한정짓고, '10'만을 검색하도록 -w 옵션을 주면,


내가 원하는 부서번호가 '10'인 사원만 출력된다.




awk 명령어


지금까지는 awk 명령어를 행을 한정짓는 용도로만 사용했는데,

사실 조건도 함께 걸어서 한 번에 할 수도 있다.



예제 : 직업이 SALESMAN인 사원들의 이름과 직업을 출력하기


awk '$3=="SALESMAN" {print $2,$3}' emp.txt




리눅스 연산자 3가지 정리


1. 산술 연산자 : + , - , * , /

2. 비교 연산자 : >, <, >=, <=, ==, !=

3. 논리 연산자 : &&, ||, !



예제 : 직업이 SALESMAN이 아닌 사원들의 이름과 직업을 출력하기


awk '$3!=toupper("salesman") {print $2,$3}' emp.txt



깨알같은 toupper() 사용



예제 : 직업이 SALESMAN이고, 월급이 1500 이상인 사원들의 이름과 월급 출력하기


awk '$3!=toupper("salesman") && $6>=1500 {print $2,$3,$6}' emp.txt




# Oracle의 substr() 사용하기


예제 : 81년도에 입사한 사원들의 이름과 입사일 출력하기


awk 'substr($5,3,2)=="81" {print $2,$5}' emp.txt


$5 행에 있는 데이터가 1981-12-31 이라면


3번째 자리인 8부터 2자리만 가져온, 81과 일치하면 출력된다.



정규 표현식


^ --> 시작

$ --> 끝


예제 : 이름의 첫 글자가 A로 시작하는 사원들의 이름과 월급을 출력하기


awk '{print $2,$6}' emp.txt | grep -i '^a'




예제 : 이름의 두 번째 철자가 M인 사원들의 이름과 월급 출력하기


awk 'substr($2,2,1)=="M" {print $2,$6}' emp.txt


sort 명령어


data를 특정 컬럼 기준으로 정렬하는 명령어


sort 옵션 파일명

ex) sort -nk 6 emp.txt


--> -nk 6 옵션은 6번째 컬럼을 숫자로 변환해서 기준으로 정렬하겠다는 뜻

-r 옵션은 내림차순



예제 : 이름과 월급을 출력하는데 월급이 높은 사원부터 출력하기


sort -nrk 6 emp.txt | awk '{print $2,$6}'




예제 : 직업이 SALESMAN인 사원들의 이름과 월급과 직업을 출력하는데

월급이 높은 사원부터 출력하기


awk '$3==toupper("salesman") {print $2.$6,$3}' emp.txt | sort -nrk 2


이번에는 awk를 먼저해서 emp.txt에서 직업이 SALESMAN인 사원들의 이름과 월급과 직업을 출력하고

이 출력을 정렬을 하는데, 입력으로 보낸 3개의 컬럼 중에 두 번째 컬럼을 기준으로 정렬을 했다.


예제 : 직업이 SALESMAN이 아닌 사원들의 이름과 월급과 직업을 출력하는데

월급이 낮은 사원부터 출력하기


awk '$3==toupper("salesman") {print $2.$6,$3}' emp.txt | sort -nk 2




예제 : 사원 테이블의 월급의 토탈값을 출력하기


awk '{print $6}' emp.txt | awk '{sum+=$1} END {print sum}'



먼저 월급만 추출해서 그 출력 값을 뽑고, 그 다음 sum += $1(월급)이 실행되면서 월급이 계속 누적된다.

월급은 처음에는 6행이었지만 한 번 출력되고 나서는 첫 번째행이 되었기 때문에 $1이 되었다.


END로 종료시에, sum을 프린트하겠다.


예제 : 직업이 SALESMAN인 사원들의 토탈 월급을 출력하기


awk '$3=="SALESMAN" {print $6}' emp.txt | awk '{sum+=$1} END {print sum}'



예제 : 1981년도에 입사한 사원들의 토탈 월급 출력하기


awk 'substr($5,3,2)=="81" {print $6}' emp.txt | awk '{sum+=$1} END {print sum}'



반응형

'나 취준생 > 리눅스' 카테고리의 다른 글

리눅스 권한 관리 명령어  (0) 2021.01.05
vi 편집기 명령어  (0) 2021.01.05
리눅스로 SQL문 구현하기2  (0) 2020.12.30
리눅스 기본 명령어2  (0) 2020.12.29
리눅스 기본 명령어1  (0) 2020.12.29