본문 바로가기

스터디 티스토리

SQL 메모장



??-SQL 방식으로 비표준언어도 사용함.

IBM에서 처음으로 만들어져 있다. 만들자마자 바로 공개되어서 ANSI/ISO에서 표준화되었다.


기능은 똑같지만, 명령어는 다르다.


DDL(데이터 정의 언어) : 테이블 또는 객체 단위

생성 : create

삭제 : drop

수정 : alter


DML (데이터 언어) : 데이터 단위


insert : 입력

delete : 삭제

update : 수정

select : 검색


식별자 칼럼의 사용 : 테이블을 사용


record , row : 행에 저장

column : 테이블의 각 컬럼은 데이터를 구별할 수 있는 속성을 표현


오라클은 대소문자를 구별하지 않는다.


/*

select * from emp;

select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp;

select empno,ename,sal from emp;

select ename  from emp;

*/


/* 


알리아스 : 별칭

알리아스 부여시 "" 사용하는 경우

1. 대소문자 구별을 원할때

2. 공백 포함시

3. _,# 특수문자 사용시

4. 숫자로 시작할 경우


*/


select sal*12 asal from emp;


select sal*12 as asal from emp;


select sal*12 "Annual Salary" from emp;


/*

컬럼 또는 문자(숫자)연결

*/


SELECT ename || ' (은)는 소유 $'|| ename sname from emp;


/*

where절 : 조건을 부여한다. 위치를 어떻게 사용하냐?

*/

select * from emp;

select * from emp where deptno = 10;

/* 같지 않은 조건 */

select * from emp where hiredate>'81-12-03';

select * from emp where hiredate <> '81-11-17';

select * from emp where hiredate = '81-11-17';

select * from emp where hiredate != '81-11-17';

select * from emp where hiredate ^= '81-11-17';

/* 범위 설정 */

select * from emp where sal > 2000 and sal < 5000 ;

select * from emp where sal >= 2000 and sal <= 5000 ;

/* 문자열을 사용하여 */

select * from emp where sal between 1000 and 1500; 

select * from emp where sal not between 1000 and 1500; 

/* 한 개, 두 개 이상 데이터 지정하기 */

select * from emp where sal in (1300,2450,3000) ;

select * from emp where sal not in (1300,2450,3000) ;


/* 검색어 : 포함된 문자 검색 

% : 앞뒤에 문자 포함 여부를 검색한다

*/


select * from emp where ename like '%S';

select * from emp where ename like 'S%';

select * from emp where ename like '%S%';


/* 

문제 : emp 테이블에서 사원이름과 월급을 출력하는데 각각의 칼럼명을 

이 름 , 월 급 으로 바꿔서 출력 

*/


/* 

문제2 : emp 테이블에서 7566 , 7782 , 7788인 사원을 제외한 사람들의 

사원번호, 이름 월급을 출력 

*/


select * from emp;

select ename "이 름",sal "월 급" from emp; /* 문제 1 완료 */


select empno,ename from emp where empno not in (7566,7782,7788); /* 문제 2 완료 */

select empno,ename,sal from emp where empno not in (7566,7782,7788); 


select empno,ename from emp where empno in (7566,7782,7788);


/* 

3 : emp 테이블에서 사원 이름 중 S가 포함되지 않은 사람들 중 

부서 번호가 20번인 사원들만 출력

*/


select * from emp where ename not in like '%S%' and deptno=20;

select ename,deptno from emp where ename not in ('S') and deptno=20;

select ename,deptno from emp where ename not like '%S%' and deptno=20; /* 문제 3 완료 */


/*

4번 문제 : emp 표 에서 직책이 'SALESMAN' 이고 월급이 1000이상인

사원의 이름과 월급을 출력

*/


select ename,sal from emp where job like 'SALESMAN' and sal > 1000; /* 문제 4 완료 */

select ename,job,sal from emp where job like 'SALESMAN' and sal > 1000;

select ename,job,sal from emp where job in 'SALESMAN' and sal > 1000;

select ename,job,sal from emp where job='SALESMAN' and sal > 1000;

select ename,job,sal from emp where job='SALESMAN' and sal >= 1000;


/* 

null : 데이터 없음

*/


select * from emp where comm is not null;

select * from emp where comm <> null; /* null 명령어에는 != , <> , ^= 기호를 사용할수 없다 */

select * from emp where comm is null;


/*

order by 절(정렬) 

*/


select * from emp order by sal asc; /*오름차순 : asc 생략 가능 */

select * from emp order by sal ; /* 숫자는 0~Max 까지 */

select * from emp order by sal desc; /*내림차순 = desc */

select * from emp order by ename desc; /* Z~A까지 */

select * from emp order by ename ;


select ename,sal from emp order by sal asc , ename asc; /* 2차 정렬 : 겹치는 요소가 있다면 2차 정렬이 가능하다 */

select ename,sal from emp order by sal, ename; 

select ename,sal from emp order by sal desc, ename; 


/*

문제

1) emp 테이블에서 10번 부서에서 근무하는 사원의 이름과 입사일, 급여를

구할 때 급여가 급여가 많은 사람에서 적은 사람순으로 정렬(내림차순)

*/


select ename,hiredate,sal from emp where deptno=10 order by sal desc; /* 정렬 1문제 완료 */


/*

2번 문제 : emp 테이블에서 직책이 'MANAGER'인 사원을 뽑는데 월급이 낮은 사람

순으로 이름, 직책, 월급 출력(오름차순)

*/


select ename,job,sal from emp where job='MANAGER' order by sal; /* 정렬 2문제 완료 */


/*

dual : 가상의 테이블 , 사용자 데이터가 있는 테이블에서 유래하지 않은 상수 값

       날짜,산술,연산 등에 주로 이용

*/


select sysdate from emp;

select sysdate from dual;

select ascii('-') from dual; /* 문자열이나 특수문자는 ''를 사용한다 */


/*

함수

대소문자 조작 함수

*/

select lower('HELLO WOrld') from dual; /* 대문자 -> 소문자 */

select upper('HELLO WOrld') from dual; /* 소문자 -> 대문자 */

select lower(ename) from emp;

select initcap('hello world') from dual; /* 문자열과 문자열 연결*/

select initcap(ename) from emp;


/* 문자 조작 함수 : 문자 , 문자열 */


        /*    문자열         인덱스(숫자) */

select concat('Hello',' World') from dual; /* 문자열과 문자열 연결 */

select substr('Hello World',3) from dual; /* 부여된 인덱스부터 마지막 인덱스까지 문자열 추출 */

select substr('Hello World',3,3) from dual; /* 부여된 인덱스부터 문자 3개만 추출 */

select substr('Hello World',-3,3) from dual; /* 문자열 뒤에서부터 3번쨰에서 시작해서 문자 3개 추출*/


select length('Hello World') from dual; /* 문자열의 길이를 구한다 */

          /*대상문자열     검색문자 검색인덱스:해당 위치부터 검색*/

select instr('Hello World','e') from dual; /*문자열에서 지정한 문자위 위치 탐색*/

select instr('Hello World','E') from dual; /*탐색이 안되면 0으로 표시*/

select instr('Hello World','o') from dual; /*처음으로 탐색한 위치를 표시*/

          /*대상문자열     검색문자 검색인덱스:해당 위치부터 검색*/

select instr('Hello World','o',6) from dual; /*해당 위치부터 검색*/

          /*대상문자열     검색문자 검색인덱스,반복횟수*/

select instr('Hello World','o',1,2) from dual; /*특정 문자의 위치를 몰라도 검색가능*/


오라클 4,5일간합니다. JSP 배울때 연동 실습에 대비해서 미리 SQL배우는것이지요.


ps. 최근 근황 - 국비지원 교육 받고 있습니다. 이번에는 자바랑 기타등등 배우는중입니다 ㄷ