은은하게 코드 뿌시기

기본 구문 본문

Database -Mysql,Oracle

기본 구문

은은하게미친자 2022. 6. 22. 17:27
728x90

-- 오라클기반

 

SELECT 열1,열2,....열N
FROM 테이블, 테이블2
WHERE 조건식
GROUP BY 그룹식
HAVING 그룹조건식
ORDER BY 정렬식

 

* SELECT : 데이터 조회

 

SELECT * FROM 테이블명;

SELECT 조회할열 FROM 테이블명;

 

select * from emp;

select empno, ename, deptno from emp; 

 

*DISTINCT :열 중복제거

 

select distinct deptno from emp;

select distinct job, deptno from emp;

 

* as : 별칭쓰기  

select avg(sal) as 평균연봉 from emp;

select Ename as 사원명 , (SAl*0.05) as 세금  
from scott.emp;  

 

*order by , 오름차순(asc), 내림차순(desc) : 정렬하기 

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

-- 부서번호 기준으로 내림차순으로 정렬하되  부서번호가 같다면 사원이름을 기준으로 오름차순으로 정렬
select EMPNO AS EMPLOYEE_NO,
   ENAME AS EMPLOYEE_NAME,
       JOB,
       MGR   AS MANAGER,
       HIREDATE,
       SAL   AS SALARY,
       COMM  AS COMMISSION,
       DEPTNO AS DEPARTMENT_NO
  from emp
  ORDER by DEPTNO desc, ENAME;

 

 

*where 절 : db의 if문, 조건절

-- 부서번호가 10인 사원의 사원명, 급여, 부서번호 을 조회
select ENAME, SAL, DEPTNO  from emp
where DEPTNO = 10;

*AND/OR연산자 : 여러개 조건식을 사용

-- AND / OR 연산자 이용
-- 급여가 1200 초과, 3500 미만 인 사원 조회

select * from emp
where sal>1200 and sal<3500;

 

* 연산자 종류 : >,>=,<,<=

* NOT :논리부정 연산자 

-- 부서번호 30이 아닌 사원의 사번, 이름 커미션을 조회
select empno, ename, comm, DEPTNO from emp
where not deptno = 30;

 

기타 같은 방식으로 처리되는 다른 방법들

select empno, ename, comm, DEPTNO from emp
where not deptno in (30);

select empno, ename, comm, DEPTNO from emp
where deptno != 30;

select empno, ename, comm, DEPTNO from emp
where deptno <> 30;

-- 오라클은 됨 
-- select empno, ename, comm, DEPTNO from emp
-- where deptno ^= 30;

 


* in 연산자 : 특정열 데이터값만 조회하고자 할때 사용.
-- 커미션이 300, 500, 1400인 사원을 조회

select * from emp
where comm in (300,500,1500);

 

select * from emp
where comm = 300 or comm = 500 or comm = 1500;


* BETWEEN A AND B 연산자

select * from emp

where sal between 2000 and 3000;

 

-- 2000~3000 외의 값 응용

select * from emp

where sal not between 2000 and 3000;

 

* LIKE 연산자 : 일부문자열이 포함된 데이터 조회

-- 사원명이 s자로 시작 하는 사원의 사원 번호와 이름을 조회
select empno, ename from scott.emp
where ename LIKE 'S%';   -- S로 시작하는 이름 검색 

 

-- 사원명이 s자로 끝나는 사원 조회

SELECT * FROM EMP
WHERE ENAME LIKE '%S';

7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975   20
7876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100   20
7900 JAMES CLERK 7698 1981-12-03 00:00:00 950   30


-- 사원명이 S가 포함되는 사원의 전체 조회
select * from scott.emp
where ename LIKE '%S%';  -- S가 포함 된 이름 검색

 

  -- 추가수당이 존재하지 않고 , 상급자가 있고, 직책이 'MANAGER', 'CLERK' 인 사원중에서
  -- 사원이름의 두번째글자가 'L'이아닌 사원의 정보
SELECT *
  FROM EMP
 WHERE COMM IS NULL
   AND MGR IS NOT NULL
   AND JOB IN ('MANAGER', 'CLERK')
   AND ENAME NOT LIKE '_L%';

 

 

* GROUP BY절 : 결과값을 원하는 열로 묶어 출력.

-- group by 같은거끼리 묶음.
-- 부서별 평균 월 급여를 구하세용.

select deptno, avg(sal) from emp
group by deptno;  

 

* HAVING절 : GROUP BT절에 조건을 줄떄 사용하는 절
-- having   GROUP BY한 결과에 조건을 붙이고 싶을때, 즉 GROUP BY의 WHERE절
-- 부서별 평균 월 급여가 2000 이상

select DEPTNO , avg(sal)
from emp
group by deptno
having avg(sal) >= 2000;

 

 

* IS NULL 연산자 : 

*null : 현재 무슨값인지 확정되지 않는 상태.

select * from emp

where comm is null;

 

select * from emp

where comm = null;

 

* 집합연산자 :  

UNION 합집합, 결과값은 중복제거됨.
UNION ALL 합집합, 중복결과값도 제거업싱 모두 출력
MINUS 차집합, 먼저작성한 SELECT문과 결과값에서 다음 SELECT문의 결과값을 차집합 처리합니다.
먼저 작성한 ELECT문의 결과값 중 다음 SELECT문에 존재하지 않는 데이터만 출력됩니다.
INTERSECT 교집합,먼저작성한 SELEECT문과 다음 SELET문의 결과 값이 같은데이터만 출력합니다.

SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP
WHERE DEPTNO = 20 
AND SAL > 2000
union
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP
WHERE DEPTNO = 30 
AND SAL > 2000;

-- 집합연산자 사용하지 않은 방식
SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP
WHERE DEPTNO IN (20,30) 
AND SAL > 2000;

 

* 서브쿼리 : 필요한 데이터를 추가로 조회하기 위해 SQL문내부에서 사용하는 SELECT문


-- 존스보다 급여가 높은 사람 조회
select * 
from emp
where sal > (select sal 
 from emp
             where ENAME = 'jones');

 

* EXISTS 연산자 : 서브쿼리의 결과값이 하나 이상 존자해마녀 조건식이TRUE,존재하지않으면 FALSE

select *

from emp

where exists(select dname

                    from dept

                     where deptno = 10);
             
             
-- 알렌보다 추가수당 많이 받는 사람 조회
select * 
from emp
where comm > (select comm
  from emp 
  where ENAME = 'allen');

 

 

728x90
Comments