<<<이론적인 내용>>>
현실세계(비지니스 업무)
[옛날에는]
-> 추상화 -> 논리 모델링 (표, 컬럼, 컬럼타입, 관계) : ERD -> 물리 모델링 (논리/물리 ERP 의 표 컬럼, 타입, 관계)
-> 정규화(컬럼 추가, 삭제, 분리) -> 표 -> 데이터 입력 -> 프로그램 생성 -> 사용자
[요즘에는]
ERD -> 데이터 분석(표,칼럼) -> 프로그램 개발 (분석, 설계, 코딩, 테스트) -> 사용자 이관
SI project;업무(System integration)
SM(System maintanence project) 유지보수 업무
데이터 구성요소 (Key); 영어 약어로 실무에 많이 씀
PK(Primary Key, 기본키): 가장 중요. 중복 X. 행을 식별하는 유일한 값. NULL불가. 여러 조합으로 可
CK(Composite Key, 복합키): 여러 열 조합해서 PK 역할 하게 하는 것. ex) 과목코드와 담당교수를 합친 내용을 key로 씀
AK(Alternate Key, 보조키, 대체키): CK(Candidate key 후보키)에 속한 키. 기본키로 지정안된 것.
(후보키는 기본키가능한 모든 키)
FK(Foreign Key, 외래키): 특정 테이블에 있는데 다른 테이블에선 PK인 것
-> FK는 여러 표를 동시 작업할 때 유용
그외 자료 특성
CHAR :4000바이트만큼의 고정길이 문자열 데이터 저장
VARCHAR2: 4000바이트만큼의 가변길이 문자열 데이터 저장
NUMBER: 위아래 38자릿수 숫자 저장.
Ex) NUMBER(p, s) = s자리만큼 소수점 이하 자릿수를 포함한 전체 p자리만큼 숫자 데이터 저장
DATE: 날짜(시간) 형식 저장을 위한 자료형
객체 focus: table, index(검색), view(여러 표를 하나로 논리연결), sequence(일련 변호 생성), synonym(객체 별칭 지정)
매우 중요하고 기본적인 표 관리 명령어이다!
-- <- 주석달때 2개 쓰고 작성
표 만들기: CREATE TABLE 이름(칼럼이름 data type, 칼럼이름 data type .... )
datatype: number, varchar(스트링 개념) ex) NUMBER(4), VARCHER(13)
예제)
CREATE TABLE DEPT(
DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14),
LOC VARCHAR2(13) ) ;
DEPT <- table name
DEPTNO DNAME LOC <- column name
NUMBER VARCHAR <- data type
INSERT INTO 표이름 VALUES (var var.. ) ; 한 행에 신규 데이터 추가 (var = 각 하나의 열)
예제)
INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');
UPDATE 표이름 SET 열이름 = value[WHERE 조건]; 조건이 맞을 때 특정 부분 업데이트
DELETE FROM 표이름 [WHERE 조건]; 표 삭제. 조건(where)없으면 전체 삭제
SELECT * FROM 표이름 표 내용 보기
DESC 표이름 표 구조 보기
DROP TABLE 표이름 표 삭제
ROLLBACK; 한 단계 뒤돌아가기(롤백)
COMMIT; 변경된 데이터 확정 (롤백 불가)
[CONSTRAINT 데이터에 제한 조건 거는 구문들]
PRIMARY KEY: 등록시, 해당 열 중복되지 않는 값만 가짐. 표 내에서 식별값 역할한다는 의미이기도 함
Ex) CONSTRAINT 제약이름 PRIMARY KEY column_name
앞선 예제에서
CREATE TABLE DEPT(
DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14),
LOC VARCHAR2(13) ) ;
이미 CREATE TABLE이 완료된 경우,
ALTER TABLE 표이름 ADD CONSTRAINT 제약이름 PRIMARY KEY column_name
CONSTRAINT 제거 -> ALTER TABLE 표이름 DROP CONSTRAINT 제약이름;
SELECT 구문
SELECT 컬럼이름, 컬럼이름 <- 여러개 可
from 표 이름
where 컬럼이름 = 1 <-조건
and(or) 컬럼이름2 = "공부"
group by
order by
SELECT distinct 대상
from 표이름; <- distinct는 중복없이 고르게하는 것.
order by 대상1 desc, 대상2 asc; <- 대상1컬럼 기준으로 내림차순(desc), 대상2컬럼기준으로 오름차순(asc) 정렬
* desc, asc 없으면 order by 대상 ; 명령어는 자동 오름차순 정렬(default)
컬럼 이름 지정해서 출력하기
SELECT 컬럼이름1 부서번호, 컬럼이름2 업무
from 표이름, employee; <- 컬럼과 표를 특정 이름으로 지정 출력
같은 구문으로
select 컬럼이름1 as 부서번호, 컬럼이름2 as 업무
from 표이름, employee; 도 같은 효과이다.
[두 테이블 이상을 다루는 구문]
select employee.ename, employee.empn, employee.dno as 부서번호, employee.job as 업무, department,dname
from emp employee, dept department;
-- 표 2개 한번에 다루는 경우 앞에 출처를 표이름.으로 표기
근데 이렇게만 하면 데이터 출력이 이상하게 나옴(중복도 있고.. ) -> where을 통해 조건을 걸고 order by로 정렬하자.
select employee.ename, employee.empn, employee.dno as 부서번호, employee.job as 업무, department,dname
from emp employee, dept department
where employee.dno = department.deptno
order by employee.ename;
칼럼을 하나 새로 만들어서 출력하기
SELECT ename, sal*12 + comm 연봉, comm
from emp;
ename, 연봉이라는 이름으로 sal*12 + comm 값의 새 칼럼 생성, comm <- 이 3개 칼럼 보여준다.
근데 NULL이 많다 -> 1개라도 있으면 계산 불가. -> NULL = 0 처리 필요.
등가비교 연산자: A != B 또는 A <> B A ^= B 로 같지 않음을 표현
연립부등식 한번에 입력 X. -> AND조건으로 연결해주자. 이상 이하 표현은 파이썬과 동일 (<=, >=)
부등식 입력은 대상 BETWEEN A AND B 로 하거나 대상 NOT BETWEEN A AND B로 한번에 표현 可
부정 연산자 NOT: 앞에 NOT 붙여서 부정조건 작성
BETWEEN A AND B 또는 NOT BETWEEN A and B 조건 可 <- 이건 이상 이하의 개념으로 적용됨.
미만 초과 개념은 AND로 연결해야함
예제)
SELECT *
FROM EMP
WHERE SAL NOT BETWEEN 2000 and 3000;
여러개 조건을 한번에 충족시키는 IN (or느낌)
SELECT *
FROM ENP
where JOB IN ('manager', 'salesman', 'clerk');
LIKE 연산
SELECT *
FROM EMP
WHERE ENAME LIKE '_L%'; -- ENAME의 두 번쨰 글자가 L인 것만 출력.
WHERE ENAME LIKE '%AM%' -- ENMAE에 AM이 포함된 데이터만 출력
WHERE ENMAE NOT LIKE '%AM%' -- ENMAE에 AM이 없는 데이터만 출력
(연산자 사용 예)
S로 끝나는거 찾기 -> '%S'
S로 시작하게 하기 -> 'S$'
각종 예제들
NULL 활용: IS NULL( 대상 = NULL ) 또는 IS NOT NULL 로 조건 걸기
UNION: 중복제거 합집합 <-> 중복 허욜 합집합
MINUS: 차집합 INTESECT: 교집합
연산자 우선순위는 기존 수학 연산과 동일.
* 컬럼명 바꾸기
alter table emp rename column dno to deptno;
컬럼 스트링은 작은따옴표만 허용
'Programming > Oracle SQL' 카테고리의 다른 글
Subquery (0) | 2023.08.25 |
---|---|
JOIN (0) | 2023.08.24 |
다중행 함수, GROUP BY, HAVING (0) | 2023.08.24 |
Oracle Functions (1) | 2023.08.23 |
Oracle and its developer install, basic rules (0) | 2023.08.22 |