DML(SELECT)

김덕근·2023년 1월 9일
2

DB

목록 보기
2/14

테이블
기본키(Primary Key) - 중복되지 않고 행을 구분할수 있는 키
외래키(Foreign Key) == 외부테이블에서 참조하고있는 기본키 (참조키)

Null
Java : 참조값이 없다
DB :값이 없다(데이터가 없다)

컬럼값

SQL(Structured Query Language, 구조적 질의 언어)
원하는 데이터를 찾는 방법이나 절차를 기술하는 것이 아닌 조건을 기술하여 작성

DQL(Data Query Language, 데이터 검색) SELECT == DML
DDL(Data Definition Language, 데이터 정의) CREATE, ALTER, DROP
DML(Data Manipulation Language, 데이터 조작) INSERT, UPDATE, DELETE == CRUD
DCL(Data Control Language, 데이터 제어) GRANT, REVOKE
TCL(Transaction Control Language, 트랜젝션 제어) COMMIT, ROLLBACK

CHARACTER은 문자열
LOB(Long Of Byte)


<컬럼 별칭 지정>
컬럼명 AS 별칭 : 별칭 띄어쓰기 X, 특수문자X, 문자만O
컬럼명 AS "별칭" : 별칭 띄어쓰기 O, 특수문자O, 문자만O
AS는 생략 가능
DUAL(DUmmy tAbLe) 테이블 : 가짜 테이블(임시 조회용 테이블)

SELECT SYSDATE - 1 "하루 전!", SYSDATE AS 현재시간, '일 입니다', SYSDATE + 1 내일
FROM DUAL;


DISTINCT : 조회 시 컬럼에 포함된 중복 값을 한 번만 표기
주의사항 1) DISTINCT 구문은 SELECT 마다 딱 한번씩만 작성 가능
주의사항 2) DISTINCT 구문은 SELECT 제일 앞에 작성되어야 한다.


논리 연산자(AND, OR)

NOT BETWEEN A AND B : A이상 B이하

LIKE : ~처럼, ~같은

비교하려는 값이 특정한 패턴을 만족 시키면 조회하는 연산자
[작성법]
WHERE 컬럼명 LIKE '패턴이 적용된 값'

LIKE의 패턴을 나타내는 문자(와일드 카드)
'%' : 포함
'_' : 글자 수

ESCAPE

EXCAPE문자 뒤에 작성된 _는 일반 문자로 탈출 한다는 뜻
#, ^ 를 많이 씀.

WHERE EMAIL LIKE '___#_%' ESCAPE '#';

IN 연산자

비교하려는 값과 목록에 작성된 값 중
일치하는 것이 있으면 조회하는 연산자

[작성법]
WHERE 컬럼명 IN(값1, 값2, 값3 .....)

WHERE DEPT_CODE NOT IN('D1', 'D6', 'D9')
OR DEPT_CODE IS NOT NULL;

ORDER BY 컬럼명 | 별칭 | 컬럼 순서 [ASC | DESC][NULLS FIRST | LAST]
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
ORDER BY DEPT_CODE, SALARY DESC; // 정렬 중첩 : 대분류 정렬 후 소분류 정렬


연산자 우선순위

  1. 산술연산자 (+ - * /)
  2. 연결연산자 (||)
  3. 비교연산자 (> < >= <= = != <>)
  4. IS NULL / IS NOT NULL, LIKE, IN / NOT IN
  5. BETWEEN AND / NOT BETWEEN AND
  6. NOT(논리연산자)
  7. AND(논리연산자)
  8. OR(논리연산자)

함수 : 컬럼의 값을 읽어서 연산한 결과를 반환

단일 행 함수 : N개의 값을 읽어 N개의 결과를 반환
그룹 함수 : N개의 값을 읽어 1개의 결과를 반환(합계, 평균, 최대, 최소)

LENGTH(컬럼명 | 문자열) : 길이 반환

SELECT EMAIL, LENGTH(EMAIL)
FROM EMPLOYEE;

INSTR(컬럼명 | 문자열, '찾을 문자열' [, 찾기 시작할 위치 [, 순번]])

지정한 위치부터 지정한 순번째로 검색되는 문자의 위치를 반환

SELECT INSTR('AABAACAABBAA', 'B', 5, 2) FROM DUAL;

SUBSTR('문자열' | 컬럼명, 잘라내기 시작할 위치 [, 잘라낼 길이])

컬럼이나 문자열에서 지정한 위치부터 지정된 길이만큼 문자열을 잘라서 반환
잘라낼 길이 생략시 끝까지 잘라냄

SELECT EMP_NAME, SUBSTR(EMAIL, 1, INSTR(EMAIL, '@') - 1)
FROM EMPLOYEE;

TRIM( [[[옵션]'문자열' + 컬럼명 FROM] '문자열' | 컬럼명)

주어진 컬럼이나 문자열의 앞, 뒤 양쪽에 있는 지정된 문자를 제거
양쪽 공백 제거에 많이 사용됨
옵션 : LEADING(앞쪽), TRAILING(뒤쪽), BOTH(양쪽, 기본값)

SELECT TRIM('             HELLO         ') FROM DUAL;
SELECT TRIM(LEADING '#' FROM '#########HELLO############') FROM DUAL;
SELECT TRIM(TRAILING '#' FROM '#########HELLO############') FROM DUAL;
SELECT TRIM(BOTH '#' FROM '#########HELLO############') FROM DUAL;

숫자 관련 함수

ABS(숫자 | 컬럼명) : 절대 값

SELECT ABS(10), ABS(-10) FROM DUAL; 

SELECT '절대값 같은'
FROM DUAL 
WHERE ABS(10) = ABS(-10);

MOD(숫자 | 컬럼명, 숫자 | 컬럼명) : 나머지 값 반환

EMPLOYEE 테이블에서 사원의 월급을 100만으로 나눴을 때 나머지 조회

SELECT EMP_NAME, SALARY, MOD(SALARY, 1000000)
FROM EMPLOYEE;

EMPLOYEE 테이블에서 사번이 짝수인 사원의 사번, 이름 조회
EMPLOYEE 테이블에서 사번이 홀수인 사원의 사번, 이름 조회

SELECT EMP_ID, EMP_NAME 
FROM EMPLOYEE
WHERE MOD (EMP_ID, 2) = 0;

SELECT EMP_ID, EMP_NAME 
FROM EMPLOYEE
WHERE MOD (EMP_ID, 2) <> 0; -- 같지 않다(!= 랑 같음)

ROUND (숫자 | 컬럼명[,소수점 위치]) : 반올림

SELECT ROUND(123.456) FROM DUAL;
소수점 첫번째 자리에서 반올림

SELECT ROUND(123.456, 1) FROM DUAL;
소수점 두 번째 자리에서 반올림
두번째 자리에서 반올림 해서 소수점 한자리까지만 표현

SELECT ROUND(123.456, 0) FROM DUAL;
-- 소수점 첫번째 자리에서 반올림(0 기본값)

SELECT ROUND(123.456, -1) FROM DUAL;
소수점 0번째 자리에서 반올림해서 소수점 -1 자리 표현
== 1의 자리에서 반올림해서 10의 자리부터 표현

CEIL(숫자 | 컬럼명) : 올림

FLOOR(숫자 | 컬럼명) : 내림

-- 둘다 소수점 첫째 자리에서 올림/내림 처리
SELECT CEIL(123.1), FLOOR(123.9) FROM DUAL;

TRUNC(숫자 | 컬럼명 [,위치]) : 특정 위치 아래를 버림(절삭)

SELECT TRUNC(123.456) FROM DUAL; -- 소수점 아래를 버림(기본)
SELECT TRUNC(123.456, 1) FROM DUAL; -- 소수점 첫째자리 아래 버림
SELECT TRUNC(123.456, -1) FROM DUAL; -- 10의 자리 아래 버림

버림, 내림 차이점
SELECT FLOOR(-123.5), TRUNC(-123.5) FROM DUAL;
-124 -123


날짜(DATE) 관련 함수

SYSDATE : 시스템에 현재 시간(년,월,일,시,분,초)을 반환

SELECT SYSDATE FROM DUAL;

SYSTIMESTAMP : SYSDATE + MS 단위 추가

SELECT SYSTIMESTAMP FROM DUAL;
-- TIMESTAMP : 특정 시간을 나타내거나 기록하기 위한 문자열

MONTHS_BETWEEN(날짜, 날짜) : 두 날짜의 개월 수 차이 반환

SELECT ROUND(MONTHS_BETWEEN(SYSDATE, '2023-07-10'), 3) "수강 기간(개월)"
FROM DUAL;

ADD_MONTH(날짜, 숫자) : 날짜에 숫자만큼의 개월수를 더함. (음수도 가능)

SELECT ADD_MONTHS(SYSDATE, 4) FROM DUAL;
SELECT ADD_MONTHS(SYSDATE, -1) FROM DUAL;

LAST DAY(날짜) : 해당달의 마지막 날짜를 구함.

SELECT LAST_DAY(SYSDATE) FROM DUAL;
SELECT LAST_DAY('2023-02-01') FROM DUAL;

EXTRACT : 년, 월, 일 정보를 추출하여 리턴

EXTRACT(YEAR FROM 날짜) : 년도만 추출
EXTRACT(MONTH FROM 날짜) : 월만 추출
EXTRACT(DAY FROM 날짜) : 날만 추출

SELECT EMP_NAME,
EXTRACT(YEAR FROM HIRE_DATE) || '년' ||
EXTRACT(MONTH FROM HIRE_DATE) || '월' ||
EXTRACT(DAY FROM HIRE_DATE) || '일' AS 입사일
FROM EMPLOYEE;


profile
안녕하세요!

0개의 댓글