2. SELECT - 데이터 조회하기


0. DESC

  • 특정 테이블에 어떤 컬럼이 있는지 조회
desc tablename;

1. SELECT

select (컬럼명 또는 표현식) from (테이블명, 뷰명);

  • 모든 컬럼 조회하기
    • select * from emp;
  • 원하는 컬럼만 조회하기
    • select empno, ename from emp;
    • emp의 empno, ename 두 컬럼 조회
  • 표현식 사용하여 출력
    • 컬럼 이름 이외에 출력하기를 원하는 내용 추가
    • select 컬럼명, ‘출력문구’ from 테이블명;
  • 컬럼 별칭 사용하여 출력
    • 컬럼명을 별칭으로 변경하여 출력
    • select 컬럼명 as “별칭” from 테이블명;
    • select 컬럼명 as 별칭 from 테이블명;
    • select 컬럼명 “별칭” from 테이블명;
    • select 컬럼명 별칭 from 테이블명;
    • 별칭에 공백 혹은 특수기호가 있을 시 큰따옴표 필수

      2. distinct

    • 중복된 값 제거후 출력
    • select distinct 컬럼명 from 테이블명;
    • 1개의 키워드로 모든 컬럼 적용
select deptno1 from student;
101
102
103
201
202
101
102
202

select distinct deptno1 from student;
101
103
202
301
201
102

3. 연결연산자

  • 서로 다른 컬럼을 연결하여 출력
  • 문자열 연결 가능
  • select 컬럼명 ‘문자열’ 컬럼명 from 테이블명;
select name, height from student;
서진수	180
서재수	172
이미경	168

select name || '의 키는 ' || height || 'cm, 몸무게는 '|| weight || 'kg 입니다' from student;
서진수의 키는 180cm, 몸무게는 72kg 입니다
서재수의 키는 172cm, 몸무게는 64kg 입니다
이미경의 키는 168cm, 몸무게는 52kg 입니다

4. 산술연산자

  • dual 테이블 이용
    • 연산을 위해 사용하는 가상 테이블
select 100*0.3 from dual;
30

select ename, sal, sal+100 from emp;

ENAME             SAL    SAL+100
---------- ---------- ----------
SMITH             800        900
ALLEN            1600       1700
WARD             1250       1350

5. where

  • 원하는 조건만 조회

    select 칼럼명 from 테이블명 where 조건;

select ename, sal, deptno from emp where deptno = 10;
ENAME             SAL     DEPTNO
---------- ---------- ----------
CLARK            2450         10
KING             5000         10
MILLER           1300         10
  • 조건연산자
    • between a and b : a와 b사이 범위 값
    • in(a,b,c) : a거나 b거나 c인 조건
    • is null / is not null
      • null : 0이나 공백이 아닌, 데이터가 없는 것
    • a and b : a와 b를 모두 만족하는 값
    • a or b : a나 b 둘중 하나라도 만족하는 값
    • not a : a가 아닌 모든 조건
    • like : 특정 조건을 만족하는 값
      • % : 글자수 제한없고 아무 글자나 가능
      • _ : 글자수는 한글자, 아무 글자나 가능
select name from student where name like '김%';
NAME      
----------
김재수
김신영
김진욱
김문호
김주현

select name from student where name like '김_욱';
NAME      
----------
김진욱
  • 검색하고자 하는 문자에 %이나 언더바가 포함될 경우
    • escape문자를 표시
select employee_id, job_id from employees where job_id like '%PR*_%' escape '*';

EMPLOYEE_ID JOB_ID    
----------- ----------
        204 PR_REP 

6. order by

  • 출력결과를 정렬
  • asc : 오름차순, 기본값
  • desc : 내림차순
  • sql문의 가장 마지막에 입력
  • 데이터가 많을수록 정렬 시 DBMS에 부담이 간다

    select~ from ~ order by 컬럼명 혹은 컬럼번호 asc or desc;

select name, height, weight from student where grade = 1 order by height asc, 3 desc;
--키를 오름차순 정렬, 같은키가 있을경우 3번컬럼인 몸무게를 내림차순으로 정렬

NAME           HEIGHT     WEIGHT
---------- ---------- ----------
이윤나            162         48
허우              163         51
인영민            173         69
안은수            175         63
김주현            179         81

7. 집합연산자

  • 기존 연산자
    • 하나의 데이터들끼리 연산
  • 집합 연산자
    • 여러건의 데이터의 집합을 연산
    • union
      • 두 집합을 더해서 결과 출력
      • 중복 값 제거하고 정렬
    • union all
      • 두 집합을 더해서 결과 출력
      • 중복 제거x, 정렬x
    • intersect
      • 교집합 결과를 출력, 정렬
    • minus
      • 차집합 결과를 출력, 정렬
      • 쿼리의 순서가 중요하다
  • 주의사항
    • 두 집합의 select절에 오는 컬럼의 개수가 동일해야 한다
    • 두 집합의 select절에 오는 컬럼의 데이터형이 동일해야 한다
--set1 : aaa,aaa,bbb
--set2 : bbb,ccc,ccc

select id1, name1 from set1 union select id2, name2 from set2;
       ID1 NAME1     
---------- ----------
         1 AAA       
         2 BBB       
         3 CCC
         
select id1, name1 from set1 union all select id2, name2 from set2;
       ID1 NAME1     
---------- ----------
         1 AAA       
         1 AAA       
         2 BBB       
         2 BBB       
         3 CCC       
         3 CCC
         
select id1, name1 from set1 intersect select id2, name2 from set2;
       ID1 NAME1     
---------- ----------
         2 BBB

select id1, name1 from set1 minus select id2, name2 from set2;
       ID1 NAME1     
---------- ----------
         1 AAA
         
select id2, name2 from set2 minus select id1, name1 from set1;
       ID2 NAME2     
---------- ----------
         3 CCC