DATABASE BASIC

Let's Just Go·2022년 4월 25일
0

DATABASE

목록 보기
1/11

DATABASE


DATABASE BASIC

  • DB
    • Table
      - 데이터의 집합
      - Record : Table의
      - Field : Table의
      - 타입과 제약 조건 등을 지정하여 무결성을 유지할 수 있음

    • DDL(Data Definition Language)
      • 테이블로부터 데이터 구조를 생성(CREATE), 변경(ALTER), 삭제(DROP) 또는 이름을 변경(RENAME)하거나 구조만 남기고 데이터를 삭제(TRUNCATE)
        - CREATE
        - ALTER
        - DROP
        - RENAME
        - TRUNCATE

    • DML(Data Manipulation Language)
      - 데이터베이스로부터 데이터를 검색(SELECT)
      - 데이터베이스의 테이블에 새로운 행을 입력(INSERT)하고 변경(UPDATE)하고 기존의 행을 제거(DELETE)
      - SELECT
      - INSERT
      - UPDATE
      - DELETE

    • TCL(Transaction Control Language)
      - DML 명령문으로 만든 변경을 관리
      - COMMIT
      - ROLLBACK
      - SAVEPOINT

    • DCL(Data Control Languate)
      • 데이터베이스에 접근하고 사용할 수 있도록 권한을 부여 및 회수
        • GRANT
        • REVOKE

    • ;(세미콜론)을 적어야 문장이 끝났다고 생각함으로 문장이 끝나면 무조건 ; 작성

SELECT

  • SELECT
    • SELECT 컬럼명(단일 or 복수) FROM 테이블이름;

    • NULL : “데이터가 비어있다”라는 의미이며 공백과 숫자 0 은 다른 의미

    • ALIAS or AS를 활용하여 조회 시 테이블 or 컬럼명에 다른 이름 붙여서 사용

    • Oracle SQL 문자열 추가 : 컬러명 || 컬럼명

      -- 한줄 주석
      /*
      여러줄 주석 */
      
      /*  employees에 있는 모든 데이터를 선택
          SELECT 컬럼명(여러개 가능) FROM 테이블 이름; */
      SELECT
          *
      FROM
          employees;
      
      SELECT
          employee_id,
          first_name,
          last_name
      FROM
          employees;
      --특정 컬럼들의 이름을 적어 세부적으로 조회가능
      
      SELECT
          employee_id,
          first_name,
          last_name,
          salary,
          salary + salary * 0.1
      FROM
          employees;
      --컬럼을 조회하는 위치에서 사칙연산 가능 
      
      SELECT
          department_id,
          commission_pct
      FROM
          employees;
      --null : '데이터가 없다'는 뜻이며 숫자 0이나 공백이랑은 다른 것이고 '데이터가 비어있다'라는 뜻을 말함
      
      SELECT
          first_name AS 이름,
          last_name  AS,
          salary     AS 급여
      FROM
          employees;
      --alias or as를 통해 조회할 때 컬럼 or 테이블 명칭을 다른이름으로 붙여서 조회할 수 있음
      
      /* sql에서는 문자열을 연결할 때 ||을 사용하며 
          '사용하여 새로운 문자열을 추가할 수 있음 */
      
      SELECT
          first_name
          || ' '
          || last_name
          || '''s salary is $'
          || salary AS 급여내역
      FROM
          employees;
      
      SELECT DISTINCT
          department_id
      FROM
          employees;
      --DISTINCT : 조회할 때 중복을 제거하여 출력
      
      /*  ROWNUM ROWID
          (중요)ROWNUM : Query에 의해 반환되는 행 번호 출력
          ROWID : DB에서 행의 주소값을 반환 */
      SELECT
          ROWNUM,
          ROWID,
          employee_id
      FROM
          employees;
      
      SELECT
          salary
      FROM
          employees
      WHERE
          department_id = 80;
      
      SELECT
          job_id,
          SUM(salary),
          AVG(salary)
      FROM
          employees
      GROUP BY (
          job_id
      )
      ORDER BY
          AVG(salary) DESC;
      -- ctrl + f7을 누르면 줄개행으로 가독성있는 SQL구문 작성 가능

Where

  • WHERE
    • 특정 조건을 걸어 조회

      SELECT
          salary
      FROM
          employees
      WHERE
          salary > 5000;
      
      SELECT
          first_name,
          last_name,
          job_id
      FROM
          employees
      WHERE
          job_id = 'IT_PROG';
      
      SELECT
          *
      FROM
          employees
      WHERE
          last_name = 'King';
      
      SELECT
          *
      FROM
          employees
      WHERE
          department_id = 90;
      
      SELECT
          *
      FROM
          employees
      WHERE
          salary >= 15000;
      
      SELECT
          *
      FROM
          employees
      WHERE
          hire_date = '04/01/30';

데이터 행 제한

  • 데이터 행 제한 (BETWEEN, IN, LIKE)
    • WHERE 절에서 모두 사용
    • IN
      • 특정 값들과 비교할 때 사용
    • LIKE
      • % (뭐든), _(데이터의 위치를 찾아낼 때)
      • ‘%찾고자하는것%’ 으로 작성하면 앞 뒤에 ‘찾고자하는것’ 모든 것 조회할 수 있음
      • 간략한 키워드로 검색하는 게 이거 구만~~
    • IS NULL
      • NULL 값이 있는지 찾는 것
    • BETWEEN, IN, LIKE
      --데이터 행 제한 (BETWEEN, IN, LIKE)
      SELECT
          *
      FROM
          employees
      WHERE
          salary BETWEEN 15000 AND 20000;
      
      SELECT
          *
      FROM
          employees
      WHERE
          hire_date BETWEEN '03/01/01' AND '03/12/31';
      
      --IN연산자의 사용 (특정 값들과 비교할 때 사용)
      SELECT
          *
      FROM
          employees
      WHERE
          manager_id IN ( 100, 101, 102 );
      
      SELECT
          *
      FROM
          employees
      WHERE
          job_id IN ( 'IT_PROG', 'AD_VP' );
      /*LIEK 연산자 
      %는 뭐든, _는 데이터의 위치를 찾아낼 때 */
      
      SELECT
          first_name,
          hire_date
      FROM
          employees
      WHERE
          hire_date LIKE '03%';
      --hire_date가 03으로 시작하는 것 모든 것 조회
      
      SELECT
          first_name,
          hire_date
      FROM
          employees
      WHERE
          hire_date LIKE '%15';
      --hire_date가 15로 끝나는 것 모든 것 조회
      
      SELECT
          first_name,
          hire_date
      FROM
          employees
      WHERE
          hire_date LIKE '%05%';
      --hire_date가 앞 뒤가 05가 있는 모든 것 조회
      
      SELECT
          first_name,
          hire_date
      FROM
          employees
      WHERE
          hire_date LIKE '___05%';
      --4,5번째에서 05로 시작하고 이후 뒤에는 상관 X, 여기서는 5월로 시작하는 것 조회
      
      --IS NULL (null값을 찾는 것)
      SELECT
          *
      FROM
          employees
      WHERE
          manager_id IS NULL;
      -- manager_id가 null인 것을 조회
      
      SELECT
          *
      FROM
          employees
      WHERE
          commission_pct IS NULL;
      -- commission_pct가 null인 것을 조회
      
      SELECT
          *
      FROM
          employees
      WHERE
          commission_pct IS NOT NULL;
      -- commission_pct가 null인 아닌 것을 조회
      
      -- AND, OR 
      -- AND가 OR 보다 연산순서가 우선
      SELECT
          *
      FROM
          employees
      WHERE
          job_id = 'IT_PROG'
          OR job_id = 'FI_MGR'
          AND salary >= 6000;
      -- IT_PROG 이거나 FI_MGR인 사람의 연봉이 6000이상인 사람을 조회하기 때문에 6000이상이 아닌 사람도 조회
      -- AND가 OR보다 연산순서가 높으므로 job_id='FI_MGR'과 salary>=6000 먼저 수행한 값을 job_id='IT_PROG' 값과 연산
      
      SELECT
          *
      FROM
          employees
      WHERE
          ( job_id = 'IT_PROG'
            OR job_id = 'FI_MGR' )
          AND salary >= 6000;
      -- 연산순서 : salary가 6000이상으로 거르고 job_id가 FI_MGR이거나 IT_PROG이거나

Sort Data

  • 데이터 정렬
    • SELECT 구문의 가장 마지막에 배치하며 alias로도 정렬 가능

    • ASC(오름차순, dafault값) DESC(내림차순)

    • ORDER BY ~~~ ASC or DESC;

      -- 데이터 정렬 (SELECT 구문의 가장 마지막에 배치)
      -- ASC(오름차순 정렬, 기본값) DESC(내림차순 정렬)
      
      SELECT
          *
      FROM
          employees
      ORDER BY
          hire_data ASC;
      
      SELECT
          *
      FROM
          employees
      WHERE
          job_id = 'IT_PROG'
      ORDER BY
          first_name ASC;
      --직업아이디가 IT_PROG인 사람을 first_name을 A부터 차근 차근 내려가도록 정렬
      
      SELECT
          *
      FROM
          employees
      WHERE
          salary >= 5000
      ORDER BY
          employee_id DESC;
      --연봉이 5천이 넘는 사람 중 사원번호가 큰 값부터 내려가도록 정렬
      
      SELECT
          first_name,
          salary * 12 AS 연봉
      FROM
          employees
      ORDER BY
          연봉 DESC;

Practice

  • DATABASE Practice
    • 배운 내용을 이해하기 위해 연습
      -- 1. 모든 사원의 사원번호, 이름, 입사일, 급여를 출력하세요.
      SELECT
          employee_id,
          first_name,
          hire_date
      FROM
          employees;
      
      -- 2. 모든 사원의 이름과 성을 붙여 출력하세요. 열 별칭은 name으로 하세요.
      SELECT
          first_name
          || ' '
          || last_name AS name
      FROM
          employees;
      
      -- 3. 50번 부서의 사원의 모든 정보를 출력하세요.
      SELECT
          *
      FROM
          employees
      WHERE
          department_id = 50;
      
      -- 4. 50번 부서 사원의 이름, 부서번호, 직무아이디를 출력하세요.
      SELECT
          first_name,
          department_id,
          job_id
      FROM
          employees
      WHERE
          department_id = 50;
      
      -- 5. 모든 사원의 이름, 급여 그리고 300달러 인상된 급여를 출력하세요.
      SELECT
          first_name,
          salary,
          salary + 300
      FROM
          employees;
      
      -- 6. 급여가 10000보다 큰 사원의 이름과 급여를 출력하세요.
      SELECT
          first_name,
          salary
      FROM
          employees
      WHERE
          salary > 10000;
      
      -- 7. 보너스를 받는 사원의 이름과 직무, 보너스율을 출력하세요.
      SELECT
          first_name,
          job_id,
          commission_pct
      FROM
          employees
      WHERE
          commission_pct IS NOT NULL;
      
      -- 8. 2003년도 입사한 사원의 이름과 입사일 그리고 급여를 출력하세요.
      SELECT
          first_name,
          hire_date,
          salary
      FROM
          employees
      WHERE
          hire_date BETWEEN ( '03/01/01' ) AND ( '03/12/31' );
      
      -- 9. 2003년도 입사한 사원의 이름과 입사일 그리고 급여를 출력하세요.
      SELECT
          first_name,
          hire_date,
          salary
      FROM
          employees
      WHERE
          hire_date LIKE ( '03%' );
      
      -- 10. 모든 사원의 이름과 급여를 급여가 많은 사원부터 적은 사원 순서로 출력하세요.
      SELECT
          first_name,
          salary
      FROM
          employees
      ORDER BY
          salary DESC;
      
      -- 11. 위 질의를 60번 부서의 사원에 대해서만 질의하세요
      SELECT
          first_name,
          salary
      FROM
          employees
      WHERE
          department_id = 60
      ORDER BY
          salary DESC;
      
      -- 12. 직무아이디가 IT_PROG 이거나 SA_MAN인 사원의 이름과 직무 아이디를 출력하세요.
      SELECT
          first_name,
          job_id
      FROM
          employees
      WHERE
          job_id = 'IT_PROG'
          OR job_id = 'SA_MAN';
      
      SELECT
          first_name,
          job_id
      FROM
          employees
      WHERE
          job_id IN ( 'IT_PROG', 'SA_MAN' );
      
      -- 13.Steven king 사원의 정보를 "Steven King 사원의 급여는 24000달러 입니다" 형식으로 출력하세요
      SELECT
          first_name
          || ' '
          || last_name
          || '사원의 급여는'
          || salary
          || '달러입니다.' AS comments
      FROM
          employees
      WHERE
              first_name = 'Steven'
          AND last_name = 'King';
          
      -- 14. 매니저 직무에 해당하는 사원의 이름과 직무 아이디를 출력하세요.
      SELECT
          first_name,
          job_id
      FROM
          employees
      WHERE
          job_id LIKE '___MAN';
      
      SELECT
          first_name,
          job_id
      FROM
          employees
      WHERE
          job_id LIKE '%MAN';
      
      -- 15.매니저 직무에 해당하는 사원의 이름과 직무 아이디를 직무아이디 순서대로 출력하세요.
      SELECT
          first_name,
          job_id
      FROM
          employees
      WHERE
          job_id LIKE '___MAN'
      ORDER BY
          job_id ASC;
      
      SELECT
          first_name,
          job_id
      FROM
          employees
      WHERE
          job_id LIKE '%MAN'
      ORDER BY
          job_id ASC;
profile
안녕하세요! 공부한 내용을 기록하는 공간입니다.

0개의 댓글