일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- setter
- 이터레이블
- .substring
- getter
- 프로그래머스
- 작성순서
- SQL
- SELECT 절
- DB연결 문제
- system error 113
- 생성자
- mixedcontent
- 자바
- .repeat
- 겟터
- 연산자
- ifelse
- int오류
- 생성자쓰는이유
- 삼항연산자
- Join
- 객체
- 오라클
- 외부접속 차단
- Java
- 제어문
- HAVING
- 상속
- for문
- 칼럼명에 별칭 지정
- Today
- Total
CoDream
SELECT 본문
<SELECT 절>
[문법] SELECT 컬럼, 컬럼,... FROM 테이블명;
- 데이터를 조회할 때 사용
- SELECT를 통해 얻은 결과를 RESULT SET이라고 한다.
- 조회하려는 칼럼은 반드시 FROM 절에 기술한 테이블에 존재해야한다.
-- EMPLOYEE 테이블에서 EMP_ID, EMP_NAME 조회
SELECT EMP_ID, EMP_NAME
FROM EMPLOYEE;
-- EMPLOYEE 테이블에서 사원번호, 사원명, 이메일, 급여조회
SELECT EMP_ID, EMP_NAME, EMAIL,SALARY
FROM EMPLOYEE;
-- EMPLOYEE 테이블에서 전체 사원의 모든 컬럼(*) 정보 조회
SELECT *
FROM EMPLOYEE;
-- 대소문자 구분X
select *
from employee;
<산술연산자>
- SELECT 절에 칼럼명 입력 부분에서 산술 연산을 할 수 있다.
-- 사원명, 월급 조회
SELECT EMP_NAME, SALARY
FROM EMPLOYEE;
-- 사원명, 연봉 조회
SELECT EMP_NAME, SALARY*12
FROM EMPLOYEE;
-- 직원명, 연봉, 보너스, 보너스가 포함된 연봉(급여+ (급여*보너스))*12조회
-- *** 산술연산 중 NULL 값이 존재할 경우, 결과값은 무조건 NULL
SELECT EMP_NAME, SALARY*12, BONUS, (SALARY+(SALARY*BONUS))*12
FROM EMPLOYEE;
-- 직원명, 입사일, 근무일수(오늘날짜-입사일)
-- SYSDATE : 현재 시각
-- FLOOR : 소숫점 아래 절삭
-- 날짜간 연산 가능
SELECT EMP_NAME, HIRE_DATE, FLOOR(SYSDATE-HIRE_DATE)
FROM EMPLOYEE;
<칼럼명에 별칭 지정>
[문법]
칼럼명 AS 별칭
칼럼명 AS "별칭"
칼럼명 별칭
칼럼명 "별칭"
- 별칭 지정시 공백, 특수문자가 포함될 경우 반드시 큰따옴표로 감싸야한다.
- 사용이유? 산술연산 등으로 인해 칼럼명이 지저분해질 경우. 깔끔하게 작성하기 위해서 사용.
-- 직원명, 입사일, 근무일수(오늘날짜-입사일)
-- SYSDATE : 현재 시각
-- 날짜간 연산 가능
SELECT EMP_NAME, HIRE_DATE, SYSDATE-HIRE_DATE AS "근무일수"
FROM EMPLOYEE;
<리터럴>
SELECT 절에 리터럴을 사용하면 테이블에 존재하는 데이터처럼 조회가 가능하다.
리터럴 RESULT SET의 모든 행에 반복적으로 출력된다.
SELECT EMP_NAME, SALARY AS 급여, '단위(원)' AS 급여단위
FROM EMPLOYEE;
<DISTINCT>
칼럼에 포함된 중복값을 한번씩만 표시.
SELECT 절에 한번만 사용가능.
열개 칼럼을 대상으로 하면 모든 칼럼값이 중복되어야 제거한다.
-- 직급코드 조회. 중복제거
SELECT DISTINCT JOB_CODE
FROM EMPLOYEE;
-- 직급코드, 부서코드 조회
-- 오류! 중복제거는 1번만 가능. 결과집합은 사각형형태로 나와야한다.
SELECT DISTINCT JOB_CODE, DISTINCT DEPT_CODE
FROM EMPLOYEE;
-- 직급코드, 부서코드 조회
SELECT DISTINCT JOB_CODE,DEPT_CODE
FROM EMPLOYEE;
<연결 연산자>
여러 컬럼 값을 하나의 컬럼인 것처럼 연결하거나, 칼럼과 리터럴을 연결할 수 있다.
-- 사번, 사원명, 급여 연결해서 조회
-- || 연결연산자
SELECT EMP_ID, EMP_NAME, SALARY || '원' AS "급여"
FROM EMPLOYEE;
SELECT EMP_ID || EMP_NAME ||'의 월급은 '|| SALARY || '원 입니다' AS "사원 정보 및 급여"
FROM EMPLOYEE;
<WHERE 절>
[문법] SELECT 칼럼, 칼럼, ..., 칼럼 FROM 테이블명 WHERE 조건식;
- 조회하고자 하는 테이블에서 해당 조건에 만족하는 결과만을 조회하고자 할 때 사용한다.
- 조건식에는 다양한 연산자들을 사용할 수 있다.
SELECT EMP_ID, EMP_NAME
FROM EMPLOYEE
WHERE EMP_ID = 210;
<비교 연산자>
>, <, >=, <= : 대소 비교
= : 동등 비교
!=, ^=, <> : 같지 않다
-- 부서 코드가 D9와 일치하는 사원들의 모든 컬럼 정보 조회
SELECT *
FROM EMPLOYEE
WHERE DEPT_CODE = 'D9';
-- 부서 코드가 D9가 아닌 사원들의 사번, 사원명, 부서 코드 조회
SELECT EMP_ID, EMP_NAME, DEPT_CODE
FROM EMPLOYEE
WHERE DEPT_CODE != 'D9';
-- 급여가 400만원 이상인 직원들의 직원명, 부서 코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE SALARY >= 4000000;
<논리 연산자>
AND
OR
NOT = 부정
-- 부서 코드가 D6이면서 급여가 300만원 이상인 직원들의 모든컬럼 조회
SELECT *
FROM EMPLOYEE
WHERE DEPT_CODE='D6' AND SALARY >=3000000;
-- 부서코드가 D6 또는 D2에 해당하는 직원의 모든 칼럼 조회
SELECT *
FROM EMPLOYEE
WHERE DEPT_CODE='D6' OR DEPT_CODE='D2';
-- 급여가 350만원 이상 600만원 이하가 아닌 직원의 이름, 부서코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE NOT SALARY BETWEEN 3500000 AND 6000000;
<BETWEEN AND>
[문법] WHERE 비교대상컬럼 BETWEEN 하한값 AND 상한값;
- WHERE 절에서 사용되는 구문으로 범위에 대한 조건을 제시할 때 사용한다.
- 비교대상컬럼 값이 하한값 이상이고, 상한값 이하인 경우 TRUE를 리턴한다.
-- 급여가 350만원 이상 600만원 이하인 직원의 이름, 부서코드, 급여 조회
SELECT EMP_NAME, DEPT_CODE, SALARY
FROM EMPLOYEE
WHERE SALARY BETWEEN 3500000
AND 6000000;
-- 입사일 '90/01/01'~ '01/01/01'인 사원의 모든 칼럼 조회
-- BETWEEN 추가
SELECT *
FROM EMPLOYEE
WHERE HIRE_DATE BETWEEN '90/01/01'
AND '01/01/01';
<LIKE 연산자>
[문법] WHERE 비교대상칼럼 LIKE '특정 패턴';
- 비교하려는 칼럼 값이 지정된 특정 패턴에 만족할 경우 TRUE를 리턴한다.
- 특정 패턴에는 ' % ', ' _ '를 와일드카드로 사용할 수 있다.
- '%' : 0글자 이상
- ex) 비교대상칼럼 LIKE '문자%' => 비교대상칼럼 값 중에 '문자'로 시작하는 모든 행을 조회한다.
- 비교대상칼럼 LIKE '%문자' => 비교대상칼럼 값 중에 '문자'로 끝나는 모든 행을 조회한다.
- 비교대상칼럼 LIKE '%문자%' => 비교대상칼럼 값 중에 '문자'가 포함되어 있는 모든 행을 조회한다.
- '_' : 1글자
- ex) 비교대상칼럼 LIKE '_문자' => 비교대상칼럼 값 중에 '문자'앞에 무조건 한 글자가 오는 모든 행을 조회한다.
- 비교대상칼럼 LIKE '__문자' => 비교대상칼럼 값 중에 '문자'앞에 무조건 두 글자가 오는 모든 행을 조회한다.
-- 성이 전씨인 사원의 모든 칼럼 조회
SELECT *
FROM EMPLOYEE
WHERE EMP_NAME LIKE '전%';
-- 이름 중 '하'가 포함된 사원의 모든 칼럼 조회
SELECT *
FROM EMPLOYEE
WHERE EMP_NAME LIKE '%하%';
-- 전화번호 4번째 자리가 9로 시작하는 사원의 사원명, 전화번호 조회
-- _3개, 뒷쪽 %(아무거나)
SELECT EMP_NAME, PHONE
FROM EMPLOYEE
WHERE PHONE LIKE '___9%';
<IS NULL / IS NOT NULL>
[문법] WHERE 비교대상칼럼 IS [NOT] NULL;
- 칼럼 값에 NULL이 있을 경우 NULL 값 비교에 사용된다.
- IS NULL : 비교대상칼럼 값이 NULL인 경우 TRUE를 리턴한다.
- IS NOT NULL : 비교대상칼럼 값이 NULL이 아닌 경우 TRUE 리턴한다.
-- 보너스를 받지 않는 사원의 모든 칼럼 조회
SELECT *
FROM EMPLOYEE
WHERE BONUS IS NULL;
-- 부서가 없 사원의 모든 칼럼 조회
SELECT *
FROM EMPLOYEE
WHERE DEPT_CODE IS NULL;
-- 부서가 있고, 보너스를 받지 않는 사원의 모든 칼럼 조회
SELECT *
FROM EMPLOYEE
WHERE DEPT_CODE IS NOT NULL
AND BONUS IS NULL;
<IN>
[문법] WHERE 비교대상칼럼 IN('값', '값', '값', ..., '값');
- 값 목록 중에 일치하는 값이 있을 때 TRUE 리턴한다.
-- 해외영업부에 대한 모든 컬럼 조회
SELECT *
FROM EMPLOYEE
WHERE DEPT_CODE IN ('D5','D6','D7');
-- 직급코드가 J2,J3,J4에 해당하는 모든 사원 조회
SELECT *
FROM EMPLOYEE
WHERE JOB_CODE IN ('J2','J3','J4');
<ORDER BY> 오름차순 내림차순
[문법]
SELECT 칼럼, 칼럼, ..., 칼럼
FROM 테이블명
WHERE 조건식
ORDER BY 정렬시키고자 하는 칼럼명|별칭|칼럼 순번 [ASC|DESC] [NULLS FIRST | NULLS LAST];
- SELECT 문에서 가장 마지막에 기입하는 구문으로 실행 또한 가장 마지막에 진행된다.
- ASC : 오름차순으로 정렬한다. (ASC 또는 DESC 생략 시 기본값)
- DESC : 내림차순으로 정렬한다.
- NULLS FIRST : 정렬하고자 하는 칼럼 값에 NULL이 있는 경우 해당 데이터 값을 맨 앞으로 정렬한다.
- NULLS LAST : 정렬하고자 하는 칼럼 값에 NULL이 있는 경우 해당 데이터 값을 맨 뒤로 정렬한다.
-- 급여 오름차순
-- ASD(기본값=생략가능)
SELECT *
FROM EMPLOYEE
ORDER BY SALARY ;
-- 급여 내림차순
SELECT *
FROM EMPLOYEE
ORDER BY SALARY DESC;
--보너스 기준 정렬/ NULL값은 아래로
SELECT EMP_NAME, BONUS
FROM EMPLOYEE
ORDER BY BONUS DESC NULLS LAST;
'[DB]Oracle SQL > Oracle SQL 실습' 카테고리의 다른 글
마카롱가게 코드 (0) | 2024.03.26 |
---|---|
[SQL] 치킨집 주문받기, 주문조회, 주문수정, 주문취소 코드 (0) | 2024.03.26 |
24.03.18 Oracle SQL 실습 (0) | 2024.03.18 |