ORACLE
oracle
yuurimingg
2024. 2. 15. 17:23
● 계정 생성 후 권한 설정
● aaa로 접속 후 테이블 생성
- VARCHAR은 내가 쓴 만큼만 메모리 사용
- CHAR은 정해진 메모리 사용 -> 적은 이름일 경우 메모리 낭비가 있을 수 있다
- sysdate는 값을 입력하는 순간 들어가도록
● 데이터 삽입
- sql입력
- commit 꼭 하기
INSERT INTO LOGIN (ID, PW) VALUES('aaa', 'bbb');
SELECT * FROM LOGIN;
- 직접 입력
● SQL 구문
- 전체 데이터 확인
select * from lunch;
commit;
- 점수 확인
-- 점수의 종류를 보고 싶다.
select DISTINCT score from lunch order by score DESC;
- 데이터 삭제하기
-- 잘못된 정보(20)을 처리하기
-- 삭제하기
DELETE from lunch where score = 20;
commit;
select * from lunch;
- 데이터 수정하기
-- 데이터 수정하기
-- 이름 뒤에 score 합쳐서 변경하시오.
update lunch set name = name || score where name = '김유림';
commit;
select * from lunch;
-> score를 직접 수정하지 않고 입력된 score를 넣기
- 데이터 출력
-- 입력 순서
-- 시간을 초단위로
select name, score, to_char(createtime, 'YYYY/MM/DD HH24:MI:SS')
from lunch
order by createtime;
- 기초 통계
-- 기초통계
-- 음식점별 평균 평점, 최고평점, 최저평점
select name, avg(score) as 평균평점, max(score) as 최고평정, min(score) as 최저평점
from lunch
group by name;
- rownum
-> mysql에서는 'limit'를 사용하고 oracle에서는 'rownum'을 이용
-- 숨겨진 컬럼 rownum 이용
select rownum, name from lunch;
-- 이름순으로(내림차순) 정렬된 5개씩 볼 째 2페이지의 내용을 출력
select rownum, name
from lunch
where rownum between 5 and 10
order by name;
-- 오류 발생
-- rownum은 출력할 때의 순번이다(출력때마다 새로 갱신되기 때문)
-- 해결 방법
select *
from (select rownum as rn, name from lunch where rownum <= 10) -- 결과 자체를 테이블로 사용)
where rn between 5 and 10;
-- 정렬하기
-- 정렬 후 rownum 테이블로 만들기
select *
from (select rownum as rn, name -- 2. 정렬된 데이터에 rownum 생성
from (select * -- 1. 정렬
from lunch
order by name desc))
where rn between 6 and 10;
- 평균 평점이 가장 높은 1 ~ 3등 가게 출력
-- 평균 평점이 가장 높은 1 ~ 3등 가게 출력
-- 출력 형태는 가게이름, 평균 점수
select * -- 3개만 출력
from (select name, avg(score) 평균점수 -- 평균 평점을 구해 정렬
from lunch
group by name
order by 평균점수 desc)
where rownum <= 3;
- 데이터베이스에서 인덱스를 사용하는 이유
-> 장점 : 시간이 빠르다
-> 단점 : 인덱스를 만들기 위해서 인덱스 테이블이 필요하다(추가적인 용량이 필요)
삽입, 삭제 후 인덱스를 계속 생산해야 한다