SQL의 유형
데이터 정의어(DDL : Date Definition Language) : 데이터의 구조를 정의하기 위한 명령어
CREATE, ALTER, DROP, RENAME, TRUNCATE
데이터 조작어(DML : Data Manipulation Language) : 데이터를 검색 또는 변형하기 위한 명령어
SELETE, INSERT, UPDATE, DELETE
데이터 제어어(DCL : Data Control Language) : 사용자에게 객체에 대한 권한을 부여/취소하기 위한 명령어
GRANT, REVOKE
트랜잭션 제어어(TCL : Transaction Control Language) : 변경 내용을 확정/취소하기 위한 명령어
COMMIT, ROLLBACK
DML 데이터 조작어
테이블 구조 확인
DESCRIBE 테이블명;
질의어 : 삽입, 삭제, 수정, 검색 등의 데이터 조작을 위한 연산들을 표현하기 위한 언어
SQL은 비절차적 언어이다. (수행절차 기술X, 원하는 결과만을 명시하는 언어)
SELECT 명령문
: 테이블에 존재하는 레코드 값을 조회
SELECT 칼럼1, 칼럼2 FROM 테이블명;
SELECT (ALL) FROM 테이블명;
SELECT DISTINCT 칼럼1 FROM 테이블명; --중복 데이터를 1건으로 출력
null값도 하나의 값으로 출력된다.
SELECT * FROM 테이블명; -- 모든 칼럼 값 조회
-- 별칭이 공백, 특수문자 등을 포함할 경우 큰따옴표 사용
SELECT PLAYER_NAME (AS) "선수 이름", POSITION AS 위치, HEIGHT AS "선수-키" FROM PLAYER;
ORDER BY
: 출력시 정렬 기준 설정
SELECT PLAYER_NAME, HEIGHT FROM PLAYER ORDER BY HEIGHT (ASC);
SELECT PLAYER_NAME, HEIGHT FROM PLAYER ORDER BY 2; --위랑 같음 HEIGHT가 2
-- 키 내림차순, 선수명 오름차순
SELECT PLAYER_NAME, HEIGHT FROM PLAYER ORDER BY HEIGHT DESC, PLAYER_NAME ASC;
WHERE
: 특정 조건을 만족하는 데이터를 한정하기 위해 사용
SELECT PLAYER_ID, POSITION FROM PLAYER WHERE POSITION = 'GK';
-- 산술 연산자 --
-- HEIGHT+0도 null
SELECT PLAYER_NAME, HEIGHT, HEIGHT + 0 FROM PLAYER WHERE PLAYER_NAME = '다람쥐';
-- 비교 연산자 --
-- 비교 연산자는 NULL에 사용 불가능하다.
-- 아래 코드에서 NATION = NULL 또는 NATION <> NULL 하면 오류 발생
SELECT PLAYER_ID, PLAYER_NAME, NATION FROM PLAYER WHERE NATION IS NULL;
SELECT PLAYER_ID, PLAYER_NAME, NATION FROM PLAYER WHERE NATION IS NOT NULL;
연산자의 우선 순위
1. 괄호() 2. NOT 연산자 3.비교연산자,SQL연산자 4.AND 5.OR
SELECT PLAYER_NAME, POSITION, HEIGHT FROM PLAYER WHERE POSITION <> 'GK' AND HEIGHT > 180;
SELECT PLAYER_NAME, POSITION, HEIGHT FROM PLAYER WHERE NOT(POSITION = 'GK') AND HEIGHT > 180;
-- 아래 SQL문은 실행결과가 위와 다르다.
SELECT PLAYER_NAME, POSITION, HEIGHT FROM PLAYER WHERE NOT(POSITION = 'GK' AND HEIGHT > 180);
SQL연산자 - 합성(연결) 연산자
: 문자열과 문자열을 연결함
-- 다람쥐 | 182Cm
SELECT PLAYER_NAME, HEIGHT || 'Cm' AS "선수 신장" FROM PLAYER;
SELECT PLAYER_NAME, CONCAT(HEIGHT,'Cm') AS "선수 신장" FROM PLAYER; -- CONCAT은 2개가 한계
-- 다람쥐 선수: 182Cm
SELECT PLAYER_NAME || ' 선수: ' || HEIGHT || 'Cm' AS "선수 신장" FROM PLAYER;
BETWEEN, NOT BETWEEN
SELECT PLAYER_NAME, POSITION, HEIGHT 키 FROM PLAYER WHERE HEIGHT BETWEEN 180 AND 185;
SELECT PLAYER_NAME, POSITION, HEIGHT 키 FROM PLAYER WHERE HEIGHT >= 180 AND HEIGHT <= 185;
SELECT PLAYER_NAME, POSITION, HEIGHT 키 FROM PLAYER WHERE HEIGHT NOT BETWEEN 180 AND 185;
SELECT PLAYER_NAME, POSITION, HEIGHT 키 FROM PLAYER WHERE HEIGHT < 180 OR HEIGHT > 185;
IN, NOT IN
SELECT PLAYER_NAME, TEAM_ID, POSITION FROM PLAYER
WHERE (TEAM_ID, POSITION) IN (('K04', 'GK'), ('KO6', 'MF'));
SELECT PLAYER_NAME, TEAM_ID, POSITION FROM PLAYER
WHERE (TEAM_ID, POSITION) NOT IN (('K04', 'GK'), ('KO6', 'MF'));
LIKE : 문자열 비교 연산, 와일드 카드 사용 가능
(% : 임의의 문자 N개, _ : 임의의 문자 1개)
SELECT PLAYER_NAME FROM PLAYER WHERE PLAYER_NAME LIKE '다%'; -- 다람쥐 나옴
ROWNUM : 사용자가 아닌 시스템이 관리하는 슈도 컬럼(가상 컬럼)
채번, 출력 새수 지정 등에 활용할 수 있다.
SELECT PLAYER_NAME, ROWNUM FROM PLAYER;
-- 한 행만 반환
SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM=1;
SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM<=1;
SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM<2;
-- 여러 행 반환
SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM=3; -- 아무 것도 출력안됨
SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM<=3;
SELECT PLAYER_NAME FROM PLAYER WHERE ROWNUM<4;
테이블 내의 UNIQUE한 값 설정에도 사용가능하다.
ALTER TABLE PLAYER ADD (ROW_ID NUMBER); -- 칼럼 추가
UPDATE PLAYER SET ROW_ID = ROWNUM; -- ROW_ID 칼럼에 ROWNUM 업데이트
SELECT PLAYER_NAME FROM PLAYER WHERE ROW_ID = 3;
INSERT
: 테이블에 한 건의 레코드를 추가함
-- 정의하지 않은 컬럼은 NULL값 입력됨
-- INSERT INTO 테이블명 (COLLUM_LIST) VALUES(VALUE_LIST);
INSERT INTO PLAYER (PLAYER_ID, PLAYER_NAME, TEAM_ID)
VALUES ('2000943', '다람쥐', 'K07');
-- 전체 컬럼 모든 값을 순서대로 입력해야 함
-- 빈 값은 NULL 또는 작은따옴표'' 입력
INSERT INTO PLAYER VALUES('2000943', '다람쥐', 'K07','','','','','',NULL,NULL);
INSERT ALL
: 동시에 여러 레코드를 추가함 (기존 테이블의 레코드 조회 후 다른 테이블에 삽입)
INSERT ALL
INTO TABLE2 VALUES (ID, NAME)
INTO TABLE3 VALUES (ID, SALARY)
SELECT ID, NAME, SALARY FROM TABLE1;
INSERT ALL은 반드시 SELECT 문을 사용해야 한다.
새로운 값을 직접 입력하는 경우 DUAL 테이블을 사용한다.
INSERT ALL
INTO STADIUM(STADIUM_ID, STADIUM_NAME) VALUES('TP1', '임시경기장1')
INTO STADIUM(STATIUM_ID, STADIUM_NAME) VALUES('TP2', '임시경기장2')
SELECT * FROM DUAL;
DELETE
: 테이블에 존재하는 레코드 삭제
-- 전체 레코드 삭제
DELETE PLAYER;
DELETE FROM PLAYER;
-- 특정 레코드 삭제
DELETE FROM STADIUM WHERE STADIUM_ID = 'TP1';
UPDATE
: 테이블에 존재하는 전체 레코드의 값을 변경
-- PLAYER 테이블에서 모든 레코드의 POSITION을 'GK'로 변경한다.
UPDATE PLAYER SET POSITION = 'GK';
-- 특정 레코드의 값 변경
UPDATE STADIUM SET STADIUM_NAME = '다람쥐경기장' WHERE STADIUM_ID = 'TP2';
UPDATE와 ROWNUM 이용한 채번(번호획득)
ALTER TABLE PLAYER ADD (ROW_ID NUMBER); -- 칼럼 추가
UPDATE PLAYER SET ROW_ID = ROWNUM; -- ROW_ID 칼럼에 ROWNUM 업데이트
SELECT ROW_ID, PLAYER_NAME FROM PLAYER WHERE ROW_ID = 3;
'전공 지식 정리 > 데이터베이스 설계' 카테고리의 다른 글
데이터베이스 SQL - Function (0) | 2022.11.28 |
---|---|
데이터베이스 SQL문 DDL (0) | 2022.10.24 |
데이터베이스 - 데이터 모델과 성능 (0) | 2022.10.22 |
데이터베이스의 개요 (3) | 2022.03.22 |
#0 데이터베이스 설계 계획표 (0) | 2022.03.22 |