-------------------- 필수조건 ----------------------
SELECT 전체검색 or 원하는 데이터만 검색
FROM table명(데이터가 저장된 위치)
-------------------- 옵션조건 ----------------------
[
1. WHERE 조건문 : 일반 사용자가 요청한 데이터 검색
2. GROUP BY 그룹컬럼 : 지정된 그룹별로 데이터 처리
HAVING 그룹조건 : 그룹별 조건
3. ORDER BY 컬럼명 ASC|DESC : 정렬
(ASC : 올림차순 / DESC : 내림차순)
]
---------------------------------------------------
SELECT() FROM (table명 , view명 , SELECT~~)
컬럼명1, 컬럼명2, 컬럼명3...
*
select * from emp;
SELECT empno, ename, hiredate, job,sal FROM emp;
: 문자열 결합 |
SQL> SELECT ename ||'님의 이번달 급여는 '||sal||'입니다' FROM emp;
ENAME||'님의이번달급여는'||SAL||'입니다'
-----------------------------------------
SMITH님의 이번달 급여는 800입니다
ALLEN님의 이번달 급여는 1600입니다
SQL> SELECT empno "사번", ename "이름", hiredate "입사일", sal "급여",comm as 성과급 FROM emp;
WHERE 조건(if)
GROUP BY 그룹컬럼
HAVING 그룹 조건
ORDER BY 컬럼명(ASC|DESC)
WHERE 컬럼명 연산자 값
-- 80년도에 입사한 사람 찾기
SQL> select ename, sal,hiredate from emp where hiredate>='80/01/01' and hiredate<='80/12/31';
-- 이름중에 KING이 들어간 사람
WHERE ename='KING';
-- 이름중에 알파벳순서가 K보다 뒤인 사람 찾기
WHERE ename>'KING';
-- 이름중에 알파벳순서가 K보다 앞인 사람 찾기
WHERE ename<'KING';
산술연산자 : SELECT 뒤에서 사용
나머지 연산자 : WHERE 뒤에서 사용
+
, -
, *
, /
-- NULL값을 처리하지 않고 더한 경우
SQL> SELECT ename,sal,comm,sal+comm FROM emp;
ENAME SAL COMM SAL+COMM
-------------------- ---------- ---------- ----------
SMITH 800
ALLEN 1600 300 1900
-- NULL값을 처리하여 더한 경우
SQL> SELECT ename,sal,comm,sal+NVL(comm,0) FROM emp;
ENAME SAL COMM SAL+NVL(COMM,0)
-------------------- ---------- ---------- ---------------
SMITH 800 800
ALLEN 1600 300 1900
/
SQL> SELECT ename "이름", sal "급여" , sal*12 "연봉" FROM emp;
이름 급여 연봉
-------------------- ---------- ----------
SMITH 800 9600
ALLEN 1600 19200
=
: 같다 -- 사원중에 급여가 3000인 사원 모두 출력하기
SQL> SELECT * FROM emp WHERE sal=3000;
-- 사원중에 급여가 1500인 사람의 이름, 입사일,급여 출력하기
SQL> SELECT ename,hiredate,sal FROM emp WHERE sal=1500;
-- 사원중에 이름이 SCOTT인 사람의 이름, 입사일,직위,급여 출력하기
SQL> select ename,hiredate,job,sal from emp where ename='SCOTT';
SQL> select ename,hiredate,job,sal from emp where ename='scott'; // 값 소문자 ERROR
-- 사원 중에 직위가 MANAGER인 사원의 모든 정보 출력
SQL> SELECT * FROM emp WHERE JOB='MANAGER';
-- 입사일이 1982-12-9인 사원의 이름,입사일,급여 출력
SQL> SELECT ename,hiredate,sal FROM emp WHERE hiredate='82/12/09'; // 날짜 작은따옴표 사이에
!=
, <>
, ^=
: 같지 않다.-- JOB이 CLERK이 아닌 사람의 이름,직위 출력
SQL> SELECT ENAME,JOB FROM EMP WHERE JOB!='CLERK';
SQL> SELECT ENAME,JOB FROM EMP WHERE JOB<>'CLERK';
SQL> SELECT ENAME,JOB FROM EMP WHERE JOB^='CLERK';
<
: 작다-- 사원중에 급여가 1500보다 작은 사원의 이름,급여 출력
SQL> SELECT ENAME,SAL FROM emp WHERE sal<1500;
-- 입사일이 82/12/09보다 먼저 입사한 사원의 모든 정보 출력
SQL> SELECT * FROM emp WHERE hiredate<'82/12/09'; // 날짜도 비교연산자 사용 가능 , 작은따옴표 사용
>
: 크다-- 입사일이 82/12/09보다 늦게 입사한 사원의 모든 정보 출력
SQL> SELECT * FROM emp WHERE hiredate>'82/12/09'; // 날짜도 비교연산자 사용 가능 , 작은따옴표 사용
<=
: 작거나 같다
>=
: 크거나 같다
AND | OR | |
---|---|---|
TT | T | T |
TF | F | T |
FT | F | T |
FF | F | F |
자바에서는
&&
,||
의 역할
오라클에서&
는 Scanner ,||
는 문자열 결합 역할을 담당함
OR
: 둘 중에 한 개가 true면 trueAND
: 둘 다 true이면 true -- 급여가 1500이상 3000이하인 사람의 모든 정보 출력
SQL> SELECT * FROM emp WHERE sal>=1500 AND sal<=3000;
-- 급여가 1500이상 또는 3000미만인 사람의 모든 정보 출력
SQL> SELECT * FROM emp WHERE sal>=1500 OR sal<=3000;
NULL
: 아예 값이 없는 것IS NULL
: NULL값일 경우에 처리하는 연산자-- 성과급이 없는 사원의 모든 정보
SQL> SELECT * FROM emp WHERE comm IS NULL;
-- 사수가 없는 직원의 이름,입사일,직위 출력
SQL> SELECT ename,hiredate,job FROM emp WHERE mgr IS NULL;
IS NOT NULL
: NULL값이 아닐 경우에 처리하는 연산자-- 성과급이 있는 사원의 이름과 성과급 정보 출력
SQL> SELECT ename,comm FROM emp WHERE comm IS NOT NULL;
IN
: OR가 여러개일 경우에 대체하는 연산자IN
IN
(조건값1,조건값2,조건값3);-- 사원중에 부서가 10 또는 20인 사원의 모든 정보 출력
SQL> SELECT * FROM emp WHERE deptno=10 OR deptno=20;
SQL> SELECT * FROM emp WHERE deptno IN(10,20);
-- 사원중에 JOB이 MANAGER OR CLERK인 직원의 모든 정보 출력
SQL> SELECT * FROM emp WHERE job IN('MANAGER','CLERK');
SQL> SELECT * FROM emp WHERE job IN('MANAGER'OR'CLERK'); // OR 쓰면 IN과 중복 error
-- 직원중에 hiredate가 '81/06/09','81/11/17','82/01/23'인 사람의 모든 정보 출력
SQL> SELECT * FROM emp WHERE hiredate IN('81/06/09','81/11/17','82/01/23');
NOT IN
(조건값1,조건값2,조건값3);-- 사원중에 부서가 10 또는 20이 아닌 사원의 모든 정보 출력
SQL> SELECT * FROM emp WHERE deptno NOT IN(10,20);
BETWEEN ~ AND ~
: 기간이나 범위를 구할 때 사용// JAVA
sal>=100 && sal<=3000
// ORACLE
sal BETWEEN 100 AND 3000
sal>=100 AND sal<=3000
-- 1981년에 입사한 모든 사원의 정보를 출력
SQL> SELECT * FROM emp WHERE hiredate BETWEEN '81/01/01' AND '81/12/31'; // 날짜도 포함해서 처리 가능
-- 알파벳순으로 정렬했을때 'ADAMS'와 'KING'사이에 있는 이름 출력
SQL> SELECT ename FROM emp WHERE ename BETWEEN 'ADAMS' AND 'KING'; // 문자도 포함해서 처리 가능
NOT BETWEEN ~ AND ~
-- 1981년에 입사하지 않은 모든 사원의 정보를 출력
SQL> SELECT * FROM emp WHERE hiredate NOT BETWEEN '81/01/01' AND '81/12/31';
LIKE
: 유사문자열 찾기형식 : WHERE
컬럼명 LIKE
'%
찾을문자 %'
%
: 문자열 , 찾을 문자의 글자수를 모르는 경우 '%' | ? | '%' : 무슨데이터 들어갈지 모르는 경우(1개) |
-- 이름이 A로 시작하는 사원의 모든 정보 출력
SQL> SELECT * FROM emp WHERE ename LIKE 'A%';
-- 이름이 S로 끝나는 사원의 모든 정보 출력
SQL> SELECT * FROM emp WHERE ename LIKE '%S';
-- 이름이 K를 포함하는 사원의 모든 정보 출력
SQL> SELECT * FROM emp WHERE ename LIKE '%K%';
-- 동에서 신촌을 포함하는 동 출력
SQL> SELECT dong FROM zipcode WHERE dong LIKE '%신촌%';
-- 82년에 입사한 사원의 모든 정보 출력
SQL> SELECT * FROM emp WHERE hiredate LIKE '82%';
_
: 한글자(한글,숫자,알파벳 전부 가능) , 글자수를 아는 경우 -- 이름이 5글자이고, 가운데 O가 있는 사원의 모든 정보 출력
SQL> SELECT * FROM emp WHERE ename LIKE '__O__';
-- 이름이 4글자인 사람의 모든 정보 출력
SQL> SELECT * FROM emp WHERE ename LIKE '____';
GROUP BY
: 그룹별 처리HAVING
: 그룹 조건ORDER BY
: 정렬ORDER BY
컬럼명 ASC
orDESC
오라클 번호는 0번이 아닌 1번부터 시작됨
DESC
: 내림차순-- 급여순으로 내림차순 정렬
SQL> SELECT ename,sal FROM emp ORDER BY sal DESC;
ENAME SAL
-------------------- ----------
KING 5000
FORD 3000
-- 2중정렬 : sal(2)이 같은 값이 존재하면 그 부분만 ename(1)순으로 재정렬
SQL> SELECT ename,sal FROM emp ORDER BY sal DESC,ename DESC;
SQL> SELECT ename,sal FROM emp ORDER BY 2 DESC,1 DESC;
-- 2중정렬 : 부서 번호별로 정렬 + 부서 내에서 급여별로 재정렬
SELECT ename,sal,deptno FROM emp ORDER BY deptno ASC,sal DESC;
ASC
: 오름차순(디폴트 , ORDER BY만 쓰고 생략가능)-- 급여순으로 오름차순 정렬
SQL> SELECT ename,sal FROM emp ORDER BY sal ASC;
SQL> SELECT ename,sal FROM emp ORDER BY sal; // ASC는 생략 가능
SQL> SELECT ename,sal FROM emp ORDER BY 2; // sal 대신 2로 입력해도 됨(ename은 1)
ENAME SAL
-------------------- ----------
SMITH 800
JAMES 950
ADAMS 1100
컬럼이 같아야 사용할 수 있음
UNION
UNION ALL
INTERSECT
MINUS A-B
MINUS B-A
DISTINCT
: 중복된 데이터를 제외하고 출력SQL> SELECT DISTINCT job FROM emp;
SQL> SELECT DISTINCT deptno FROM emp;
&
: 입력하시오SQL> SELECT ename FROM emp WHERE empno=&no;
Enter value for no: 7788
old 1: SELECT ename FROM emp WHERE empno=&no
new 1: SELECT ename FROM emp WHERE empno=7788
ENAME
--------------------
SCOTT
AND
: 자바에서의 & 기능LIKE
: 자바에서의 contains--
: 한줄 주석/* */
: 여러줄 주석검색어 입력받아서 해당 문자열 포함하는 데이터 찾기
// 검색어 입력 받기
Scanner scan = new Scanner(System.in);
System.out.println("검색어 입력 : ");
String data = scan.next();
// SQL문장 전송
String sql="SELECT ename FROM emp WHERE ename LIKE '%'||?||'%'";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, data);