Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

게으른 완벽주의자의 개발자 도전기

DataBase 기초수업 (select, delete, update, 테이블 생성) 본문

SQL

DataBase 기초수업 (select, delete, update, 테이블 생성)

머리방울 2022. 7. 30. 11:35

servlet과 jsp로 데이터 이동하는것을 배우면서 쌤께서

데이터를 넣고 빼는 과정이 있어야 실제 실무에서 쓰는 방식과 비슷하다고 했다.

그래서 이젠 DB와 servlet, jsp를 함께 배우기 시작했다.

 

나는 Oracle SQL Developer를 사용한다.

 

SQL에서는 소문자도 인식하지만, 다들 대문자로 사용하기 때문에 대문자로 작성함.

SQL의 주석은 마이너스 두번 "--"으로 작성하며,

문자를 넣을때는 '문자'로 작성한다.

띄어쓰기에 유의할 것!

적용은 CTRL + ENTER

F5 새로고침

F11 커밋

F12 롤백

 

ROLBACK;   되돌리기로 COMMIT 하기 전 수정할 때 사용한다.

COMMIT 후에는 되돌리기 불가하다.

 

COMMIT;    데이터 삽입, 삭제, 수정 명령어를 작성 후 COMMIT으로 저장한다.

저장된 값이기 때문에 되돌리기 불가하다

< SQL(Structured Query Language) >

1. 데이터 조회를 위한 SELECT

(내 SQL에는 EMP라는 테이블의 데이터가 이미 추가되어 있음)

 

  1) 데이터 조회 SELECT FROM

  SELECT 컬럼명 FROM 테이블명;

 

  - EMP에서 사원번호인 EMPNO를 조회

  -> SELECT EMPNO FROM EMP;

  EMP에서 사원의 사번, 이름, 급여를 조회(콤마로 연결)
  -> SELECT EMPNO, ENAME, SAL FROM EMP;

  사원의 모든 정보 조회  (  * <- 모든것 뜻함
  -> SELECT * FROM EMP; 

(★자바에서 사용할 때는 *표시 인식하지 못하기 때문에/

실무에서 사용하지X 때문에 컬럼명으로 작성하여 조회할 것!!)

2) 조건이 있는 SELECT FROM WHERE

SELECT 컬럼명 FROM 테이블명 WHERE 조건

 

급여가 500이하인 사원의 사번, 이름, 급여, 직급을 조회하시오
-> SELECT EMPNO

, ENAME

, SAL

, JOB 
FROM EMP 
WHERE SAL<=500; 

 

<참고>
SQL에서 같다 = 같지않다 != 또는 <> 표기함

그리고 AND 이거나 OR  

 

사원명이 박자바인 사원의 입사일, 사원명, 사번을 조회하라
-> SELECT HIREDATE

, ENAME

, EMPNO
FROM EMP
WHERE ENAME='박자바';

직급이 과장인 사원들 중 급여가 500이상인 사원들의 사번, 이름, 급여, 직급을 조회하라
SELECT EMPNO

, ENAME

, SAL

, JOB
FROM EMP
WHERE JOB='과장' 

AND SAL>=500;


직원들 중에서 인센티브를 받지 않는 직원의 모든 정보를 조회하라
(인센티브: NULL 인센티브 자체를 받지 않는 사람  / 0은 지금 현재는 없지만 받을 가능성O)

<참고>

NULL은 

같다 : COMM IS NULL; 

같지 않다. : COMM IS NOT NULL; 

 

SELECT * FROM EMP WHERE COMM IS NULL;

사원 중 부서번호가 30이 아니고, 인센티브가 NULL이 아니면서 급여가 300~700사이인 사원의 
사번, 급여, 인센티브, 부서번호를 조회하라
SELECT EMPNO(사번)

, SAL  (급여)

, COMM(인센티브)

, DEPTNO (부서번호)

FROM EMP
WHERE DEPTNO <> 30   (부서번호의 30번의 인센티브가 0이라서 제외시킴)  
AND SAL>=300 
AND SAL<=700 
AND COMM IS NOT NULL; 

 

 

2. 데이터 테이블 생성하기

1) 데이터 테이블 생성

데이터 삽입 삭제 연습용 테이블 생성

 

CREATE TABLE 내가 만들 테이블 명 (컬럼명, 컬럼명, 컬럼명....);

 

CREATE TABLE TEST_STUDENT(
   STU_NUM NUMBER PRIMARY KEY  

  (학번으로 숫자 넣을거야)

   <참조>

  PRIMARY KEY(기본키) -> 무결성 제약 조건 (데이터 구분 가능한 속성)

  중복과 NULL값 불가. 즉, 데이터들 속에서 구분할 수 있는 기준이 되는 속성이다.
    

    , STU_NAME VARCHAR2(100)   

    (이름 문자(VARCHAR2 100byte) 넣을거야)
    , STU_AGE NUMBER

    (나이로 숫자 넣을거야)
    , STU_ADDR VARCHAR2(100)

     (주소로 문자(VARCHAR2 100byte) 넣을거야)

 );

 

새로만든 TEST_TABLE 전체 조회하기
SELECT * FROM TEST_STUDENT;

 

3. 데이터 삽입 INSERT

INSERT INTO 테이블명 (컬럼명, 컬럼명, 컬럼명) VALUES (컬럼명에 넣을값, 값, 값);

 VALUES에 값을 넣을 때는 컬럼명 나열한 순서대로 넣어야 함 

 

TEST_STUDENT의 학번, 이름, 나이, 주소에 1, 김자바, 20, 서울특별시를 넣으세요.
INSERT INTO TEST_STUDENT (STU_NUM

, STU_NAME

, STU_AGE

, STU_ADDR)    
VALUES (1

, '김자바'

, 20

, '서울특별시');

 

TEST_STUDENT의 학번, 이름, 나이, 주소에 2, 박자바, 30, 서울특별시를 넣으세요.
INSERT INTO TEST_STUDENT (STU_NUM

, STU_NAME

, STU_AGE

, STU_ADDR)    
VALUES (2

, '박자바'

, 30

, '서울특별시');

 

1) 테이블 컬럼명 중 일부에 자료넣기

TEST_STUDENT에 학번과 나이를 3, 40으로 넣으세요.

INSERT INTO TEST_STUDENT (STU_NUM

, STU_AGE)
VALUES(3

, 40);           

나머지 자료에는 NULL값이 들어감 


4. 데이터 삭제 DELETE

DELETE 테이블명 WHERE 조건;

 

TEST_STUDENT 테이블을 삭제하라.
 -> DELETE TEST_STUDENT;   

<참고로 DELETE로 테이블 삭제는 커밋을 누르기 전까진 완전 삭제된 것이 아님

즉, 롤백으로 되돌리기 가능>

<예외적으로 DROP을 이용하여 삭제하는건 완전한 삭제이기에

롤백하여 삭제 취소 불가함>

DROP TABLE TEST_STUDENT; 테이블 자체를 완전 삭제하는 명령어 (롤백 불가)

학번이 1인 학생을 삭제하라
DELETE TEST_STUDENT 

WHERE STU_NUM = 1;

5.데이터 수정(UPDATE)

UPDATE 테이블명 SET 변경할 내용 WHERE 조건

 

--학번이 5번인 학생의 이름은 '차은우', 나이는 26으로 변경하세요
UPDATE TEST_STUDENT

SET STU_NAME = '차은우'

, STU_AGE = 26

WHERE STU_NUM=5;