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__';
워크벤치 예제
테이블 구조
위에서부터
- 사원번호
- 이름
- 성
- 이메일
- 폰번호
- 입사일자
- 직무번호
- 급여(월급)
- 성과급 퍼센트
- 상사 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