DKU/데이터베이스기초

[데이터베이스기초] 4주차 - SQL(1)

ʕ민지ʔ 2022. 9. 2. 15:43

1.  SQL 언어

SQL 개요

  • 관계형 데이터베이스의 장점 중의 하나는 사용자들이 쉽게 사용할 수 있는 SQL(Structed Auery Language) 언어를 제공한다는 것이다.
  • 사용자는 간단한 SQL문을 사용하여 DBMS에게 작업을 요청한다.
  • 기본적인 SQL문들은 표준화되어 있기 때문에 거의 대부분의 DBMS 제품에 동일하게 적용된다.
  • SQL 언어는 비절차적 언어이다. 따라서 사용자는 자신이 원하는 바 만을 명시하며, 원하는 바를 DBMS가 어떻게 처리할지는 명시할 필요가 없다. (**C나 Java와 같은 언어들이 절차적 언어이다.)
  • SQL은 1974년 IBM 연구소에서 System R 프로젝트를 통해 개발되었고, 1986년 미국 표준기구 ANSI에서 SQL 표준을 제정하였다.

SQL의 두 가지 사용 방식

  1. 대화식 SQL
    : DBMS 회사에서 제공하는 유틸리티 프로그램(예: ORACLE의 SQL*Plus)을 이용하여 사용자가 직접 SQL문을 입력하고 실행결과를 확인하는 방식
  2. 내장 SQL
    : SQL문이 C, Java와 같은 프로그램 안에 포함되어져서 사용되는 방식

실습 테이블

 

2. SELECT

기본 문법

select <컬럼 이름>
from <테이블 이름>
where <검색 조건> ;
  • 예시
select ename, sal
from emp
where empno = 7788;
  • 모든 부서의 이름을 보이시오
select dname
from dept;
  • 'SALES' 부서는 어느 지역에 있는가
select loc
from dept
where dname='SALES';
  • 사원번호가 7369인 사원의 이름, 연봉, 담당 업무를 보이시오
select ename, sal, job
from emp
where empno = 7369;
  • 담당업무 목록을 보이시오

- 중복 포함

select job
from emp;

- 중복 제거

select distinct job
from emp;
  • 'SCOTT' 사원의 모든 정보를 보이시오
select *
from emp
where ename='SCOTT';
  • 담당업무가 SALESMAN인 사원 중에 연봉을 1500보다 많이 받는 사람의 이름과 연봉을 보이시오
select ename, sal
from emp
where job='SALESMAN' and sal>1500;
  • 담당업무가 CLERK이거나 연봉을 3000 이하로 받는 사람의 이름과 연봉, 담당업무를 보이시오
select ename, sal, job
from emp
where job='clerk' or sal<=3000;

 

비교 연산자 =, >, <, <=, >=, <>

  • 같지 않다는 의미의 연산자는 <>이다.
  • 값의 종류(자료형)에 따른 비교 연산자 적용
    - 숫자형 : sal > 5000
    - 문자형 : job <> 'clerk'
    - 날짜형 : hiredate > '1981-05-01'
  • Null은 컬럼의 자료형에 상관없이 어디나 저장될 수 있다.
    - comm is null
    - comm is not null

조건절에 쓸 수 있는 연산자들

  • 비교 연산자
  • BETWEEN .. AND..
  • NOT BETWEEN.. AND..
  • IN ( , , )
  • NOT IN ( , , )
  • LIKE
  • %
  • _
  • IS NULL
  • IS NOT NULL

[실습과제1] SQL문 작성하기

https://ghi512.tistory.com/7

 

[데이터베이스기초] 4주차 - 실습문제

[실습과제1] 1. BOSTON에 있는 부서의 이름은 무엇인가 select dname from dept where loc = 'boston'; 2. 담당업무가 ANALYST인 사원의 이름, 입사일자를 보이시오 select ename, hiredate from emp where job='a..

ghi512.tistory.com

 

3. 기본 함수

COUNT, MAX, MIN, AVG, SUM
IN, BETWEEN.. AND
LIKE
  • 전체 사원은 모두 몇 명인가
select count(*) # count()는 튜플의 개수를 세는 것이다.
from emp;
select count(*) as no_of_emp # as는 임시로 컬럼 이름을 바꿔 보여준다
from emp;
  • 가장 높은 연봉의 금액은 얼마인가
select max(sal)
from emp;
  • 담당업무가 CLERK인 사원들의 연봉 합계를 보이시오
select avg(sal)
from emp
where job='clerk';
  • 모든 사원들의 현재 연봉 금액과, 연봉을 10% 올렸을 때 금액을 보이시오
select sal, sal*1.1
from emp;
select sal as before_sal,
sal*1.1 as after_sal
from emp;
  • 담당업무가 CLERK, ANALYST, SALESMAN 인 사원들의 이름, 담당업무, 급여를 보이시오
select ename, job, sal
from emp
where job in ('clerk', 'analyst', 'salesman');
  • 연봉이 3000에서 4000 사이인 사원의 이름, 연봉을 보이시오
select ename, sal
from emp
where sal between 3000 and 4000;
  • 사원 이름이 A로 시작하는 사원들의 이름을 보이시오
select ename
from emp
where ename like 'A%';
  • 이름에 IN이 포함된 사원들의 이름을 보이시오
select ename
from emp
where ename like '%IN%';
  • 이름의 세 번째 글자가 A인 사원들의 이름을 보이시오
select ename
from emp
where ename like '__A%';

[실습과제2] SQL문 작성하기

https://ghi512.tistory.com/7

 

[데이터베이스기초] 4주차 - 실습문제

[실습과제1] 1. BOSTON에 있는 부서의 이름은 무엇인가 select dname from dept where loc = 'boston'; 2. 담당업무가 ANALYST인 사원의 이름, 입사일자를 보이시오 select ename, hiredate from emp where job='a..

ghi512.tistory.com

 

4. 정렬, 그룹

GROUP BY / ORDER BY / HAVING
ASC : 오름차순(기본) / DESC : 내림차순
  • 사원들의 이름을 알파벳 순 (오름차순)으로 보이시오
select ename
from emp
order by ename;
  • 사원들의 이름을 알파벳 역순 (내림차순)으로 보이시오
select ename
from emp
order by ename desc;
  • 사원들의 부서 번호와 담당업무를 보이되 먼저 부서 번호로 정렬(오름차순)하고 부서 내에서는 담당업무명을 내림차순으로 정렬하시오 <<정렬 기준이 2개 이상인 경우>>
select deptno, job
from emp
order by deptno, job desc;
  • 사원들의 담당업무 목록을 보이시오. (담당업무에는 어떤 것들이 있는지)
select distinct job
from emp;
  • 각 담당업무별로 몇 명의 사원이 있는지 보이시오
select job, count(*)
from emp
group by job;
명령어 순서: where.. group by.. order by
  • 담당업무와 담당업무별 인원수, 급여 합계를 보이되 PRESIDENT는 제외하시오. (담당업무별 인원수가 많은 순으로 출력하시오)
select job, count(*), sum(sal)
from emp
where job <> 'president'
group by job
order by count(*);

 

group by 사용 시, select 다음에 올 수 있는 것은
1. group by에 서술된 컬럼 이름
2. count, max, min, avg와 같은 집계 함수이다.
  • 다음과 같은 코드는 에러는 없지만 의미 없는 결과를 도출한다.
select job, ename
from emp
group by job;
order by를 group by와 함께 사용하는 경우
ordery by 다음에 올 수 있는 것은 select에 있는 컬럼 이름이다.
  • 아래의 코드 역시 에러는 없지만 의미 없는 결과를 도출한다.
select job, count(*), sum(sal)
from emp
group by job
order by hiredate, sal;
  • 담당업무와 담당업무별 인원수, 연봉 합계를 보이되 PRESIDENT는 제외하시오. 그리고 급여 합계가 4000 이상인 경우만 보이시오. (담당업무별 인원수가 많은 순으로 출력하시오.)
select job, count(*), sum(sal)
from emp
where job <> 'president'
group by job
having sum(sal) >= 4000
order by count(*) desc;
having만들어진 그룹에 적용되는 조건을 지정할 때 사용
where각각의 행(row)에 적용되는 조건을 지정할 때 사용

 

[실습과제3] SQL문 작성하기

https://ghi512.tistory.com/7

 

[데이터베이스기초] 4주차 - 실습문제

[실습과제1] 1. BOSTON에 있는 부서의 이름은 무엇인가 select dname from dept where loc = 'boston'; 2. 담당업무가 ANALYST인 사원의 이름, 입사일자를 보이시오 select ename, hiredate from emp where job='a..

ghi512.tistory.com