반응형
1. SQL의 특징
- SQL은 행단위로 데이타를 처리함
- SQL 명령은 대소문자를 구분하지 않지만, '문자값'은 대소문자 구분함
- SQL에서 값 비교는 숫자값, 문자값, 날짜값 모두 다 가능!! (WHERE절 예시 참고)
2. DQL - SELECT구문
- DQL(DATA QURY LANGUAGE)
- 데이터질의어 "SELECT"
- SELECT구문이란?
- 하나 이상의 테이블에서 행(데이타) 검색을 위한 명령
- ex. 1개테이블에서, 2개테이블에서, 3개테이블에서, ..
3. SELECT구문 이용
1) 검색대상
-- 검색대상에는??
-- * : 모든 컬럼, 다른 검색대상과 동시 사용 불가능
-- 컬렴명
-- 연산식
-- 함수
SELECT 검색대상,검색대상,... FROM 테이블명
<검색대상 사용 예시>
검색대상 : * (모든 컬럼)
SELECT * FROM EMP; --모든EMP정보
검색대상 : 원하는 컬렴명
//효율적, 나중에 프로그램만들 때 더 유용
SELECT EMPNO,ENAME,SAL FROM EMP; --부분EMP정보
SELECT LOC,DNAME FROM DEPT; --부분DEPT정보
검색대상 : 연산식
SELECT EMPNO,ENAME,SAL*12 FROM EMP;
SELECT EMPNO,ENAME,SAL*12 "ANNUUL" FROM EMP; --AS 함께 이용해 검색대상 명확히 구분하기
검색대상 : 함수
SELECT ENAME, INITCAP(ENAME) FROM EMP;
2) 컬럼별칭(COLUMN ALIAS) : AS
- 검색대상에 별칭(임시 컬럼명)을 부여하는 기능
-- 검색대상을 명확하게 구분하기 위해서 컬럼 별칭 사용
SELECT 검색대상 [AS]별칭, 검색대상 [AS]별칭, 검색대상 [AS]별칭,... FROM 테이블명;
-- 컬럼 별칭을 설정하기 위한 AS 키워드 생략 가능
SELECT 검색대상 별칭, 검색대상 별칭, 검색대상 별칭,... FROM 테이블명;
-- 컬럼 별칭을 "" 기호 안에 표현하면 모든 형태의 별칭 표현 가능
-- "" 기호는 컬럼별칭을 표현할 때만 사용
SELECT 검색대상 "별칭", 검색대상 "별칭", 검색대상 "별칭",... FROM 테이블명;
-- 식별자 (테이블명 , 컬럼명, 별칭 등)은 스네이크 표기법(단어와 단어를 _로 구분하여 작성)을
-- 사용하여 설정
SELECT 검색대상 "별_칭", 검색대상 "별_칭", 검색대상 "별_칭",... FROM 테이블명;
<컬럼별칭 사용 예시>
SELECT EMPNO,ENAME,DEPTNO FROM EMP;
SELECT EMPNO AS NO, ENAME AS NAME, DEPTNO AS DNO FROM EMP;
-- 컬럼 별칭을 설정하기 위한 AS 키워드 생략 가능
SELECT EMPNO NO, ENAME NAME, DEPTNO DNO FROM EMP;
SELECT EMPNO 사원번호, ENAME 사원이름, DEPTNO 부서번호 FROM EMP;
-- 검색대상으로 컬럼값을 이용하여 연산식 사용 가능
-- 연산식이나 함수 사용시 AS 함께 이용하자!
SELECT EMPNO,ENAME,SAL*12 FROM EMP;
SELECT EMPNO,ENAME,SAL*12 ANNUUL FROM EMP;
-- 식별자 (테이블명,컬럼명,별칭 등)은
-- 스네이크 표기법(단어와 단어를 _로 구분하여 작성)을 사용하여 설정
SELECT EMPNO,ENAME,SAL*12 ANNUUL_SALARY FROM EMP;
SELECT EMPNO 사원번호,ENAME 사원이름,SAL*12 연봉 FROM EMP;
-- 컬럼 별칭으로 공백 또는 특수문자 사용 불가능
--SELECT EMPNO 사원번호,ENAME 사원 이름,SAL*12 연봉 FROM EMP; --띄어쓰기 에러
--SELECT EMPNO 사원번호,ENAME 사원이름,SAL*12 ^연봉^ FROM EMP; --특수문자 에러
-- 컬럼 별칭을 "" 기호 안에 표현하면 모든 형태의 별칭 표현 가능
-- "" 기호는 컬럼별칭을 표현할 때만 사용
SELECT EMPNO "사원번호",ENAME "사원 이름",SAL*12 "^연봉^" FROM EMP;
3) 문자값 결합연산자 : ||
- 검색대상에 || 기호를 사용하여 값을 결합하여 검색
--검색대상을 , 기호로 구분 나열하여 검색
SELECT ENAME , JOB FROM EMP;
--검색대상에 || 기호를 사용하여 값을 결합하여 검색
SELECT ENAME||JOB FROM EMP;
--SQL에서 문자값은 '' 기호를 사용하여 표현
SELECT ENAME|| '님의 업무는 ' ||JOB || '입니다.' FROM EMP;
4) 컬럼의 중복값 제거 : DISTINCT
- 검색대상의 중복되지 않는 유일한 하나의 컬럼값만 검색하는 기능을 제공하는 키워드
SELECT DISTINCT 검색대상, 검색대상,... FROM 테이블명
-- 📌오라클을 제외한 나머지 프로그램에서는 검색대상 딱 하나만 가능
SELECT DISTINCT 검색대상 FROM 테이블명
<컬럼의 중복값 제거 예시>
-- EMP테이블에 저장된 모든 사원의 업무 검색
--> 중복값 검색
SELECT JOB FROM EMP;
-- EMP테이블에 저장된 모든 사원의 업무 검색
--> 중복 컬럼값을 제외한 유일한 하나의 컬럼값 검색
SELECT DISTINCT JOB FROM EMP;
-- 📌오라클은 DISTINCT 키워드에 검색대상을 여러개 나열하여 선언 가능
-- (조합이 다른경우 다른값으로 인식해 제공)
SELECT DISTINCT JOB,DEPTNO FROM EMP;
4. SELECT구문에 WHERE절 추가
1) WHERE절 - 조건절
- 조건식을 사용하여 조건이 참(TRUE)인 행만 검색하는 기능 : SELECTION
SELECT 검색대상, 검색대상, ... FROM 테이블명 WHERE 조건식
<WHERE절의 예시>
하나의 테이블 내 모든 컬럼 값 확인하기
--EMP테이블에 저장된 모든 사원의 사원번호, 사원이름, 업무, 급여 검색
SELECT EMPNO, ENAME, JOB, SAL FROM EMP;
//EMP테이블의 모든 컬럼값 검색
SELECT * FROM EMP;
문자값 비교, 계산
- 문자값도 < > <= >= = <>, ^= , != 계산 가능
//EMP테이블에서 [사원이름이 KING]인 사원의 사원번호, 사원이름, 업무, 급여 검색
//(조건식) : ENAME='KING'
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE ENAME='KING';
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE ENAME='king'; --error (문자구분함)
--EMP테이블에서 [업무가 SALESMAN이 아닌] 사원의 사원번호, 사원이름, 업무, 급여 검색
//<> : 같지않다는 기호
//(조건식) : JOB<>'SALESMAN'
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE JOB<>'SALESMAN';
//(조건식) : JOB!='SALESMAN'
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE JOB!='SALESMAN';
//(조건식) : JOB^='SALESMAN'
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE JOB^='SALESMAN';
--EMP테이블에서 [사원이름이 A,B,C 중 하나로 시작되는] 사원의 사원번호, 사원이름, 업무, 급여 검색
//(조건식) : ENAME<'D'
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE ENAME<'D';
숫자값 비교, 계산
--EMP테이블에서 [사원번호가 7698]인 사원의 사원번호, 사원이름, 업무, 급여 검색
//(조건식) : EMPNO=7698
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE EMPNO=7698;
--EMP테이블에서 [급여가 2000 이상]인 사원의 사원번호, 사원이름, 업무, 급여 검색
//(조건식) : SAL>=2000
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE SAL>=2000;
날짜값 비교, 계산
- 날짜값은 '' 안에 [RR/MM/DD] 형식의 패턴으로 표현 가능 (오라클만가능)
--EMP테이블에서 [입사일이 1981년 6월 9일]인 사원의 사원번호, 사원이름, 업무, 급여,입사일 검색
--📌날짜값은 '' 안에 [RR/MM/DD] 형식의 패턴으로 표현 가능 (오라클만가능)
//(조건식) : HIREDATE='81/06/09'
SELECT EMPNO, ENAME, JOB, SAL, HIREDATE FROM EMP WHERE HIREDATE='81/06/09';
//날짜값은 '' 안에 [YYYY-MM-DD] 형식의 패턴으로 표현 가능
//(조건식) : HIREDATE='1981-06-09'
SELECT EMPNO, ENAME, JOB, SAL, HIREDATE FROM EMP WHERE HIREDATE='1981-06-09';
--EMP테이블에서 [1981년 5월 1일 전에 입사한] 사원의 사원번호, 사원이름, 업무, 급여, 입사일 검색
//(조건식) : HIREDATE<'81/05/01'
SELECT EMPNO, ENAME, JOB, SAL, HIREDATE FROM EMP WHERE HIREDATE<'81/05/01';
논리연산식
- A AND B
- A OR B
--EMP테이블에서 [업무가 SALESMAN인 사원 중 급여가 1500이상인] 사원의 사원번호, 사원이름, 업무, 급여 검색
//(조건식) : JOB='SALESMAN' AND SAL>=1500
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE JOB='SALESMAN' AND SAL>=1500;
--EMP테이블에서 [부서번호가 10이거나 업무가 MANAGER인 사원의] 사원의 사원번호, 사원이름, 업무, 급여, 부서번호 검색
//(조건식) : DEPTNO=10 OR JOB='MANAGER'
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP WHERE DEPTNO=10 OR JOB='MANAGER';
범위연산식
- 컬럼값이 작은값부터 큰값 범위의 포함될 경우의 조건식을 표현
컬럼명 BETWEEN 작은값 AND 큰값
선택 연산식
- 컬럼값이 나열된 값들 중 하나인 경우의 조건식을 표현
컬럼명 IN (값1 , 값2 , 값3 , ... )
//1.
--EMP테이블에서 [급여가 1000~3000 범위]에 포함되는 사원의 사원번호, 사원이름, 업무, 급여 검색
//(조건식) : SAL>=1000 AND SAL<=3000
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE SAL>=1000 AND SAL<=3000; --연산식 3개
//(조건식) : BETWEEN 1000 AND 3000 -> 연산식 1개 (검색속도가 훨씬 빠름)
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE SAL BETWEEN 1000 AND 3000;
//2.
--EMP테이블에서 [업무가 ANALYST 이거나 SALESMAN인] 사원의 사원번호, 사원이름, 업무, 급여 검색
//(조건식) : JOB='ANALYST' OR JOB='SALESMAN'
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE JOB='ANALYST' OR JOB='SALESMAN';
//(조건식) : JOB IN ('ANALYST','SALESMAN') -> 연산식 1개 (검색속도가 훨씬 빠름)
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE JOB IN ('ANALYST','SALESMAN');
//3.
--EMP테이블에서 [사원이름이 A로 시작되는] 사원의 사원번호, 사원이름, 업무, 급여 검색
//(조건식) : ENAME>'A' AND ENAME<'B'
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE ENAME>'A' AND ENAME<'B';
//(조건식) :ENAME BETWEEN 'A' AND 'B' AND ENAME<>'B'
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE ENAME BETWEEN 'A' AND 'B' AND ENAME<>'B';
패턴 연산식
- 검색패턴문자를 사용할 경우의 조건식을 표현
- 검색패턴문자란? 부정확한 값을 검색하기 위해 사용하는 문자
--> % : 전체
--> _ : 임의의 문자 하나
--> 컬럼명 LIKE '검색패턴문자를 포함한 값'
--> = 연산자 사용 : 일반문자로 인식 'A%'
--> LIKE 연산자 사용 : 패턴문자로 인식 'A%'
--EMP테이블에서 [사원이름이 ALLEN인] 사원의 사원번호, 사원이름, 업무, 급여 검색
//(조건식) : ENAME='ALLEN'
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE ENAME='ALLEN';
-- 검색패턴문자를 사용하지 않아도 패턴 연산식을 이용해 컬럼값을 비교하여 검색 가능
//(조건식) : ENAME like 'ALLEN'
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE ENAME like 'ALLEN';
//검색값을 = 연산자로 비교할 경우 `%` 또는 `_` 기호를 일반문자로 처리하기 때문에 검색 실패
--SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE ENAME = 'A%'; --검색실패 , = 연산자 대신 LIKE 연산자 사용해야함
--EMP테이블에서 [사원이름이 A로 시작되는] 사원의 사원번호, 사원이름, 업무, 급여 검색
//(조건식) : ENAME LIKE 'A%'
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE ENAME LIKE 'A%'; --A로 시작되는 모든 것
//(조건식) : ENAME>'A' AND ENAME<'B'
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE ENAME>'A' AND ENAME<'B';
//(조건식) :ENAME BETWEEN 'A' AND 'B' AND ENAME<>'B'
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE ENAME BETWEEN 'A' AND 'B' AND ENAME<>'B';
--EMP테이블에서 [사원이름이 A로 끝나는] 사원의 사원번호, 사원이름, 업무, 급여 검색
//(조건식) : ENAME LIKE '%A'
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE ENAME LIKE '%A'; --A로 끝나는 모든 것
--EMP테이블에서 [사원이름에 A가 포함되어 있는] 사원의 사원번호, 사원이름, 업무, 급여 검색
//(조건식) : ENAME LIKE '%A%'
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE ENAME LIKE '%A%'; --A가 포함되는 모든 것
--EMP테이블에서 [사원이름의 두번째 문자가 L인] 사원의 사원번호, 사원이름, 업무, 급여 검색
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE ENAME LIKE '_L%'; -- 첫번째문자 : 임의의 문자 하나 + 두번째문자 : L로 시작되는 모든 것
[ _ ] 일반문자가 포함된 모든 사원의 정보를 검색하는 방법
-- INSERT구문
-- EMP테이블에 새로운 사원정보를 삽입하여 저장
SELECT * FROM EMP;
INSERT INTO EMP VALUES (9000,'M_BEER','CLERK',7788,'81/12/12',1300,NULL,10);
COMMIT;
SELECT * FROM EMP;
-- EMP 테이블에서 [사원이름에 _ 일반문자가 포함된 사원]의 사원번호, 사원이름, 업무, 급여 검색
-- (조건식) : ENAME LIKE '%_%'
-- LIKE를 사용했기에 [_]를 검색패턴문자로 인식하여 모든 사원정보가 검색됨
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE ENAME LIKE '%_%'; --검색실패
-- ESCAPE 키워드로 설정된 문자를 사용하여 표현 불가능한 문자를
-- 회피문자(ESCAPE CHARACTER)로 표현하면 일반문자로 처리해 검색 가능
-- (조건식) : ENAME LIKE '%\\_%' ESCAPE'\\'
-- LIKE를 사용해도 ESCAPE 키워드와 함께 사용하므로서 [_]를 일반패턴문자로 인식함
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE ENAME LIKE '%\\_%' ESCAPE'\\'; --검색성공
-- DELETE구문
-- EMP 테이블에서 [사원번호가 9000인 사원정보 삭제
DELETE FROM EMP WHERE EMPNO=9000;
COMMIT;
SELECT * FROM EMP;
NOT 연산식
- NOT 연산식을 이용하여 조건식의 결과가 참이 아닌 경우의 조건식을 표현
--EMP테이블에서 [업무가 MANAGER가 아닌] 사원의 사원번호, 사원이름, 업무, 급여 검색
//(조건식) : JOB <>'MANAGER'
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE JOB <>'MANAGER';
//(조건식) : NOT(JOB='MANAGER')
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE NOT(JOB='MANAGER');
IS 연산식 / IS NOT 연산식 + NULL키워드
- NULL 키워드 : 값이 존재하지 않는 것을 표현하기 위한 키워드
- 테이블 안 컬럼에는 NULL도 존재 가능!
- IS 연산식을 함께 사용하여 NULL를 구분하기 위한 조건식 표현 가능
- 컬럼명 IS NULL (컬럼에 저장된 값이 NULL 입니까?)
- 컬럼명 IS NOT NULL (컬럼에 저장된 값이 NULL이 아닙니까?)
--EMP테이블에서 모든 사원의 사원번호, 사원이름, 업무, 급여, 성과금 검색
SELECT EMPNO, ENAME, JOB, SAL, COMM FROM EMP;
--EMP테이블에서 [성과금이 존재하지 않는 사원]의 사원번호, 사원이름, 업무, 급여, 성과금 검색
--NULL은 값이 아니므로 연산 불가능 (연산 자체 불가능)
--SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE COMM = NULL; --검색 실패
--EMP테이블에서 [성과금이 존재하지 않는 사원]의 사원번호, 사원이름, 업무, 급여, 성과금 검색
//(조건식) : COMM IS NULL
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE COMM IS NULL;
--EMP테이블에서 [성과금이 존재하는 사원]의 사원번호, 사원이름, 업무, 급여, 성과금 검색
//(조건식) : COMM IS NOT NULL
SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE COMM IS NOT NULL;
5. SELECT구문에 ORDER BY절 추가
1) ORDER BY절
- 컬럼값을 비교하여 행이 정렬되도록 검색하는 기능을 제공
- 데이타는 행단위 처리!!!!!
- 문자값, 숫자값, 날짜값은 정렬 가능
- ASC : 오름차순 정렬 / DESC : 내림차순 정렬
- 만약 첫번째 정렬 컬럼값이 같은 경우, 두번재 정렬 설정을 통해 정렬 가능
- 다음 정렬 설정으로 값을 비교해주세요!
SELECT 검색대상, 검색대상, ... FROM 테이블명 [WHERE 조건식]
ORDER BY {컬럼명|연산식|별칭|COLUMN_INDEX} {ASC|DESC},
{컬럼명|연산식|별칭|COLUMN_INDEX} {ASC|DESC},
...
2) ORDER BY절의 예시 - 기본
ORDER BY절 사용 전
--EMP테이블에 저장된 모든 사원의 사원번호, 사원이름, 업무, 급여, 부서번호 검색
//기본적으로 테이블에 행이 삽입되어 저장된 순서대로 검색
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP;
ORDER BY절 사용 후
- 오름차순 정렬(생략가능) vs 내림차순 정렬(생략불가능)
--EMP테이블에 저장된 모든 사원의 사원번호, 사원이름, 업무, 급여, 부서번호를 [부서번호로 오름차순] 검색
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP ORDER BY DEPTNO ASC;
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP ORDER BY DEPTNO;
--EMP테이블에 저장된 모든 사원의 사원번호, 사원이름, 업무, 급여, 부서번호를 [부서번호로 내림차순] 검색
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP ORDER BY DEPTNO DESC;
--EMP테이블에 저장된 모든 사원의 사원번호, 사원이름, 업무, 급여, 부서번호를 [이름으로 오름차순] 검색
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP ORDER BY ENAME;
--EMP테이블에 저장된 모든 사원의 사원번호, 사원이름, 업무, 급여, 부서번호를 [이름으로 내림차순] 검색
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP ORDER BY ENAME DESC;
--EMP테이블에 저장된 모든 사원의 사원번호, 사원이름, 업무, 급여, 부서번호를 [급여로 오름차순] 검색
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP ORDER BY SAL;
--EMP테이블에 저장된 모든 사원의 사원번호, 사원이름, 업무, 급여, 부서번호를 [급여로 내림차순] 검색
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP ORDER BY SAL DESC;
--EMP테이블에 저장된 모든 사원의 사원번호, 사원이름, 업무, 급여, 부서번호를 [입사일로 오름차순] 검색
SELECT EMPNO,ENAME,JOB,SAL,DEPTNO,HIREDATE FROM EMP ORDER BY HIREDATE;
--EMP테이블에 저장된 모든 사원의 사원번호, 사원이름, 업무, 급여, 부서번호를 [입사일로 내림차순] 검색
SELECT EMPNO,ENAME,JOB,SAL,DEPTNO,HIREDATE FROM EMP ORDER BY HIREDATE DESC ;
3) ORDER BY절의 예시 - 응용
ORDER BY {컬럼명|연산식|별칭|COLUMN_INDEX}
--EMP테이블에 저장된 모든 사원의 사원번호, 사원이름,연봉(급여*12)을 [연봉으로 내림차순 검색]
//1-1.
//ORDER BY 연산식 : ORDER BY SAL*12 DESC
SELECT EMPNO,ENAME,SAL*12 "ANNUAL" FROM EMP ORDER BY SAL*12 DESC ;
//1-2.
//ORDER BY 별칭 : ORDER BY ANNUAL DESC
SELECT EMPNO,ENAME,SAL*12 "ANNUAL" FROM EMP ORDER BY ANNUAL DESC ;
//1-3.
//SELECT 구문에서 검색대상에는 자동으로 첨자(INDEX: 위치를 표현하는 숫자값)가 부여 - 컬럼첨자(COLUMN_INDEX)
//오라클에서는 첨자가 '1'부터 1씩 증가되는 숫자값으로 표현
//ORDER BY COLUMN_INDEX : ORDER BY 3 DESC (= SAL*12 "ANNUAL"에 해당함)
SELECT EMPNO,ENAME,SAL*12 "ANNUAL" FROM EMP ORDER BY 3 DESC ;
//2.
--EMP테이블에 저장된 모든 사원의 사원번호, 사원이름, 업무, 급여, [부서번호를 부서번호로 오름차순 정렬]하고
--[부서번호가 같은 경우 급여로 내림차순 정렬]하여 검색
//ORDER BY 컬럼명 : ORDER BY DEPTNO ASC, SAL DESC
SELECT EMPNO,ENAME,JOB,SAL,DEPTNO FROM EMP ORDER BY DEPTNO ASC, SAL DESC ; --ASC 생략가능
//3.
--EMP테이블에서 급여가 3000이상인 사원의 사원번호, 사원이름, 업무, 급여, 부서번호를 [부서번호로 오름차순 정렬]
//(조건식) : SAL >= 3000
//ORDER BY 컬럼명 : ORDER BY DEPTNO
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP WHERE SAL >= 3000 ORDER BY DEPTNO;
6. SELECT구문의 최종 정리
//순서대로 절 나열하여 해석하는 것이 중요
//FROM -> WHERE -> SELECT -> ORDER BY (무조건 4번째)
SELECT 검색대상,검색대상,... FROM 테이블명
[WHERE 조건식]
[ORDER BY {컬럼명|연산식|별칭|COLUMN_INDEX} {ASC|DESC}, {컬럼명|연산식|별칭|COLUMN_INDEX} {ASC|DESC}, ...],
7. SELECT구문 연습문제
--검색대상 : EMP 테이블의 모든 컬럼값 검색
SELECT * FROM EMP;
--문제1. 사원이름이 SCOTT인 사원 검색
SELECT * FROM EMP WHERE ENAME='SCOTT';
SELECT * FROM EMP WHERE ENAME LIKE 'SCOTT';
-- USER : 현재 접속 사용자의 이름을 표현하는 키워드
SELECT * FROM EMP WHERE ENAME=USER;
--문제2. 급여가 1500 이하인 사원 검색
SELECT * FROM EMP WHERE SAL<=1500;
--문제3. 1981년에 입사한 사원 검색
SELECT * FROM EMP WHERE HIREDATE BETWEEN '81/01/01' AND '81/12/31';
SELECT * FROM EMP WHERE HIREDATE>='81/01/01' AND HIREDATE<='81/12/31';
-- 비권장(잘못된 결과가 나올 수 있음)
SELECT * FROM EMP WHERE HIREDATE LIKE '81%';
--비권장 (__언더바 2개와 [YYYY-MM-DD]형식이라는 것을 사용해 임의의 문자를 표현함)
SELECT * FROM EMP WHERE HIREDATE LIKE '81/__/__';
--문제4. 업무가 SALESMAN이거나 MANAGER인 사원 중 급여가 1500 이상인 사원 검색
--잘못된결과 / AND와 OR중 무조건 AND부터 계산하기 때문
SELECT * FROM EMP WHERE JOB='SALESMAN' OR JOB='MANAGER' AND SAL>=1500;
-- 괄호 사용 필요
SELECT * FROM EMP WHERE (JOB='SALESMAN' OR JOB='MANAGER') AND SAL>=1500;
-- 더 효율적, 빠르고 정확함
SELECT * FROM EMP WHERE JOB IN ('SALESMAN','MANAGER') AND SAL>=1500;
--문제5. 부서번호가 10인 사원 중 급여가 1000 ~ 3000 범위에 포함된 사원 검색
SELECT * FROM EMP WHERE DEPTNO=10 AND SAL>=1000 AND SAL<=3000;
SELECT * FROM EMP WHERE DEPTNO=10 AND SAL BETWEEN 1000 AND 3000; --더 효율적
--문제6. 부서번호가 30인 사원 중 성과급이 존재하는 사원 검색
SELECT * FROM EMP WHERE DEPTNO=30 AND COMM IS NOT NULL;
--문제7. 모든 사원을 업무로 오름차순 정렬하고 같은 업무의 사원은 급여로 내림차순 정렬하여 검색
SELECT * FROM EMP ORDER BY JOB ASC, SAL DESC;
SELECT * FROM EMP ORDER BY JOB, SAL DESC;
--문제8. 업무가 SALESMAN인 사원을 급여로 내림차순 정렬하여 검색
SELECT * FROM EMP WHERE JOB='SALESMAN' ORDER BY SAL DESC;
반응형
'sql' 카테고리의 다른 글
[sql] 6. JOIN문 (0) | 2024.05.07 |
---|---|
[sql] 5. 그룹함수 | GROUP BY절 | HAVING절 (0) | 2024.05.07 |
[sql] 4. 함수(FUNCTION)의 개념 및 단일함수 (0) | 2024.05.06 |
[sql] 2. DBMS 다운로드 및 설치법 (0) | 2024.05.05 |
[sql] 1. 관계형 DATABASE와 SQL의 개념 (0) | 2024.05.05 |