Oracle SQL 입문

뫄뫄(ahk)·2021년 4월 6일
0

DB & SQL

목록 보기
1/1

sql을 사용하여 DB에 저장되어있는 데이터를 찾거나 수정, 입력, 출력하기 위해서는 키워드(예약어)를 알아야합니다. 이 포스트는 기본적인 예약어(SELECT, FROM, DISTINCT..)의 쓰임과 문법에대해 공부하며 간략히 정리한 글입니다.

💡 키워드(예약어)란?

  • 특정 기능이 예약되어 있는단어를 말한다.
  • 관례상 대문자로 표기한다.
    (소문자로 쳐도 인식한다/sql문법은 대소문자를 구분하지 않는다)
  • 키워드 단독으로 등장하는 경우는 예약어이다.

DESCRIBE(=DESC)

💡 문법
DESCRIBE 테이블명;

  • 테이블의 구조(column명, 데이터타입, NULL의 여부등)를 보여준다.

SELECT

SQL> SELECT NAME, DEPTNO, SAL
   2 FROM employees;
   
NAME                 DEPTNO              SAL
-------------------- ------------------ ------------------
Robert                20                 4000
Phillps               20                 1000 
Edwards               10                 2000
Reed                  30                 3000
   

💡 문법
SELECT COLUMN명 FROM 테이블명

SQL> SELECT *
   2 FROM DEPARTMENT;
   
= DEPARTMENT 테이블로부터 모든 column을 조회하여 출력한다.
  • 테이블의 조회할 하나 이상의 열(column)을 지정하여 출력할 때 사용한다

  • 데이터를 조회할때 맨 처음에 쓴다. 자리는 고정되어있다

  • 쉼표(,)를 사용하여 여러개의 column을 선택할 수 있다

SQL> SELECT SAL, EMP, DEPT 
   2 FROM EMP;
   
= EMP 테이블로부터 SAL, EMP, DEPT column을 조회하여 출력한다.
  • 열을 연산하여 출력할 수 있다
    • column에 연산자(+, -, *, /)로 연산한 결과값을 바로 출력할 수 있다.
    • 수학의 연산과 동일하게 연산의 우선순위가 있다.(*,/가 +, -보다 우선순위가 높다)
    • ()를 사용하여 우선순위를 무시할 수 있다.
SQL> SELECT NAME, DEPT, SAL*10
   2 FROM EMP;
   
   NAME              DEPTNO              SAL*10
-------------------- ------------------ -----------------------
Robert                20                 40000
Phillps               20                 10000 
Edwards               10                 20000
Reed                  30                 30000
   
= EMP(employee)테이블에서 NAME, DEPT(department_NO)그리고 
SAL(salary)에 10을 곱한값을 출력한다.

FROM

💡 문법
SELECT COLUMN명 FROM 테이블명

  • SELECT해서 가져올 열의 테이블 이름을 입력한다.

column alias

SAL*10
-----------------------------------
10000          
20000            
30000        
40000

SQL> SELECT SAL*10 AS "Salary"  
   2 FROM EMP;
   
Salary
-----------------------------------
10000          
20000            
30000        
40000
   
= EMP 테이블로부터 SAL을 조회하여 *10연산을 하고,
SALARY로 임시로 이름을 바꾼다. 
  • column의 이름을 임시로 변경, 별칭을 붙여주는 것이다.
  • 문법
    1. SELECT 컬럼이름 AS alias(변경할 이름)
    2. SELECT 컬럼이름 alias
    (alias자리에 이름을 입력하면 대문자로 출력된다.
    대소문자 구분, 공백과 특수문자를 포함할 경우 ""로 감싸줘야한다.)

DISTINCT

SQL> SELECT DISTINCT DEPTNO 
   2 FROM EMP;
   
= EMP 테이블로부터 DEPTNO column을 조회한 후, 
중복되는 데이터를 제거한 후 결과값을 출력한다.
  • 중복되는 데이터를 제거할 때 사용한다
  • 조회하여 중복을 제거하는 열이 여러개인 경우, 여러개의 열을 하나의 묶음으로 취급하여 이 묶음과 모든 데이터가 중복될 때 제거한다.

WHERE절

  • SELECT문으로 데이터를 조회할 때 원하는 행을 출력할 때 사용한다.
  • 여러 연산자로 다양한 작업을 수행할 수 있다.

다양한 작업들

📌여러 연산자들
WHERE COLUMNE명 연산자 조건값;

SQL> SELECT DEPTNO 
   2 FROM EMP
   3 WHERE DEPTNO = 30;
   
= EMP 테이블로부터 DEPTNO column을 조회한 후, 
DEPTNO가 30인 행만 출력한다.


SQL> SELECT SAL 
   2 FROM EMP
   3 WHERE SAL >= 30000;
   
= EMP 테이블로부터 SAL column을 조회한 후, 
SAL이 30000보다 큰 행만 출력한다.


SQL> SELECT NAME
   2 FROM EMP
   3 WHERE NAME = 'NOAH';
   
= EMP 테이블로부터 NAME column을 조회한 후, 
NAME이 NOAH인 행만 출력한다.(문자열인경우 대소문자 잘 구분하자)

SQL> SELECT NAME
   2 FROM EMP
   3 WHERE NAME >= 'NOAH';
   
= EMP 테이블로부터 NAME column을 조회한 후, 
NAME이 NOAH와 같거나 보다 큰 행만 출력한다.(알파벳 순)

SQL> SELECT NAME
   2 FROM EMP
   3 WHERE NAME != 'NOAH';
   
= NOAH를 제외한 다른행 모두 출력한다.

📌 BETWEEN A AND B
WHERE COLUMN명 BETWEEN A AND B;
WHERE COLUMN명 BETWEEN 'A' AND 'B';(문자열도 가능)

SQL> SELECT SAL
   2 FROM EMP
   3 WHERE SAL BETWEEN 10000 AND 25000;
   
= SAL COLUMN에서 10000이상 25000이하인 행을 출력한다.(10000, 25000 포함)

📌 IN(A, B, C, ..)
WHERE COLUMN명 IN (조건값1, 조건값2, ..)

SQL> SELECT SAL
   2 FROM EMP
   3 WHERE SAL IN(15000, 20000, 30000);
= SAL column에서 15000, 20000, 30000인 행만 출력한다
(연산자 =의 조건값 여러개 ver.)

📌 LIKE
WHERE COLUMN명 LIKE 조건값

SQL> SELECT NAME
   2 FROM EMP
   3 WHERE NAME LIKE 'A%';
= LIKE column에서 A로 시작하는 행만 조사하여 출력  

SQL> SELECT hire_date
   2 FROM EMP
   3 WHERE hire LIKE '%07';
= dd-mm-yy year값이 07년 이후인 행만 조사하여 출력
   
  • LIKE 연산자는 조건값으로 '문자열'이 온다.
  • %(와일드카드) 0개 이상의 문자 데이터를 뜻한다.
  • _(under score)은 하나의 문자데이터를 뜻한다.
    WHERE NAME LIKE '_AB%'
    = 두 번째 세 번째 문자가 반드시 AB인 모든 문자데이터
  • 숫자 데이터도 사용할 수 있다.

📌 NOT
WHERE NOT COLUMN명 조건값

  • 기존의 결과값과 반대로 출력
  • WHERE NOT(COLUMN명 연산자 조건값)으로 작성할 수도 있다
  • 단독으로 사용되지 않고 다른 연산자와 조합하여 사용된다
...
WHERE SAL NOT BETWEEN 10000 AND 15000

= SAL 10000이상 15000이하 ➡ 10000미만 15000초과

📌 IS NULL
WHERE DEPTNO IS NULL

  • 데이터 값이 NULL인 행을 출력

📌 AND/OR

AND
WHEERE COLUMN명 연산자 조건값 AND COLUMN명 연산자 조건값

SQL> SELECT SAL, DEPTNO, NAME
   2 FROM EMP
   3 WHERE SAL >= 30000 AND DEPTNO IS NULL;
= SAL이 30000이상인 '동시에' DEPRNO가 NULL인 행을 출력

OR
WHEERE COLUMN명 연산자 조건값 OR COLUMN명 연산자 조건값

SQL> SELECT SAL, DEPTNO, NAME
   2 FROM EMP
   3 WHERE SAL >= 30000 OR DEPTNO IS NULL;
= SAL이 30000이상, DEPRNO가 NULL 두 조건 중 
하나라도만족하는 행을 조회, 출력
  • 두 개 이상의 AND/OR를 사용할 수 있다.
  • 하지만 AND가 OR보다 우선순위가 높아 우선순위를 무시하려면 ()로 감싸줘야한다.
SQL> SELECT SAL, DEPTNO, NAME
   2 FROM EMP
   3 WHERE SAL >= 30000 OR DETNO IS NULL AND NAME IS LIKE '_A%'
= 

ORDER BY절

💡 문법
ORDER BY 정렬기준column 정렬방식

  • 기본적인 정렬방식은 데이터의 입력순
  • 원하는 정렬방식으로 데이터를 보기위해서 ORDER BY절을 사용한다
  • 정렬하는 행위자체가 자원을 많이 소비함으로 큰 데이터를 다룰 때는 가급적 지양하자

정렬방식
1. ASC(Ascending, 오름차순, default)
2. DESC(Descending, 내림차순)
(+ 유니코드에 따라 소문자가 대문자보다 더 큰 값이며, 날짜에서는 최근날짜가 더 큰 값이다)

SQL> SELECT name, deptno, salary
   2 FROM departments
   3 ORDER BY deptno, salary DESC;
  • 정렬기준column이 여러개가 있는 경우 먼저 첫번째 기준column과 정렬방식으로 정렬한 뒤 중복값에 대해 이후 순서의 정렬기준column과 정렬방식으로 정렬한다.정렬방식은 기준마다 개별적으로 적용한다
NAME                 DEPTNO                SALARY
-------------------- --------------------- ----------------------
HALLEN                                10                  33000  
ANNA                                  10                   3000
KATE                                  20                   4000 
ELSA                                  30                  20000
KATHY                                 30                  10000 
MINSU                                 30                   3000
YUNA                                  30                   2000
SARANG                                30                   1800

= DEPTNO를 ASC방식으로 정렬한 다음, 중복되는 값(30)에 해당하는 SALARY를 DESC 방식으로 정렬한다

.
.
.

연결 연산자(||)

연결 연산자(||) column들을 붙여 하나의 column으로 만든다.
vertical bar(|)가 하나만 사용될 경우는 or을 의미

*(Asterisk)

  • (SELECT절 단독사용 일 경우) 모든 컬럼
    (표현식에 사용한 경우) 곱셈
  • |(Vertical bar)

+리터럴(상수) 문자

키워드 + 요소 = 절
ex) SELECT + column리스트 = SELECT절
절 + 절 = (완성된)구문
ex) SELECT절 + FROM 절 = SELECT 구문

NULL

  • 특정 데이터 타입을 가진 것이 아니라 비어있는 것
  • NULL은 데이터 타입을 따지지 않고 모든 column에 들어갈 수 있음
  • NULL은 앞에 있는 표현식과 관계 없이 전체 값을 NULL값으로 바꿈
    주의해서 다뤄야한다.
profile
NONONONONONOYes!

0개의 댓글