개발자 끄적끄적

형변환, 내장형 함수, decode, case, inline view, top, with 구문 본문

MySQL

형변환, 내장형 함수, decode, case, inline view, top, with 구문

햏치 2023. 3. 8. 00:30

<SELECT 문의 실행 순서>
FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY

SELECT ename
FROM emp
WHERE empno=10
GROUP BY ename 
HAVING count(*) >= 1
ORDER BY ename;


<형변환>
1. 명시적(Explicit) 형변환
 - 형변환 함수를 사용해서 데이터 타입을 일치
   1) TO_NUMBER(문자열) : 문자열을 숫자로 변환
   2) TO_CHAR(숫자 혹은 날짜, [FORMAT]) : 숫자 혹은 날짜를 지정된 FORMAT의 문자로 변환한다
   3) TO_DATE(문자열, FORMAT) : 문자열을 지정된 FORMAT의 날짜형으로 변환한다

2. 암시적(Implicit) 형변환
 - 개발자가 형변환을 하지 않은 경우 데이터베이스 관리 시스템이 자동으로 형변환하는 것을 의미


<내장형 함수(BUILT - IN FUNCTION)
 1. 문자열 함수
 2. 날짜형 함수
 3. 숫자형 함수
  - CEIL/CEILING(숫자) : 숫자보다 크거나 같은 최소의 정수
  - FLOOR(숫자) : 숫자보다 작거나 같은 최대의 정수
  - ROUND(숫자, m) 
    - 소수점 m자리에서 반올림한다
    - m의 기본값(Default Value)는 0이다
  - TRUNC(숫자, m)
    - 소수점 m 자리에서 절삭한다
    - m의 기본값(Default Value)은 0이다



<DECODE 와 CASE문>
 1. DECODE : IF 문을 구현할 수 있으며 특정 조건이 참이면 A, 거짓이면 B로 응답한다
  - DECODE(EMPNO, 1000, 'TRUE', 'FALSE') //EMPNO - 칼럼값 
  - 비교문으로 EMPNO가 1000이면 TRUE를 응답하고 같지 않으면 FALSE를 응답한다

 2. CASE문
  - 조건을 WHEN 구에 사용하며 해당 조건이 참이면 THEN이 실행되고 거짓이면 ELSE구가 실행된다



<인라인뷰(Inline view)>
- 인라인뷰는 SELECT 문에서 FROM절에 사용되는 서브쿼리(SUB QUERY)를 의미한다  
- SELECT * FROM //Main Query
  (SELECT * FROM EMP) a; //Sub Query(Inline View)



<SQL Server의 TOP 구문과 MySQL의 limit 구문>
- ORACLE은 ROWNUM을 사용하지만, SQL SERVER는 TOP문을 사용하고 MYSQL은 LIMIT 구를 사용한다
  즉, 10명만 인출(FETCH)하고자 할 때에는
  
  1. SQL SERVER
     SELECT TOP(10) FROM EMP;

  2. MYSQL
     SELECT * FROM EMP LIMIT 10;



<특정 행의 리스트 조회(웹 게시판 형태)>
  SELECT *
  FROM(SELECT ROWNUM list, ENAME FROM EMP)
  WHERE list BETWEEN 5 AND 10;
- ROWNUM과 BETWEEN구를 사용해서 웹 페이지 조회를 구현할 수 있다



<WITH 구문>
- SUB QUERY를 사용해서 임시 테이블이나 뷰처럼 사용할 수 있는 구문
- 서브쿼리 블록에 별칭을 지정할 수 있다
- 옵티마이저는 SQ을 인라인 뷰나 임시 테이블로 판단한다

ex) SUB QUERY를 사용해서 임시테이블을 만든다
WITH viewData AS
  (SELECT * FROM EMP 
    UNION ALL
   SELECT * FROM EMP)
 SELECT * FROM viewData WHERE EMPNO=1000;


ex) EMP 테이블에서 WITH구문을 사용해서 부서번호(DEPTNO)가 30인 것의 임시 테이블을 만들고 조회하시오
 WITH W_EMP AS
  (SELECT * FROM EMP WHERE DEPTNO=30)
  SELECT* FROM w_EMP;

'MySQL' 카테고리의 다른 글

join, intersect, connect by, main query, sub query  (0) 2023.03.08
loop, while, cursor  (0) 2023.03.08
constraint  (0) 2023.03.08