일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 대구삼겹살
- 조건문
- 수성구데이트
- 대구맛집
- oracle
- 범어동맛집
- 대구카페
- 수성못맛집
- 압구정데이트
- 수성구맛집
- 별찍기
- 정렬
- programmers
- 프로그래머스
- BFS
- 안지랑카페
- 수성못삼겹살
- 대명동맛집
- 서울맛집
- 오라클
- 백준
- 브루트 포스
- 큐
- 들안길삼겹살
- 반복문
- C#
- 앞산카페
- 대구데이트
- 대구고깃집
- SQL
- Today
- Total
모든 일상
1일차 본문
SQL
Oracle developer




SELECT 절
- 컬럼명, 컬럼명……..
- 모든컬럼 : * (전체의 의미)
- 수식 : DB에 없는 자료를 생성할 수 있다.
- 별칭 : AS 별칭명 => AS 생략가능
- 함수
- 서브쿼리
- || : 결합 연산자
SELECT를 이용하여 검색해본 예제
--모든컬럼을 다 확인하기
SELECT *
FROM 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

--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;

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

--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;
