[ORACLE] SQL DEVELOPER 1일차 - SELECT문,DISTINCT,WHERE,연산자,ORDER BY
SQL DEVELOPER
SQL DEVELOPER 워크시트 설명문 처리
--워크시트에서 작성된 SQL 명령을 실행하는 방법 [CTRL]+[ENTER] / [F5]
--[CTRL]+[ENTER] : 커서 위치의 SQL 명령을 전달하여 실행 - [F9]
--[F5] : 워크시트에 작성된 모든 SQL 명령을 전달하여 실행
--SQL 명령의 실행 결과는 [스크립트 출력] 탭 또는 [질의 결과] 탭에 출력
SQL문 작성지침
- SQL 문장은 대소문자를 구별하지 않는다.
- 일반적으로 키워드는 대문자로 작성한다.
- SQL 문장은 여러 줄에 걸쳐 작성 가능하다.
- 키워드(SELECT, FROM 등)는 줄여 사용할 수 없고, 여러줄에 걸쳐 작성할 수 없다.
- 모든 SQL 문장의 끝은 세미콜론(;)으로 끝난다.
테이블(TABLE)
데이터베이스에서 데이터(행)을 저장하기 위한 기본 객체
--계정이 소유한 테이블 목록 보기
SELECT * FROM TAB;
--테이블 이름만 보기
SELECT TABLE_NAME FROM TABS;
질의 결과
--워크시트에서 작성된 SQL 명령을 실행하는 방법 [CTRL]+[ENTER] / [F5]
--[CTRL]+[ENTER] : 커서 위치의 SQL 명령을 전달하여 실행 - [F9]
--[F5] : 워크시트에 작성된 모든 SQL 명령을 전달하여 실행
--SQL 명령의 실행 결과는 [스크립트 출력] 탭 또는 [질의 결과] 탭에 출력
데이터베이스에서 데이터(행)을 저장하기 위한 기본 객체
--계정이 소유한 테이블 목록 보기
SELECT * FROM TAB;
--테이블 이름만 보기
SELECT TABLE_NAME FROM TABS;
질의 결과
테이블의 구조 확인 : 테이블 속성 정보 - 컬럼명과 자료형
형식)DESC 테이블명
--EMP 테이블 : 사원 정보를 저장하기 위한 테이블
DESC EMP;
--특정 테이블의 컬럼 구조 보기
--DEPT 테이블 : 부서 정보를 저장하기 위한 테이블
DESC DEPT;
SELECT문
SELECT문
- = DQL(데이터 질의어, Data Query Language)
데이터베이스로부터 데이터를 검색하는 기능을 갖는다.
기본 문법 :
형식) SELECT 검색대상, 검색대상,... FROM 테이블명, 테이블명,...;
=> SELECT [DISTINCT] {*,column [alias],...}
FROM table;
테이블에 저장된 모든 행을 검색한다.
검색대상 : *(모든 컬럼)
- 다른 검색대상과 동시 사용 불가능, 컬럼명, 연산식, 함수 등
SELECT * FROM EMP;
--테이블 내 특정 컬럼 데이터보기
SELECT EMPNO,ENAME,SAL,DEPTNO FROM EMP;
질의 결과
--전체 출력
--EMPNO, ENAME,SAL,DEPTNO 출력
COLUMN ALIAS : 검색대상에 별칭을 부여하는 기능
검색대상을 명확하게 구분하여 표현하기 위한 별칭
형식) SELECT 검색대상 [AS] 별칭,검색대상 [AS] 별칭,... FROM 테이블명,테이블명,...;
SELECT EMPNO AS NO,ENAME AS NAME,DEPTNO AS DNO FROM EMP;
--EMPNO-> NO로, ENAME->NAME, DEPTNO->DNO 붙여준 별칭으로 출력된다.
--AS 키워드는 생략이 가능하다.
SELECT EMPNO NO,ENAME NAME,DEPTNO DNO FROM EMP;
--별칭명은 한글로도 적을 수 있다.
--식별자(테이블명,컬럼명,별칭 등)은 스네이크 표기법(단어와 단어를 _로 구분하여 표현) 사용
--컬럼 별칭으로 공백문자 또는 특수문자 사용 불가능
--컬럼 별칭을 " " 기호 안에 표현하면 모든 형태의 별칭 사용 가능 - " " 기호는 별칭을 표현하기 위한 기호
SELECT EMPNO "사원 번호",ENAME "사원 이름",SAL*12 "연봉^^" FROM EMP;
산술연산 이용한 SQL문
--SQL문장 내 숫자 및 날짜 타입에는 +,-,*,/ 사용가능
--연산식이 컬럼명으로 표시된다.
SELECT EMPNO,ENAME,SAL*1.1 FROM EMP;
NULL의 정의 및 처리
- 이용불가능한(Unavailable)
- 지정되지 않은(Unassigned)
- 알 수 없는(Unknown)
- 적용할 수 없는 값(Inapplicable)을 의미
- NULL이 산술연산에 사용되면 결과값은 무조건 NULL이 된다.
이전 포스팅 : 관계형 데이터베이스 - NULL값 이미지 확인 가능
기호 사용(연결 연산자 ||, 리터럴 '')
--|| 기호를 이용하여 값을 결합하여 표현 가능
SELECT ENAME||JOB FROM EMP;
질의 결과
--오라클에서는 문자값을 ' ' 기호를 이용하여 표현
SELECT ENAME||'님의 업무는 '||JOB||'입니다.' FROM EMP;
질의 결과
중복 컬럼값과 중복되지 않는 컬럼값(DISTINCT) 검색
--EMP 테이블에 저장된 모든 사원의 업무 검색 - 중복 컬럼값 검색
SELECT JOB FROM EMP;
--DISTINCT : 검색대상의 중복값을 제외하고 유일한 하나의 결과값만 검색하는 기능을 제공하는 키워드
--DISTINCT 키워드 뒤에 검색대상을 여러개 나열하여 검색 가능
SELECT DISTINCT JOB,DEPTNO FROM EMP;
--EMP 테이블에 저장된 모든 사원의 업무 검색 - 중복 컬럼값 제외 검색
> 형식)SELECT DISTINCT 검색대상[,검색대상,...] FROM 테이블명
SELECT DISTINCT JOB FROM EMP;
질의 결과
--중복 컬럼값 포함 검색
--중복 컬럼값 제외 검색
WHERE
WHERE
테이블 내 모든 행을 검색하는 대신 조건식을 사용하여 조건이 참인 행만 검색하는 기능을 제공
형식)SELECT 검색대상,검색대상,... FROM 테이블명,테이블명,... WHERE 조건식
--EMP 테이블에서 모든 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP;
--EMP 테이블에서 사원번호가 [7698]인 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE EMPNO=7698;
--EMP 테이블에서 사원이름이 [KING]인 사원의 사원번호,사원이름,업무,급여 검색
--문자값은 대소문자를 구분하여 비교,
--ENAME이 KING이기 때문에 king(소문자)로는 검색되지 않는다.
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME='KING';
질의 결과
--모든 사원의 사원번호,사원이름,업무,급여 검색
WHERE 활용
- 특정 조건 검색하기
--EMP 테이블에서 입사일이 [1981년 6월 9일]인 사원의 사원번호,사원이름,업무,급여,입사일 검색
--날짜값은 ' ' 기호 안에 [RR/MM/DD]형식의 패턴으로 표현
SELECT EMPNO,ENAME,JOB,SAL,HIREDATE FROM EMP WHERE HIREDATE='81/06/09';
--날짜값은 ' ' 기호 안에 [YYYY-MM-DD]형식의 패턴으로 표현
SELECT EMPNO,ENAME,JOB,SAL,HIREDATE FROM EMP WHERE HIREDATE='1981-06-09';
질의 결과값
- 비교연산자
<> : 다르다
!=와 ^=는 <>와 동일한 의미
--EMP 테이블에서 업무가 [SALESMAN]이 아닌 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE JOB<>'SALESMAN';
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE JOB!='SALESMAN';
--EMP 테이블에서 급여가 [2000]이상인 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE SAL>=2000;
--EMP 테이블에서 사원이름이 [A],[B],[C]로 시작되는 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME<'D';
--EMP 테이블에서 [1981년 5월 1일]이전에 입사한 사원의 사원번호,사원이름,업무,급여,입사일 검색
SELECT EMPNO,ENAME,JOB,SAL,HIREDATE FROM EMP WHERE HIREDATE<'81/05/01';
--EMP 테이블에서 업무가 [SALESMAN]인 사원 중 급여가 [1500]이상인 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE JOB='SALESMAN' AND SAL>=1500;
--EMP 테이블에서 부서번호가 [10]이거나 업무가 [MANAGER]인 사원의 사원번호,사원이름,업무,급여,부서번호 검색
SELECT EMPNO,ENAME,JOB,SAL,DEPTNO FROM EMP WHERE DEPTNO=10 OR JOB='MANAGER';
--EMP 테이블에서 급여가 [1000~3000]인 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE SAL>=1000 AND SAL<=3000;
- 연산자
1) 범위 연산자
BETWEEN A값 AND B값 : 두 값의 범위에 포함되는
형식)컬럼명 BETWEEN 작은값 AND 큰값
IN(set) : 괄호 안의 값과 일치하는
LIKE : 문자의 조합이 같은
IS NULL : 널 값
--SAL(급여)이 1000~3000인 사람의 EMPNO,ENAME,JOB,SAL 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE SAL BETWEEN 1000 AND 3000;
질의 결과
--선택 연산자를 이용하여 컬럼값이 나열된 값들 중 하나인 경우의 조건식 표현
--형식)컬럼명 IN (값1,값2,...)
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE JOB IN('ANALYST','SALESMAN');
질의 결과
--EMP 테이블에서 성과급이 존재하지 않는 사원의 사원번호,사원이름,업무,급여,성과급 검색
--NULL : 존재하지 않는 값을 표현하기 위한 키워드
--NULL은 존재하는 값이 아니므로 연산 불가능 - 검색 오류
SELECT EMPNO,ENAME,JOB,SAL,COMM FROM EMP WHERE COMM=NULL;
--IS 연산자를 이용하여 [NULL] 비교
형식)컬럼명 IS NULL 또는 컬럼명 IS NOT NULL
--성과급이 NULL인 사원의 사원번호,사원이름,업무,급여,성과급 검색
SELECT EMPNO,ENAME,JOB,SAL,COMM FROM EMP WHERE COMM IS NULL;
--EMP 테이블에서 성과급이 존재하는 사원의 사원번호,사원이름,업무,급여,성과급 검색
SELECT EMPNO,ENAME,JOB,SAL,COMM FROM EMP WHERE COMM IS NOT NULL;
질의 결과
2) 논리 연산자
AND : 두개의 조건이 TRUE면 TRUE를 리턴
OR : 두개의 조건 중 하나의 조건이 TRUE면 TRUE를 리턴
NOT : 조건이 FALSE인 경우 TRUE를 리턴
--EMP 테이블에서 업무가 [ANALYST]이거나 [SALESMAN]인 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE JOB='ANALYST' OR JOB='SALESMAN';
--EMP 테이블에서 사원이름이 [A]로 시작되는 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME>='A' AND ENAME<'B';
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME BETWEEN 'A' AND 'B' AND ENAME<>'B';
질의 결과
--NOT 연산자를 이용하여 조건식의 결과를 반대로 표현
--형식)NOT(조건식)
--EMP 테이블에서 업무가 [MANAGER]가 아닌 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE NOT(JOB='MANAGER');
3) LIKE 연산자
% : 0글자 이상의 임의 문자를 대표
_ : 1글자 임의 문자를 대표
--검색패턴문자
--검색하려는 문자열에 패턴 매칭 연산자가 포함될 경우 ESCAPE 옵션 사용한다.
--패턴 연산자를 이용하여 [%] 또는 [_]를 검색패턴문자로 처리하여 조건식 표현
--형식)컬럼명 LIKE '값 또는 검색패턴문자'
--앞에 A로 시작하는 EMPNAME 값을 모두 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME LIKE 'A%';
질의 결과
--EMP 테이블에서 사원이름에 [A]가 포함되는 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME LIKE '%A%';
--EMP 테이블에서 사원이름의 두번째 문자가 [L]인 사원의 사원번호,사원이름,업무,급여 검색
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME LIKE '_L%';
질의 결과
--EMP 테이블에 새로운 사원정보를 삽입하여 저장
INSERT INTO EMP VALUES(9000,'M_BEER','CLERK',7788,'81/12/12',1300,NULL,10);
COMMIT;
SELECT * FROM EMP WHERE EMPNO=9000;
스크립트 출력
질의 결과
--EMP 테이블에 사원번호가 9000인 사원정보 삭제
DELETE FROM EMP WHERE EMPNO=9000;
COMMIT;
SELECT * FROM EMP WHERE EMPNO=9000;
스크립트 출력
질의 결과
--EMP 테이블에서 사원이름에 [_]가 포함되는 사원의 사원번호,사원이름,업무,급여 검색
--SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME LIKE '%_%';
질의 결과
--LIKE 연산자는 [%] 또는 [_]를 값이 아닌 검색패턴문자로 처리하여 검색하므로 모든 사원정보 검색 - 검색오류
--ESCAPE 키워드를 이용하여 표현 불가능한 문자를 ESCAPE 문자로 표현
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME LIKE '%\_%' ESCAPE '\';
질의 결과
--검색패턴문자가 없어도 [=] 연산자 대신 [LIKE] 연산자를 사용하여 값 비교 가능
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME='ALLEN';
SELECT EMPNO,ENAME,JOB,SAL FROM EMP WHERE ENAME LIKE 'ALLEN';
ORDER BY : 컬럼값을 비교하여 행이 정렬되도록 검색하는 기능을 제공
형식) SELECT 검색대상,검색대상,... FROM 테이블명,테이블명,... [WHERE 조건식]
ORDER BY {컬럼명|연산식|별칭|INDEX} {ASC|DESC},{컬럼명|연산식|별칭|INDEX} {ASC|DESC},...
--ASC : 오름차순 정렬, DESC : 내림차순 정렬
--정렬 기준을 여러개 나열하여 선언하면 앞의 검색값이 같은 경우 뒤의 검색값을 비교하여 정렬
--EMP 테이블에서 모든 사원의 사원번호,사원이름,업무,급여,부서번호 검색
--기본적으로 테이블에 행이 삽입되어 저장된 순서대로 검색
SELECT EMPNO,ENAME,JOB,SAL,DEPTNO FROM EMP;
질의 결과
--EMP 테이블에서 모든 사원의 사원번호,사원이름,업무,급여,부서번호를 부서번호(DEPTNO)로 오름차순 정렬하여 검색
SELECT EMPNO,ENAME,JOB,SAL,DEPTNO FROM EMP ORDER BY DEPTNO ASC;
--오름차순 정렬인 경우 [ASC] 키워드 생략 가능
SELECT EMPNO,ENAME,JOB,SAL,DEPTNO FROM EMP ORDER BY DEPTNO;
질의 결과
--EMP 테이블에서 모든 사원의 사원번호,사원이름,업무,급여,부서번호를 급여로 내림차순 정렬하여 검색
SELECT EMPNO,ENAME,JOB,SAL,DEPTNO FROM EMP ORDER BY SAL DESC;
질의 결과
--EMP 테이블에서 모든 사원의 사원번호,사원이름,연봉(급여*12)을 연봉으로 내림차순 정렬하여 검색
SELECT EMPNO,ENAME,SAL*12 ANNUAL FROM EMP ORDER BY SAL*12 DESC;
SELECT EMPNO,ENAME,SAL*12 ANNUAL FROM EMP ORDER BY ANNUAL DESC;
--SELECT 명령의 검색대상에는 자동으로 첨자(COLUMN INDEX)가 부여
--오라클은 첨자(INDEX)가 1부터 1씩 증가되는 숫자값으로 표현
SELECT EMPNO,ENAME,SAL*12 ANNUAL FROM EMP ORDER BY 3 DESC;
질의 결과 : 3개 명령 값 결과 모두 같음
--EMP 테이블에서 모든 사원의 사원번호,사원이름,업무,급여,부서번호를 부서번호로 오름차순 정렬하고 같은 경우 급여로 내림차순 정렬하여 검색
SELECT EMPNO,ENAME,JOB,SAL,DEPTNO FROM EMP ORDER BY DEPTNO, SAL DESC;
질의 결과
Author And Source
이 문제에 관하여([ORACLE] SQL DEVELOPER 1일차 - SELECT문,DISTINCT,WHERE,연산자,ORDER BY), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jeong11/ORACLE-SQLDEVELOPER-1일저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)