개발자 끄적끄적
형변환, 내장형 함수, decode, case, inline view, top, with 구문 본문
<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 |