rueki

3. SQL 연산자, where, order by, 함수 본문

SQL

3. SQL 연산자, where, order by, 함수

륵기 2020. 4. 2. 21:26
728x90
반응형
산술 연산자 *,  /, +, -
비교 연산자

>, < , >=, <=

!= , <>,^=

기타 비교 연산자

between ~ and

like

in

is null

논리 연산자 and, or, not

- 산술연산자 사용

  문제 1. 사원 이름, 월급, 월급 + 300 *2 출력

  -> select ename, sal, sal + 300 * 2 from emp;

 

- 비교연산자 사용

  문제 2. 월급이 3000 이상인 사원들의 이름과 월급 출력

  -> select ename, sal from emp where sal>= 3000;

 

- 기타 비교 연산자

    between .. And : ~와 ~사이의 의미

    like :  ~ 처럼, ~ 일것같은의 뜻과 같이 sql에서도

            이름의 글자가  S  시작할 같은 으로 쓰인다.

            % - wildcard : 자리에 뭐가 와도 관계 없고

                               개수가 몇개가 되던 관계 없다.

     '_' - 이자리에 뭐가 와도 관계 없음, 그러나 자릿 수는 하나

    in

    is null

   

  * % 와일드 카드

    @ m 바로 다음에 나오는 % 와일드 카드가 아니라 특수문자 % 이다.

    @ like 연산자와 짝꿍인 옵션들

    - % : 자리에 뭐가 와도 관계없고 갯수도 관계없다.

    - '_' : 자리에 뭐과 와도 관계 없으나, 자릿수는

    - escape : % _ 특수문자로 인식하게 하는 키워드

 

 

 

- 논리 연산자 : and, or, not

 

 

* insert into 테이블 (컬럼 ) values ();

 

함수 (function) : 데이터 검색을 정교하게 하고자 유용한 기능

Ex ) 우리나라에서 등록금이 가장 비싼 학교가 어디인가

      서울시 물가 데이터에서 가장 비싼 품목은 무엇인가?

      가정 불화의 가장 원인은 무엇인가?

      치킨집 폐업이 가장 많은 년도는 최근에 언제인가?

 

  • 함수의 종류 2가지 

1.단일행 함수 (single row function)

 

 입력                   출력

-------------> 함수 ------------->

하나의 (row)       하나의

 

종류

문자함수 : upper, Lower, Inicap, substr, instr, lpad, rpad, ltrim, rtrim, trim, replace

              concat

숫자함수 : round, trunc, mod, power

날짜함수 : months_between

              add_months

              next_day

              last_dat

변환함수 : to_char, to_number, to_date

일반함수 : nvl, decode ,case

 

 

2. 복수행 함수 (multiple row function)

       입력                    출력

----------------->

-----------------> 함수 -------------->

----------------->           하나의

여러개의 (row)

 

종류 : max

         min

         avg

         sum

         count

 

ORDER BY - 정렬하는 것 => asc 오름차순 / desc 내림차순

@ SQL 실행 순서 - from -> where -> select -> order by

@ 코딩 순서 - select -> from -> where -> order by

 

 

initcap 함수 : 번째 철자도 대문자로 출력, 나머지는 소문자로 출력

-> select ename, initcap(ename) from emp;

 

substr 함수 : 단어에서 특정 철자만 잘라내는 함수

-> select ename, substr(ename,1,3) from emp; #(컬럼 ,시작 인덱스, 선언한 인덱스 위치까지)

 

instr 함수 : 단어에서 특정 철자의 자릿루를 출력하는 함수

-> select ename, instr(ename,'A') from emp; # A 인덱스 위치 결과값으로 나옴


WHERE 절 : 검색 조건을 주는 절

Ex) 월급이 3000 이름 월급 가져온다.

     select ename, sal -> 컬럼명

     from emp -> 테이블 명

     where sal = 3000; -> 검색조건

 

 

문제 19. 직업이 SALESMAN인 사원들의 이름과 직업 출력

-> select ename, job from emp where job = 'SALESMAN';

@ 데이터 대소문자 구분하므로 테이블 데이터가 대문자로 되어있으면 검색할 때 대문자로 작성해야한다.

@ 숫자와 다르게 문자와 날짜는 양쪽에 ' ' 마크 필수

 

문제 20. 이름이 scott인 사원의 이름과 월급과 직업을 출력

-> select ename, sal, job from emp where ename = 'SCOTT';

 

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

-> select ename, sla, deptno from emp where deptno = 20 ;

 

문제 22. 직업이 salesman이 아닌 사원들의 이름과 직업을 출력

-> select ename, job from emp where job != 'SALESMAN';

 

문제 24. 81 11 17일에 입사한 사원의 이름과 입사일

-> select ename, hiredate from emp where hiredate='81/11/17';

 

문제 25. 월급이 1000에서 3000 사이인 사원들의 이름과 월급

-> select ename, sal from emp where sal between 1000 and 3000;

 

문제 26. 월급이 1000에서 3000 사이가 아닌 사원들의 이름과 월급

-> select ename, sal from emp where not sal>=1000 and sal<=3000;

 

문제 27. 1981년도에 입사한 사원들의 이름과 입사일

-> select enam, hiredate from emp where hiredate between '81/01/01' and '81/12/31';

 

문제 28. 이름의 첫 글자가 S로 시작하는 사원들

-> select ename from emp where ename like '%S';

 

문제 29. 이름의 끝 글자가 T로 끝나는 사원들의 이름 출력

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

 

문제 30. 이름의 두 번째 철자가 m인사원들의 이름 출력

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

 

문제 31. 이름의 세번째  철자가 L 사원들의 이름 출력

-> select ename from emp where ename like '__L%';

문제 32. 이름의 번째 철자가  %인사원의 이름을 출력

-> select ename from emp where ename like '_m%%' escape 'm';

 

문제 33. 81년도에 입사한 사원들의 이름과 입사일 출력

-> select enam, hiredate from emp where hiredate like '81%'

 

문제 35. 직업이 SALESMAN이고 월급이 1000 이상인 사원들의 이름과 직업과 월급 출력

-> select ename, job, sal from emp where job='SALESMAN' and sal>=1000;

 

문제 36. 직업이 SALESMAN 이거나 월급이 1000 이상인 사원들의 이름과 직업과 월급 출력

-> select ename, job, sal from emp where job ='SALESMAN' or sal>=1000;

문제 37. 이름의 두번째 철자와 세번째 철자가 % 사원들의 이름 출력

-> select ename from emp where ename like '_m%m%%' escape 'm';

 

 

문제 38. 사원번호가 7788, 7902, 7369 번인 사원들의 사원번호와 사원이름을 출력

-> select empno, ename from emp where empno = 7788 or empno=7902 or empno =

7369;

-> select empno, ename from emp where empno in (7788, 7902, 7369);

@ True or True or False True 여서 결과가 출력된다.

@ True and True and False False 여서 결과가 출력되지 않는다.

 

문제 39. 직업이 SALESMAN, ANLAYST인 사원들의 이름과 직업을 출력

-> select ename, job from emp where job in ('SALESMAN', 'ANALYST');

 

 

문제 40. 직업이 SALESMAN, ANLAYST가 아닌 사원들의 직업

-> select job from emp where job not in ('SALESMAN', 'ANLAYST');

 

 

문제 42. 커미션이 null인 사원들의 이름과 커미션 출력

-> select ename, comm from emp where comm is null;

@ null 비교할 때는 기타 비교연산자인 is null 사용해야한다.

 

 

문제 43. 커미션이 null이 아닌 사원들의 이름과 커미션 출력

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

 

문제 44. 임의로 만든 테이블에서 이름과 니이를 출력하는데 나이가 낮은 학생부터 출력

-> select ename, age from emp11 order by age asc;

 

문제 45. 성이 김씨인 학생들의 이름과 나이, 전공 출력

-> select ename, age, major from emp11 where ename like '김%';

 

문제 46. 나이가 30대인 학생들의 이름과 나이 출력

-> select ename, age from emp where age between 30 and 39;

 

문제 47. 나이가 30대인 학생들의 이름과 나이를 출력, 나이가 높은 학생부터 출력

-> select ename, age from emp where age between 30 and 39 order by age desc;

 

문제 48. 직업이 SALESMAN, ANALYST 사원들의 이름 월급 직업을 출력, 월급이 높은 사원부터 출력

-> select ename, sal from emp where job in ('SALESMAN', 'ANALYST') order by sal desc;

 

문제 49. 커미션이 null 사원들의 이름과 월급과 커미션 출력

-> select ename, sal, comm from emp where comm is null order by sal asc;

 

문제 50. 전공이 수학과인 학생들의 이름과 전공을 출력

-> select ename,major from emp11 where major like '%수학%';

@ where major like '%수학%'; -> 수학이 포함된 것은 출력된다.

 

문제 51. 이름과 커미션 출력, 커미션이 높은 사원부터 출력

-> select ename, comm from emp order by comm desc nulls last;

@nulls last --> null 뒤로

@nulls first --> null 앞으로

 

문제 52. 통신사가 sk인 학생들의 이름과 나이와 통신사 출력

-> select ename, age, telecom from emp11 where lower(telecom) = 'sk';

 

문제 53. 통신사가 kt 학생들의 이름과 나이와 통신사 출력

-> select ename, age, telecom from emp11 where lower(telecom) = 'kt';

 

문제 54. 통신사가 lg 학생들의 이름과 나이와 통신사 출력

-> select ename, age, telecom from emp11 where lower(telecom) like '%lg%';

 

문제 55. 이름, 이름의 첫번째 철자 출력, 첫 번째 철자를 소문자로 출력

-> select ename, substr(lower(ename),1,1) from emp;

 

문제 56. inticap 사용하지 않고, substr, lower, upper, || 를 사용해서 출력

* 첫 글자는 대문자, 나머지는 소문자로 출력

-> select substr(ename,1,1)||substr(lower(ename),2) from emp;

문제 57. 이메일 출력, 이메일에서 @가 몇 번째 자리에 있는 지 출력

-> select email, instr(email,'@') from emp11;

 

문제 58. 이메일에서 이메일 도메인만 출력

-> select ename, substr(substr(email, instr(email,'@')+1),0,instr(substr(email, instr(email,'@')+1),'.')-1)) from emp11;

-> select ename, substr(rtrim(rtrim(ename,'.com'),'.net'), instr(email,'@')+1) from emp11;

 

 

728x90
반응형

'SQL' 카테고리의 다른 글

SQL pivot, 누적 데이터 출력, 테이블 Join 기초  (0) 2020.04.08
4 SQL . Select 의 6가지 절, 분석 전용 함수  (0) 2020.04.07
3. SQL 함수  (0) 2020.04.03
2. SQL 기본 정의 및 실습  (2) 2020.04.01
1. Oracle Database 설치  (0) 2020.04.01
Comments