본문 바로가기
Programming/Oracle SQL

기본 이론, 명령어 (table 관리), constraint, SELECT


<<<이론적인 내용>>>

 

현실세계(비지니스 업무)

[옛날에는]

-> 추상화  -> 논리 모델링 (표, 컬럼, 컬럼타입, 관계) : 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;

컬럼 스트링은 작은따옴표만 허용

 

728x90
반응형

'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