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;

 

- 데이터베이스에서 인덱스를 사용하는 이유

-> 장점 : 시간이 빠르다

-> 단점 : 인덱스를 만들기 위해서 인덱스 테이블이 필요하다(추가적인 용량이 필요)

               삽입, 삭제 후 인덱스를 계속 생산해야 한다