티스토리 뷰
SQLD 기본 (select, where, desc, between, in, like %, order by, distinct)
praybe 2021. 12. 2. 15:01User 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;