gi_dor

정리 _ 테이블 생성 , 조작 , group by , JOIN 본문

First/SQL

정리 _ 테이블 생성 , 조작 , group by , JOIN

기돌 2023. 4. 17. 21:24
728x90

데이터 타입 설명

VARCHAR(size) 최대 길이가 size인 가변길이 '문자값' 최소1  ~ 최대 2000
CHAR(size) 길이가 size인 고정길이 '문자값' 기본길이1 , 최대 255
Ex ) CHAR(5) 'Y'  ▶ 'Y    ' 공백으로 채움
NUMBER 38자리까지 유효한 숫자
NUMBER(p,s) 38자리 범위중 p자리수 까지 유효한 값으로 
전체 자리수 p, 소수점 자리수 s
Ex ) number(7,4) => 123.4567
DATE 날짜와 시간
LONG 2GB 까지의 가변 길이 문자값 테이블당 한개의 LONG 열 허용
RAW , LONGRAW VARCHAR2 , LONG 과 같지만 이진 데이터를 저장 
Binary 

 


SQL 명령어 기본

◾ 데이터 검색 , 조회 
select

◾ 데이터 조작어 - DML 
insert , update , delete 

◾ 데이터 정의어 - DDL
create , alter , truncate , drop , rename , comment

◾ Transaction 
commit , roll back , save poin

◾ 데이터 제어어 - DCL 
grant , revoke 

RETRIEVE (QUERY) SELECT  원하는 데이터를 검색하기 위한 명령어
DML INSERT
UPDATE
DELETE
새로운 행을 입력 , 행을 수정
데이터 삭제 등 데이터를 조작에 관함
DDL CREATE , ALTER
DROP  , RENAME
TRUNCATE , COMMENT
구조를 만들거나 , 구조변경 , 삭제등 
데이터 구조에 관함
Transaction COMMIT , ROLL BACK
SAVE POINT
논리적인 작업의 단위로 DML에 의해 조작된 결과를 다룸
DCL GRANT , REVOKE 데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고받음

 

-- 데이터 입력 
insert into 테이블이름 (컬럼1, 컬럼2, 컬럼3)
values(값1 , 값2 , 값3);

-- 데이터 수정 
update 테이블이름 
set 컬럼1 = 값1
where  조건식
;

-- 데이터 삭제
delete from 테이블이름
where 조건식
;

-- 데이터 전체검색
select * from 테이블 이름 ;

-- 특정 칼럼의 검색
select 컬럼1 , 컬럼2 , 컬럼3 
from 해당 테이블 이름
;

-- 산술식을 이용한 검색
select name , salary , salary * 10 , salary / 5
from 테이블
;

-- ALIAS 부여 (별명)
select name as 이름  , salary 연봉 , salary*10 "연봉 10배"
from 테이블
;

-- 컬럼의 합성 
-- 합성연산자 || 사용
select name || ' ' || title 
from s_emp
;

-- 중복 행 제거
select distinct name
from s_emp
;

-- 정렬순서 
select name , title
from s_emp
order by name  -- ㄱ ~ ㅎ 오름차순 
;

select name , title 
from s_emp 
order by name desc -- 내림차순
;

SUBGROUP 데이터분류

GROUP BY : 전체 데이터를 소그룹으로 나눌 컬럼을 명시 

HAVING :  GROUP에 대한 조건을 기술함

group by 예시

select dept_id , avg(salary)
from s_Emp
where title = '사원'
group by dept_id
;

having 예시
select title , avg(salary), count(*)
from s_emp
group by title 
having count(*) > 2
;

select 
from
where
group
having 
order  구조

JOIN

하나 이상의 테이블로부터 연관된 데이터 검색하기
일반 적으로는 PK와 FK 값의 연관으로 JOIN성립 , 떄떄로 PK,FK 관계없어도 논리적인 값들의 연관으로도 JOIN

JOIN 방법

  • EQUI JOIN : 컬럼 간의 값들이 서로 정확히 일치하는경우에 사용
  • NON EQUI JOIN : 한 컬럼의 값이 다른 컬럼의 값과 정확히 일치하지 않는 경우
  • OUTER JOIN : JOIN 조건을 만족하지 않는경우 에도 모든 행들을 다 보려고
  • SELF JOIN : 같은 테이블에 있는 행들을 JOIN

✔ JOIN시 where 필수 


EQUI JOIN 

  • = 연산자 사용  
  • OUTER JOIN에서 IN 이나 OR 사용 할수 없음
  • PK, FK 관계로 JOIN 하는게 일반적임

select s_emp.name , s_emp.dept_id , s_dept.name
from s_Emp , s_dept
where s_emp.dept_id = s_dept.id
;

 

테이블의 ALIAS 사용

select e.name 사원이름 , e.dept_id , d.name 부서이름
from s_Emp e , s_dept d
where s_emp.dept_id = s_dept.id
;

 


NON -EQUI JOIN

  • 한컬럼의 값이 다른 컬럼의 값과 정확히 일치하지 않는경우  
  • = 연산자 외에 다른 연산자를 사용해서 JOIN  
  • between A and B
select e.name 이름 , e.salary 연봉 , g.grade 등급 
from s_emp e , salgrade g
where e.salary between g.losal and g.hisal
;

OUTER JOIN 

  • (+) 연산자를 사용, 위치는 JOIN할 데이터가 부족한 쪽에 위치함
  • where 절에서 비교연산자 기준으로 좌측 , 우측 어느 한쪽에 쓰임
  • OUTER JOIN에서 IN 이나 OR 사용 할수 없음

--사원의 이름 , 사번 , 사원의 담당고객을 나타내시오
--고객을 담당한 사원이 없더라고 모든 고객의 이름을 나타내고 
--사번순으로 오름차순으로 정렬

select * from s_emp;
select * from s_customer;

select e.name 사원 , e.id 사번 , c.name 고객이름
from s_emp e , s_customer c
where e.id (+)= c.sales_rep_id
order by 2 
;

SELF JOIN

  • 하나의 테이블을 마치 여러개의 테이블인거마냥 사용함
  • 테이블에 대한 alias 로 각기 다르게 지정해줘야함
  • 컬럼의 이름앞에 반들시 alias 붙임
  • SELF JOIN 횟수는 제한되어 있지 않음

 

728x90

'First > SQL' 카테고리의 다른 글

SQL 손코딩 TEST  (0) 2023.04.18
SET 연산자  (0) 2023.04.18
정리_관계형 데이터 베이스 RDB  (0) 2023.04.17
주말) SQL 예제 복습  (0) 2023.04.16
정리_SQL 기초문법  (0) 2023.04.15