[오라클]/SELECT

select

broship 2020. 12. 26. 13:58

- 별명 사용 방법

SELECT first_name "사원 이름", salary "월 급여"
FROM employees;
SELECT first_name "사원이름", salary "12월급여"
FROM employees;
SELECT first_name "사원이름", salary 월급여12
FROM employees;

쌍따옴표 사용하면 별명에 공백, 숫자포함 가능(sql에서 유일하게 쌍따옴표 사용 가능함)

 

 

- varchar2, char

varchar2: 가변길이 문자열, 메모리는 절약, 상대적으로 속도는 느리다

char: 고정길이 문자열, 메모리는 낭비될수 있으나 상대적으로 속도는 빠르다

추후에 char(5), varchar2(5) 로 둘다 babo 집어넣으면 babo^, babo 라고해서 두개 비교하면 다르다고 나옴
이 두개 비교할려면 반드시 trim()으로 해서 공백을 제거해줘야됨

 

- 숫자 연산

select first_name 이름, salary 급여, salary*12 연봉
from employees;

- 결합 연산

SELECT first_name||' '||last_name||'의 급여는 '||salary||'달러이고 연봉은 '|| salary*12||'달러입니다' "개인별 정보"
FROM employees;

 

- where: select에서의 조건문

SELECT first_name 이름, salary 급여, salary*12 연봉
FROM employees
WHERE salary*12>=170000;

 

- and, or, between, in

--or
SELECT first_name 이름, employee_id 아이디, department_id 부서번호
FROM employees
WHERE employee_id=90 OR employee_id>=120;

--in
SELECT first_name 이름, department_id
FROM employees
WHERE department_id IN (90, 50, 30);
--WHERE department_id = 90 OR department_id=50 OR department_id=30;

--and
SELECT first_name 이름, hire_date 입사일
FROM employees
WHERE '03/01/01'<=hire_date AND hire_date<='03/12/31';

--between
SELECT first_name 이름, hire_date 입사일
FROM employees
WHERE hire_date BETWEEN '03/01/01' AND '03/12/31';

--and,or 둘중에 and가 먼저 계산됨
SELECT first_name 이름, employee_id 아이디,salary 급여, department_id 부서번호
FROM employees
WHERE (employee_id>=120 OR department_id=90) AND salary<=11000;
--and가 먼저 계산됨, ()없으면 급여 11000이상인 사람도 나옴

 

- distinct: 중복제거

SELECT DISTINCT department_id 부서번호
FROM employees;

SELECT job_id FROM employees;
SELECT DISTINCT job_id FROM employees;
SELECT DISTINCT manager_id FROM employees;
--이렇게 하면 두개 다 중복되는 것만 제거됨
SELECT DISTINCT manager_id, job_id FROM employees;

 

- like:

--sql: all: % 한글자: _
--이름이 A인사람
SELECT first_name 이름 FROM employees WHERE first_name='A';
--A로 시작하는 사람
SELECT first_name 이름 FROM employees WHERE first_name LIKE 'A%';
--n 포함된 사람
SELECT first_name 이름 FROM employees WHERE first_name LIKE '%n%';
--A로 끝나는 사람
SELECT first_name 이름 FROM employees WHERE first_name LIKE '%A';
--입사월이 10월인 사람 구하기
SELECT first_name 이름, hire_date 입사일
FROM employees
WHERE hire_date LIKE '%/10/%';

SELECT first_name 이름, hire_date 입사일
FROM employees
WHERE hire_date LIKE '___10___';

 

-date

SELECT sysdate FROM dual;
--03년도에 입사한 사람 구하는 3가지 방법
SELECT first_name 이름, hire_date 입사일
FROM employees
WHERE hire_date>='03/01/01' AND hire_date<='03/12/31';

SELECT first_name 이름, hire_date 입사일
FROM employees
WHERE hire_date BETWEEN '03/01/01' AND '03/12/31';

SELECT first_name 이름, hire_date 입사일
FROM employees
WHERE hire_date LIKE '03______';

날짜 + 숫자 = 날짜
날짜 - 날짜 = 숫자

Q) 100일 후 구하기

SELECT sysdate+100-1 FROM dual;

Q) 오늘부터 6개월 후 (월 더하기): add_months()

SELECT sysdate 오늘, add_months(sysdate,6) FROM dual;

 

- NULL 비교하기

SELECT first_name 이름, commission_pct 인센티브
FROM employees
WHERE commission_pct IS NULL;
--sql에서는  = 이걸로 null 비교할수 없음 IS NULL, IS NOT NULL로 해야됨
SELECT first_name 이름, commission_pct 인센티브
FROM employees
WHERE commission_pct IS NOT NULL;
--WHERE commission_pct>=0;

 

- 같지 않다

SELECT first_name 이름, department_id 부서번호
FROM employees
WHERE department_id<>80;
--WHERE department_id!=80;

'[오라클] > SELECT' 카테고리의 다른 글

서브쿼리 subquery  (0) 2020.12.27
조인 JOIN  (0) 2020.12.27
다중행 함수(multi row function) 그룹함수  (0) 2020.12.26
단일행 함수(single row function)  (0) 2020.12.26
ORDER BY  (0) 2020.12.26