DB

DB 03/06

SangssI 2023. 3. 6. 14:44

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';