코린이 유치원/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 조회 칼럼에 사용시 연산은 행 단위로 이루어짐
    • 연산자:
      1.  +, -, *, / : 근본 더하기, 빼기, 곱하기, 나누기 ssap가능
      2.  %, MOD: 나머지 연산자
      3. DIV: 몫 연산자
      4. 연산자 우선 지정은 ()로 묶기

 

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;

job 열의 중복행 제거

 

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

 

  • 별칭부여: 열 이름 대신에 별칭 사용하고 싶다면 별명을 붙여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;

emp_name, salary, salary + 1000 한 값 조회
salary, comm_pct, salary * comm_pct 한 값 조회

 

  • 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...

(우리는 유치원이니깐👽)