Computer Science/Database

SQL | #3 SELECT 문법, WHERE 절

토마토. 2022. 1. 26. 13:15

모두의 SQL 3장

실습 환경 : Oracle 11g SQL Test


SELECT : 데이터 조회의 기본

SELECT 문의 기본 문법

<1> SELECT문 기본 문법

SELECT문을 이용하면 데이터베이스에서 데이터를 조회할 수 있다. 

SELECT문을 이용하면, 테이블에서 행을 선택(selection)하고, 열을 선택(projection)하고, 테이블과 테이블을 연결(join)할 수 있다. 

 

가장 기본은 다음 코드이다. 

SELECT 열 이름 FROM 테이블 이름;

그리고 옵션을 부가하는 경우

SELECT [DISTINCT] 열 이름 [or 별칭(alias)]
FROM 테이블 이름
[WHERE 조건식]
[ORDERED BY 열 이름 [ASC or DESC]];

대괄호로 추가한 부분이 들어갈 수 있다. 

 

<2> SQL문 작성 규칙

- 대문자 소문자 구별 X

- ;가 문장 종결 조건이라서, 여러 줄로도 작성할 수 있다

=> 가독성을 고려해서 여러 줄로 작성한다.

=> 가독성을 고려해서 들여쓰기를 한다. 

=> 가독성을 고려해서 명령어는 대문자, 나머지는 소문자로 작성한다.

 

 

<3> 전체 데이터 조회하기

- 데이터 생성

CREATE TABLE sql_test_a 
( 
    ID         VARCHAR2(4000 BYTE), 
    FIRST_NAME VARCHAR2(200 BYTE), 
    LAST_NAME  VARCHAR2(200 BYTE) 
); 

CREATE TABLE sql_test_b 
( 
    ID         VARCHAR2(4000 BYTE) 
); 

INSERT INTO sql_test_a (ID, FIRST_NAME, LAST_NAME) VALUES ('1', 'John', 'Snow'); 

INSERT INTO sql_test_a (ID, FIRST_NAME, LAST_NAME) VALUES ('2', 'Mike', 'Tyson'); 

INSERT INTO sql_test_a (ID, FIRST_NAME, LAST_NAME) VALUES ('3', 'Bill', 'Keaton'); 

INSERT INTO sql_test_a (ID, FIRST_NAME, LAST_NAME) VALUES ('4', 'Greg', 'Mercury'); 

INSERT INTO sql_test_a (ID, FIRST_NAME, LAST_NAME) VALUES ('5', 'Steve', 'Jobs'); 

INSERT INTO sql_test_a (ID, FIRST_NAME, LAST_NAME) VALUES ('6', 'Johhny', 'Depp');

 

 

- 모든 데이터 조회

SELECT * FROM sql_test_a;

원래 * 자리는 출력하려는 열을 적는 자리이며, 여기에 *를 적을 경우 '모든 열'이라는 뜻을 갖는다. 

그리고 From 뒤에는 테이블명을 적는다. 

 

<4> 원하는 열만 조회하고 정렬하기

SELECT ID, FIRST_NAME 
FROM sql_test_a;

SELECT 원하는 열 나열
FROM 테이블 이름;

 

 

출력을 정렬해서 보여주고 싶다면, 

ORDER BY 열 이름 [DESC]

ORDER BY 열 이름 [ASC]

ASC : 디폴트값. 오름차순으로 정렬DESC : 내림차순 정렬

SELECT ID, FIRST_NAME 
FROM sql_test_a
ORDER BY ID DESC;

 

 

<5> 중복된 출력값 제거하기

DISTINCT 조건을 사용해서 중복된 값을 제거한 뒤 출력한다. 

SELECT DISTINCT id 
FROM sql_test_a;

 

<6> SQL문을 효율적으로 작성하기 위해 별칭 사용하기

파이썬에서 import pandas as pd라고 하는 것과 같이

SQL에서도 AS 접속사를 이용해서 alias 별칭을 나타낸다. 

SELECT ID AS id_new, FIRST_NAME AS first_name_new
FROM sql_test_a
ORDER BY ID DESC;

 

책에 나온 예시

SELECT employee_id AS 사원번호, first_name AS 이름, last_name AS 성
FROM employees;

 

<7> 데이터값 연결하기

연결 연산자 ||를 이용하면, 각 열의 결과를 연결해 하나의 열로 결과를 표현할 수 있다.

문자열을 추가하면, 새로운 데이터를 표현하는 열로 만들 수도 있다. 

 

성과 이름을 붙여서 이름으로 바꾸어서 출력하는 예제.

SELECT ID, FIRST_NAME||' '||LAST_NAME AS NAME
FROM sql_test_a;

 

<8> 산술 처리하기 : 데이터값끼리 계산

데이터를 가공하거나, 데이터값끼리 계산을 해주려면 산술 연산자를 사용해주어야 한다. 

산술 연산자에는 +, -, *, /가 있다. 

 

지금 작업 중인 테이블에는 숫자 데이터 타입인 칼럼이 없어 SALARY라는 칼럼을 추가해주었다.

CREATE TABLE sql_test_a 
( 
    ID         VARCHAR2(4000 BYTE), 
    FIRST_NAME VARCHAR2(200 BYTE), 
    LAST_NAME  VARCHAR2(200 BYTE),
    SALARY NUMBER(10,2)
);

 

그리고 SALARY를 출력, SALARY에 산술연산자를 이용해 100을 더한 값을 출력해보았다. 

SELECT ID, FIRST_NAME||' '||LAST_NAME AS NAME, SALARY, SALARY+100 AS HOPE
FROM sql_test_a;

 


WHERE 조건절을 활용한 데이터 검색

<1> WHERE 조건절의 특징

- 조회하려는 조건을 저장

- FROM 절 다음에 위치

- 비교 연산자, SQL 연산자, 논리 연산자, 열 이름, 표현식, 숫자, 문자 등을 쓸 수 있다. 

SELECT 열 이름
FROM 테이블 이름
WHERE 원하는 조건;

 

- 연산자의 종류

비교 연산자 : = < > 등

SQL 연산자 : BETWEEN, IN 등

논리 연산자 : AND, OR 등

 

<2> 비교 연산자 : 비교 조회 조건 주기

- 비교 연산자의 종류

연산자 의미
= 같다
<> 같지 않다
보다 크다
>=  크거나 같다
< 보다 작다
<=  작거나 같다. 

 

- 등호 연산자 =

 

==이 아니라서 새롭다.

SELECT *
FROM sql_test_a
WHERE ID = '1';

 

- 부등호 연산자 >=

SELECT *
FROM sql_test_a
WHERE SALARY >= 1500;

 

<3> SQL 연산자 : 조회 조건 확장하기

- SQL 연산자의 종류

연산자 의미
BETWEEN a AND b a와 b 사이에 값이 있다 (a <= N <= b)
IN list list 중 어느 값이라도 일치한다
LIKE '비교 문자' 비교 문자와 형태가 일치한다(%, _ 사용)
IS NULL null 값을 갖는다

 

- BETWEEN 연산자

SELECT *
FROM sql_test_a
WHERE SALARY BETWEEN 1500 AND 3000;

 

- IN 연산자

조회하고자 하는 데이터 값이 여러 개일 때 사용한다. 

LIST는 리스트인데, 파이썬과는 달리 목록을 () 소괄호로 감싼다. 여거 개의 리스트 요소 중에서 하나라도 만족하면 결과를 출력해준다.

SELECT *
FROM sql_test_a
WHERE FIRST_NAME IN ('John', 'Mike');

 

- LIKE 연산자

조회 조건 값이 명확하지 않을 때 사용한다. 

LIKE 연산자는 %나 _ 같은 기호 연산자(WILD CARD)와 함께 사용한다.

조건에는 문자나 숫자를 포함할 수 있다. 

%는 모든 문자라는 뜻이고, _는 한 글자라는 뜻이다. 

SELECT *
FROM sql_test_a
WHERE FIRST_NAME LIKE 'J%';

위 코드는 첫글자가 J인 모든 데이터를 출력하라는 뜻이다. 

J로 시작하는 JOHN, JOHHNY 값만 출력되었다. 

 

- IS NULL 연산자

결측치를 찾기 위한 연산자

SELECT *
FROM sql_test_a
WHERE FIRST_NAME IS NULL;

 

<4> 논리 연산자 : 조건 논리를 계속 연결하기

여러 가지 조건을 연결해줄 때 사용한다. 

- 논리 연산자의 종류

연산자 의미
AND 교집합
OR 합집합
NOT 여집합

 

- AND 연산자

SELECT *
FROM sql_test_a
WHERE ID = '1'
AND FIRST_NAME LIKE 'J%';

 

- OR 연산자

SELECT *
FROM sql_test_a
WHERE ID = '1'
OR FIRST_NAME LIKE 'J%';

 

- 부정 연산자

연산자 의미
!= 같지 않다. 
<>  같지 않다. 
NOT 열 이름 =  ~와 같지 않다
NOT 열 이름 > ~보다 크지 않다
NOT BETWEEN A AND B  a와 b 사이에 값이 없다. 
NOT IN (LIST) LIST값과 일치하지 않는다.
IS NOT NULL  NULL 값을 갖지 않는다.