모든 일상

1일차 본문

코딩 공부/SQL

1일차

통통푸린 2021. 4. 27. 23:10
728x90
반응형

SQL
Oracle developer

노란색으로 표시된 window 64 - bit 버전을 다운받습니다.
다운받은 파일의 압축을 풀고 표시된 실행프로그램을 실행
실행된 프로그램의 모습
EMP 테이블을 만들어 데이터들을 저장하고 테이블 정보를 확인

SELECT 절
- 컬럼명, 컬럼명……..
- 모든컬럼 : * (전체의 의미)
- 수식 : DB에 없는 자료를 생성할 수 있다.
- 별칭 : AS 별칭명 => AS 생략가능 
- 함수
- 서브쿼리
- || : 결합 연산자

SELECT를 이용하여 검색해본 예제

--모든컬럼을 다 확인하기
SELECT *
FROM EMP;

EMP에 있는 모든 데이터들을 검색한 결과입니다.

--LAST NAME과 SALARY만 확인
SELECT LAST_NAME, SALARY 
FROM EMP;

마지막 이름과 급여만을 검색한 결과

--SALARY 정보를 계산해서 확인 (SALARY*2의 컬럼명이 없으니 수식 그대로 컬럼명이 된다.)
SELECT LAST_NAME, SALARY, SALARY*2
FROM EMP;

표시된 부분처럼 컬럼명을 설정하지 않아서 수식 그대로 표시되는 모습

--AS의 용도(SALARY*2의 컬럼명이 BONUS로 표현이 된다.)
SELECT LAST_NAME, SALARY, SALARY*2
AS BONUS
FROM EMP;

표시된 부분을 보면 위의 소스 결과와 다른 컬럼명을 볼 수 있다.

--컬럼의 별칭에 공백이 포함될 경우 "별칭명"으로 작성
SELECT LAST_NAME, SALARY, SALARY*2
AS "YEAR BONUS"
FROM EMP;

문자열로 컬럼명을 설정한 모습

" "를 이용하여 문자열을 입력한 모습을 볼 수 있는데 여기서 " "가 없게되면 공백이 생기지 않고 붙어서 컬럼명이 생성이 되기 때문에 "문자열"을 통해서 공백이 포함된 원하는 문자열로 컬럼명을 설정해 줄 수 있다.

-- 첫 이름과 마지막 이름을 결합 연산자를 이용한 컬럼이름을 NAME으로 설정
SELECT FIRST_NAME || LAST_NAME
AS NAME
FROM EMP;

 

|| : 결합 연산자로 앞과 뒤를 합친 풀네임이 검색이 되는 것을 확인 할 수 있다. 

--작은 따옴표를 이용해 성과 이름 사이에 공백을 추가함
SELECT FIRST_NAME || ' ' ||LAST_NAME
AS NAME
FROM EMP;

위의 소스 결과와 다른 점은 ' '(작은따옴표)와 ||(결합 연산자)를 이용하여 first_name과 last_name사이 공백을 넣어진다.

검색 결과를 정렬

ORDER BY 컬럼명 옵션, 컬럼명 옵션 ...... 이런 형태를 통해 정렬을 할 수 있다.

옵션 - 오른차순 : ASC -> defalt값이므로 생략이 가능하다.

       - 내리차순 : DESC

결과를 정렬해보는 예제

--급여를 기준으로 정렬
SELECT LAST_NAME, SALARY, HIRE_DATE
FROM EMP
ORDER BY SALARY DESC;

 

급여 데이터가 내림차순으로 정렬된 모습

--급여는 내림차순, 입사일은 오름차순으로 두 가지 옵션을 지정
SELECT LAST_NAME, SALARY, HIRE_DATE
FROM EMP
ORDER BY SALARY DESC, HIRE_DATE ASC;

이전의 소스에서 옵션이 하나 더 추가되어 같은 급여를 가진 사람은 입사일 기준으로 오름차순하여 정렬된 모습

--SELECT 절에 없는 컬럼으로도 정렬이 가능하다.
SELECT LAST_NAME, SALARY, HIRE_DATE
FROM EMP
ORDER BY DEPARTMENT_ID

검색한 결과 컬럼명이 없지만 EMP테이블 안에 있는 다른 컬럼명으로 정렬 가능한 모습

--ORDER BY절에서 컬럼명대신에 인덱스를 사용
SELECT LAST_NAME, SALARY, HIRE_DATE
FROM EMP
ORDER BY 2 DESC;

위의 소스처럼 컬럼명을 입력하는것이 아닌 인덱스를 이용하여 정렬한 모습

NULL 값 
-> 아직 입력되지 않은 값
-> NULL 값인 컬럼이 산술, 논리식에 포함되면 결과도 NULL 로 리턴

총급여 = 급여 + (급여 * 판매수당비율 = 판매수당)

--총급여를 계산
SELECT LAST_NAME, SALARY+(SALARY * COMMISSION_PCT)
AS TOTAL_SALARY
FROM EMP;

총 급여계산 결과 수식 중 판매수당 비율이 null값인 데이터들로 인해 null값으로 표현되는 총급여의 모습

--NVL(컬럼명, NULL일 경우 주는 값)의 함수를 사용하여 총급여 계산
SELECT LAST_NAME, SALARY+(SALARY * NVL(COMMISSION_PCT,0))
AS TOTAL_SALARY
FROM EMP;

NVL함수를 이용하여 판매수당 비율이 NULL인 값을 0으로 표현하여 총 급여가 NULL값이 아니게 되는 모습

--DISTINCT를 이용해 중복을 하나만 표현
SELECT DISTINCT DEPARTMENT_ID
FROM EMP
ORDER BY 1;

 

많은 사람들이 다른 여러가지 부서 ID를 가지는데 그 데이터들을 중복되지 않고 표현하는 모습을 볼 수 있습니다.

조건 검색 
- 숫자, 문자, 날짜
- WHERE 조건식 논리연산자 조건식 논리연산자 조건식 ................
조건식 : 좌항 비교연산자 우항 => T OR F 의 결과
조건식 : 컬럼명 비교연산자 값 또는 수식

숫자 조건 검색
- 숫자 : 서식, 표시형식 빼고 숫자만 

--만달러 이상 급여를 받는 사람을 오름차순 정렬 검색
SELECT LAST_NAME, SALARY
FROM EMP
WHERE SALARY >=10000
ORDER BY 2;

급여가 산술연산자로 인해서 10000이상의 급여를 받는 사람들의 데이터만 검색되는 모습

문자 조건 검색
- '문자 or 문자열' : 작은 따옴표를 이용해서 문자, 문자열을 감싼다.
- '문자' : 작은 따옴표안의 문자는 대 소문자를 구분한다.

--이름이 Chen인사람의 월급을 검색 (chen이라고 하면 검색결과가 다름)
SELECT SALARY, HIRE_DATE
FROM EMP
WHERE LAST_NAME = 'Chen';

마지막 이름 컬럼데이터와 Chen이라는 문자열이 같은 데이터의 월급을 검색하는 모습 문자열이므로 대 소문자가 바뀌면 결과가 바뀐다.

날짜 조건 검색
- '2020-10-10' : 이렇게 사용해도 가능하나 안먹히는 경우가 발생 한다.
- TO_DATE( '문자', '날짜패턴') 
   '2020-10-10' => TO_DATE('2020-10-10', 'YYYY-MM-DD')

--2005년 이전에 입사한 사원의 정보
SELECT LAST_NAME, HIRE_DATE
FROM EMP
WHERE HIRE_DATE < TO_DATE('2005-01-01', 'YYYY-MM-DD');

2005년 이전에 입사한 사람들의 데이터를 검색한 모습, T0_DATE함수를 이용해 년도를 오류없이 검색

- 비교 연산자 : >, < , >=, <=, =, <>(같지않다-요즘에는 !=도 가능은 하다.)

기타 연산자(연산자 위치에 들어감)
- BETWEEN ... AND ..
- IN
- LIKE
- IS 

 

BETWEEN ...AND...

- 범위 검색
- 숫자, 문자, 날짜 범위 가능
- 값1과 값2 모두 포함된다.
- 값1이 최소값 값2가 최대값이 와야한다.

--급여가 10000~15000사이 사원의 정보
SELECT LAST_NAME, SALARY
FROM EMP
WHERE SALARY BETWEEN 10000 AND 15000;

BETWEEN을 이용하여 10000과 15000사이의 급여를 받는 사람을 검색, AND를 이용하여 여러가지 조건을 비교하는 것 보다 가독성이 우수하다.

IN (값1, 값2, .........)
- 목록에 있으면 

--부서번호가 10 또는 30 부서에 근무하는 사원의 이름과 월급, 부서번호
SELECT LAST_NAME, SALARY, DEPARTMENT_ID
FROM EMP
WHERE DEPARTMENT_ID IN(10,30);

LIKE
- 패턴 검색 연산자
- 문자 자료에만 사용이 가능하다.
% : 여러 문자를 모르는 경우
_(언더바) :  한 문자를 모르는 경우

--이름중에 C로시작하는 사람을 검색
SELECT LAST_NAME
FROM EMP
WHERE LAST_NAME LIKE 'C%';

--이름이 4글자인 사람을 검색
SELECT LAST_NAME
FROM EMP
WHERE LAST_NAME LIKE '____';

--이메일 중에 S가 포함되어있는 사람
SELECT *
FROM EMP
WHERE EMAIL LIKE '%S%';

IS 

-- 판매수당비율이 NULL인 값을 검색
SELECT *
FROM EMP
WHERE COMMISSION_PCT IS NULL;

 

728x90
반응형

'코딩 공부 > SQL' 카테고리의 다른 글

SQL JOIN 예제문제  (0) 2021.04.30
3일차 예제문제  (0) 2021.04.30
2일차 예제문제  (0) 2021.04.30
1일차 예제문제  (0) 2021.04.28
2일차  (0) 2021.04.28