BackEnd/MySQL

[DB]SELECT

Hojung7 2024. 8. 24. 22:17

▶ 주요 용어

 

 

▶ SQL(Structured Query Language)

관계형 데이터베이스에서 데이터를 조회하거나 조작하기 위해 사용하는 표준 검색 언어
원하는 데이터를 찾는 방법이나 절차를 기술하는 것이 아닌 조건을 기술하여 작성

 

▶ 주요 데이터 타입

 

SELECT(조회)

 

- 지정된 테이블에서 원하는 데이터가 존재하는 행을
    선택해서 조회하는 SQL(구조적 질의 언어)
 
  - 작성된 구문에 맞는 행, 열 데이터가 조회됨
  -> 조회 결과 행의 집합 == RESULT SET(중요!!!!!)
 
 - 조회 결과는 0행 이상(조건에 맞는 행이 없을 수 있다!)

 

<작성법>

SELECT 조회하고자 하는 컬럼명 기술

여러 컬럼을 조회하는 경우 컬럼은 쉼표로 구분하고, 마지막 컬럼 다음은 쉼표를 사용하지 않음
모든 컬럼 조회 시 컬럼 명 대신 ‘*’ 기호 사용 가능하며 조회 결과는 기술한 컬럼 명 순으로 표시 됨
FROM 조회 대상 컬럼이 포함된 테이블 명 기술
WHERE 행을 선택하는 조건 기술

여러 개의 제한 조건을 포함할 수 있으며, 각각의 제한 조건은 논리 연산자로 연결
제한 조건을 만족시키는 행들만 Result Set에 포함

 

 

1.  모든 정보를 조회

SELECT EMP_ID, EMP_NAME, SALARY

FROM EMPLOYEE;
또는
SELECT * FROM EMPLOYEE;

 

 

2. 컬럼 값 산술 연산

* 컬럼 값 : 행과 열이 교차되는 한 칸에 작성된 값


  - SELECT문 작성 시 칼럼명에 산술 연산을 작성하면
  조회 결과(RESULT SET)에서 모든 행에 산술 연산이 적용된 결과 값이 조회된다! 

SELECT EMP_NAME, SALARY * 12, (SALARY + (SALARY*BONUS)) * 12
FROM EMPLOYEE;

 

🪄  SYSDATE / CURRENT_DATE, SYSTIMESTAMP / CURRENT

SYSDATE 시스템이 나타내고 있는 현재 시간
CURRENT_DATE 현재 세션(사용자 기반) 시간
SYSTIMESTAMP 시스템이 나타내고 있는 현재 시간
ms 단위 + 지역 포함
CURRENT 현재 세션(사용자 기반) 시간
 ms 단위 + 지역 포함

 

※ DUAL(DUmmy tAbLe)
  - 가짜 테이블 (임시 테이블)

  - 조회하려는 데이터가 실제 테이블에 존재하는 데이터가 아닌 경우에 사용

 

🪄  날짜 데이터 연산하기(+, -만 가능!!!!)
- 날짜 + 1 = 1일 증가

- 날짜 - 1 = 1일 감소
→ 정수 연산은 일 단위로 연산된다!!!!!


ex 1)

현재 시간, 어제 , 내일, 모레 조회

SELECT CURRENT_DATE, 
 CURRENT_DATE -1,
 CURRENT_DATE +1,
 CURRENT_DATE +2
FROM DUAL;

 

#결과

 

ex 2)

현재 시간, 한 시간 후 , 1분 후, 10초 후 조회

SELECT 
	CURRENT_DATE,
	CURRENT_DATE + 1/24,
	CURRENT_DATE + 1/24/60,
	CURRENT_DATE + 1/24/60/60 * 10
	
FROM DUAL;

 

#결과

 

 

🪄  날짜 끼리 연산하기 (-만 가능!!)

 

 - 연산 결과는 일 단위(1 == 1일)


  TO_DATE('날짜', '패턴');
→  '날짜 문자열'을 '패턴' 형식으로 해석하여 DATE 타입으로 변환하는 함수

 

ex 1)

SELECT '2024-08-15', TO_DATE('2024-08-15', 'YYYY-MM-DD') 
FROM DUAL;

 

ex2)  2024년 8월 14일 - 2024년 12월 6일 남은 날짜 구하기

SELECT 
TO_DATE('2024-12-06', 'YYYY-MM-DD') - TO_DATE('2024-08-14', 'YYYY-MM-DD') 
FROM DUAL;

 

ex3) 일정 시간까지 남은 시간 구하기

SELECT 
(TO_DATE('2024-08-14 12:50', 'YYYY-MM-DD HH24:MI') - CURRENT_DATE ) *24*60*60
FROM DUAL;

 

ex4) 모든 사원의 사번, 이름, 입사일, 현재까지 근무 일수, N년차 조회

SELECT EMP_ID, EMP_NAME, HIRE_DATE, 
       CURRENT_DATE -HIRE_DATE, CEIL( (CURRENT_DATE-HIRE_DATE)/365)

FROM EMPLOYEE;

 

*CEIL(숫자) : 소수점 올림 처리

 

#결과

 

3. 컬럼 별칭

- 별칭 지정 방법


1) 컬럼명 AS 별칭   : 문자O, 띄어쓰기 x, 특수문자 x

 

2) 컬럼명 AS "별칭" : 문자 O, 띄어쓰기 O, 특수문자 O 
   
  → AS는 생략가능!!
 
- ORACLE 에서 ""의 의미
  → "" 내부에 작성된 글자 그대로를 인식해라!!!!


     ex)  - : 빼기


   "-" : - 모양의 글자
   
ORACLE에서 문자열은 ''(홑따옴표)

 

SELECT 
	EMP_ID AS 사번, -- 컬럼명 AS 별칭 
	EMP_NAME 이름, 		 -- 컬럼명 별칭(AS 생략)	
	HIRE_DATE AS "입사한 날짜", -- 컬럼명 AS "별칭"
	CURRENT_DATE - HIRE_DATE "@근무 일수@",
	CEIL( (CURRENT_DATE - HIRE_DATE) / 365 ) "N년째 근무중..."
FROM EMPLOYEE;

 

#결과

 

✔️리터럴

임의로 지정한 문자열을 SELECT절에 사용하면 테이블에 존재하는 데이터처럼 활용 가능

 

문자나 날짜 리터럴 ‘ ‘ 기호 사용
* 리터럴은 Result Set의 모든 행에 반복 표시 됨

SELECT EMP_ID,
SALARY,
‘원’ AS 단위
FROM EMPLOYEE;

 

✔️ DISTINCT

컬럼에 포함된 데이터 중 중복 값을 제외하고 한 번씩만 표시하고자 할 때 사용

 

* SELECT절에 1회만 기술 가능

SELECT DISTINCT JOB_CODE
FROM EMPLOYEE;

 

 

 

4. 연결 연산자( || )

 

두 컬럼을 이어서 하나의 컬럼으로 조회할 때 사용

 

ex)

SELECT EMP_ID, EMP_NAME,   -- 200,선동일
       EMP_ID || EMP_NAME  -- 200선동일
FROM EMPLOYEE;

 

#결과

 

SELECT SALARY || '원' AS 급여
FROM EMPLOYEE;

 

#결과

 

'BackEnd > MySQL' 카테고리의 다른 글

[DB] JOIN  (0) 2024.08.25
[DB] GROUP BY, HAVING  (1) 2024.08.25
[DB]Oracle Database의 개요  (0) 2024.08.24
[DB] 함수  (1) 2024.08.24
[DB] ORDER BY절  (0) 2024.08.24