본문 바로가기

Study/class note

sql 기초 / distinct, order by, where절, 산술연산자, 비교연산자, 논리연산자

문제10. 사원테이블의 사원번호와 이름과 월급을 출력하는데 컬럼명이 '사원번호' '사원이름' 'Salary'로 출력하세요

select empno as 사원번호, ename as 사원이름, sal as "Salary"
 from emp;
 
/* 별칭 Salary 를 큰따옴표("") 없이 작성할 경우 SALARY로 출력됨 (대소문자 구분 시)
 이 외 공백문자, 특수문자(_,$)를 컬럼별칭에 사용하고 싶을 때 큰 따옴표("") 사용
 큰 따옴표("")를 사용하는 경우는 오라클 통틀어서 위와 같은 경우밖에 없음 */

문제11. 사원번호, 이름, 월급, 부서번호를 출력하는데 부서번호를 출력할 때 컬럼명이 "부서 번호"로 출력되게 하세요

select empno as 사원번호, ename as 이름, sal as 월급, deptno as "부서 번호"
 from emp;

문제12. (연결연산자) 다음과 같이 결과를 출력하세요 > "KING 의 입사일은 81/11/17입니다"

select ename || ' 의 입사일은 ' || hiredate ||'입니다'
 from emp;

 

 

005 중복된 데이터를 제거해서 출력하기(DISTINCT)

컬럼명 앞에 distinct

문제13. 사원 테이블에서 직업을 중복제거해서 출력하시오

select distinct job
 from emp;

문제14. 우리회사에 부서번호가 뭐가 있는지 부서번호를 출력하는데 중복을 제거해서 출력하시오

select distinct deptno
 from emp;

문제15. mgr(관리자의 사원번호)을 출력하는데 중복을 제거해서 출력하세요

select distinct mgr
 from emp;

문제16. m_name을 중복제거해서 출력하세요

select distinct m_name
 from price;

문제17. m_type_name을 중복제거해서 출력하세요

select distinct m_type_name
 from price;

 

 

006 데이터를 정렬해서 출력하기(ORDER BY)

asc : ascending(오름차순, 문자일 경우 A > Z)

desc : descending(내림차순, 문자일 경우 Z > A)

--이름과 월급을 출력하는데 월급이 낮은 사원부터 높은 사원 순으로 출력하세요
select ename, sal
 from emp
 order by sal asc;

문제18. 이름과 입사일을 출력하는데 최근에 입사한 사원부터 출력하세요

select ename, hiredate
 from emp
 order by hiredate desc;

코딩순서 : select > from > order by 

실행순서 : from > select > order by

select ename, hiredate
 from emp
 order by 2 desc; -- 컬럼 순서 입력 가능 1 enmame 2 hiredate

문제19. 이름, 직업, 월급을 출력하는데 직업을 오름차순으로 출력하세요

select ename, job, sal
 from emp
 order by job asc;

문제20. 이름, 직업, 월급을 출력하는데 직업을 ABCD 순서대로 출력하고, 직업을 기준으로 월급을 높은 순서대로 출력하세요

select ename, job, sal
 from emp
 order by job asc, sal desc;
 
-- order by 절에 컬럼을 여러개 입력 가능 > 콤마(,) 순서대로 정렬돼서 출력
 
select ename, job, sal
 from emp
 order by 2 asc, 3 desc;
 
-- order by 병렬로 쓸 때도, 숫자 입력 가능

 

문제21. 이름, 부서번호, 입사일을 출력하는데 부서번호를 10,20,30순으로 출력하고 그것을 기준으로 두고 월급이 높은 사원순으로 출력하세요

select ename, deptno, hiredate
 from emp
 order by deptno asc, sal desc; -- sal 출력되지 않아도 정렬됨

문제22. 이름, 나이, 전공을 출력하는데 나이가 높은 학생부터 출력하세요

select ename, age, major
 from emp14
 order by age desc;

문제23. 전공을 출력하는데 중복을 제거해서 출력하시오

select distinct major
 from emp14;

 

 

007 WHERE절 배우기 1(숫자 데이터 검색)

where 검색조건;

-- 월급이 3000인 사원들의 사원이름, 월급, 직업을 출력하세요
select ename, sal, job
 from emp
 where sal = 3000;

코딩순서 : select > from > where

실행순서 : from > where > select

문제24. 우리반 테이블에서 나이가 27인 학생들의 이름과 나이와 전공을 출력하세요.

select ename, age, major
 from emp14
 where age = 27;

문제25. 부서번호가 20번인 사원들의 이름과 월급과 부서번호를 출력하시오

select ename, sal, deptno
 from emp
 where deptno = 20;

 

 

008 WHERE절 배우기 2(문자와 날짜 검색)

where절에서 문자와 숫자는 작은따옴표('')로 둘러줘야함

--이름이 SCOTT인 사원의 이름, 월급, 직업, 입사일, 부서번호를 출력하세요
select ename, sal, job, hiredate, deptno
 from emp
 where ename = 'SCOTT';

문제26. 직업이 SALESMAN인 사원들의 이름과 월급과 직업을 출력하세요

select ename, sal, job
 from emp
 where job = 'SALESMAN';

문제27. 위의 결과를 다시 출력하는데 월급이 높은 사원부터 출력하세요

select ename, sal, job
 from emp
 where job = 'SALESMAN'
 order by sal desc;

코딩순서 : select > from > where > order by

실행순서 : from > where > select > order by

 

문제28. (점심시간 문제) 반이 A반인 학생들의 반과 이름과 나이를 출력하는데 나이가 높은 학생부터 출력하세요.

select class_type, ename, age
 from emp14
 where class_type = 'A'
 order by age desc;

 

 

009 산술 연산자 배우기(*, /, +, -)

-- 연봉이 36000 이상인 사원들의 이름과 연봉을 출력하세요. 연봉은 월급의 12배로 출력하세요
select ename, sal * 12 as 연봉
 from emp
 where sal * 12 >= 36000; -- 컬럼별칭 쓸 수 없음. select 절보다 where 절이 먼저 실행됨

코딩순서와 실행순서를 알아둬야 하는 이유

select ename, sal as 월급
 from emp
 where 월급 >= 2600 ; 
-- 에러

-- 실행순서 : from > where > select  이기 때문에 where 절의 별칭을 넣으면 출력안됨

문제29. 월급이 2600 이상인 사원들의 이름과 월급을 출력하시오

select ename, sal
 from emp
 where sal >= 2600 ;

문제30. 직업이 SALESMAN이 아닌 사원들의 이름과 월급과 직업을 출력하시오

select ename, sal, job
 from emp
 where job != 'SALESMAN';
 
-- 같지 않음을 나타내는 기호 : !=, <>, ^=

 

문제31. 나이가 27살 이상인 학생들의 이름과 나이와 주소를 출력하는데 나이가 높은 학생부터 출력하시오

select ename, age, address
 from emp14
 where age >= 27
 order by age desc;

문제32. 직업이 SALESMAN인 사원들의 이름과 연봉을 출력하는데 연봉이 높은 사원부터 출력하세요

select ename, sal * 12 as 연봉
 from emp
 where job = 'SALESMAN'
 order by 연봉 desc; -- order by 절에는 컬럼별칭 사용 가능
 
-- 실행순서 : from > where > select > order by

 

 

010 비교 연산자 배우기 1(〉, 〈, 〉=,〈=, =, !=,〈〉, ^=)

--월급이 1200이하인 사원들의 이름, 월급, 직업, 부서번호를 출력하세요
select ename, sal, job, deptno
 from emp
 where sal <= 1200;

문제33. 서울시 물가 데이터에서 가격이 30000원 이상인 물품이 무엇인지 출력하세요

select a_name
 from price
 where a_price >= 30000;

 

 

011 비교 연산자 배우기 2(BETWEEN AND)

--월급이 1000에서 3000 사이인 사원들의 이름과 월급을 출력하세요
select ename, sal
 from emp
 where sal between 1000 and 3000 ; 
 
select ename, sal
 from emp 
 where sal >= 1000 and sal <= 3000;
-- not between
select ename, sal
 from emp
  where sal not between 1000 and 3000;
  
select ename, sal
 from emp
 where sal < 1000 or sal > 3000;

문제34. 나이가 20대인 학생들의 이름과 나이를 출력하시오

select ename, age
 from emp14
 where age between 20 and 29;
 
select ename, age
 from emp14
 where age >= 20 and age <= 29;
 
-- between ...and 사용할 때 주의사항 : 이상(>=,이하(<=)에 = 포함되는 것

문제35. 1981년 11월 17일에 입사한 사원들의 이름과 입사일을 출력하세요

select ename, hiredate
 from emp
 where hiredate = '1981/11/17'; 
 
-- 문자와 날짜는 양쪽에 작은 따옴표('')로 둘러줘야함.
-- 날짜 입력 형식 RRRR/MM/DD, RR/MM/DD, RRRR-MM-DD, RR-MM-DD

문제36. 1981년도에 입사한 사원들의 이름과 입사일을 출력하세요

select ename, hiredate
 from emp
 where hiredate between '1981/01/01' and '1981/12/31';

 

 

012 비교 연산자 배우기 3(LIKE)

% : 와일드 카드, 이 자리에 어떠한 문자와도 상관없음. 철자의 개수도 상관없음.

_ : 이 자리에 어떤 문자가 와도 상관없으나 반드시 한자리여야 함. 언더바 개수 = 자릿수

-- 이름의 첫글자가 S로 시작하는 사원들의 이름을 출력하세요
select ename
 from emp
 where ename like 'S%';

문제37. 우리반 테이블에서 성씨가 김씨인 학생들의 이름과 나이를 출력하세요

select ename, age
 from emp14
 where ename like '김%';

문제38. 이름의 끝글자가 T로 끝나는 사원들의 이름을 사원 테이블에서 출력하세요

select ename
 from emp
 where ename like '%T';

문제39. 이름의 두번째 철자가 M인 사원들의 이름을 출력하세요

select ename
 from emp
 where ename like '_M%';

문제40. 서울시에 사는 학생들의 이름과 주소를 출력하세요

select ename, address
 from emp14
 where address like '서울시%';

문제41. 81년도에 입사한 사원들의 이름과 입사일을 출력하시오(like 사용)

select ename, hiredate
 from emp
 where hiredate like '81%';

문제42. 우리반 테이블의 이메일의 끝이 .net으로 끝나는 학생들의 이름과 이메일을 출력하시오

select ename, email
 from emp14
 where email like '%.net';
 
 --대문자 섞여 있을 경우
 select ename, email
 from emp14
 where email like '%.net' or email like '%.NET';

문제43. 이름의 첫글자가 S로 시작하지 않는 사원들의 이름을 출력하시오

select ename
 from emp
 where ename not like 'S%';

 

 

013 비교 연산자 배우기 4(IS NULL)

null 값 : 결측값, 데이터가 없는 상태 또는 알 수 없는 값

is null = 데이터베이스에서 null값을 조회할 때 사용

--커미션이 null인 사원들의 이름과 커미션을 출력하세요
select ename, comm
 from emp
 where comm is null;

문제44. 커미션이 null이 아닌 사원들의 이름과 커미션을 출력하세요

select ename, comm
 from emp
 where comm is not null;

 

 

014 비교 연산자 배우기 5(IN)

in : 여러개의 값을 비교할 때 사용

-- 직업이 SALESMAN, ANALYST, MANAGER인 사원들의 이름과 월급과 직업을 출력하세요
select ename, sal, job
 from emp
 where job in ('SALESMAN', 'ANALYST', 'MANAGER');
 
select ename, sal, job
 from emp
 where job = 'SALESMAN' or job = 'ANALYST' or job = 'MANAGER';

문제45. 나이가 27, 30, 31 인 학생들의 이름과 나이를 출력하세요

select ename, age
 from emp14
 where age in (27,30,31); --숫자는 작음따옴표('') 두르지 않아도 됨. 오직 문자랑 날짜만

문제46. 나이가 27, 30, 31이 아닌 학생들의 이름과 나이를 출력하세요

select ename, age
 from emp14
 where age not in (27,30,31);

 

 

 

015 논리 연산자 배우기(AND, OR, NOT)

-- 직업이 SALESMAN이고 월급이 1200 이상인 사원들의 이름과 월급과 직업을 출력하세요
select ename, sal, job
 from emp
 where job = 'SALESMAN' and sal >= 1200;

True and True = True 

True and False = False

True or True = True 

True or False = True

문제47. 나이가 26이상이고 서울에서 거주하는 학생들의 이름과 나이와 주소를 출력하시오

select ename, age, address
 from emp14
 where age >= 26 and address like '서울%';

문제48. 통신사가 sk인 학생들의 이름과 나이와 통신사를 출력하시오

select ename, age, telecom
 from emp14
 where telecom like 'sk%' or telecom like 'SK%' or telecom like 'Sk%';
 
select ename, age, telecom
 from emp14
 where telecom in ('sk', 'skt', 'SK', 'SKT');

문제49. 이름에 S를 포함하고 있는 사원들의 이름을 출력하시오

select ename
 from emp
 where enamw like '%S%';

문제50. 청주에서 사는 학생들의 이름과 주소를 출력하시오

select ename, address
 from emp14
 where address like '%청주%';

문제51. 주소에 청주, 화성, 춘천을 포함하는 학생들의 이름과 주소를 출력하시오

select ename, address
 from emp14
 where address like '%청주%' or address like '%화성%' or address like '%춘천%';

문제52. 네이버 메일을 사용하는 학생들의 이름과 나이와 이메일을 출력하시오

select ename, age, email
 from emp14
 where email like '%naver%' or email like '%NAVER%';

문제53. 네이버 메일을 사용하지 않는 학생들의 이름과 나이와 이메일을 출력하시오

select ename, age, email
 from emp14
 where email not like '%naver%' and email not like '%NAVER%';

문제54. 95년도에 태어난 학생들의 이름과 나이를 출력하는데 이름을 ㄱㄴㄷ순으로 출력하시오

select ename, age 
 from emp14
 where birth like '95%'
 order by ename asc;
 
select ename, age 
 from emp14
 where birth between '95/01/01' and '95/12/31'
 order by ename asc;

문제55. 나이가 30대인 학생들의 전공을 출력하는데 중복을 제거해서 출력하시오

select distinct major
 from emp14
 where age between 30 and 39;
반응형