SQL

240820

유순이 2020. 8. 25. 11:39
SELECT DISTINCT EMPNO NO, ENAME NAME
FROM EMP
;

SQL의 기본형식으로, 

select - 뽑아낼 자료(Column 이름) 별칭, ~

from 뽑아낼 자료의 위치 (Table 이름)

;

으로 구성된다.

 

SELECT * FROM EMP;
--부서 번호(DEPTNO)가 30인 사원을 모두 표기해주세요. . 이름, 업무, 관리자, 입사일 순서대로  표시만
SELECT ENAME NAME, JOB, MGR, HIREDATE 
FROM EMP
--이제 조건이 나와야해
WHERE DEPTNO = 30
--아무것도 안쓰면 ASC, 내림차순 = DESC
ORDER BY HIREDATE 
;

*은 all의 의미

where은 조건식을 입력하기 위한다.

order by는 asc (오름차순) , desc (내림차순)으로 아무 것도 적지 않을 경우 오름차순 자동

--부서번호에 따른 위치정보를 나타내 주세요. -- 이 두 가지 정보가 다 들어있는건, DEPT테이블
SELECT DEPTNO, LOC
FROM DEPT
;
--SMITH가 근무하는 부서의 번호와 위치를 나타내주세요.
SELECT E.ENAME, D.DEPTNO, D.LOC 
FROM EMP E JOIN DEPT D
ON e.deptno = d.deptno
WHERE E.ENAME = 'SMITH'
;

 

두 개의 테이블을 병합하는 것 - 교집합이 있어야해

from ~ join ~

on 교집합을 명시

 

 

SHOW USER;
SELECT * FROM TAB; --TAB도 다른데 없음, TABLE의 약자. 현재 존재하는 TABLE명을 볼 수 있따.
DESC EMP; -- TABLE의 정보 ; 오라클에서만 지원하는 명령어. 내림차순과는 다름. 여기서 DESC = DESCRIPTION.
SELECT DEPTNO, JOB
FROM EMP
;

기타 표현들.

 

--연봉 = SAL * 12 + COMM (보너스)
-- EMPNO, ENAME, JOB, HIREDATE, SAL 월급, ... 연봉
SELECT EMPNO, ENAME, JOB, HIREDATE, SAL 월급, SAL*12+COMM 연봉
FROM EMP
;

출력할 부분에 대한 사칙연산이 가능하다.

 

--WHERE 구문 - 조건에 맞는 데이터만 조회하고싶을 때
SELECT * FROM EMP
WHERE DEPTNO = 10
;
SELECT * FROM EMP
WHERE ENAME = 'WARD'
;

조건문

SELECT * FROM EMP
WHERE DEPTNO ^= 30
;

SELECT * FROM EMP
WHERE DEPTNO != 30
;

SELECT * FROM EMP
WHERE SAL >= 3000 AND DEPTNO =20
;

^=, !=, <>, NOT + = 으로 일치하지 않는 정보 조회가 가능하다.

 

--WHERE 조건문은 앞에서부터 순차적으로 진행하기에 오류가 생길 수 있다.
SELECT * FROM EMP
WHERE DEPTNO = 20 AND SAL >= 2000 OR HIREDATE < '82/01/01'
; --이랬을 때, DEPTNO가 20이 아닌 애들도 출력이 되버렸다. > 82 1 1 전에 입사했거나, DEPTNO 20, SAL >= 2000인 애들이 출력된 것이다.
--그래서
SELECT * FROM EMP
WHERE DEPTNO = 20 AND (SAL >= 2000 OR HIREDATE < '82/01/01')
;

순서의 중요성, 아 다르고 어 다르니 주의하자.

 

SELECT ENAME ||'''S JOB IS '||JOB EMPLOYEE FROM EMP
; --연결 연산자 : 컬럼명 || '원하는 문자' || 컬럼명 별칭 ; 중요한건 ' ' 사이에 특수문자를 넣고싶으면 '를 앞에 하나 넣어야해

SELECT ENAME ||'SAT S_ JOB  IS '||JOB EMPLOYEE FROM EMP --근데 '를 넣을때만 해당되는 거 같아
;

combine 2 columns

2개의  columns 정보를 병합해서 표현하기 위함

특수 문자 ' 의 사용을 주의하자!

 

SELECT *
FROM EMP E JOIN DEPT D
ON E.DEPTNO = D.DEPTNO
ORDER BY D.LOC DESC, JOB DESC, ENAME DESC 
;
--COMM에 MULL이 들어가 있는 경우 숫자 + NULL  > NULL로 계산되므로 NULL이라는 값 대신에 0이 들어가도록 계산해야 한다.
--그때 사용하는 함수 NVL (컬럼명, NULL을 대체할 값)
-- 추가 함수 NVL2 (컬럼명, NULL일때 대체할 값, NULL이 아닐때 대체할 값)


-- EMP 테이블 값에서 관리자 (mgr) 가 따로 있는 사람은 'Y'로 표시하고, 없는 사람은 'N'으로 표현
-- 상여금도 마찬가지로

SELECT E.*, NVL(COMM, 'N', 'Y')
FROM EMP E
; --이거 안돼 NYL2가 뭔지 모른다는데? > 응 NYL이 아니라 NVL야

 

사용되는 기타 함수!

select  부분에 함수를 넣을 수 있다. ( 산출되는 결과에 반영해야 하니까 당연한 거겠지?)

 

SELECT DISTINCT E.JOB, E.DEPTNO, D.DNAME
FROM EMP E JOIN DEPT D
ON E.DEPTNO = D.DEPTNO
ORDER BY E.DEPTNO --와 D.DEPTNO하면 안되넼ㅋㅋㅋㅋㅋ
;

 

일치해야하는 부분.

 물론 e.deptno = d.deptno은 같은 것이지만, 정렬을 위해서 select 된 것과 정확히 일치시켜야 해.

 

  • 20200824

    관계형 데이터 베이스의 특징

    정보 저장을 위해 테이블 이용 (행과 열로 구성)
    CRUD가 다른 DBMS에 비해 쉽다


    용어 정리 필수
    relation : 테이블을 의미한다. (자바의 클래스라고 볼 수 있어)
    relation instance : 저장되어 있는 테이블의 데이터 전체를 의미한다. 
    schema :  속성들의 집합 (이름, 나이, 성별, 학년 등)
    tuple : 속성들의 모임으로 구성 (나이의 튜플은 19, 20, 22, 25; 성별의 튜플은 남, 여; 학년의 튜플은 1, 2, 3; 등)
    cardinality = cardinal number = 대응수
    domain : 


    대괄호는 생략 가능한 부분으로 표시된다.

    세미콜론으로 하나의 명령을 한정짓는다.

    WHERE에는 COLUMN명으로 구분을 하게 된다.

     SELECT (화면에 나타나게끔 하고자 하는 인스턴스들)
     FROM 가져올 테이블 이름
     WHERE 조건 (COLUMN명으로) 비교연산자( = ) 비교값
     ORDER BY 정렬할 컬럼명;

    오름차순일 경우: ASC
    내림차순일 경우: DESC

    COLUMN에 대한 설명은 어딜가나 필수!

    데이터베이스에선 데이터의 메모리 관리가 가장 중요하다.

    두개의 테이블을 연결하려면 FROM 다음에 테이블 명이 2개
    1. 테이블명1 별칭1, 테이블명2, 별칭2 : FROM EMP E, DEPT D
    2. 테이블명1 JOIN 테이블명2 : FROM EMP E JOIN DEPT D

    연결고리 = 연결조건
    1.수행 - COMLUMN 찾기
    2.수행 - 조건문 작성
    방법1. WHERE (조건식 작성) WHERE E.DEPTNO = D.DEPTNO,
    방법2. ON (조건식 작성, OR COLUMN명 작성) ON E.DEPTNO = D.DEPTNO



    sql (structured query language)

     1. 구조적인 질의 언어라는 뜻이며, 데이터베이스를 제어, 관리
    2. 데이터베이스에서 자료를 검색 / 수정 / 삭제하는 데이터베이스 언어
    3. 독자적인 문법을 갖는 db 표준 언어

    명령문의 종류
    1. 데이터베이스 조작어: DML (Data Manipulation Language)
    Insert, update, delete문
    2. 데이터 조회어 : DQL (Data Query Language)
    Select문
    3. 데이터베이스 정의어: DDL (Data Definition Language)
    Schema, domain, table, view, index를 정의, 변경, 삭제
    4. 데이터 제어어: DCL (Data Control Language)
    commint, rollback, grant, revoke
    5. 트랜잭션 처리어: TCL (Transaction Control Language)
    DCL에서 트랜잭션을 제어하는 명령어 commit, rollback


    TABTYPE = VIEW TABLE SYNONYM 

    ' ' 이 문자를 나타내는 기본, " " 은 띄워쓰기 특수문자등을 그대로 나타내고 싶을 때 사용

    띄워쓰기 항상 생각해둬야해, 자바랑 달라

    WHERE 절에 사용 가능한 기타 연산자
    1. BETWEEN 조건 A AND 조건 B
    2. IN (LIST) LIST의 값 중 어느 하나와 일치하는 데이터를 출력
    3. LIKE 문자 형태로 일치하는 데이터를 출력 (%, _ 사용)
    4. IS NULL NULL 값을 가진 데이터 출력
    5. NOT BETWEEN A AND B A와 B 사이에 있지 않은 데이터를 출력 (A, B 포함 안해)
    6. NOT IN
    7. NOT LIKE
    8. IS NOT NULL


    ORDER BY는 뒤에 컬럼명, 컬럼별칭, 숫자 이렇게 총 3가지로 표현할 수 있따. 여기서 숫자는 COLUMN 번호
    ' ' 안의 문자열에 특수문자를 넣으려면 '를 하나 더 넣어야해서 쿼리문에 '를 넣기 위해 '''를 썼다.

    정렬은 결과물을 나타냄에 있어서 E나 D가 처음 결과물을 가져오는 건 좋ㄹ은데, 나타낼때는 가져온 걸 써야지!!

    이름, 날짜, 문자도 크기를 비교할 수 있따. (알파벳 순으로)
    <
    >
    =
    <> 제외하고 다