Database/MySQL

[MySQL]MYSQL 기본 문법: DML - SELECT

GAEBAL 2022. 3. 16. 22:23
728x90

DML이란???

DML은 Data Manipulation Language로 데이터 조작어의 약자이다. 말 그대로 데이터를 조작할 때 사용되는 언어로 좀만 생각해봐도 당연히 CRUD가 되겠지? 라는 생각이 든다.

DML에는 INSERT(C), SELECT(R), UPDATE(U), DELETE(D)가 있다.

 

SELECT

select 구문 기본 형식

select * | 컬럼명 | 수식 | ...
[from] 테이블명 (mysql은 from절이 선택)
;
  • DUAL 테이블
    • 테이블이 없는 경우 select 구문에 대한 dummy 테이블명
    • 뭐 테스트할 때

 

select 구문 전체 형식

select * | 컬럼명 | 수식 | ...
from 테이블명
where 검색조건
group bt 그룹핑컬럼명1, 그룹핑컬럼명x
having 그룹핑조건
order by 정렬컬럼명 정렬방법, 정렬컬럼명 정렬방법
;

 

select

  • *: 테이블 구조에 맞는 모든 컬럼 순서대로
  • 컬럼명A, 컬럼명C: 원하는 컬럼을 순서대로
  • 수식
  • 컬럼명 별명, 컬럼명 “별 명”, 수식 “별명”
    • (별칭 안에 공백이 있으면 “”로 감싸줘야함)
    • 오라클은 대소문자, 특수문자 구분하려면 “”로 감싸줘야하는데 mysql은 공백 들어갈 때만 감싸주면 됨
  • distinct 컬럼명1, 컬럼명X
  • SUB-QUERY

 

select 구문 파싱(처리) 순서

from - where - group by - having - select - order by

-> 개인적으로 좀 중요하다고 생각하고, 쿼리를 작성하거나 해석할 때 이 순서를 머릿속으로 생각하면서 따라가면 더 쉽게 이해가 되는 것을 느낌!!!

 

연산자

  • 사칙연산: + - * / % MOD(분모, 분자) - 오라클은 %연산 없음
  • 비교연산:
    • <, ≤, >, ≥
    • = (같다 - 검색조건일 경우, 할당 - 레코드값을 변경할 경우)
    • ≠, <> (다르다)
  • 논리연산: AND, OR, NOT
  • SQL 전용 연산자
    • BETWEEN A AND B ⇒ AND
    • IN (값1, 값2, 값X) ⇒ OR
    • NOT IN()
    • IS NULL, IS NOT NULL
    • LIKE ‘%’ (모든 문자로 대체됨), ‘_’(한 문자로 대체됨)
      • (인덱스를 못쓰기 때문에 모든 레코드를 탐색하기 때문에 DB에 부하가 많이 걸림. 그래서 필요할 때만 써야됨)
-- 이름에 'x'가 들어간 사원의 사번, 이름
select employee_id, first_name, salary, department_id
from employees
where first_name like '%x%';

 

-- 이름의 끝에서 3번째 자리에 'x'가 들어간 사원의 사번, 이름
select employee_id, first_name, salary, department_id
from employees
where first_name like '%x__';

 

 

워크벤치 예제

테이블 구조

employees 테이블 구조

위에서부터

  • 사원번호
  • 이름
  • 이메일
  • 폰번호
  • 입사일자
  • 직무번호
  • 급여(월급)
  • 성과급 퍼센트
  • 상사 id
  • 부서 id

 

예제 내용(쿼리와 쿼리 실행 결과 및 설명 첨부)

use dbname;
  • dbname이라는 디비를 사용하겠다는 코드

 

-- 사칙 연산
select 5+3 a, 5-2, 5*3, 5/3, 5%3, mod(5, 3)
from dual;

 

 

-- 전체 테이블 목록 조회
show tables;

 

-- 직원 테이블 구조 조회: employees
desc employees;

 

-- 부서테이블 구조 조회: departments
describe departments;

 

-- 전체 직원의 모든 정보 조회
select *
from employees;

  • 밑에는 짤렸지만 109개의 rows가 반환됐다고 콘솔창에서 알려줌

 

-- 부서원이 있는 모든 부서번호 조회, 중복 제거
select distinct department_id 
from employees;

 

-- 전체 직원의 직무아이디 조회, 중복 제거
select distinct job_id
from employees;

  • 여기도 밑에는 조금 짤렸지만 19 rows가 반환됨

 

-- 전체 부서의 직무 아이디 조회, 중복 제거: 부서번호 직무 아이디
select distinct department_id, job_id
from employees;

  • 여기도 짤렸지만 22 rows 반환

 

-- 전체 직원의 사번, 급여, 수당율 조회, 제목으로 사번, 급여, 수당율 조회
select employee_id 사번, salary 급여, commission_pct 수당율
from employees;

 

-- 사번이 100, 101, 102인 사원 조회
select *
from employees
where employee_id in (100,101,102);

select *
from employees
where employee_id between 100 and 102;

select *
from employees
where employee_id >=100 and employee_id <= 102;

3개 다 같은 결과를 반환함. 여기서 볼 수 있듯이 가장 편리한 본인만의 방법을 잘 찾는 것도 중요함!!

 

 

정리

여기까지가 SELECT 기본이고 이 기본에다가 여러가지 집계함수나 그룹함수 등등 많은 문법들을 잘 버무려서 본인이 원하는 데이터를 추출할 수 있는 능력을 길러야 한다!!!

728x90