Oracle 2일차 : 조회문, NVL, 조건절

SELECT 문

SELECT [DISTINCT] {*, column [alias], …} FROM 테이블명 ORDER BY 컬럼명 [ASC, DESC];
  • distinct : 중복된 값이 있을 경우 한번만 출력 (중복 생략)
  • * : 모든 컬럼
  • 컬럼명 as “별칭” (또는 컬럼명 “별칭” ) : 원하는 별칭으로 컬럼명이 출력됨
  • as는 생략 가능함
  • 특문(공백포함)이 없는 경우는 큰따옴표 안해도 됨

🐣 실습하기

SELECT first_name AS "이름", last_name "성", salary "급여", salary*12 AS "보너스" FROM employees;

--전체 데이타 행의 갯수를 출력
SELECT COUNT(*) FROM employees;
--job_id 를 중복 빼고 한번씩만 출력
SELECT DISTINCT job_id FROM employees; 
--전체 데이타 출력
SELECT * FROM employees; 
--커미션이 널값이 아닌 경우에만 출력되도록
SELECT employee_id, last_name, job_id, commission_pct FROM employees WHERE commission_pct IS NOT NULL;

NVL

  • Null 값인 경우 특정 값으로 처리 시키는 함수
NVL(컬럼명, null인경우 넣을값)

🐣 실습하기

SELECT last_name 이름, salary*12 + NVL(commission_pct, 0) AS 연봉 FROM employees;

연결연산자

SELECT 컬럼명1||컬럼명2 FROM 테이블명;
  • 컬럼명 뿐 아니라 단순 문자열도 넣을 수 있음
SELECT 컬럼명||'문자열' FROM 테이블명;

WHERE 절

  • 관계연산자 : >, >=, <, <=, =, !=(<>, ^=도가능)
  • 논리연산자 : or, and, not
  • LIKE 문자열 조건
    • 모든 문자열 : %
    • 한글자 : _
  • 컬럼명 in(데이타1, 데이타2, …) : 괄호안의 데이타에 해당하는 경우만 가져오기
  • 컬럼명 between 값1 and 값2 : 컬럼값이 값1 부터 값2에 해당하는 경우만 가져오기

🐣 실습하기

--월급이 10000~20000 사이인 데이터 출력
SELECT * FROM employees WHERE salary BETWEEN 10000 AND 20000;
SELECT * FROM employees WHERE salary>=10000 AND salary>=20000;
--salary가 10000에서 20000사이의 값이 아닌 경우에만 데이타 출력
SELECT * FROM employees WHERE salary NOT BETWEEN 10000 AND 20000;

--입사일이 07/01/01 이후인 데이터 출력
SELECT * FROM employees WHERE hire_date>='07/01/01';

--매니저 아이디가 100,122,123인 데이터 출력
SELECT * FROM employees WHERE manager_id IN (100,122,123);
SELECT * FROM employees WHERE manager_id=100 OR manager_id=122 OR manager_id=123;
--Manager_id 가 100, 102,108, 114가 아닌 데이타를 모두 출력하시오
SELECT * FROM employees WHERE manager_id NOT IN (100,102,108,114);

--커미션이 널값이 아닌 데이타의 갯수를 구하라
SELECT COUNT(*) FROM employees WHERE commission_pct IS NOT NULL;
--커미션이 널값인 데이타의 갯수를 구하라
SELECT COUNT(*) FROM employees WHERE commission_pct IS NULL;

--First_name에 a가 포함되어 있는 경우 first_name 과 last_name을 출력
SELECT first_name, last_name FROM employees WHERE first_name LIKE '%a%' OR first_name LIKE '%A%';
SELECT first_name, last_name FROM employees WHERE UPPER(first_name) LIKE '%A%';
SELECT first_name, last_name FROM employees WHERE LOWER(first_name) LIKE '%a%';
-- Lower(컬럼명) : 컬럼값을 모두 소문자로 변환
-- Upper(컬럼명) : 컬럼값을 모두 대문자로 변환
	
--First_name 의 첫글자나 두번째 글자에 a가 있는 경우 first_name만 출력
SELECT first_name FROM employees WHERE lower(first_name) LIKE 'a%' OR LOWER(first_name) LIKE '_a%';

--msg에 언더바(_)가 포함된 테이타를 출력하시오
SELECT * FROM emp WHERE msg LIKE '%$_%' ESCAPE '$';
--$ 뒤의 문자는 와일드카드로 인식하지 않고 하나의 문자로 인식함

--msg에 오름차순으로 데이타를 출력하시오
SELECT * FROM emp ORDER BY msg; --생략시 기본 오름차순
SELECT * FROM emp ORDER BY msg ASC; --오름차순
SELECT * FROM emp ORDER BY msg DESC; --내림차순
SELECT * FROM emp ORDER BY 1 DESC; -- 1번열(num)을 기준으로 내림차순 정렬

--혈액형이 A형인 사람만 출력하되 메세지의 오름차순으로 정렬
SELECT * FROM emp WHERE blood='A' ORDER BY msg;

-- order by 뒤에 컬럼명1, 컬럼명2, ... 로 2차 3차 조건도 계속 줄 수 있음
--날짜의 오름차순 정렬, 같은 날짜인 경우 job_id의 오름차순
SELECT * FROM employees ORDER BY hire_date, job_id;
--날짜의 내림차순 정렬, 같은 날짜인 경우 job_id의 오름차순
SELECT * FROM employees ORDER BY hire_date DESC, job_id;

Categories:

Updated:

Comments