[SQL] CRUD

* CRUD란? ( CREATE, READ, UPDATE, DELETE의 기본적인 구문 )

 

--1. 제시된 정보를 work0305테이블에 생성
create table work0305(
 num number(10),
 name varchar2(40),
 email varchar2(50),
 class char(1),
 addr char(45),
 gender char(6),
 java number(30)
);

--2. 제시된 정보를 생성된 테이블에 추가 ( transcation은 한 건마다 처리)
insert into work0305(num,name,email,class,addr,gender,java)
values (1,'홍길동','hong@test.com','A',
'서울시 강남구 역삼동','남자',90 );
commit;

insert into work0305(num,name,email,class,addr,gender,java)
values (2,'김철수','kim@sist.co.kr','A',
'서울시 동대문구 동대문동 역삼동','여자',76);
commit;

insert into work0305(num,name,email,class,addr,gender,java)
values (3,'이재식','jaesick@naver.com','B',
'경기도 수원시 영통구','남자',99);
commit;
insert into work0305(num,name,email,class,addr,gender,java)
values (4,'상수길','sang_su@google.com','A',
'인천시 부평구 부평동','여자',83);
commit;
insert into work0305(num,name,email,class,addr,gender,java)
values (5,'남착수','nam_su@test.com','A',
'서울시 관악구 봉천동','여자',73);
commit;

--3. 모든 컬럼 조회
SELECT * FROM work0305;

 

--4. 번호,이름,자바점수,반,입력일 컬럼만 조회
SELECT NUM,NAME,JAVA,CLASS FROM work0305;

 

--5. 4번과 5번 학생의 반을 'B'반으로, 성별을 '남자'로 변경
update work0305
set class='B',gender='남자'
where num in(4,5);

SELECT * FROM work0305;


--6.이메일이 'sang_su@naver.com'인 학생의 번호를 6으로,
--이름을 '여여자'로, 성별을 '여자', 입력일을 '내일'로 변경
update work0305
set num=6,name='여여자',gender='여자'
where email='sang_su@google.com';

SELECT * FROM work0305;

 

--7.'A'반인 모든 학생을 삭제
delete from work0305 where class='A';

SELECT * FROM work0305;

 

-- 작업 취소
rollback;

 

SELECT * FROM work0305;

 

--8.테이블의 모든 레코드 절삭
truncate table work0305;

--9.테이블 삭제
drop table work0305;

--10.휴지통 확인
select * from tab;

 

--11.휴지통을 비움
purge recyclebin;

 

SELECT * FROM work0305;

 

 

* 계산 조회 및 정렬 ( where, order by )

 

--1.like_thes2 테이블을 생성하고
create table like_test2 (
  enameno char(1),
  ename varchar2(12),
  addr  char(35),
  highsch char(15)
);

--2. 레코드를 추가
insert into like_test2(enameno,ename,addr,highsch)
values (1,'김철수','서울시 상도동','오지고');
commit;

insert into like_test2(enameno,ename,addr,highsch)
values (2,'홍길동','서울시 봉천동','오지고');
commit;

insert into like_test2(enameno,ename,addr,highsch)
values (3,'박영희','인천시 부평동','지리고');
commit;

insert into like_test2(enameno,ename,addr,highsch)
values (4,'이민수','서울시 상동','썸지고');
commit;

insert into like_test2(enameno,ename,addr,highsch)
values (5,'최수정','인천시 십정동','지리고');
commit;

insert into like_test2(enameno,ename,addr,highsch)
values (6,'정우성','서울시 동대문구 동대문동','지리고');
commit;

select * from like_test2;

--3. like_test2 테이블에서 '서울시'에 거주하며
--이름이 3글자인 학생의 번호,이름,주소,출신고를 검색하여 아래와 같이출력
-- 번호:xx,이름:xx,학교:xx,주소:xx
select ENAMENO, ENAME, ADDR, HIGHSCH
from like_test2
where addr like '서울시%' and ename like '___';

order by ename asc;

ADDR이 서울시로 시작하면서(AND), ENAME이 3글자인 데이터들만 조회되었고

이름의 오름차순으로 정렬된 모습(가나다 순)

 

* 만약 TABLE을 CREATE할 때 ENAME을 VARCHAR2가 아닌, ex)CHAR(12)로 만들었다면?

  • CHAR 타입은 고정 길이 데이터 타입이라서,
  • 실제 이름이 3글자여도 자동으로 뒤에 공백이 붙어서 12자 길이로 채워져
    예: '김철수 ' ← 3글자 + 공백 9개

그래서 like '___'은 정확히 공백 없는 3글자 문자열만 찾기 때문에 매칭이 안돼서

where  ename like '___' ;로 조회가 안됨. ( _ 3개 )