Notice
Recent Posts
Recent Comments
Link
Tags
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

JongDDA의 한걸음 한걸음씩

SQL - SELECT 문 본문

개발/SQL

SQL - SELECT 문

종따 2021. 7. 19. 12:26
728x90

 

 

SELECT는 저장된 데이터를 가져오라는 명령어이다. 즉, 데이터베이스에 저장되어 있는 데이터를 꺼내 와서 화면으로 보여달라는 뜻을 의미한다. 

SELECT 명령어에 대해 자세히 알아보기 위해 연습용 Table을 만들어 주자.

 

CREATE TABLE DEPT
       (DEPTNO NUMBER(2) CONSTRAINT pk_dept PRIMARY KEY,
        DNAME VARCHAR2(14),
        LOC VARCHAR2(13) );

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');

CREATE TABLE EMP
       (EMPNO NUMBER(4) CONSTRAINT pk_emp PRIMARY KEY,
        ENAME VARCHAR2(10),
        JOB VARCHAR2(9),
        MGR NUMBER(4),
        HIREDATE DATE,
        SAL NUMBER(7, 2),
        COMM NUMBER(7, 2),
        DEPTNO NUMBER(2) CONSTRAINT fk_emp_dept REFERENCES dept(deptno));

INSERT INTO EMP VALUES
        (7369, 'SMITH',  'CLERK',     7902,
        TO_DATE('17-DEC-1980', 'DD-MON-YYYY'),  800, NULL, 20);
INSERT INTO EMP VALUES
        (7499, 'ALLEN',  'SALESMAN',  7698,
        TO_DATE('20-FEB-1981', 'DD-MON-YYYY'), 1600,  300, 30);
INSERT INTO EMP VALUES
        (7521, 'WARD',   'SALESMAN',  7698,
        TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250,  500, 30);
INSERT INTO EMP VALUES
        (7566, 'JONES',  'MANAGER',   7839,
        TO_DATE('2-APR-1981', 'DD-MON-YYYY'),  2975, NULL, 20);
INSERT INTO EMP VALUES
        (7654, 'MARTIN', 'SALESMAN',  7698,
        TO_DATE('28-SEP-1981', 'DD-MON-YYYY'), 1250, 1400, 30);
INSERT INTO EMP VALUES
        (7698, 'BLAKE',  'MANAGER',   7839,
        TO_DATE('1-MAY-1981', 'DD-MON-YYYY'),  2850, NULL, 30);
INSERT INTO EMP VALUES
        (7782, 'CLARK',  'MANAGER',   7839,
        TO_DATE('9-JUN-1981', 'DD-MON-YYYY'),  2450, NULL, 10);
INSERT INTO EMP VALUES
        (7788, 'SCOTT',  'ANALYST',   7566,
        TO_DATE('09-DEC-1982', 'DD-MON-YYYY'), 3000, NULL, 20);
INSERT INTO EMP VALUES
        (7839, 'KING',   'PRESIDENT', NULL,
        TO_DATE('17-NOV-1981', 'DD-MON-YYYY'), 5000, NULL, 10);
INSERT INTO EMP VALUES
        (7844, 'TURNER', 'SALESMAN',  7698,
        TO_DATE('8-SEP-1981', 'DD-MON-YYYY'),  1500,    0, 30);
INSERT INTO EMP VALUES
        (7876, 'ADAMS',  'CLERK',     7788,
        TO_DATE('12-JAN-1983', 'DD-MON-YYYY'), 1100, NULL, 20);
INSERT INTO EMP VALUES
        (7900, 'JAMES',  'CLERK',     7698,
        TO_DATE('3-DEC-1981', 'DD-MON-YYYY'),   950, NULL, 30);
INSERT INTO EMP VALUES
        (7902, 'FORD',   'ANALYST',   7566,
        TO_DATE('3-DEC-1981', 'DD-MON-YYYY'),  3000, NULL, 20);
INSERT INTO EMP VALUES
        (7934, 'MILLER', 'CLERK',     7782,
        TO_DATE('23-JAN-1982', 'DD-MON-YYYY'), 1300, NULL, 40);

COMMIT;

 

 

위 코드를 입력하면 연습용 테이블이 생성될 것이다.

테이블이 잘 생성되었는지 확인하기 위해선 아래와 같이 DESC 코드를 사용해 알 수 있다.

 

 

 

-> DESC 명령어는 DESCribe의 약자이며 테이블에 어떤 칼럼이 있는지를 조회하는 명령어 이다.

 

SELECT FROM 문 구조 

 

SELECT (컬럼명, 연산, 별칭, 숫자 '문자열', ||, *, 함수) -> 쓸 수 있는 것들 

FROM 테이블명;

 

-- EMP 테이블 모든 컬럼 조회

 

SELECT *
FROM EMP; 

 

 

-- DEPT 테이블 모든 컬럼 조회

 

SELECT *
FROM DEPT; 

 

 

-- 원하는 컬럼 조회

 

SELECT EMPNO, ENAME
FROM EMP;

 

 

-> SELECT문에 조회하고자 하는 컬럼명을 적어 원하는 컬럼만을 조회할 수 있다.

 

 

-- SELECT 명령에 표현식 사용하여 출력

 

표현식이란 칼럼 이름 이외에 출력하기를 원하는 내용을 의미하며 SELECT 구문 뒤에 ' '(작은따옴표)로 묶어서 사용하면 된다.

 

SELECT ENAME, 'HI~~! SQL' "HI~~! SQL"
FROM EMP;

 

 

-> 위 SELECT 절에서 'HI~~! SQL' 부분은 '표현식' 이라고도 하고 '리터럴(literal) 상수(문자)'라고 부르기도 한다.

 

 

-- 별칭쓰는 4가지 방법

 

SELECT EMPNO, ENAME, SAL, SAL*12 YEARSAL FROM EMP;

SELECT EMPNO, ENAME, SAL, SAL*12 "YEARSAL" FROM EMP;

SELECT EMPNO, ENAME, SAL, SAL*12 AS YEARSAL FROM EMP;

SELECT EMPNO, ENAME, SAL, SAL*12 AS "YEARSAL" FROM EMP;

 

-> 모두 같은 테이블을 출력한다.

-> SELECT 문에 숫자, 문자를 넣을 수 있다.

 

 

-- || 를 사용해 column을 붙일 수 있다.

 

SELECT ENAME || ' ''S JOB IS ' || JOB "NAME AND JOB"
FROM emp;

 

 

-> 작은 따옴표 1개를 출력하기 위해서는 위 예제와 같이 작은따옴표 2개를 사용해줘야 한다. 

 

 

-- DISTINCT 중복제거

 

SELECT DISTINCT JOB
FROM EMP;

 

 

-> DISTINCT를 통해 중복된 데이터를 빼고 출력할 수 있다. 반드시 SELECT 키워드 다음에 와야 한다.

 

 

WHERE 절 사용 - SELECT문에 조건을 부여할 때 사용한다.

 

구조

SELECT [Column or Expression]

FROM [Table or View]

WHERE 조건;

 

-- WHERE CONDITION 연산자 정리

 

              1.  >, <, >=, <=, !=, <>  등등 (산술연산자

              2. AND, OR (논리 연산자)

              3. IS NULL

              4. BETWEEN 작은 값 AND 큰값

              5. IN 

              6. LIKE

 

-- 산술연산자 ( >, <, >=, <=, !=, <> )

 

예제1) 부서번호가 20번 부서사원들의 사번, 이름

 

SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 20;

 

 

예제2) SAL값이 3000보다 크거나 같을때의 사번, 사원이름, SAL값

 

SELECT EMPNO, ENAME, SAL

FROM emp

WHERE SAL >= 3000; 

 

 

예제3) 사원이름 SCOTT인 사번, 이름, 월급은?

 

SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE ENAME = 'SCOTT';  -> 대소문자 구별한다. (소문자로 입력시 비어있는 데이터값을 불러온다.)

-> 여기서 "문자열", '문자', 별칭, "키워드" 형식으로 큰따옴표와 작은따옴표를 구분해서 써야한다.

 

 

예제4) 81/01/01 이후에 입사한 사원의 사번, 이름, 입사일

 

SELECT EMPNO, ENAME, HIREDATE
FROM EMP
WHERE HIREDATE >= '81/12/25';

 

 

-- 논리연산자 (AND, OR)

 

예제1) 급여가 1500 이상이고 부서번호 10 인 사람 

 

SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE SAL >= 1500 

AND DEPTNO = 10;

-> 논리 연산자 AND를 사용한다.

 

 

예제2) 부서번호 10 또는 20인 사원의 사번, 이름, 부서번호

 

SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO = 10 

OR DEPTNO = 20;

-> 논리연산자 OR 사용한다.

 

 

** 논리 연산자의 우선순위 => NOT > AND > OR  

ex) WHERE A

AND B

OR C

AND D

OR E

AND F

-> A AND B , C AND D , E AND F -> AND부터 연산 후 OR 연산을 하게 된다.

                OR          OR

 

 

-- IS NULL

 

** T,F, NULL 진리표

AND T F ?
T T F ?
F F F F
? ? F ?

 

OR T F ?
T T T T
F T F ?
? T ? ?

 

예제를 통해 IS NULL 에 대해 알아보자

 

예제) MGR 값이 NULL인 사원 번호, 이름, MGR 값

 

SELECT EMPNO, ENAME, MGR
FROM EMP
WHERE MGR = NULL;

 

-> = 기호를 쓰면 데이터를 찾지 못한다.

-> 이럴때는 IS를 써야한다.

 

SELECT EMPNO, ENAME, MGR
FROM EMP
WHERE MGR IS NULL;

 

 

-- IS NOT NULL;

 

IS NULL 의 경우 IS 뒤에 NOT을 써준다.

 

예제) MGR 값이 NULL이 아닌 사원의 사번 이름 MGR 출력

 

SELECT EMPNO,ENAME, MGR
FROM EMP
WHERE MGR IS NOT NULL;

 

 

-- BETWEEN 작은 값 AND 큰값

 

BETWEEN을 사용하여 여러번의 AND를 생략할 수 있다.

 

예제) SAL 값이 2000 이상 3000이하인 사원 번호, 이름, SAL 값 (BETWEEN 사용, 여러번의 AND 생략)

 

SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE SAL BETWEEN 2000 AND 3000;

 

 

 -- NOT BETWEEN  작은값 AND 큰값

 

BETWEEN 앞에 NOT을 써준다.

 

예제) 봉급 1500 미만 2000 초과인 사원 번호, 이름, 봉급, 부서번호

 

SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP
WHERE SAL NOT BETWEEN 1500 AND 2000;

 

 

-- IN

 

IN을 사용하여 여러번의 OR을 생략할 수 있다.

 

예제) COMM 값 300, 500, 1400인 사원번호, 이름, COMM 값

 

SELECT EMPNO, ENAME, COMM
FROM EMP
WHERE COMM IN (300, 500, 1400);

 

 

-- LIKE

 

LIKE 와 함께 사용되는 기호에는 '%' 와 '_' 두 가지가 있으며 의미는 아래와 같다.

 '%'  : 글자 수에 제한이 없고 어떤 글자가 와도 상관 X

  _(Underscore) : 글자 수는 한 글자만 올 수 있고 어떤 글자가 와도 상관 X

 

예제1) 세번째 글자가 O인 사원의 사번 이름 출력

 

SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE  ENAME LIKE '__O%';

 

** '__O%' : 세번째 글자가 O를 의미

   

 

예제2) 이름에 S가 포함된 사원의 사번 이름 출력

 

SELECT EMPNO, ENAME
FROM EMP
WHERE ENAME LIKE '%S%';

 

 

예제3) 이름에 S가 포함되지 않은 사원의 사번 이름 출력

 

SELECT EMPNO, ENAME
FROM EMP
WHERE ENAME NOT LIKE '%S%';

-> LIKE 앞에 NOT을 붙여준다.

 

 

 

 

728x90
반응형
Comments