티스토리 뷰

User name: Scott Tiger 입력하고 ctrl + enter

Scott 안에 데이터가 다음과 같이 저장되어 있는 것을 확인 할 수 있다.

2차원 테이블 형태로 엑셀과 매우 유사하다. 

Select를 입력하면 테이블에 저장된 데이터를 가져온다.

 

1. Select 뽑아내라 + * from 테이블 명

select * from emp;  --전체 칼럼을 다 출력

12명의 사원 정보가 저장되어 있는 것을 확인 할 수 있다.

 

 

select * from bonus;

보너스에는 아무 것도 없다.

 

 

select를 사용하여 다른 테이블들도 가져옵니다.

select * from dept;

 

select * from salgrade;

 

 

 

테이블을 뽑아낸 뒤 조건을 걸어 특정 정보를 추출할 수 있다.

2. select * from emp + where(조건, 특정 column명) sal >= 3000(급여가 3천 이상);

select * from emp where sal >= 3000;

 

-- 월급 800인 사원 정보
select * from emp where sal =800;

 

-- empno 7000이상인 사원들
select * from emp where empno >=7000;

 

-- 부서번호 20번인 모든 사원
select * from emp where deptno = 20;

 

 

3. 부정의 3가지 표현

!=  일반 개발자들이 많이 씀

<>  DBA들이 많이 씀

^=

--20번이 아닌 사람 표현 3가지
select * from emp where deptno != 20;
select * from emp where deptno <> 20;
select * from emp where deptno ^= 20;

 

 

 

4. desc 설명해라 + 테이블 명

desc = descriptoin

desc emp;
desc bonus;
desc dept;

--출력값에서 VARCHAR2는 문자열을 의미한다.
--DATE는 날짜다.

 

 

5. 특정 칼럼 추출

select 칼럼명 + from 테이블명

select * from emp;  --전체 칼럼을 다 출력
select ename from emp;  --특정 칼럼만 출력

 

칼럼 두 개를 출력하고 싶을 때는 쉼표를 사용하여 연달아 적으면 된다.

select ename, deptno from emp;

 

두 개의 칼럼을 추출하듯 새로운 칼럼도 생성할 수 있다.

select ename, sal, sal+100 from emp;

 

 

6. SQLD에서는 문자열은 무조건 작은 따옴표를 사용해야 한다.

큰 따옴표를 적으면 안되며 대소문자 또한 구분 해야 하니 주의한다.

--이름(ENAME)이 FORD인 사람의 사번(empno), 이름(ename), 급여(SAL)를 출력하는 쿼리문 
select * from emp where ename ='FORD';

 

날짜도 작은 따옴표 형태로 입력한다.

--1982년 1월 1일 이후에 입사한 사원을 출력하는 쿼리문
select * from emp where hiredate >= '1982/01/01';

--1981년 5월 이후에 입사한 사원
select * from emp where hiredate > '1981/05/01';

 

조건이 2개일 땐 and사용. 이 때도 역시 작은 따옴표와 대소문자에 주의 해야 한다.

-- 사원중에 job이 manager이고 부서 번호가 20번인 사원 정보 
select * from emp where job='MANAGER' and deptno =20;

 

-- or
select * from emp where job='MANAGER' or deptno =20;
-- 사원중에 job이 manage이고 부서 번호가 20번이 아닌 사람 
select * from emp where job='MANAGER' and deptno <>20;
select * from emp where job='MANAGER' and deptno !=20;
select * from emp where job='MANAGER' and not deptno = 20;

 

 

 

7. 범위 표현: >, <, between

DBA들은 between을 사용하며 이상 이하를 뜻한다.

-- 급여가 2000~3000 사이의 사원을 검색하는 쿼리문
select * from emp where sal>2000 and sal <3000;


-- 숫자형, 문자형, 날짜형에 사용 가능하다
select * from emp  where sal between 2000 and 3000;


-- 2000미만 3000초과 
select * from emp where sal not between 2000 and 3000;


-- 1981년 입사한 사원을 출력하는 퀴리문
select *from emp where hiredate BETWEEN '1981/01/01' and '1981.12.31';

 

 

 

8. or가 3개 이상일 때는 in을 사용한다. 

or가 2개 여도 in 사용 가능

-- 커미션(COMM)이 300 혹은 500 혹은 1400인 사원이 있는지 검색하는 쿼리문
select*from emp where comm=300 or comm= 500 OR comm= 1400; 
select*from emp where comm in(300, 500, 1400);

-- 커미션(COMM)이 300 혹은 500 혹은 1400이 아닌 사원
select*from emp where comm  not in(300, 500, 1400);

 

 

 

9. 데이터 문자를 찾을 때는 like를 사용한다.

Like + ' ' + 특정문자 + %,

--이름이 F로 시작하는 사람을 찾는 쿼리문
select * from emp where ename like 'F%';


-- 위치 상관 없이 이름에 A가 들어가는 사람 찾는 쿼리문
select *from emp where ename like '%A%';


-- 이름 N으로 끝나는 사람을 찾는 쿼리문
select *from emp where ename like '%N';


--이름의 두 번째 글자가 A인 사원을 찾는 쿼리문
select * from emp where ename like '_A%';


--이름의 세 번째 글자가 A인 사원을 찾는 쿼리문
select * from emp where ename like '__A%';


--이름에 A를 포함하지 않는 사람만 검색하는 쿼리문
select * from emp where ename not like '%A%';

 

 

 

10. Null을 위한 연산자

자바에서 null은 참조형에만 들어가고(String) 기본형에는 절대 들어가지 않았다.

그러나 oracle에서는 Number(7,2)든 date든 varchar2든 null이 들어갈 수 있다.

이런 식으로 바로 =null이라고 적으면 값이 나오지 않는다. 

null이란 미확정, 알 수 없는 값을 의미하므로 연산, 할당 비교가 불가능하다. 

따라서 아래와 같이 is null 혹은 is not null 이라고 적어야 한다.

-- 커미션(COMM)을 받지 않는 사원을 검색하는 쿼리문
select ename, job, comm from emp where comm is null;
select ename, job, comm from emp where comm is not null;

 

 

 

11. order by절 (정렬)

select * from 테이블명 order by 칼럼명 asc;

select * from 테이블명 order by 칼럼명 ;

오름차순이 디폴트이다.

 -- 사원들의 급여를 오름차순으로 정렬하는 쿼리문. 
 select * from emp order by sal asc; 
 --내림차순
 select * from emp order by sal desc;
 
 
-- 사원번호 순   
select * from emp order by empno; 
  
  
-- 이름이 사전 순   
select * from emp order by ename;

 

where절과 order by절 사이에 and 적지 말 것.

-- job salesman 이고, 이름을 사전순으로 정렬
select * from emp where job='SALESMAN' order by ename;

 

 

내림차순: select * from 테이블명 order by 칼럼명 desc;

-- 가장 최근에 입사한 사원부터 출력하는 쿼리문
select * from emp order by hiredate desc;

 

 

 

 

12. 중복제거 distinct

-- 사원들이 소속되어 있는 부서의 번호를 출력하는 쿼리문
select DISTINCT deptno from emp;

 

 

댓글