날아라쩡글이의 블로그입니다.
DML언어(insert,delete,update, select),엑셀import방법 본문
중앙 HTA (2106기) story/JDBC story
DML언어(insert,delete,update, select),엑셀import방법
날아라쩡글이 2021. 10. 19. 21:01728x90
반응형
물리모델다이어그램
- 특정 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 EMPLOYEE_ID, FIRST_NAME, JOB_ID, SALARY
지정된 범위에 속하는 행 조회하기
- 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; 이렇게 적용이 된다.
- AND연산인
- SELECT EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_ID, SALARY
패턴 검색하기
- 패턴이란 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; //급여 내림차순, 이름 오름차순 , 콤마로 동일하면 어떻게 표현할지 입력해준다.
- SELECT SALARY, FIRST_NAME, HIRE_DATE
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으로 반영시킬 수 없다.
- 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문을 사용할 수 있다. )
- UPDATE TB_SCORES
- UPDATE EMPLOYEES
테이블의 행 삭제하기
- DELECT FROM 테이블명
[WHERE 조건식]; - where절을 생략하면 테이블의 모든 행이 삭제된다.
- where절 없이 delete구문을 실행하는 경우는 거의 없다.
- 테이블만 남기고 모든 데이터를 삭제할 경우
- truncate를 사용해서 데이터를 되돌릴 수 없도록 제거한다.
- DELETE FROM TB_SCORES
WHERE AVERAGE_SCORE < 80; - 기존 테이블을 삭제하는 방법
- DROP TABLE 테이블명;
- 이 방식을 사용하게 되면, 휴지통에서 되돌리는 것은 가능하지만
- SQL쿼리에서는 삭제된 테이블 복원하는 방법은 존재하지 않는다.
엑셀 import방법
- 테이블 오른쪽 버튼 -> 데이터 임포트 -> 경로 파일 ->열기 -> 다음, -> 메뉴-> 이름과 데이터를 맞춘다. 소스데이터 열, 대상테이블 열, ->완료
- 위치로도 지정가능하다.
반응형
'중앙 HTA (2106기) story > JDBC story' 카테고리의 다른 글
SQL 내장함수, 서브쿼리 (0) | 2021.10.25 |
---|---|
VO-DAO패턴, 오라클 시퀀스 (0) | 2021.10.21 |
java에서 Insert, select, update, delete사용방법 (0) | 2021.10.20 |
자바와 연동하는 방법(JDBC), 자바 ConnectionUtil 생성 방법 (0) | 2021.10.20 |
DB(데이터베이스), SELECT문 (0) | 2021.10.19 |
Comments