rueki
3. SQL 연산자, where, order by, 함수 본문
산술 연산자 | *, /, +, - |
비교 연산자 |
>, < , >=, <= != , <>,^= |
기타 비교 연산자 |
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;
'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 |