TIL

230223 [SQL, HTTP] (단일 행 함수 / 세션&쿠키)

하차모 2023. 2. 23. 17:25

1. SQL

1-1. 그 외 자주 쓰는 함수

  NVL 함수 : NULL값을 원하는 값으로 조회

  문법 : NVL(값 혹은 컬럼, 치환값) -> 자료형은 일치시켜야 함!

SELECT EMPNO
    , ENAME
    , NVL(COMM,0)
    -- , NVL(COMM, '인센티브 없음') 자료형 일치!
FROM EMP;

  NVL2(값 혹은 컬럼, NULL이 아닐 때 값, NULL일 때 치환 값)

-- NVL2(값 혹은 컬럼, NULL이 아닐 때 값, NULL일 때 치환 값)
SELECT COMM
    , NVL(COMM, 0)
    , NVL2(COMM, 1000, 0)
    , NVL2(COMM, '널이 아님', '널임')
    , NVL2(COMM, '널이 아님', 0) -- 둘 다 문자로 들어감
FROM EMP;

  DECODE() 함수 : Java의 If Else

SELECT DEPTNO
    , DECODE(DEPTNO, 10, '인사부')
    , DECODE(DEPTNO, 10, '인사부', '개발부')
    , DECODE(DEPTNO, 10, '인사부', 20, '개발부', '영업부')
FROM EMP;

  CASE문

-- CASE문
SELECT DEPTNO
    , CASE
        WHEN DEPTNO = 10 THEN '인사부'
        WHEN DEPTNO = 20 THEN '개발부'
        ELSE '영업부' END AS 부서명1
    , CASE DEPTNO 
        WHEN 10 THEN '인사부'
        WHEN 20 THEN '개발부'
        ELSE '영업부' END AS 부서명2
FROM EMP;

 

1-2. 단일행 함수, 다중행 함수(그룹함수)

  MAX(), MIN() : 최대, 최소 값을 조회

SELECT MAX(SAL), MIN(SAL)
FROM EMP;

-- 다중행 함수(그룹함수)는 일반적인 컬럼과 같이 조회 불가
SELECT SAL, MAX(SAL)
FROM EMP;

  COUNT() : 컬럼 개수를 세어 줌, NULL은 카운트가 되지 않기 때문에 PK로 COUNT하는 것이 좋다.

SELECT COUNT(EMPNO), COUNT(ENAME), COUNT(COMM)
FROM EMP;

+) 연산에 NULL이 포함되면 결과는 무조건 NULL

SELECT 10 + NULL FROM DUAL; --NULL

다중행 함수 사용 시 NULL값을 꼭 신경써야 한다.

--> NULL값이 포함되어 있는 컬럼의 개수를 세고 싶다면, 아래와 같이 NULL값을 0으로 바꿔준 상태에서 COUNT해 준다.

SELECT COUNT(NVL(COMM, 0)) FROM EMP;

 

1-3. 외래키 (FOREIGN KEY, FK)

  선언 방법 : REFERENCES 참조하는 테이블명 (참조하는 컬럼명)

  외래키는 참조하는 테이블의 PK키만 참조할 수 있다.

-- 게시글의 작성자는 BOARD_MEMBER 테이블의 MEM_ID 컬럼과 일치하는 데이터만 들어갈 수 있음
CREATE TABLE BOARD (
    BOARD_NUM NUMBER PRIMARY KEY
    , TITLE VARCHAR2(100) NOT NULL
    , WRITER VARCHAR2(50) REFERENCES BOARD_MEMBER (MEM_ID)
    , CONTENT VARCHAR2(100)
);

 

 

2. 세션 & 쿠키

request.setAttribute();로 던진 데이터는 단발성으로 저장되지 않기 때문에 필요할 때마다 데이터를 보내야 한다.  따라서 서버와 클라이언트가 통신할 때 한 번 던진 데이터를 오래 가지고 있고 싶을 때 세션(Session)과 쿠키(Cookie)를 쓴다.

서버는 세션에, 클라이언트는 쿠키에 데이터를 저장한다.

세션은 페이지를 닫을 때까지 데이터를 가지고 있으며, 저장 시간을 설정할 수 있다.