Coding(Java)/Database(SQL)2022. 3. 16. 08:00
반응형

2. Database 기본 CRUD(생성, 보기, 수정, 삭제)(feat 세 얼간이)

 

 

여기서 PostgreSQL 기반 Database CRUD를 할 것이다. 

*CRUD란 Create(생성), Read(읽기), Update(수정), Delete(삭제) 이 4가지를 뜻하는 말이다.

CRUD를 위해 테이블을 만든 다음 샘플 데이터를 입력하고, 그 전체를 읽은 다음 수정, 삭제를 진행할 것이다.

pgAdmin을 실행시키고 PostgreSQL11 밑 Databases에 마우스를 갖다 댄 다음 오른쪽 키를 누른다. 그러면 직사각형 모양의 창이 뜰 것이고, Create->Database를 누른다.

눌렀으면 위의 창이 뜨는데 Database에 Test라고 쓰고, Save를 누른다.

참고로 위 SQL 쿼리문은 pgAdmin 상에서 테이블을 생성하는 쿼리문이다.

Save를 누르면 'Test'라는 이름의 DB가 생성되었음을 확인할 수 있다.

Schema에 있는 화살표를 누르면 각 항목들이 나오는데 Tables에 화살표를 갖다댄다.

그 상태에서 오른쪽 마우스 키를 누르면 직사각형 모양의 창이 뜨는데 'Query Tool'을 클릭한다.

그러면 'Query Editor'이라고 적힌 위의 큰 화면이 나타난다. 여기에 쿼리문을 작성하는데 오라클 방법대로 작성하면 안되고(에러가 발생한다) PostgreSQL 방법대로 작성해야 한다.

*참고: SQL에서 주석은 --뒤에 작성한다.(오라클, PostgreSQL 공통)

일련번호를 작성하기 위해 일련번호 관리객체인 시퀀스를 생성한다. 시퀀스의 작성법은 다음과 같다.

 

seq_테이블이름_숫자형데이터타입

 

student라는 이름의 테이블을 생성하고, 일련번호로서 no를 사용하려고 하기 때문에

쿼리문 create sequence seq_student_no을 작성하고 실행(위의 재생 모양의 삼각형 버튼을 누른다)한다.

성공적으로 시퀀스가 생성되었다. 이제 테이블을 생성할 차례다. 위와 같이 쿼리문을 작성한다(create 이하의 쿼리문).

 

create table student
(
    no numeric,
    name varchar(30),
    nation varchar(10),
    constraint pk_student_no primary key(no)--기본 키
)

 

*constraint는 제약조건으로 데이터 무결성(Data Integrity)을 지키기 위한 수단이다. 제약조건에는 다음과 같이 6가지가 있다.

1. not null: null을 허용하지 않는다(필수 입력), inline형식만 가능

null은 null을 허용하는 것으로 잘 사용되지 않고, 생략하면 null을 허용하는 것으로 간주된다.

2. unique: 유일한 값만 존재해야 한다.

3. check: 조건을 만족하는 값만 허용

4. default: 기본값(입력하지 않으면 기본값)

5. primary key: 레코드를 대표하는 필드로 기본키이다.

6. foreign key: 참조하는 값을 다른 테이블에서 참조하는 외래키이다.

 

여기서는 5번 primary key가 사용되었다.

입력을 마쳤다면 실행시킨다. 그러면 아무 문제 없이 Query returned successfully를 출력시킨다.

다음으로 샘플 데이터들을 입력한다. 

 

insert into student values(nextval('seq_student_no'),'Ranchhoddas Chanchad','India');
insert into student values(nextval('seq_student_no'),'Chatur Ramalingam','Uganda');
insert into student values(nextval('seq_student_no'),'Raju Rastogi','India');
insert into student values(nextval('seq_student_no'),'Farhan Qureshi','India');

 

전부 인도 영화 '세 얼간이'의 등장인물인 란초(푼스크 왕두), 차투르, 라주, 파르한 이 4명의 이름이다. 주의할 점은 여러 개의 쿼리문을 입력할 경우 끝 부분에 반드시 세미콜론(;)을 붙여야 문제없이 실행된다. 그렇지 않는다면 에러가 발생한다.

입력을 완료했다면 실행시킨다. 이번에도 문제 없이 실행되었다.

이제 입력된 데이터를 확인해보자. 다음과 같이 쿼리문을 작성한다.

 

select * from student

 

이 쿼리문은 student 테이블 전체의 데이터를 출력시키는 쿼리문이다.

쿼리문을 입력하고 실행하면 테이블이 생성됨을 확인할 수 있다. 

특정 데이터(예를 들면 국적(nation)이 우간다(Uganda)인 사람)를 조회하겠다면 전체를 조회하는 쿼리문 select * from student 뒤에 where nation='Uganda'를 붙인다. 즉 다음과 같이 쿼리문을 작성한다.

 

select * from student where nation='Uganda'

 

실행결과 우간다 국적의 차투르가 출력되었다.

다른 특정 데이터(번호가 3(no=3)인 데이터)를 조회하자. 이 때는 전체를 조회하는 쿼리문 뒤에 where no=3을 붙이면 된다. 

 

select * from student where no=3

 

실행결과 3번인 라주가 출력되었다.

이제 데이터를 수정하자. 란초는 ICE를 졸업하고 '푼수크 왕두'라는 이름으로 이름을 바꿨다. 란초의 번호가 1이므로 다음과 같이 수정하는 쿼리문을 update를 이용하여 작성할 수 있다.

 

update student set name='Phunsukh Wangdu' where no=1

 

성공적으로 수정되었다.

no=1인 데이터를 조회하는 쿼리문을 작성하여 원하는 내용으로 수정되었음을 확인할 수 있다.

데이터 하나를 삭제하자. 마지막에 차투르는 푼수크 왕두에게 패배 선언을 하게 하고 바이러스의 펜(우주비행사 펜)을 가져갔다. 차투르에게 본떼를 보여주자. 차투르의 번호가 2이므로 다음과 같이 삭제하는 쿼리문을 delete를 이용하여 작성할 수 있다.

 

delete from student where no=2

 

차투르가 (성공적으로) 삭제되었다.

차투르가 삭제되었음을 전체 조회로 알아보자. 조회 결과 차투르가 없고, 푼스크 왕두, 라주, 파르한만 남았다. 그런데 왕두가 맨 밑으로 내려갔다.

정렬을 위해 전체를 조회하는 쿼리문 뒤에 order by no asc(오름차순)를 붙여 실행한다.

 

select * from student order by no asc

 

그러면 no순으로 정렬되었음을 확인할 수 있다.

 

다음은 본 글에서 실행시킨 쿼리문 전체이다.

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
32
33
34
35
36
37
--시퀀스(일련번호 관리객체) 생성
--create sequence seq_student_no--student테이블의 no를 시퀀스로 하겠다.
 
--student 테이블 생성
-- create table student
-- (
--     no numeric,
--     name varchar(30),
--     nation varchar(10),
--     constraint pk_student_no primary key(no)--기본 키
-- )
 
--sample data
-- insert into student values(nextval('seq_student_no'),'Ranchhoddas Chanchad','India');
-- insert into student values(nextval('seq_student_no'),'Chatur Ramalingam','Uganda');
-- insert into student values(nextval('seq_student_no'),'Raju Rastogi','India');
-- insert into student values(nextval('seq_student_no'),'Farhan Qureshi','India');
 
--조회
--select * from student--student 테이블 전체 조회
 
--특정 데이터 조회
--select * from student where nation='Uganda'--국적이 우간다인 데이터 조회
--select * from student where no=3--no가 3인 데이터 조회
 
--수정
--update student set name='Phunsukh Wangdu' where no=1--'란초다스 찬차드'를 '푼수크 왕두'로 변경
--수정된 내용 확인
--select * from student where no=1
 
--삭제
--delete from student where no=2
--삭제 확인
--select * from student
 
--데이터를 no를 기준으로 정렬
--select * from student order by no asc
cs
반응형
Posted by skywalker222