코린이 유치원/SQL반
02 SELECT 구문 - 연산자, distinct, cast, concat
개나리반
2022. 5. 26. 01:10

오늘은 정보를 조회할 때 사용하는 SELECT 구문을 배워보자 go!
SELECT (조회)
우리가 정보를 데이터 베이스에 저장하는 이유는 무엇일까?
👉 정보를 기록하려고. 그럼 왜 기록해
👉 나중에 필요할 때 찾아봐야 되지 않겠어?
우리가 제일 알아야 할 구문중 하나가 SELECT 구문
01 SELECT 기본 구문
-- SELECT 기본구문
-- SELECT 조회 컬럼 별칭
-- FROM 테이블이름 별칭
-- WHERE 제약조건
-- GROUP BY 그룹화할 기준 컬럼
-- HAVING 조건
-- ORDER BY 정렬기준 컬럼 ASC/DESC
- 항목
- SELECT 절: 조회할 컬럼을 지정. 모든 컬럼 조회시 * 사용. 별칭 부여 가능
- FROM 절: 조회 대상 테이블 이름. 별칭 부여 가능
- WHERE 절: 조회할 행의 선택 조건
- GROUP BY절: 조회시 어떤 칼럼의 값이 같은 것끼리 묶어서 조회할지 지정
- HAVING절: 조회시 그 결과에 대한 조회조건 지정
- ORDER BY절: 조회결과 정렬(ASC: 오름차순(디폴트, 생략 가능)/ DESC:내림차순)
** 필수(생략 불가), 옵션(생략 가능)
*** 당연히 조회를 하려면 어떤 테이블에서 어떤 컬럼을 정해야 할지 알려주는 줘야 하잖아요!
02 연산자
- 컬럼이나 상수값에 사칙 연산 이용
- SELECT 조회 칼럼에 사용시 연산은 행 단위로 이루어짐
- 연산자:
- +, -, *, / : 근본 더하기, 빼기, 곱하기, 나누기 ssap가능
- %, MOD: 나머지 연산자
- DIV: 몫 연산자
- 연산자 우선 지정은 ()로 묶기
03 WHERE 절에서 사용하는 주요 연산자
연산자 | 설명 |
AND, OR | 논리 연산자로 조건이 하나 이상일 경우 사용 AND: 두 조건 모두 만족 할때, OR: 둘중 하나만 만족할 때 |
=, <> (!=), >, < >=, <- | =: 같은 것 조회, != <>: 같지 않은 것 조회 >: 큰 값 조회, <: 작은 값 조회 |
BETWEEN a AND b | a와 b사이의 데이터를 조회(a, b 값 포함) ex) 10보다 크고 20보다 작은 값을 갖고 있는 행 |
in (list) | list의 값 중 어느 하나와 일치하는 데이터를 조회 |
LIKE | 문자 형태로 일치하는 데이터 조회 (%, _사용) |
IS NULL | NULL 값 가진 데이터 조회 |
NOT BETWEEN a AND b | a와 b 사이에 있지 않은 데이터 조회(a, b값 포함 X) |
NOT IN (list) | list의 값과 일치하지 않는 데이터 조회 |
NOT LIKE | 문자 형태와 일치하지 않는 데이터 조회 |
IS NOT NULL | NULL 값 가지지 않는 데이터 조회 |
** WHERE 절은 update, delete, select 에서 행 선택할 때 사용
** 조건 여러개인 경우 and 나 or로 연결
** and는 or보다 우선순위가 높기 때문에, 우선 순위 바꾸고 싶을 땐 ( ) 사용
** NOT은 앞에 붙는다는 것을 기억
04 코드 예시
솔직히 저런 표 읽어봤자 이해 안된다.직접 코드 따라해봐야 이해 가넝~!
use hr; -- 사용할 database 지정
select * from emp -- emp 테이블에 있는 모든 열 조회
** 사용할 database를 지정해서, 어떻게 열과 행이 구성된 테이블인지 확인하기 위해 *로 모든 열 조회!

다음과 같은 테이블이 등!쟝!
이 글을 보고 있는 누군가가 있다면, 나의 코드를 이용해 당신의 테이블에 적용해 boa
- 모든 column 조회
select * from emp;
- 일부 조회: emp_id, emp_name, job만 조회
-- SELECT 조회할 열 이름 from 테이블 이름
select emp_id, emp_name,job from emp;
-- 열 개수가 많을 땐 세로로 쓰기 ssap 가넝!
select emp_id,
emp_name,
job
from emp;
- 중복 값 제거: 나는 무슨무슨 job이 있는지 보고싶음. 그러니깐 중복되는 값은 모두 제거 ㄱㄱ
select distinct job
from emp;

- 여러 행 중복 값 제거: 선택된 컬럼 조합의 중복값이 제거되기 때문에 한 열 내 중복값은 존재

- 별칭부여: 열 이름 대신에 별칭 사용하고 싶다면 별명을 붙여boza.
-- 기본 구문: select 컬럼명 as 별칭
select emp_id as "직원 ID",
emp_name as "직원 이름",
hire_date 입사일, -- as는 생략 가능
salary 급여,
dept_name "소속 부서"
from emp;
** as로 별칭 부여, but 생략 가능
** 별칭 띄어쓰기 할땐 "" 꼭 큰따옴표로 묶어주긔

- 연산자 사용
-- EMP 테이블에서 직원의 이름(emp_name), 급여(salary) 그리고 급여 + 1000 한 값 조회
select emp_name,
salary
salary + 1000
from emp;
-- EMP 테이블에서 salary, comm_pct, salary * comm_pct 한 값 조회
select salary,
comm_pct,
salary * comm_pct
from emp;


- cast 함수: 데이터 타입 변환해주는 함수
select cast('2022-05-25' as date)
select cast('10:30:22 as time)
** select cast (값 as 변환할 데이터 타입)
- concat 함수: 여러개 값 합쳐서 문자열로 반환
-- EMP 테이블에서 직원이름(emp_name)과 급여(salary)을 조회. 급여 앞에 $를 붙이기
select emp_name,
concat('$', salary) as "salary" -- concat으로 salary 모든 행 앞에 $넣어주고 salary로 호출
from emp;

졸려서 분량 조절을 위해 WHERE은
TO BE CONTINUED...
(우리는 유치원이니깐👽)