표현식
CASE문
한 개 이상의 값과 연산자, SQL함수 등이 결합
특정 값에 대해 정해진 조건에 따라 다르게 표현
CASE WHEN 조건1 THEN 값1
WHEN 조건2 THEN 값2
...
ELSE 기타 값
END
select employee_id, salary
, case when salary<=5000 then 'C등급'
when salary > 5000 and salary <= 15000 then 'B등급'
else 'A등급'
end as salary_grade
from employees;
ex>
표현식을 이용하여 다음과 같이 작성하시오.
MEMBER 테이블에서
MEM_MILIAGE가 1000 이하 FAMILY
1000 초과 2000 이하 GOLD
2000 초과 4000 이하 VIP
나머지 VVIP
select mem_name
,case when mem_mileage<=1000 then 'FAMILY'
when mem_mileage>1000 and mem_mileage<=2000 then 'GOLD'
when mem_mileage>2000 and mem_mileage<=4000 then 'VIP'
else 'VVIP'
end
from member;
마지막에 order by mem_mileage desc;를 하게되면 vvip~family로 정렬
DISTINCT
데이터 조회 시 데이터 중복을 제거하기 위한 방법 중 하나(그 다른 하나는 GROUP BY)
select distinct country_region
from countries
order by country_region asc;
ex>
countries 테이블에서
'국가이름'과, '국가_지역' 컬럼의 6개의 지역의 영문명을 한국어로 바꾸어 출력하세요
ex>
United States of America 아메리카
Germany 유럽
United Kingdom 유럽
select country_region
, case
when country_region='Africa' then '아프리카'
when country_region='Americas' then '아메리카'
when country_region='Asia' then '아시아'
when country_region='Europe' then '유럽'
when country_region='Middle East' then '중동'
when country_region='Oceania' then '오세아니아'
end as country_na
from countries
group by country_region;
조건식
비교조건식
비교 조건식은 논리 연산자나 ANY, SOME, ALL 키워드로 비교하는 조건식을 말함
1) ANY와 SOME
아무거나 하나라도 일치
select employee_id, salary
from employees
where salary = any(2000,3000,4000)
--where salary = some(2000,3000,4000)
order by employee_id;
2) ALL
모두 만족
select employee_id
, department_id
, salary
from employees
where salary < all(select salary
from employees
where department_id = 20);
논리조건식
논리 조건식은 조건절에서 AND, OR, NOT 을 사용하는 조건식
1) OR
A와 B 둘 중 하나만 만족해도 출력
select employee_id, emp_name, salary, job_id
from employees
where salary > 5000 or job_id = 'IT_PROG'
order by employee_id;
2) AND
A, B 조건 모두 만족해야 출력
select employee_id, emp_name, salary, job_id
from employees
where salary > 5000 and job_id = 'IT_PROG'
order by employee_id;
3) NOT
select employee_id, salary
from employees
where not (salary >= 2500)
order by employee_id;
salary가 2500이상인 것이 아닌것들로 2500이하의 salary들만 출력
BETWEEN AND 조건식
between A and B로 A와 B사이의 값들을 출력
select employee_id, salary
from employees
where salary between 2100 and 2500
order by employee_id;
IN과 NOT IN조건식
select employee_id, salary
from employees
where salary in (2000,3000,4000) --포함
order by employee_id;
select employee_id, salary
from employees
where salary not in (2000,3000,4000) -- NOT 포함
order by employee_id;
LIKE조건식
select mem_name
from member
where mem_name like '김%';
김% - 김으로 시작하는 모든 단어를 출력
%김 - 김으로 끝나는 모든 단어를 출력
김__ - 김으로 시작하는 3글자짜리 단어를 출력
%김% - 김이 포함된 단어를 출력
ex>
CUSTOMERS 테이블에서 'Barry' 또는 'Ashley'라는 성을 가진
모든 사람의 이름(컬럼1), 성별(컬럼2), 출생년도(컬럼3),
도시: 주소: 우편번호: (컬럼4)출력하시오.
ex> [Barry Cook][남자][1986][도시 : Ravensburg 주소:87 East Harbor Avenue 우편번호:40715]
1. like
2. case
3. 문자연산자
4. birth 어린순서
select CUST_NAME,
case when cust_gender ='F' then '여자'
else '남자'
end as Cust_gender
,cust_year_of_birth as birth
, '도시 : '|| CUST_city
|| ' 주소:'|| cust_street_address
|| ' 우편번호:'|| cust_postal_code
as total
from customers
where CUST_NAME like 'Barry%' or CUST_NAME like 'Ashley%'
order by birth DESC;
NULL조건식
특정 값이 NULL인지 체크 ( 특정 컬럼 값이 NULL 인지 여부를 체크할 때는 연산자를 사용하면 제대로
비교하지 못함)
1) 해당 컬럼에 널이 있을 경우
SELECT *
FROM EMPLOYEES
WHERE DEPARTMENT_ID IS NULL;
2) 해당 컬럼에 널이 없는 경우
SELECT *
FROM EMPLOYEES
WHERE DEPARTMENT_ID IS NOT NULL;
'Oracle > SQL' 카테고리의 다른 글
정규표현식 (0) | 2020.06.10 |
---|---|
내장함수 (0) | 2020.06.05 |
DDL(Data Define Language, 데이터정의어) (0) | 2020.06.03 |
수식연산자 (0) | 2020.06.03 |
DML(Data Manipulation Language, 데이터조작어) (0) | 2020.06.03 |