DB 03/06
2) SELECT 데이터 조회하기
--현재 계정이 소유하고 있는 모든 테이블의 목록 조회
SELECT * FROM tabs;
--사원테이블의 전체목록 조회
SELECT * FROM employees;
--사원 테이블에서 사번,이름,성만 조회 ( * 대신 원하는 컬럼을 작성 후 테이블의 이름 작성)
SELECT employee_id,first_name,last_name FROM employees;
-- 부서 테이블에서 부서번호(department_id), 부서이름(department_name)을 조회
SELECT department_id, department_name FROM departments;
--문제) 사원 테이블에서 사번,이름,입사일,급여를 조회
SELECT employee_id, first_name, hire_date, salary FROM employees;
--여러개의 테이블에서 여러개의 컬럼을 조회
SELECT employee_id, first_name, department_name FROM
employees, departments ;
-- 별칭 : AS키워드(컬럼명을 작성하고 띄어쓰기만으로 AS생략 가능) ,
유일하게 ""를 sql문에서 사용가능한 경우 (AS생략가능,""안에 지정.)
SELECT employee_id AS "사번", first_name "이름"
FROM employees;
--별칭을 사용해서 부서 테이블 조회
SELECT department_name "dn", manager_id "mi"
FROM departments;
--사원 테이블에서 사번,이름,직종,급여,보너스, 보너스의 실제 금액을 조회 (보너스의 실제금액은 없는 column임 연산으로 만들어줌)
(테이블의 컬럼들을 연산할 수 있다. 영문 별칭의 경우 ""생략 가능)
SELECT employee_id, first_name, job_id, salary, commission_pct,
salary * commission_pct comm -- 보너스의 실제금액을 연산하여 만들고 comm별칭으로 column 표기
FROM employees;
--distinct : 중복제거 명령어
SELECT DISTINCT job_id FROM employees;
--문자관련 함수
1) 문자열을 연결하는 함수 : concat(문자열1, 문자열2);
2) 문자열을 연결하는 연산기호 : ||
SELECT concat('Hello','Bye') FROM dual; -- dual 테이블은 가상의 테이블로 결과화면만 보여주는 테이블
SELECT concat(first_name, last_name) full_name, hire_date
FROM employees;
SELECT first_name || last_name full_name
FROM employees;
--실제수령 월급 = 월급 + (월금 * 보너스)
SELECT employee_id, salary,
(salary + (salary * commission_pct)) pay
FROM employees;
--입사일로부터 1년뒤의 날짜를 출력 (date컬럼(날짜)은 연산자로 연산이 가능함)
기본적으로 varchar,colb 2타입을 제외하고 모든 자료형에서 +(더하기 빼기)연산자 사용가능
SELECT hire_date, (hire_date + 365) years -- 연산과 별칭 응용
FROM employees;
where (조건) : 특정한 조건에 맞는 내용을 검색하는 명령어
-- 사원테이블에서 성이 Smith인 사원의 정보를
-- 사번,이름,급여,순으로 출력
SELECT employee_id, last_name, salary
FROM employees
WHERE last_name = 'Smith';
--사원 테이블에서 이름이 'Michael'인 사원의 사번,이름,입사일을 출력
SELECT employee_id, first_name, hire_date
FROM employees
WHERE first_name = 'Michael';
--사원 테이블에서 급여가 5000이상인 사원의 사번,이름,급여 순으로 출력
SELECT employee_id, first_name, salary
FROM employees
WHERE salary > 5000;
--사번이 151번 이상인 사람의 사번,이름,입사일을 출력
SELECT employee_id, first_name, hire_date
FROM employees
WHERE employee_id >= 151;
--입사일이 2006년 1월 1일 이후에 입사한 사람들의 사번,이름,입사일을 출력
날짜는 크기비교가 가능하다. 하지만 날짜는 문자열형태
SELECT employee_id, first_name, hire_date
FROM employees
WHERE hire_date > '01/01/2006';
--직종이 'SA_REP'인 사원들의 모든 정보를 출력
SELECT *
FROM employees
WHERE job_id = 'SA_REP';
--이름이 Lex인 사원의 사번,이름 출력
SELECT employee_id, first_name
FROM employees
WHERE first_name = 'Lex';
--이름이 알파벳 순으로 L 이후인 사원들의 사번,이름 출력
문자열도 영문이라면 크기비교가 가능.
SELECT employee_id, first_name
FROM employees
WHERE first_name >= 'L'; -- 문자열은 >, >= 결과가 동일, L을 포함하지 않고 싶다면 M을 작성
-- null체크 (is 키워드 사용, =는 null 체크 불가능)
-- 사원테이블에서 보너스를 받고있지 않은 사원들의 정보를
사번, 이름 , 보너스 순으로 출력
SELECT employee_id, first_name, commission_pct
FROM employees
WHERE commission_pct is null;
--보너스를 받는 사원들의 사번,이름 보너스를 출력
SELECT employee_id, first_name, commission_pct
FROM employees
WHERE commission_pct is not null;
--DB의 논리연산
-- && --> and
-- || --> or
--사원테이블에서 급여가 5000을 초과하면서 10000이하인 사원들의 정보를
사번,이름,급여 순으로 출력
SELECT employee_id, first_name, salary
FROM employees
WHERE salary > 5000 and salary <= 10000;
--급여가 5000미만 이거나 20000이상인 사원들의
사번,급여를 출력
SELECT employee_id, salary
FROM employees
WHERE salary < 5000 or salary >= 20000;
--01/01/2005 ~ 12/31/2006 사이에 입사한 사원들의 사번 , 이름 , 입사일을 출력
SELECT employee_id, first_name, hire_date
FROM employees
WHERE hire_date >= '01/01/2005' and hire_date <= '12/30/2006';
--in 연산자 : or연산자를 대체하는 키워드
1) in연산자를 사용하지 않은 경우
SELECT employee_id, first_name, job_id
FROM employees
WHERE job_id = 'SA_MAN' OR job_id = 'IT_PROG' OR job_id = 'HR_REP';
2) in 연산자를 사용하여 위의 쿼리문을 수정해 보자!
SELECT employee_id, first_name, job_id
FROM employees
WHERE job_id IN('SA_MAN','IT_PROG','HR_REP');
--사번이 100,102,104,106인 사원들의 정보를 사번, 이름 순으로 출력
SELECT employee_id, first_name
FROM employees
WHERE employee_id IN( 100,102,104,106);
--급여가 2200,3200,5000,6800인 사원들의 정보를
사번, 이름, 급여 순으로 출력
SELECT employee_id , first_name, salary
FROM employees
WHERE salary IN(2200,3200,5000,6800);
--between 연산자 : A와 B사이의 값을 검색할 때 사용
1) between 연산자를 사용하지 않은 경우
--05년도에 입사한 사원들의 사번, 이름, 입사일 출력
SELECT employee_id, first_name, hire_date
FROM employees
WHERE hire_date >= '01/01/2005' AND hire_date <= '12/31/2005';
2) between 연산자를 사용하여 코드를 수정해 보자!
--미만, 초과일 때는 나타낼수 없다.
SELECT employee_id, first_name, hire_date
FROM employees
WHERE hire_date between '01/01/2005' and '12/31/2005';
-- 급여가 5000이상이고 6000이하인 사원들의 사번,이름,급여를 출력
SELECT employee_id, first_name, salary
FROM employees
WHERE salary between 5000 and 6000;
--like연산자(유사검색) : 지정한 문장과 일치하거나, 문장을 포함하고 있는 정보를 검색
1) % : 모든 값
2) _ : 하나의 값
Ex1) 'A%' : A로 시작하는 모든 데이터(Apple,Actor...)
Ex2)'%a' : a로 끝나는 모든 데이터(korea, italia...)
Ex3)'%a%' : 값의 어디든 a가 포함된 모든 데이터(apple, operator...)
Ex4)'A____' : A로 시작하되, 전체길이가 5글자인 데이터(Apple)
-- 이름이 D로 시작하는 사원의 이름을 출력
SELECT first_name
FROM employees
WHERE first_name Like 'D%';
--이름이 d로 끝나는 모든사원들의 이름을 출력
SELECT first_name
FROM employees
WHERE first_name Like '%d';