모두의 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 값을 갖지 않는다. |
'Computer Science > Database' 카테고리의 다른 글
SQL | # 4 함수 : 함수로 데이터를 쉽게 가공하기 (0) | 2022.01.27 |
---|---|
# 3 | PyQt와 sqlite3 연결하기 (0) | 2022.01.26 |
SQL | # 2 오라클 설치 과정 (0) | 2022.01.26 |
SQL | # 1 관계형 데이터베이스와 오라클 (0) | 2022.01.26 |
MySQL WMI 에러 | Could not acquire management access for administration (1) | 2022.01.05 |