DB&JDBC(01-2) - SQL - 수업 23일차
이번 글에서는 SQL 활용해 간단한 문법 연습을 하겠습니다.
목차
테이블 생성 > 데이터 조회 > 데이터 삽입 > 제약 조건 > 조건절을 이용한 정보 조회 순서로 진행하겠습니다.
테이블 생성
먼저 자료를 저장해야하기 때문에 테이블을 생성하겠습니다.
테이블을 생성하는 SQL의 분류를 DDL이라고 하며 방식은 아래와 같습니다.
1
2
3
4
5
6
7
-- DDL : 테이블 생성
CREATE TABLE member(
id VARCHAR2(100) PRIMARY KEY,
password VARCHAR2(100) NOT NULL,
name VARCHAR2(100) NOT NULL,
address VARCHAR2(100)
)
코드를 보시면 전에 배운 데이터 타입과 제약 조건을 사용한 것을 알 수 있습니다.
저장할 데이터는 4종류로 모두 데이터 타입이 VARCHAR2(100)
로 선언되었기에 문자형에 길이가 100까지 가능한 데이터가 저장 가능합니다.
id는 PRIMARY KEY
이므로 유일값인 동시에 반드시 내용이 들어가야하고 password와 name은 NOT NULL
이므로 중복은 가능하되 내용이 들어가야 합니다. 그리고 address는 제약조건 없이 저장 가능합니다.
테이블을 사용해 저장할 데이터의 종류와 조건을 명시해주었고, 이제 DML을 이용해 데이터를 저장하고 제어해보도록 하겠습니다.
INSERT
1
2
-- DML - 데이터 삽입 Create(정보 생성), 컬럼 정보를 다 기입할 경우 비워둬도 됨
INSERT INTO member(id, password, name, address) VALUES('java','a','아이유','오리');
데이터 삽입입니다. CRUD 중 Create와 같이 정보를 생성하며 아래와 같이 사용합니다.
INSERT INTO + 테이블 이름(컬럼) + VALUES(데이터);
SQL에서는 대소문자를 구분하지 않지만, 가독성을 위해 예약어는 대문자, 저희가 사용하는 이름은 소문자로 작성하겠습니다.
데이터값은 별개로 대소문자를 구분합니다.
SELECT
1
2
3
4
-- DML - 데이터 조회 Read(정보를 읽는다)
SELECT * FROM member;
-- 특정 컬럼(id, name)만 조회
SELECT id, name FROM member;
데이터 조회입니다. CRUD에서는 Read 역할로 SELECT
와 FROM
이라는 예약어로 조회를 할 수 있습니다. *
별표 모양은 특정 컬럼이 아닌 모든 컬럼의 값을 선택하겠다는 뜻을 가집니다.
CONSTRAINT
제약 조건을 살펴보겠습니다.
1
INSERT INTO member(id, password, name, address) VALUES('java','b','아이요','죽전');
위 코드는 전에 이미 동일한 ID가 있기 때문에 PRIMARY KEY
의 unique
조건을 충족하지 못해 에러가 발생합니다.
1
INSERT INTO member(password, name, address) VALUES('b','아이요','죽전');
이 코드는 ID를 생략했는데 PRIMARY KEY
의 not null
조건을 충족하지 못해 에러가 발생합니다.
1
INSERT INTO member(id, password, name) VALUES('jdbc','c','박보검');
이 코드는 마지막 요소인 address
를 생략하였는데 별도의 제약 조건이 없었기에 null
이 허용되어 정상 작동합니다.
WHERE
이제 조건절을 이용한 정보 조회를 해보겠습니다.
1
2
SELECT name, address FROM member WHERE id='java';
SELECT name, address FROM member WHERE id='java2';
새로운 예약어가 등장합니다. WHERE
를 사용해 특정 조건을 걸 수 있습니다. id
가 java
인 데이터와 java2
인 데이터를 찾아 name
, address
를 조회하는 코드입니다.
id
가 java
인 회원의 name
과 address
를 조회하면 정상적으로 출력을 해줍니다. 그리고 java2
는 존재하지 않지만 에라가 발생하는 것이 아닌 조회 결과에 아무런 출력을 해주지 않습니다.
이처럼 조회를 할 때에는 정보가 없더라도 에러가 발생하지 않고 빈 정보를 반환합니다.
1
SELECT id FROM member WHERE name='아이유' AND address='오리';
이번에는 조건이 추가되었는데 AND
를 사용해서 name
이 아이유
이면서 address
가 오리
인 정보를 찾을 수 있습니다.
1
UPDATE member SET address='제주' WHERE id='jdbc';
정보를 수정해야 할 경우도 있을텐데 UPDATE
와 SET
을 사용해 id가 jdbc인 회원의 주소를 제주로 업데이트했습니다.
1
DELETE FROM member WHERE id='jdbc';
삭제는 DELETE
를 사용합니다. id가 jdbc인 회원 정보를 삭제하는 코드입니다.
그리고 간혹 실제 DB를 실행할 때 결과가 예상과 달리 제대로 출력되지 않을 수 있다고 합니다. 이런 경우 COMMIT
예약어를 입력해서 실제 DB에 작업 결과를 즉각적으로 반영할 수 있습니다. 설정에서 미리 자동 커밋 체크를 했지만 이렇게 작업 결과가 제대로 반영되지 않는 경우가 종종 있다고 합니다.
예제 코드
마지막으로 지금까지 살펴본 DML(CRUD: Create - insert, Read - select, Update - update, Delete - delete) 연습을 해보겠습니다.
1. 회원 아이디 angel, 패스워드 kind, 이름 이상순, 주소 애월읍 정보를 insert합니다.
INSERT INTO member VALUES('angel', 'kind', '이상순', '애월읍');
2. 회원 name이 이상순이고 address가 애월읍인 회원의 id와 password를 select합니다.
SELECT id, password FROM member WHERE name='이상순' AND address='애월읍';
3. 회원의 address가 애월읍인 회원의 address를 오리로 update
UPDATE member SET address='오리' WHERE address='애월읍';
4. 회원의 address가 오리인 회원의 id와 name을 select
SELECT id, name FROM member WHERE address='오리';
5. 회원의 id가 angel이고 password가 kind인 회원 정보를 삭제
DELETE FROM member WHERE id='angel' AND password='kind';
6. 회원 id가 angel인 회원의 name을 조회 select(삭제했으므로 조회하면 공백이 나타납니다)
SELECT name FROM member WHERE id='angel';
댓글남기기