날아라쩡글이의 블로그입니다.

DML언어(insert,delete,update, select),엑셀import방법 본문

중앙 HTA (2106기) story/JDBC story

DML언어(insert,delete,update, select),엑셀import방법

날아라쩡글이 2021. 10. 19. 21:01
반응형

물리모델다이어그램

  • 특정 RDBS을 오라클에 맞게 테이블을 생성한 해당 데이터베이스에 딱 맞게 정의된것
  • 개발자들이 확인하는 모델 다이어그램
  • SQL로 정의 된 것을 물리 모델 다이어그램으로 표시한 것이다. 
  • 오라클용, DB2형 mySQL형 등 여러개로 표현되어있다. 
    • 특정 table에 맞게 정의된다. 

논리모델다이어그램

  • DB와 무관하게 어떤 정보들이 포함되어야하고, 어떤 참조인지 보여주는 다이어그램이다. 
  • 프로그래머가 아닌 사람과 이야기할 때 관계, 이름, 속성을 설명할 때 사용하는 것이다.
  • 1개만 작성한다. 

행을 제한하는 기타 연산자

  • 컬럼의 null인 행을 조회하기 
    • SELECT 컬럼명, 컬럼명,.. FROM 테이블명 WHERE 조건컬럼명 IS NULL;
  • 컬럼의 null아닌 행을 조회하기 
    • SELECT 컬럼명, 컬럼명,.. FROM 테이블명 WHERE 조건컬럼명 IS NOT NULL;
  • null은 컬럼의 값이 정해지지 않은 것이기 때문에 크다, 작다, 같지 않다 등의 비교를 할 수 없다. 
    • SELECT EMPLOYEE_ID, FIRST_NAME, JOB_ID, SALARY
      FROM EMPLOYEES
      WHERE COMMISSION_PCT IS NOT NULL AND SALARY >= 10000;
    • 처럼 and연산자와 함께 사용할 수 있다. 

지정된 범위에 속하는 행 조회하기 

  • SELECT 컬럼명, 컬럼명, ... FROM 테이블명 WHERE 조건컬럼명 BETWEEN A AND B:
  • select 컴럼명, 컬럼명, .. from 테이블명 where 조건컬럼명 between 조건연산식 and 조건식; 
    • between A and B
    • 조건식의 값이 A이상 B이하인 참을 반환한다.
    • between이 경계값이다. 
    • 조건연산식을 함께 사용해도 된다. 
    • 많이 사용되지 않는다. 경계값이 포함되는지가 헷깔리기 때문에 
    • 부등호 표시가 많이 사용된다. 

제시된 값 중 하나를 컬럼이 가지고 있으면 true로 판정하기 

  • SELECT 컬럼명, 컬럼명,... FROM 테이블명 WHERE 조건컬럼명 IN( 조건의 값1, 조건의 값2,... 조건의값n)
    • in 연산자는 or연산을 대체할 수 있다. 
    • in 연산자는 컬럼명과 제시된 값에 대해서 equals비교만 한다. 
    • in 연산자에서 ()을 입력하지 않으면 error가 난다. 
    • SELECT EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_ID
      FROM EMPLOYEES
      WHERE DEPARTMENT_ID IN(10,20,30);
    • OR대신에 in연산자를 사용하자 .
  • SELECT 컬럼명, 컬럼명,... FROM 테이블명 WHERE 조건컬럼 OR 조건컬럼 OR 조건컬럼;
    • or연산자를 중복해서 사용하는 것은 좋지 않다. 
    • 깔끔하게 in연산자를 사용해서 출력하는 것이 좋다. 
    • SELECT EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_ID
      FROM EMPLOYEES
      WHERE DEPARTMENT_ID =10 OR DEPARTMENT_ID = 20 OR DEPARTMENT_ID =30;
  • or와 and가 조건식에서 같이 사용하게 되면 or부분은 in연산자로 대체하는 것은 가독성이 높고 실수를 줄일 수 있다. 
  • SELECT EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_ID, SALARY
    FROM EMPLOYEES
    WHERE SALARY >= 10000 AND DEPARTMENT_ID IN (10,20,30); 
    • 크다, 작다, >=,<= 의 경우에는 or연산자를 작성해주어야한다. in은 equals비교밖에 못하기 때문이다. 
  • AND연산과 OR연산을 함께 사용할 때에는 OR연산끼리 ()를 해주어야한다. 
    • SELECT EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_ID, SALARY
      FROM EMPLOYEES
      WHERE SALARY >= 10000 AND (DEPARTMENT_ID = 10 OR DEPARTMENT_ID = 20 OR DEPARTMENT_ID = 30);
      •  AND연산인
        WHERE (SALARY >= 10000 AND DEPARTMENT_ID = 10) OR DEPARTMENT_ID = 20 OR DEPARTMENT_ID = 30;  이렇게 적용이 된다. 

패턴 검색하기 

  • 패턴이란 LIKE '패턴' 을 의미한다. 
    • '이 _';
      • '이이' '이상''이황'이 조회된다. 
      • 이 씨 중에서 이름이 외자인 사람을 조회한다. 
      • 임의의 한문자를 조회한다. 
    • '이__'_2개입력시 ;
      • '이순신''이성계''이방원'이 조회된다. 
      • 이 씨중에서 이름이 두글자인 사람
    • '이*';
      • '이''이이''이상''이황''이순신''이성계''이방원'이 조회된다. 
      • 이 씨 전부를 조회한다. 
      • 이름 없이 성만 입력된 사람도 조회된다. 
    • '이_*';
      • '이이''이상''이황''이순신''이성계''이방원'이 조회된다. 
      • 성만 입력된 사람을 제외하고 이씨 전부를 조회한다. 
      • 사람의 이름을 조회할 때 이 방식으로 조회한다. 
    • 언더바는 그 한글자를 포함한다라는 의미이다. 
    • '%아'
      • 끝의 글자가 아로 끝나는 글자를 조회한다. 
    • '아%'
      • 앞의 글자가 아로 시작하는 글자를 조회한다. 
    • '%아%'
      • 글자 가운데에 아가 작성되어 있는 글자를 조회한다. 
  • SELECT 컬럼명, 컬럼명,...FROM 테이블명 WHERE 컬럼명 LIKE '패턴';
    • 매니저로 일하고 있는 직원의 아이디, 이름, 직종 조회하기
      (매니저로 일하고 있는 직원은 직종아이디가 XX_MAN이다.)
    • SELECT EMPLOYEE_ID, FIRST_NAME, JOB_ID
      FROM EMPLOYEES
      WHERE JOB_ID LIKE '%MAN';

조회된 행 정렬하기

  • Order by 절을 사용하면 조회된 행을 정렬할 수 있다. 
  • Order by 절에 컬럼명이나 표현식을 지정하면 해당값에 대해서 오름차순으로 정렬된다. 
  • ASC, DESC 을 지정하면 정렬방식을 오름차순, 내림차순으로 변경할 수 있다. 지정하지 않으면 default값은 오름차순으로 지정된다. 
  • 컬럼의 데이터 타입이 숫자, 문자, 날짜던지 상관없이 지정가능하다.
    • 날짜의 경우 과거가 작은 값, 미래가 큰 값이다.
  • SELECT 컬럼명, 컬럼명, ..
    FROM 테이블명
    [WHERE 조건식] //생략해도 된다는 의미이다. 사용하려면 ORDER BY위에 작성해야한다. 
    ORDER BY 컬럼명 [ASC | DESC];
  • SELECT EMPLOYEE_ID, FIRST_NAME, HIRE_DATE, SALARY
    FROM EMPLOYEES
    WHERE DEPARTMENT_ID = 60
    ORDER BY HIRE_DATE DESC;
  • ORDER BY 3 DESC; 로 입력할 수 있다.
    • SELECT절의 컬럼중에서 3번째 컬럼의 값을 기준으로 정렬시키기 , 권장하지는 않는다. 
    • order by와where의 순서가 바뀌면 안된다. 
    • 구조적인 문자로 작성순서와 형식이 정해져 있기 때문이다. 
  • 60번과 80번 부서에서 근무중인 사원들의 급여, 이름, 입사일을 조회하기
    급여를 기준으로 내림차순 정렬하고, 급여가 같을 때는 이름 기준으로 오름차순 정렬시킨다.
    • SELECT SALARY, FIRST_NAME, HIRE_DATE
      FROM EMPLOYEES
      WHERE DEPARTMENT_ID IN (60,80)  // 60번 80번부서에서
      ORDER BY SALARY DESC, FIRST_NAME ASC; //급여 내림차순, 이름 오름차순 , 콤마로 동일하면 어떻게 표현할지 입력해준다. 

Oracle의 데이터 타입

  • VARCHAR2(size)
    • 가변길이 문자 데이터이다
    • 최대 값은 : 4000이다. 
    • size범위내에서 실제 데이터의 크기만큼 저장공간을 사용한다. 
    • size로 범위를 지정하더라도 실제 데이터까지만 저장한다. 
      • 이름 , 주소, 과목명, 상품명, 뉴스제목등을 설정한다. 
    • 오라클 외의 다른 SQL은 varchar을 사용한다. 
    • insert 길이를 알아서 조절가능하고, 연산이 가능하도록 개선되었다. 
  • CHAR(size)
    • 고정길이 문자 데이터 이다. 
    • 최대 값은 2000이다. 
    • size크기만큼의 저장공간을 무조건 사용한다. 
      • 주민번호, 학번에서 사용한다. 
  • LONG
    • java의 정수 Long과 다른 뜻이다. 
    • 가변길이 대용량 문자 데이터로 최대값이 2GB이다. 
    • 그러나 테이블 당 하나밖에 사용할 수 없고, 제약조건을 정의할 수 없으며
    • GROUP BY, ORDER BY에 포함시킬 수 없어서 현재는 잘 사용하지 않는다. 
  • CLOB 
    • 가변길이 대용량 문자 데이터 이다. 
    • LONG을 개선한 것이라고 볼 수 있다. 
    • 최대 값이 4GB이다. 
  • NUMBER(p, s)
    • 가변길이의 숫자 데이터이다. 
    • p는 십진수의 총 갯수 s는 소수점이하 자릿수이다. 
    • 0.11 , 0.1  , 0.23
    • (3,2)  (3,2)  (3,2)으로 작성한다. 
  • DATE 
    • 날짜 및 시간 데이터이다. 
    • 입사일, 가입일, 주문날짜 등 
    • 시간은 초까지 포함한다. 
  • TIMESTAMP
    • 날짜 및 시간 데이터이다. 
    • 소수점이하 초까지 포함된다. 
    • 정밀한 시간정보가 포함된다. 
  • BLOB
    • 메모장에서 열수없는 값을 입력할 때 사용한다. 
    • 가변길이 대용량의 이진데이터 (Binary data)이다. 
    • 최대값은 4GB이다. 
    • 그림, 영상, 게임파일등을 보낼 때 사용한다. 

테이블을 생성하기 

  • 테이블을 생성할 경우 create라는 단어를 사용한다. 
  • 학생이름, 국어점수, 수학점수, 영어 점수를 저장하는 테이블을 정의하고, insert문을 이용하여 한 행, 한 행씩 입력한다. 
  • CREATE TABLE TB_SCORES (
    STUDENT_NAME VARCHAR2(20) NOT NULL, --학생이름 컬럼명 : STUDENT_NAME 데이터타입 : VARCHAR2 길이:20 NULL값 허용여부 : 허용하지 않음
    KOR_SCORE NUMBER(3,0) DEFAULT 0, --국어점수 컬럼명 : KOR_SCORE 데이터타입 : NUMBER 길이:3 소숫점없는 최대 3자리 정수 기본값:0
    ENG_SCORE NUMBER(3,0) DEFAULT 0, --영어점수 컬럼명 : ENG_SCORE 데이터타입 : NUMBER 길이:3 소숫점없는 최대 3자리 정수 기본값:0
    MATH_SCORE NUMBER(3,0) DEFAULT 0 --수학점수 컬럼명 : MATH_SCORE 데이터타입 : NUMBER 길이:3 소숫점없는 최대 3자리 정수 기본값:0
    );
  • 새로운 행을 추가하기 
    • 항상 행을 추가하는 것은 1개의 행씩 추가된다. 
    • INSERT INTO 테이블명 ( 컬럼명1, 컬럼명2,...)
      VALUES(값1, 값2, 값..);
      • 테이블의 모든컬럼에 값을 지정하고 (nulll 값도 허용) 입력한다. 
    • INSERT INTO (컬럼명1, 컬럼명2..)
      VALUES(값1, 값2, 값..);
      • 테이블의 모든컬럼에 값을 지정하고 (nulll 값도 허용) 컬럼의 순서대로 값을 입력시 컬럼명 생략가능하다. 
      • 그러나 추천하지 않는다. 
      • 어느컬럼에 입력한 것인지 나중에 유지보수담당자가 알아보기 힘들다. 
  • COMMIT 와 ROLLBACK
  •  
    • commit
      • insert/update/delete 명령어 실행결과를 테이블에 반영시킨다. 
      • 그저 입력하게 되면 SQL developer가 사용하는 메모리안에서만 적용된다. 
      • 데이터 입력이 실수로 입력할 수 있기 때문에, 실제 테이블에 적용하기 위해서는 commit이라는 명령어를 실행해야한다. 
        • 실제 테이블에 변경내용을 반영시킨다. 
        • commit후에는 이제 다른 작업공간에서도 조회가 가능하다. 
    • Rollback
      • insert/update/delete 명령어 실행결과를 테이블에 반영시키지 않는다. 
      • 실행했던 모든 작업을 전부 취소시킨다.
    • commit와 rollback이 실행된 후에는 그 작업을 되돌릴 수 없다. 
    • commit 실행 후 테이블에 반영된 것을 rollback시킬 수 없다. 
    • rollback으로 반영이 취소된 것을 commit으로 반영시킬 수 없다. 

테이블의 데이터 변경하기 

  • UPDATE 테이블명 
    SET 
        컬럼명1 = 값1, 
        컬럼명2 = 값2...
    [WHERE 조건식];
  • where 조건절은 생략이 가능하다. 생략하면 테이블의 모든 행에 대해서 변경작업이 실행된다. 
  • 그렇기 때문에 where절은 생략을 하는 법이 드물다.
  • 맨 마지막 항목에는 , 콤마가 없다. 
  • update의 경우 행에 대한 제한이 없어서 모두 변경이 된다. where설정을 안하면 모든 열을 변경시킨다. 
  • 행 하나만 바꾸는 경우는 많다, 행단위로 update를 실행한다. 
  • 2개 이상의 column생성시 사칙연산을 실행할 수 있다. 기존데이터로 만들 수 있다. 
    • UPDATE EMPLOYEES
      SET SALARY = 50000
      WHERE DEPARTMENT_ID
      IN(10,20,30);
      • 10,20,30번 부서에 소속된 사원들의 급여가 50000달러로 변경된다.
    • 모든 학생의 총점과 평균 컬럼의 값을 변경하기
      • UPDATE TB_SCORES
        SET TOTAL_SCORE = KOR_SCORE + ENG_SCORE + MATH_SCORE,
        AVERAGE_SCORE = (KOR_SCORE + ENG_SCORE + MATH_SCORE)/3;
      • 컬럼의 값을 변경하기 위해서 기존 컬럼의 값을 사용하는 것이 가능하다. 
      • 컬럼의 값을 변경하기 위해서 사칙 연산을 포함하는 표현식도 상관없다. 
      • 2개이상의 컬럼의 값을 만들어 낼 수 있다. 
      • 조건만 맞는다면 변경할 컬럼을 = (SELECT문을 사용할 수 있다. )

테이블의 행 삭제하기 

  • DELECT FROM 테이블명
    [WHERE 조건식]; 
  • where절을 생략하면 테이블의 모든 행이 삭제된다. 
    • where절 없이 delete구문을 실행하는 경우는 거의 없다. 
  • 테이블만 남기고 모든 데이터를 삭제할 경우 
    • truncate를 사용해서 데이터를 되돌릴 수 없도록 제거한다. 
  • DELETE FROM TB_SCORES
    WHERE AVERAGE_SCORE < 80;
  • 기존 테이블을 삭제하는 방법
    • DROP TABLE 테이블명;
    • 이 방식을 사용하게 되면, 휴지통에서 되돌리는 것은 가능하지만 
    • SQL쿼리에서는 삭제된 테이블 복원하는 방법은 존재하지 않는다. 

엑셀 import방법

  • 테이블 오른쪽 버튼 -> 데이터 임포트 -> 경로 파일 ->열기 -> 다음, -> 메뉴-> 이름과 데이터를 맞춘다. 소스데이터 열, 대상테이블 열, ->완료 
  • 위치로도 지정가능하다. 
반응형
Comments