1) 필요한 정보를 모으고 중복되는 것을 최소화 하여 통합 + 저장해놓은 것
2) DBMS(DataBase Management System)
: 데이터 베이스 전용 관리 프로그램
데이터 독립, 중복 최소화 및 무결성 보장
보안 및 관리성 향상
** oracle + dbeaver

: 데이터베이스에서 데이터를 조회하거나 조작하기 위해 사용하는 검색 언어
1) SQL(Structured Query Language)
① DQL(Data Query Language)
② DML(Data Manipulation Language)
③ DDL(Data Definition Language)
④ DCL(Data Control Language)
⑤ TCL(Transaction Control Language)
2) SELECT(DQL 혹은 DML) : 조회
작성 순서 : ① SELECT -> ② FROM -> ③ WHERE -> ④ ORDER BY
해석 순서 : ② FROM -> ③ WHERE -> ① SELECT -> ④ ORDER BY
SELECT * FROM EMPLOYEE
// EMPLOYEE 테이블 값 전체 조회
// * = 전체를 의미
3) 연산자
① 산술 연산자(+, -, *, /)
② 비교 연산자(>, <, >=, <=, =, !=, <>)
③ 대입 연산자(:=)
④ 논리 연산자(AND, OR)
4) 날짜 조회
SELECT SYSDATE -1, SYSDATE, SYSDATE +1 FROM DUAL;
// DATE도 연산 가능
5) 컬럼 별칭 지정
7) DISTINCT : 조회시 컬럼에 포함된 중복값을 한번만 표기
SELECT 구문마다 한 번만 가능
8) WHERE(조건절)
WHERE 컬럼명 연산자 값
9) ORDER BY(정렬)
10) LIKE : 비교하려는 값이 특정한 패턴을 만족시키면 조회
[작성법]
WHERE 컬럼명 LIKE '패턴이 적용된 값'
LIKE의 패턴을 나타내는 문자(와일드 카드)
'%' 포함, '_' 글자수
e.g.)
'A%' : A로 시작하는 문자열
'%A' : A로 끝나는 문자열
'%A%' : A를 포함하는 문자열
'A_' : A로 시작하는 두 글자 문자열
____A : A로 끝나는 다섯 글자 문자열
__A__ : 세번째 문자가 A인 다섯 글자 문자열
_____ : 다섯 글자 문자열
// EMPLOYEE 테이블에서 성이 '전'씨인 사원의 사번, 이름 조회
SELECT EMP_ID, EMP_NAME FROM EMPLOYEE WHERE EMP_NAME LIKE '전%';
// EMPLOYEE 테이블에서 전화번호가 010으로 시작하지 않는 사원
SELECT EMP_ID, EMP_NAME, PHONE FROM EMPLOYEE WHERE PHONE NOT LIKE '010%';
// EMPLOWEE 테이블에서 EMAIL의 _앞의 글자가 세글자인 사원의 이름 이메일
SELECT EMP_NAME, EMAIL FROM EMPLOYEE WHERE EMAIL LIKE '___#_%' ESCAPE '#';
11) IN : 비교하려는 값과 목록에 작성된 값 중 일치하는 것이 있으면 조회하는 연산자
WHERE 컬럼명 IN(값1, 값2, 값3 ...)
WHERE 컬럼명 = '값1' OR
컬럼명 = '값2' OR
컬럼명 = '값3' ...
// EMPLOYEE테이블에서 부서코드가 D1, D6, D9인 사원의 사번, 이름, 부서코드
SELECT EMP_ID, EMP_NAME, DEPT_CODE FROM EMPLOYEE
WHERE DEPT_CODE IN('D1', 'D6', 'D9');
// EMPLOYEE테이블에서 부서코드가 D1, D6, D9가 아닌 사원의 사번, 이름, 부서코드
SELECT EMP_ID, EMP_NAME, DEPT_CODE FROM EMPLOYEE
WHERE DEPT_CODE NOT IN('D1', 'D6', 'D9')
OR DEPT_CODE IS NULL;
12) NULL : 컬럼에 값이 없음을 의미
① IS NULL : NULL인 경우 조회
② IS NOT NULL : NULL이 아닌 경우 조회
1) 단일 행 함수
① LENGTH(컬럼명 | 문자열) : 길이 반환
② INSTR(컬럼명 | 문자열, '찾을 문자열' [, 찾기 시작할 위치 [, 순번])
// 문자열을 앞에서부터 검색하여 첫번째 B 위치 조회
SELECT INSTR('AABAACAABBAA', 'B') FROM DUAL;
//문자열을 5번째 문자부터 검색하여 첫번째 B 위치 조회
SELECT INSTR('AABAACAABBAA', 'B', 5) FROM DUAL;
// 문자열을 5번째 문자부터 검색해서 두번째 B의 위치 조회
SELECT INSTR('AABAACAABBAA', 'B', 5, 2) FROM DUAL;
// EMPLOYEE 테이블에서 사원명, 이메일, 이메일 중 '@'의 위치 조회
SELECT EMP_NAME, EMAIL,INSTR(EMAIL, '@') FROM EMPLOYEE;
③ SUBSTR(컬럼명 | '문자열', 잘라내기 시작할 위치, [,잘라낼 길이])
// EMPLOYEE 에서 사원명, 이메일 중 아이디만 조회
SELECT EMP_NAME, EMAIL, SUBSTR(EMAIL, 1, INSTR(EMAIL, '@')-1) FROM EMPLOYEE;
④ TRIM([ [옵션] '문자열' | 컬럼명 FROM] '문자열' | 컬럼명)
// 옵션 : LEADING(앞쪽), TRAILING(뒤쪽), BOTH(양쪽)
SELECT TRIM(' H E L L O ') FROM DUAL;
SELECT TRIM(BOTH '#' FROM '#######%#안녕####^###')FROM DUAL; //다른 글자 있으면 멈춤
SELECT TRIM(BOTH '%' FROM TRIM(BOTH '#' FROM '#######%#안녕####^###' )) FROM DUAL;
//중첩 가능
2) 숫자 관련 함수
① 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 에서 사번이 짝수 인 사원의 사번 이름
SELECT EMP_ID, EMP_NAME FROM EMPLOYEE WHERE MOD(EMP_ID, 2) = 0;
//EMPLOYEE 에서 사번이 짝수 인 사원의 사번 이름
SELECT EMP_ID, EMP_NAME FROM EMPLOYEE WHERE MOD(EMP_ID, 2) = 1;
③ ROUND(숫자 | 컬럼명 [, 소수점 위치]) : 반올림
SELECT ROUND(123.456) FROM DUAL; // 소수점 첫번째에서 반올림
SELECT ROUND(123.456, 1) FROM DUAL; // 소수점 첫번째까지 표현
④ CEIL(숫자 | 컬럼명) : 올림 -- 소수점 위치 못 넣음
⑤ FLOOR(숫자 | 컬럼명) : 내림
SELECT CEIL(123.456345), FLOOR(123.9) FROM DUAL;
⑥ TRUNC(숫자 | 컬럼명 [, 소수점 위치 OR 정수 위치]) : 특정 위치 아래를 버림(첨삭)
SELECT TRUNC(12423.1245424, 2) FROM DUAL; // 소수점 2번째 자리까지 남김
SELECT TRUNC(12423.1245424, -2) FROM DUAL; // 10의 자리 까지 버림
SELECT FLOOR(-123.5), TRUNC(-123.5) FROM DUAL;
3) 날짜 관련 함수
① SYSDATE : 시스템에 현재 시간 반환
SELECT SYSDATE FROM DUAL;
② SYSTIMESTAMP : SYSDATE + MS 추가
SELECT SYSTIMESTAMP FROM DUAL; // TIMESTAMP : 특정 시간을 나타내거나 기록하기 위한 문자열
③ MONTHS_BETWEEN(날짜, 날짜) : 두 날짜의 개월 수 차이 반환
SELECT ROUND(MONTHS_BETWEEN(SYSDATE, '2023-12-22'), 3) "수강기간(개월)"
FROM DUAL;
//EMPLOYEE 테이블에서 사원의 이름, 입사일, 근무한 개월수, 근무 연차
SELECT EMP_NAME, HIRE_DATE, CEIL(MONTHS_BETWEEN(SYSDATE, HIRE_DATE)) "근무한 개월수",
CEIL(MONTHS_BETWEEN(SYSDATE, HIRE_DATE) / 12) || '년차' "근무 연차"
FROM EMPLOYEE;
④ ADD_MONTHS(날짜, 숫자) : 날짜에 숫자만큼의 개월 수를 더함.(음수도 가능)
SELECT ADD_MONTHS(SYSDATE, 4) FROM DUAL;
SELECT ADD_MONTHS(SYSDATE, -1) FROM DUAL;
⑤ LAST_DAT(날짜) : 해당 달의 마지막 날짜를 구함
SELECT LAST_DAY(SYSDATE) FROM DUAL;
// EXTRACT : 년, 월, 일 정보를 추출하여 리턴
// EXTRACT(YEAR FROM 날짜) : 년도만 추출
// EXTRACT(MONTH FROM 날짜) : 월만 추출
// EXTRACT(DAY FROM 날짜) : 일만 추출
// EMPLOYEE 테이블에서 각 사원의 이름, 입사년도, 월, 일 조회
SELECT EMP_NAME,
EXTRACT(YEAR FROM HIRE_DATE)|| '년 ' ||
EXTRACT(MONTH FROM HIRE_DATE) || '월 ' ||
EXTRACT(DAY FROM HIRE_DATE) || '일 ' "입사일"
FROM EMPLOYEE;
---한줄 주석
/ 범위 주석 /
-- ctrl + enter : 한줄 실행
-- alt + x : 전체 실행
-- f3 : 편집기 선택
-- alt + ] : 새 sql 편집기
-- ctrl + shift + 위/아래 : 행이동