- Data Manipulation Language 데이터 조작 언어
- 데이터 조작(선택, 삽입, 수정, 삭제)
- DML 구문의 대상은 테이블의 행
- SELECT, INSERT, UPDATE, DELETE
- 트랜잭션이 발생하는 SQL도 DML에 속함
USE 구문
USE 데이터베이스명;
- 사용할 데이터베이스 지정
- Workbench에서 직접 선택 가능
- 원하는 데이터베이스 오른쪽 버튼🖱️ OR 더블클릭 -> [Set as Default Schema] 선택
SELECT
SELECT * FROM 테이블명
SELECT 열이름 FROM 테이블명
INSERT
INSERT INTO 테이블이름[(열이름,...)] VALUES(값,...)
- 기본 키가 중복으로 입력하면 오류!
INSERT IGNORE : 에러 발생해도 다음 구문으로 넘어가게 처리
- auto_increment : 자동으로 값 입력
insert할때 null 값으로 지정하면 자동으로 값 입력
PRIMARY KEY 또는 UNIQUE 일 때만 사용 가능
UPDATE
UPDATE 테이블이름 SET 열1=값1... WHERE 조건;
- 안전모드에서 키 컬럼이 아닌 컬럼으로 수정 시 에러발생
- Edit > preferences.. > SQL Editor > Othor 의 safe updates 체크 해제
WHERE 절 생략하면 테이블의 전체 행 변경됨
ON DUPLICATE KEY UPDATE : 기본키가 중복되면 데이터 수정하도록 함
DELETE
DELETE FROM 테이블이름 WHERE 조건;
WHERE 절 생략되면 전체 데이터 삭제
LIMIT로 삭제 행 수 지정 가능
- 트랜잭션 로그 기록 작업 때문에 DDL(
DROP,TRUNCATE)보다 속도가 느림
SELECT 열
FROM 테이블명
WHERE 조건
GROUP BY 정렬
HAVING
ORDER BY
SELECT
* : 전체 조회
- 특정 열만 지정해서 조회할 수 있음
DISTNCT : 중복 제거
WHERE
WHERE 조건식
-> 특정한 조건을 통해 원하는 데이터만 조회
- 연산자
- 조건 연산자 (
<>,!=,..등)
- 관계 연산자 (
NOT,OR,AND)
WHERE city <> '서울' AND num < 60
BETWEEN A AND B : A이상 B 이하의 값일때
WHERE num >= 5 AND num <= 10
WHERE num BETWEEN 5 AND 10
WHERE city IN('서울','파리','런던')
LIKE
% : 무엇이든 허용
_ : 글자수 하나와 매치
WHERE name LIKE '김%';
WHERE name LIKE '김__';
- 서브쿼리
- 쿼리 안에 또 다른 쿼리문
- 여러개 조건을 설정할 수 있음
ANY
- 서브쿼리의 결과 중 하나만 만족해도 가능
SOME과 동일한 의미
= ANY(서브쿼리)는 IN(서브쿼리)와 동일한 의미
ALL
SOME
-
| 비교 조건 | 의미 |
|---|
> ANY, >= ANY | 최소값보다 큰 경우 |
< ANY, <= ANY | 최대값보다 작은 경우 |
= ANY | IN과 같은 경우 |
> ALL, >= ALL | 최대값보다 큰 경우 |
< ALL, <= ALL | 최소값보다 작은 경우 |
ORDER BY
ORDER BY 열이름 (ASC or DESC)
- 결과물에 영향을 미치지 않고 출력되는 순서 정렬
- 기본 :
ASC 오름차순
DESC 내림차순
- 여러개 열 지정 가능 앞에서부터 우선순위
LIMIT
LIMIT n; : 상위 n개만 출력
LIMIT 시작, n;
LIMIT n OFFSET 시작;
GROUP BY
GROUP BY 특정열
- 그룹으로 묶어주는 역할
- 직계함수와 함께 사용
-
| 함수명 | 설명 |
|---|
| AVG( ) | 평균 |
| MIN( ) | 최소값 |
| MAX( ) | 최대값 |
| COUNT( ) | 행의 개수 |
| COUNT(DISTINCT) | 행의 개수를 센다(중복제거) |
| STDEV( ) | 표준편차 |
| VAR_SAMP( ) | 분산 |
HAVING
- 집계 함수에 대해서 조건을 제한
- 꼭
GROUP BY 다음에 나와야함!!!!!(순서 중요)
SELECT userID AS '사용자', SUM(price*amount) AS '종구매액'
FROM buytbl
GROUP BY userID
HAVING SUM(price * amount) > 1000;
ROLLUP
- GROUP BY로 그룹된 열마다 중간 합계와 총합 제공