TIL(2023.08.04)

JAKE·2023년 8월 4일

TIL

목록 보기
18/48
post-thumbnail

🏃‍♂️What I learned

1. Database

1) 필요한 정보를 모으고 중복되는 것을 최소화 하여 통합 + 저장해놓은 것

2) DBMS(DataBase Management System)
: 데이터 베이스 전용 관리 프로그램

데이터 독립, 중복 최소화 및 무결성 보장
보안 및 관리성 향상
** oracle + dbeaver


2. DML(Data Manipulation Language)


: 데이터베이스에서 데이터를 조회하거나 조작하기 위해 사용하는 검색 언어

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) 날짜 조회

  • SYSDATE : 시스템상 현재 시간
SELECT SYSDATE -1, SYSDATE, SYSDATE +1 FROM DUAL;
// DATE도 연산 가능

5) 컬럼 별칭 지정

  • 컬럼명 AS 별칭 : 별칭 띄어쓰기 X, 특수문자 X, ONLY 문자만
  • 컬럼명 AS "별칭" : 별칭 띄어쓰기 O, 특수문자 O, 문자 O
    ** AS 생략 가능

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이 아닌 경우 조회


3. 함수

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;

4. 기타

  1. DBeaver 주석 및 단축키

---한줄 주석
/ 범위 주석 /

-- ctrl + enter : 한줄 실행
-- alt + x : 전체 실행
-- f3 : 편집기 선택
-- alt + ] : 새 sql 편집기
-- ctrl + shift + 위/아래 : 행이동


0개의 댓글