select

jaybon·2023년 7월 7일
0

SQL

목록 보기
2/6
-- 데이터를 가져오는 SQL문
-- select 뒤에는 테이블에서 가져올 컬럼명을 적는다
select first_name
-- from 뒤에는 데이터를 가져올 테이블 명을 적는다
-- 실행할 SQL 마지막에는 세미콜론을 적는다
from employees;

-- 모든 컬럼을 가져올 때에는 *을 적는다
select *
from employees;

select *
from employees
-- where 데이터를 조건에 맞는 것만 가져오도록 제한한다
where employee_id < 105;

-- employees 테이블에서 last_name이 King인 사람 조회하기
select *
from employees
-- 컬럼명 띄어쓰기 할 때 언더바를 사용한다
-- 문자열은 홑따옴표를 사용한다
-- 같다라는 코드가 (=) 하나다 (프로그래밍 언어와 다름)
where last_name = 'King';

select *
from employees
where last_name = 'King'
-- 조건을 연결 할 때에는 and, or을 사용한다
-- 여러 조건을 사용 할 때에는 나뉘어지는 방식을 잘 생각한다
-- 묶여야 될 곳은 소괄호로 묶는다
	and (employee_id = 100 or employee_id = 101);

-- 위 SQL 문과 결과가 다르게 나온다
select *
from employees
where (last_name = 'King' and employee_id = 100) 
	or employee_id = 101;

select *
from  employees
-- group by 특정 컬럼을 기준으로 그룹을 만들 때 사용한다
group by job_id;

-- group by를 사용하면 having과 select에서 그룹함수를 사용할 수 있다
-- 컬럼 위치에 수학 계산도 가능하다
-- as는 컬럼의 별명을 만들 수 있다
select job_id , sum(salary), count(salary), sum(salary) / count(salary) as 평균연봉
from  employees
group by job_id
-- having은 그룹을 기준으로 그룹함수 또는 컬럼을 이용해서 조건 검색
having sum(salary) > 40000;

-- group by없이도 select에서 그룹함수 일부를 사용할 수 있다
-- (개별 행을 그룹으로 판단)
select count(*) 
from employees;


select *
from employees
-- order by 데이터를 특정 컬럼 기준으로 정렬할 때 사용한다
-- 오름차순 asc / 내림차순 desc
order by salary desc;


select *
from employees
-- 문자열의 일부 내용을 생략할 때에는 %를 사용한다
-- 문자열 일부 내용 검색 시에는 = 보다는 like를 사용한다
where first_name like 'J%';

-- employees에서 first_name에 e가 들어간 사람
select *
from employees
where first_name like '%e%';

-- employees에서 last_name이 t로 끝나는 사람
select *
from employees
where last_name like '%t';

-- 5. 이름(FIRST_NAME)의 두 번째 글자가 'a'인 사원의 이름(FIRST_NAME)과 연봉을 조회하라. (위치 생략 _ 이용)
select first_name , salary 
from employees
where first_name like '_a%';

-- 11. 2007년 06월 21일에 입사한 사원의 사원번호, 이름(FIRST_NAME, LAST_NAME) 그리고 부서번호를 조회하라.
select *
from employees
where hire_date = '2000-02-06';

select *
from employees
where hire_date = str_to_date('2000-02-06','%Y-%m-%d');

-- employees에서 커미션이 없는 사람만 찾기
select *
from employees
-- null 조건은 =이나 like가 아니라 is를 사용한다
where commission_pct is not null;

-- employees테이블에서 부서번호 뽑아줘
select department_id 
from employees
group by department_id;

-- distinct는 select에서 컬럼의 중복을 제거한다
select distinct department_id 
from employees;

-- 직원들 first_name과 이메일을 뽑아줘
-- concat은 문자열을 더한다
select first_name, concat(email, '@test.com') as 이메일
from employees;

-- 1999-01-01 ~ 1999-12-31 사이에 입사한 사람
select *
from employees
-- between을 사용하면 a이상 b이하의 범위 검색이 가능하다
where hire_date between '1999-01-01' and '1999-12-31';

-- job_id가 IT_PROG, FI_ACCOUNT인 사원 정보 조회
select *
from employees
where job_id = 'IT_PROG' or job_id = 'FI_ACCOUNT';

select *
from  employees
where job_id in ('IT_PROG', 'FI_ACCOUNT');

-- 두가지 결과를 합치고 싶다
-- first_name이 S로 시작하는 사원
select *
from employees
where first_name like 'S%'
union -- 값이 중복되면 1개로 합친다
-- last_name이 B로 시작하는 사원
select *
from employees
where last_name like 'B%';

-- 두가지 결과를 합치고 싶다 
-- first_name이 S로 시작하는 사원
select *
from employees
where first_name like 'S%'
union all -- 값이 중복되더라도 출력한다
-- last_name이 B로 시작하는 사원
select *
from employees
where last_name like 'B%';


-- 커미션이 null이면 0으로 바꾸고 싶다
-- if(조건, 참결과, 거짓결과)
select first_name , if(commission_pct is null, 0, commission_pct) 
from employees;

-- 문자 함수
-- SQL에서는 문자열 등 배열의 시작이 0이 아니라 1이다
-- substring(문자열, 시작위치, 개수)
select first_name, substring(phone_number, 1, 3)
from employees;

-- replace(문자열, 치환될 문자, 치환할 문자)
select first_name , replace(phone_number, '515', '010')
from employees;

-- 문자열 대문자로 바꾸기
select upper(first_name)  
from employees;

-- 숫자 함수

-- dual은 더미테이블, 연습용 테이블로 테스트 용도로 사용한다
select round(1.5) 
from dual;

-- truncate 반드시 버릴 자릿수를 명시해 주어야 함
select truncate(1.5, 0)
from dual;
profile
티스토리 블로그 https://ondolroom.tistory.com/

0개의 댓글