#현업에서는 SQL역할에 따라 아래 3가지로 구분해서 SQL파일을 저장한다

 

 

#DDL(데이터 정의 언어) : 테이블 생성, 삭제 SQL

  • CREATE : 테이블 생성
  • DROP : 테이블 삭제
  • ALTER : 테이블 수정
  • TRANCATE : 관계 제거

 

#DML(데이터 조작 언어) : 테이블에 데이터를 액세서 하는 SQL

  • SELECT : 데이터 검색
  • INSERT : 데이터 삽입
  • UPDATE : 데이터 업데이트
  • DELETE : 데이터 삭제

 

#DCL(데이터 제어 언어) : 사용자에게 권한을 부여

  • GRANT : 사용자에서 작업권한을 부여
  • REVOKE : 부여한 작원권한을 회수/취소
  • CONNECT : 데이터베이스 연결 권한
  • SELECT : 데이터베이스 검색 권한
  • INSERT : 데이터베이스 삽입 권한
  • UPDATE : 데이터베이스 업데이트 권한
  • DELETE : 데이터베이스 삭제 권한
  • USAGE : 스키마, 함수를 사용할 수 있는 권한

 

 

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

[TRIGGER] 트리거  (0) 2020.09.29
[SQL] 테이블 명령문  (0) 2020.09.28
[SQL] ORDER BY  (0) 2020.09.28
[SQL] GROUP BY, HAVING  (0) 2020.09.28

[ORACLE][SQLServer]

 

TRIGGER란

개발자가 호출해서 사용하지않고 특정 테이블에 대해 어떠한 동작이 수행될때 자동적으로 실행된다

어떠한 동작이란 INSERT, UPDATE, DELETE 같은 행동이다

if(어떠한 동작이 감지되면){// 어떠한 동작이란 트리거를 만들때 지정해논 조건
	트리거 작동
}

 

 

트리거 생성

CREATE OR REPLACE TRIGGER 트리거명
	AFTER(BEFORE) INSERT or UPDATE or DELETE  //INSERT, UPDATE, DELETE 중 하나가 작동한 후
    ON 대상테이블  //해당 테이블
   	FOR EACH ROW
    
    DECLARE//선언문
    
    BEGIN//수행부
    
    END;//종료
    

//문의사항테이블이 작성되기전에 공휴일은 문의가 불가능하다고 알리는 조건
CREATE OR REPLACE TRIGGER INSERT_QA_TRIGGER
	BEFORE INSERT  //INSERT문이 작동하기 전
    ON QATABLE  //문의사항 테이블에서
   	FOR EACH ROW
    
    //토요일, 일요일엔 문의가 불가능
    BEGIN//수행부
    	IF TO_CHAR(SYSDATE, 'DAY') = '토요일' 
        THEN
        	 RAISE APPLICATION_ERROR(-20000, '공휴일은 문의가 불가능 합니다');
   		ELSIF TO_CHAR(SYSDATE, 'DAY') = '토요일'
        THEN
        	 RAISE APPLICATION_ERROR(-20000, '공휴일은 문의가 불가능 합니다');        	
        END IF;
    END;
        

 

 

트리거 삭제

 

DROP TRIGGER 트리거명;

DROP TRIGGER INSERT_QA_TRIGGER;

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

[SQL] DDL, DML, DCL  (0) 2020.11.20
[SQL] 테이블 명령문  (0) 2020.09.28
[SQL] ORDER BY  (0) 2020.09.28
[SQL] GROUP BY, HAVING  (0) 2020.09.28

SELECT(검색)

SELECT * FROM 테이블명
WHERE 조건문

 

INSERT(삽입)

INSERT INTO 테이블명
VALUE(?,?,?)

UPDATE(업데이트)

UPDATE 테이블명 
SET 컬럼명=?
WHERE 조건문

DELETE(삭제)

DELETE FROM 테이블명
WHERE 조건문

 

 

CREATE TABLE(테이블 생성)

CREATE TABLE 테이블명(
	컬럼명 NUMBER PRIMARY KEY,
    컬럼명 VARCHAR(20) NOT NUL,
    컬럼명 DATE NULL
)

 

DROP TABLE(테이블 삭제)

DROP TABLE 테이블명

 

ALTER TABLE(테이블 수정)

ALTER TABLE 테이블명
ADD 컬럼명 NUMBER//컬럼 추가

ALTER TABLE 테이블명
DROP(컬럼명)//컬럼 삭제

ALTER TABLE 테이블명
DROP COLUMN 컬럼명//컬럼 삭제

ALTER TABLE 테이블명
MODIFY 컬럼명 VARCHAR(20)//테이블 컬럼 수정

ALTER TABLE 테이블명
RENAME COLUMN 기존컬럼명 TO 새로운컬럼명//컬럼명 수정

ALTER TABLE 테이블명
ADD CONSTRAINT FOREIGN KEY (테이블 컬럼명) REFERENCES 참조테이블(컬럼명);//제약조건 추가

ALTER TABLE 테이블명
DROP CONSTRAINT 컬럼명//제약조건 삭제

 

TRUNCATE TABLE(테이블의 모든값 삭제)

TRUNCATE TABLE 테이블명

 

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

[SQL] DDL, DML, DCL  (0) 2020.11.20
[TRIGGER] 트리거  (0) 2020.09.29
[SQL] ORDER BY  (0) 2020.09.28
[SQL] GROUP BY, HAVING  (0) 2020.09.28

ORDER BY : SELECT문의 결과는 데이터 입력순서대로 출력되지만

특정 컬럼을 오름차순 내림차순으로 결과를 얻고 할 때 사용

 

오름차순 : 작은 값이 가장 위

내림차순 : 큰 값이 가장 위

 

TABLE1을 검색하는 SELECT

SELECT * FROM TABLE1

TABLE1의 PRICE컬럼을 오름차순으로 검색

SELECT * FROM TABLE1
ORDER BY PRICE ASC

ORDER BY문은 기본이 오름차순(ASC)이므로 생략하면 오름차순을 기준으로 검색한다 

SELECT * FROM TABLE1
ORDER BY PRICE

 

TABLE1의 PRICE컬럼을 내림차순으로 검색

SELECT * FROM TABLE1
ORDER BY PRICE DESC

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

[SQL] DDL, DML, DCL  (0) 2020.11.20
[TRIGGER] 트리거  (0) 2020.09.29
[SQL] 테이블 명령문  (0) 2020.09.28
[SQL] GROUP BY, HAVING  (0) 2020.09.28

GROUP BY : 중복을 제거하고 그룹화 

HAVING : 그룹화 후 조건

 

#선언방법

SELECT [그룹으로 묶을 컬럼명] + [집계 함수]
FROM 테이블명 
GRUOP BY [그룹으로 묶을 컬럼명]
HAVING [그룹으로 묶을 컬럼명] + [조건식]

 

실행순서는

FROM > GROUP BY > HAVING > SELECT 순이다

 

집계 함수 리스트

함수명 기능
COUNT(컬럼명) or COUNT(*) 해당 컬럼의 건수, *는 모두라는뜻
MAX(컬럼명) 해당 컬럼에서 최대값
MIN(컬럼명) 해당 컬럼에서 최소값
SUM(컬럼명) 해당 컬럼의 합
AVG(컬럼명) 해당 컬럼의 평균값
DATALENGTH(컬럼명) 해당 컬럼의 바이트 수

 

 

 

테이블

상품번호 상품이름 상품가격
1 식빵 1000
2 과자 1000
3 음료수 2000
3 음료수 2000

 

SELECT 상품번호
FROM 테이블명
GRUOP BY 상품번호
상품번호
1
2
3

 

집계 함수를 추가했을 경우(집계 함수는 그룹화 된 컬럼을 기준으로 결과값을 반환한다)

SELECT 상품번호, COUNT(*)
FROM 테이블명
GRUOP BY 상품번호
상품번호 COUNT(*)
1 1
2 1
3 2

 

그룹화할 컬럼을 추가

SELECT 상품번호, 상품이름, COUNT(*)
FROM 테이블명
GRUOP BY 상품번호, 상품이름
상품번호 상품이름 COUNT(*)
1 식빵 1
2 과자 1
3 음료수 2

 

그룹화 후 조건식(HAVING)

SELECT 상품번호, 상품이름, 상품가격, COUNT(*)
FROM 테이블명
GRUOP BY 상품번호, 상품이름, 상품가격
HAVING 상품가격 > 1000
상품번호 상품이름 상품가격 COUNT(*)
3 음료수 2000 2

 

 

GROUP BY를 사용할 때 중복제거가 되지 않는 경우가 있다

 

 

#테이블

상품번호 상품이름 상품가격
1 과자 1000
2 과자 1000
3 과자 1000
3 과자 2000

 

아래의 쿼리는 중복제거가 되지 않는다

SELECT 상품번호, 상품이름, 상품가격
FROM 테이블명
GRUOP BY 상품번호, 상품이름, 상품가격

중복제거가 되는 기준은

GROUP BY로 그룹화를 한 컬럼 전체가 중복이 없어야 한다

상품번호 상품이름이 같아도 상품 가격이 다르면 중복처리가 안된다

 

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

[SQL] DDL, DML, DCL  (0) 2020.11.20
[TRIGGER] 트리거  (0) 2020.09.29
[SQL] 테이블 명령문  (0) 2020.09.28
[SQL] ORDER BY  (0) 2020.09.28

+ Recent posts