PART1
-특정 열(column) 선택
-모든 열(column) 출력
-컬럼명 변경하기
-연결 연산자
-중복 데이터 제거
-데이터 정렬
-Where절
-산술 연산자
-비교 연산자
-논리 연산자
PART1
- 테이블에서 특정 열 (column) 선택하기
ex) 사원 테이블에서 사원 번호와 이름과 월급 출력SELECT empno,ename,sal FROM emp;
- 테이블에서 모든 열(column) 출력하기
ex) 사원 테이블을 모든 열(column) 을 모두 출력해보기SELECT * FROM emp;
-모든 컬럼을 출력하고 맨 끝에 다시 한번 특정 컬럼을 출력해야 하는 경우
SELECT emp.*,empno FROM emp;
=>
테이블명.*
,출력하고자 하는 컬럼명
작성
- 컬럼 별칭을 사용하여 출력되는 컬럼명 변경
ex)사원 테이블의 사원 번호와 이름과 월급을 출력하는데 컬럼명을 한글로 '사원 번호','사원 이름'으로 출력하기SELECT empno as "사원 번호",ename as "사원 이름",sal as "Salary" FROM emp;
=>
컬럼별칭
:컬럼명 as 출력하고 싶은 컬럼명
※ 컬럼 명칭 양쪽에 "" 마크 감싸주는 경우
1.대소문자 구분할 때
2.공백문자를 출력할 때
3.특수문자를 출력할 때 ($,_,#)만 가능
<->''는 문자열감쌀때 사용※ 추가
수식을 사용할 경우 출력되는 컬럼명도 수식으로 출력된다.SELECT ename,sal*(12+3000) as 월급 FROM emp ORDER BY 월급 desc;
=>컬럼 별칭을 사용하면 order by절을 사용할 때 유용
- 연결 연산자 ||
ex)사원 테이블의 이름과 월급을 서로 붙여서 출력하기SELECT ename||sal FROM emp;
=>연결 연산자는 컬럼과 컬럼 서로 연결
※ 문자열과 연결 연산자 사용하기
SELECT ename || '의 월급은' || sal || '입니다.' as 월급정보 FROM emp;
- 중복 데이터 제거(DISTINCT)
ex)사원 테이블에서 직업을 출력하는데 중복된 데이터를 제외하고 출력하기SELECT DISTINCT(job) From emp;
=>
DISTINCT(중복컬럼)
==UNIQUE
로 사용해도 된다.
- 데이터 정렬
ex)이름과 월급을 출력하는데 월급이 낮은 사원부터 출력해보기SELECT ename,sal FROM emp ORDER BY sal asc;
=>
데이터 정렬:ORDER BY
=>ORDER BY
는 맨 마지막에 실행된다 .※
SELECT
절에 사용한 컬럼 명칭을ORDER BY
절에서 사용할 수 있다.SELECT ename,sal as 월급 FROM emp ORDER BY 월급 asc;
※
ORDER BY
절에 컬럼명 대신 숫자를 적어줄 수도 있다.
(SELECT절 컬럼의 순서=>숫자)SELECT ename,deptno,sal FROM emp ORDER BY 2 asc, 3 desc;
- Where절
1 ) 숫자 데이터 검색
ex)월급이 3000인 사원들의 이름,월급,직업을 출력SELECT ename,sal,job FROM emp WHERE sal =3000;
=>검색하기 원하는 조건을
WHERE절
에 작성
=>WHERE절
은FROM절 다음
에 작성※
컬럼 별칭
을WHERE절
에 사용하면오류
발생SELECT ename,sal as 월급 FROM emp WHERE 월급 =3000;
=>오라클은
FROM
절을 실행하고WHERE
절을 실행하므로, 오류 발생
2 ) 문자와 날짜 검색
ex)이름이 SCOTT인 사원의 이름,월급,직업,일사일,부서 번호를 출력해기SELECT ename,sal,job,hiredate,deptno FROM emp WHERE ename='SCOTT';
=>숫자와는 다르게 문자를 검색할 때는
문자
양쪽에싱글 쿼테이션 마크
필요ex)81년 11월 17일에 입사한 사원의 이름과 입사일 출력하기
SELECT ename,hiredate FROM emp WHERE hiredate='82/11/17';
=>
날짜
도 양쪽에싱글 쿼테이션 마크
를 감싸줘야 한다.
- 현재 접속한 세션의 날짜 형식 확인
SELECT * FROM NLS_SESSION_PARAMETERS WHERE PARAMETER='NLS_DATE_FORMAT';
=>연도 2자리 형식인 YY,RR은 다름
YY는 20~년대
RR은 19~년대
- 현재 접속 세션 파라미터 변경
ALTER SESSION SET NLS_DATE_FORMAT='YY/MM/DD'
- 산술 연산자
ex) 연봉이 36000이상인 사원들의 이름과 연봉 출력SELECT ename,sal*12 as 연봉 FROM emp WHERE sal*12 >=36000;
=>
WHERE
절에서는 별칭 사용 불가※ 산술 연산자에는 우선순위가 있다.
우선순위 연산자에 괄호 사용SELECT 300+200*2 FROM dual; 700 SELECT (300+200)*2 FROM dual; 1000
ex) 부서 번호가 10번인 사람들의 이름,월급,커미션,월급+커미션을 출력하기
SELECT ename,sal,comm,sal+comm FROM emp WHERE deptno=10;
=>
NULL
값은데이터가 할당되지 않은 상태
OR
알 수 없는 값
이라고 한다.
=>NULL
값 +500 =>NULL
=>산술식의 컬럼값이 NULL인경우 숫자로 변경해주어야 계산할 수 있다.※ NVL함수 (NULL 데이터 처리하는 함수)
NVL(컬럼,0)
컬럼이NULL
이면 0으로 출력
- 비교 연산자
1 ) >,<,>=,<=,=,!=,<>,^=
ex)월급이 1200 이하인 사원들의 이름과,월급,직업,부서 번호를 출력하기SELECT ename,sal,job,deptno FROM emp WHERE sal<=1200;
2 ) BEWTEEN AND
ex)월급이 1000에서 3000 사이인 사원들의 이름과 월급을 출력해보기SELECT ename,sal FROM emp WHERE sal BETWEEN 1000 AND 3000; # 동일한 SQL SELECT ename,sal FROM emp WHERE (sal>=1000 AND sal<=3000);
ex)월급이 1000에서 3000 사이가 아닌 사원들의 이름과 월급 조회
SELECT ename,sal FROM emp WHERE sal NOT BETWEEN 1000 AND 3000; # 동일한 SQL SELECT ename,sal FROM emp WHERE (sal <1000 OR sal>3000);
3 ) LIKE
ex) 이름의 첫 글자가 S로 시작하는 사원들의 이름과 월급을 출력해보기SELECT ename,sal FROM emp WHERE ename like 'S%';
=>
%
는 와일드 카드
와일드 카드는 이 자리에 어떠한 철자,개수가 몇개든 관계없다.
=> 와일드 카드는LIKE
연산자를 사용해야함
이퀄 연산자(=)
는 안된다.ex) 이름의 두 번째 철자가 M인 사원의 이름 출력
SELECT ename FROM emp WHERE ename LIKE '_M%';
=>
언더바(_)
는 어떠한 철자가 와도 관계없으나, 자리수는 한자리수여야한다.ex) 이름의 끝 글자가 T로 끝나는 사원들의 이름을 출력
SELECT ename FROM emp WHERE ename LIKE '%T';
ex)이름에 A를 포함하고 있는 사원들의 이름을 출력
SELECT ename FROM emp WHERE ename LIKE '%A%';
=>A를 포함하는 사원의 이름은 양쪽으로 와일드카드 기술
4 ) IS NULL
ex)커미션이 NULL 인 사원들의 이름과 커미션을 출력해보기SELECT ename,comm FROM emp WHERE comm is null;
=>알수없는 값이기때문에 이퀄연산자(=)는 사용할 수 없다.
=>NULL값을 검색하기 위해서는is null
연산자를 사용해야 한다.
=>NULL이 아닌 데이터를 검색할 때도
COMM !=NULL
을 사용할 수 없다.5 ) IN
ex)직업이 SALESMAN,ANALYST,MANAGER인 사원들의 이름,월급,직업을 출력SELECT ename,sal,job FROM emp WHERE job in ('SALESMAN','ANALYST','MANAGER'); # 동일한 SQL SELECT ename,sal,job FROM emp WHERE (job='SALESMAN' or job='ANALYST' or job='MANAGER')
=>
이퀄 연산자(=)
는하나의 값
만 조회 가능
=>IN연산자
는여러 리스트의 값
을 조회할 수 있다.ex)직업이 SALESMAN,ANALYST,MANAGER이 아닌 사원들의 이름과 월급과 직업을 검색
SELECT ename,sal,job FROM emp WHERE job NOT in ('SALESMAN','ANALYST','MANAGER'); # 동일한 SQL SELECT ename,sal,job FROM emp WHERE (job !='SALESMAN' and job!='ANALYST' and job!='MANAGER')
- 논리 연산자 (AND,OR,NOT)
ex)직업이 SALESMAN이고 월급이 1200이상인 사원들의 이름,월급,직업을 출력SELECT ename,sal,job FROM emp WHERE job='SALESMAN' AND sal>=1200;
=>AND는 둘 모두 TRUE여야만 ,TRUE반환
=>OR는 둘 중에 하나만 TRUE여도 TRUE반환