테이블
기본키(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 제일 앞에 작성되어야 한다.
NOT BETWEEN A AND B : A이상 B이하
비교하려는 값이 특정한 패턴을 만족 시키면 조회하는 연산자
[작성법]
WHERE 컬럼명 LIKE '패턴이 적용된 값'
LIKE의 패턴을 나타내는 문자(와일드 카드)
'%' : 포함
'_' : 글자 수
EXCAPE문자 뒤에 작성된 _는 일반 문자로 탈출 한다는 뜻
#, ^ 를 많이 씀.
WHERE EMAIL LIKE '___#_%' ESCAPE '#';
비교하려는 값과 목록에 작성된 값 중
일치하는 것이 있으면 조회하는 연산자
[작성법]
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; // 정렬 중첩 : 대분류 정렬 후 소분류 정렬
함수 : 컬럼의 값을 읽어서 연산한 결과를 반환
단일 행 함수 : N개의 값을 읽어 N개의 결과를 반환
그룹 함수 : N개의 값을 읽어 1개의 결과를 반환(합계, 평균, 최대, 최소)
SELECT EMAIL, LENGTH(EMAIL)
FROM EMPLOYEE;
지정한 위치부터 지정한 순번째로 검색되는 문자의 위치를 반환
SELECT INSTR('AABAACAABBAA', 'B', 5, 2) FROM DUAL;
컬럼이나 문자열에서 지정한 위치부터 지정된 길이만큼 문자열을 잘라서 반환
잘라낼 길이 생략시 끝까지 잘라냄
SELECT EMP_NAME, SUBSTR(EMAIL, 1, INSTR(EMAIL, '@') - 1)
FROM EMPLOYEE;
주어진 컬럼이나 문자열의 앞, 뒤 양쪽에 있는 지정된 문자를 제거
양쪽 공백 제거에 많이 사용됨
옵션 : 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;
SELECT ABS(10), ABS(-10) FROM DUAL;
SELECT '절대값 같은'
FROM DUAL
WHERE ABS(10) = ABS(-10);
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; -- 같지 않다(!= 랑 같음)
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의 자리부터 표현
-- 둘다 소수점 첫째 자리에서 올림/내림 처리
SELECT CEIL(123.1), FLOOR(123.9) FROM DUAL;
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
SELECT SYSDATE FROM DUAL;
SELECT SYSTIMESTAMP FROM DUAL;
-- TIMESTAMP : 특정 시간을 나타내거나 기록하기 위한 문자열
SELECT ROUND(MONTHS_BETWEEN(SYSDATE, '2023-07-10'), 3) "수강 기간(개월)"
FROM DUAL;
SELECT ADD_MONTHS(SYSDATE, 4) FROM DUAL;
SELECT ADD_MONTHS(SYSDATE, -1) FROM DUAL;
SELECT LAST_DAY(SYSDATE) FROM DUAL;
SELECT LAST_DAY('2023-02-01') FROM DUAL;
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;