SQL

[ORACLE] 데이터베이스의 구조 / SQL / 데이터 조회 명령어

sian han 2022. 3. 16. 20:43

 

※ Oracle 개념 단계별로 접근하기

 

 DB - DBMS - RDBMS - Oracle 

 

1. DB ( Database, 데이터베이스 )

 - 중복을 최소화하고, 다수의 사용자가 공유할 수 있도록 데이터들을 모아둔 시스템

 - 관련된 데이터를 모아 이를 통합하여 관리할 수 있도록 하는 것

 - 데이터를 저장하고 다수의 사용자가 동시에 사용하더라도 데이터의 정합성과 속도가 보장되는 것이 데이터베이스

 - 효율적으로 접근이 가능하고 질의를 할 수 있음

 

 

 

2. DBMS ( 데이터베이스 관리시스템, DataBase Mamanagement System )

 - 모든 응용프로그램들이 데이터베이스를 공유할 수 있도록 관리해 주고

   데이터베이스를 유지하기 위한 일련의 소프트웨어 시스템

 

  [1] 정의기능 : 논리적, 물리적 구조정의 및 구조 매핑

  [2] 조작기능 : 데이터 검색, 삽입, 수정, 삭제

  [3] 제어기능 : 데이터의 정확성과 안정성 유지

 

 

 

3. RDBMS ( 관계형 데이터베이스, Relational-Database )

  - 관계 : 두 테이블 사이에 존재. 

             부모 - 자식 관계로 이루어져있음

             부모 테이블의 기본키(Primary key)는 자식 테이블에 외래키(Foreign Key)로 전이 되어진다

  - 행과 열로 이루어진 2차원의 테이블 구조에 데이터를 저장

  - 질의어를 사용한 데이터 접근 방법

  - 대표적 RBDMS : 오라클

 

 

 


 

 

 

※ 데이터베이스의 구조

 필드(Field) - 레코드(Record) - 테이블(Table) 

 

필드(컬럼) : 테이블의 열 ( 가로줄 ) 에 해당되는 것

레코드 : 필드들의 집합체, 테이블의 각 행(row)

인덱스 : 데이터베이스에서 데이터를 신속하게 찾을 수 있도록 정렬된 목록, 키

테이블 : 데이터베이스라는 큰 통안에 정보가 들어있는 다수의 테이블이 존재함

       ㄴ 데이터를 저장하기 위한 기본 형식을 제공하는 것이 바로 테이블

          - 여러 개의 레코드를 담고 있는 논리적인 구조

          - 테이블은 데이터를 저장하고 추가, 삭제, 수정 하는 등의 기본적인 데이터 관리 기능을 함

 

테이블

 

▶ 우리가 원하는 자료를 찾아보려면

 1) 데이터베이스에 접속하고

 2) 테이블을 찾아봐야 함

 


 

 

SQL (구조적 질의 언어 Structured Query Language)

  - RDBMS를 액세스해서 데이터를 조작할 수 있는 언어 

  - 틀과 패턴에 맞게 조건들을 나열하기만 하면 SQL은 우리가 원하는 결과를 가져다 줌

 

 

▶ SQL 문의 종류

 

  ▷ DML ( Data Manipulation Language)

      - 데이터 조작어 : 데이터를 조회, 저장, 삭제할 때 사용되는 SQL 문장

          ex ) SELECT - INSERT, UPDATE, DELETE

  ▷ DDL ( Data Definition Language) :

      - 데이터 정의어, 객체 조작어 : 데이터베이스나 테이블을 생성할 목적으로 사용하는 언어

          ex ) CREATE, DROP, ALTER, TRUNCATE

  ▷ DCL ( Data Control Language) 

      - 데이터 제어어 : 데이터베이스에 있는 데이터에 접근을 제어하는 언어

          ex ) GRANT - 데이터베이스 사용자에게 사용권한을 부여하는 명령

                REVOKE - 그랜트의 반대로 사용권한을 취소하는 명령

 

 


 

※ 데이터 조회 명령어

   - 테이블, 컬럼 입력 시 대소문자 구분 X , 데이터는 대소문자 구분 O

 

 

 

▶ DESC (Describe) 

  - 특정 테이블에 어떤 칼럼이 있는지 조회하는 명령어

desc student;

 

▶ select 

select [칼럼명 또는 표현식] from [테이블명, 뷰명];
select employee_id, first_name, hire_date from employees;
select employee_id from employees;
select * from employees;

 * : employees 테이블의 모든 컬럼 조회

 

 

 ▷ 표현식 ' ' 

    - 표현식을 사용하여 select (데이터조회 = 출력) 할 수 있다

select first_name, '님 환영합니다.' from employees;

- 컬럼 이름 이외에 출력하기를 원하는 내용을 의미
  select 구분 뒤에 '(홑따옴표)로 묶어서 사용

 

 

 ▷ 별칭 as 

      - 테이블의 컬럼명을 임시로 바꿔서 보여주는 것

select employee_id as "사원 아이디" from employees;
select first_name 이름, salary "급여!" from employees;

1 ) 컬럼명 뒤에 as "별칭"

  - 공백이나 일부 특수기호가 있으면 반드시 ""로 묶어줘야 함 - 오라클에서 "" 는 여기서만 사용함 ! 

2 ) 컬럼명 뒤에 별칭

  - as, ""  생략가능

 

 

 ▷ 중복데이터제거 distinct 

     - 중복된 값을 제거하고 출력하기

select deptno from emp; // employee 테이블에서 deptno (부서번호) 을 출력해라
select distinct deptno from emp; // `` 근데 중복되는 부서번호는 빼고 출력해라

  

 ▷ 연결연산자 || 

1. select name, position from professor; // professor 테이블에서 name, position 두개의 컬럼을 보여줭

2. select name || ' ' || position as "교수이름" from professor;

  2 = > professor 테이블의 name, position 컬럼을 연결해서 "교수이름" 라는 별칭을 가진 한개의 컬럼으로 출력해줘

                                                                            ▽

1과 2

   - 연산자의 우선순위 : () 가먼저 , and 가 먼저

 

 

 

▷ dual 가상테이블 

  - oracle 은 select 절과 from 절이 필수임

  - 따라서 딱히 특정테이블에서 불러오는 값이 아니면 뒤에 dual 을 넣어주면 된다

select 100*0.3, 200-60,100+null,20*null from dual;

 

  = > 식이 컬럼으로, 계산된 값이 데이터로 입력되었다. 

        특정 테이블에서 데이터를 불러오는 것이 아니라 그저 식을 계산한 것이다

           - null : 존재하지 않는다는 것

 

  ★ null : 오라클의 데이터 종류 중 한가지로 어떤 값인지 모른다는 의미
              데이터가 없음을 의미함, 아직 정의되지 않은 미지의 값

 

        - null에는 어떤 연산을 수행해도 결과값은 항상 null이 나옴

        - - null 값은 '=' 연산을 사용할 수 없음 => is null, is not null을 이용해야 함 

        

      

 

 

▶ where

    - 조건에 맞는 데이터 조회하기

    - 자바의 if 문과 유사하다

   select 컬럼명(*) from 테이블명
    where 조건;

 

 

  ▷ 숫자조건 

  ▽​ emp 테이블에서 10번 부서에 근무하는 사원의 이름과 급여, 부서번호를 출력

select ename, sal, deptno
from emp
where deptno = 10;

 

 

  ▷ 문자조건 

    - '작은따옴표' 로 감싸주기

   ▽​ emp 테이블에서 이름이 scott인 사람의 이름과 사원번호, 급여를 출력

select ename, empno, sal
from emp
where ename = 'SCOTT';

  = > 위에서 말했듯이, 데이터는 대소문자 구분하기 때문에 소문자 scott 으로 작성 시 데이터가 조회되지 않음

 

 

  ▷ 날짜조건 

   - '작은따옴표' 로 감싸주기

  ▽ professor 테이블에서 입사일이 1987-01-30 인 레코드 조회하기

select * from professor
where hiredate = '1987-01-30';
or
where hiredate = '1987/01/30';

 

 

 

  ▷ 비교조건 

 

    비교연산자  =,!=, >,<,>=,<=
    논리연산자  and, or, not

       - 검색 조건이 2개 이상인 경우 논리연산자를 사용해야함

       - 논리 연산자 우선순위 : () > not > and > or
    범위연산자  between A and B
    목록연산자   in(A,B,C) ☆
    특정패턴검색  like

    같지 않다  !=, <>,  ^=

 

 

 

 

한눈에 이해하기 어려운것들만 정리해보자면 -

 

[1] between 

select name , weight FROM student
where not (weight not between 60 and 80);

 

 ◆ 문자, 날짜between을 이용해 범위값을 구할 수 있다

 

    문자   

      - ename이 B~G 사이인 사람 조회 

select * from emp
where ename >= 'B' and ename<='G';
select * from emp
where ename between 'B' and 'G';

      - ㄱ으로 시작하는 사람

select * from emp
where name >='가' and name <'나';

 

     날짜   - employees에서 입사일이 2005~2006년 사이의 사원 조회

select *from employees
where hire_dat between '2005-01-01' and '2006-12-31';

 

 

[2] in 

 - 같은 종류, 다른 조건 컬럼 두개를 하나로 묶어서 간단하게 명령할 수 있다

   - In 연산자를 사용하여 student 테이블에서 101번 학과 학생과 102번 학과 학생들을 모두 출력

      ㄴ "학과학생" 라는 컬럼의 종류는 같지만 101,102 라는 조건이 다르다

select * from student
where deptnol in (101,102);

 

 

[3] Like 포함된 것 조회

 

  ◆ like 와 함께 사용되는 기호

   : 글자수 제한 없고 어떤 글자가 와도 됨
     _ : 언더바 개수만큼 자릿수 지정. 어떤 글자가 와도 됨

  

  - student 테이블에서 성이 "김"씨인 사람을 조회 (like + % ) 

select * from student 
where name like '김%';

 

  - employees에서 job_id가 PR_ 가 포함된 것 조회

select * from employees
where job_id like '%PR_%';

 

 

▶ order by 출력결과 정렬하기

  - asc : 오름차순 정렬(기본값)

  - desc : 내림차순 정렬

 

오름차순 => order by 컬럼명 
내림차순 => order by 컬럼명 desc

  - sql 문장의 가장 마지막에 적어야 함

 

 

▽​ student 테이블을 사용하여 1학년 학생의 이름과  키, 몸무게를 출력. 단, 키는 작은 순서대로 출력하고 몸무게는 많은 사람부터 출력

select name, height, weight from student
where grade = 1
order by height, weight desc; // 키 오름차순, 몸무게 내림차순

  = > 키가 같은 경우 몸무게를 내림차순으로 정렬 ( 동일한 값이 있을경우 둘중에 우선순위를 정해주는것 )