CS/데이터베이스

(MariaDB)SQL문-DML

doheun 2023. 2. 6. 15:53
반응형

DML(Data Manipulation Language)

  • 데이터를 조작(선택,삽입,수정,삭제)하는데 사용되는 언어
  • 트랜잭션 발생 (데이터 조작시 실제 테이블에 적용하지 않고 임시로 적용, 실수가 있는 경우 취소가능)

INSERT

데이터의 삽입

INSERT INTO 테이블(컬럼1, 컬럼2, ..) VALUES(값1, 값2,..)
  • 컬럼 부분을 생략할 경우 모든 컬럼에 해당하는 값을 입력해야하고 생략하지 않을 경우 선택적으로 입력 가능

AUTO_INCREMENT

  • 어떠한 컬럼이 AUTO_INCREMENT로 지정되어 있으면 INSERT문을 사용할 때 해당 컬럼이 없다고 생각하고 VALUE 값을 입력
  • INSERT될 때마다 AUTO_INCREMENT컬럼은 자동으로 1씩 증가
  • 반드시 PRIMARY KEY 또는 UNIQUE로 지정

SELECT LAST_INSERT ID()

마지막에 입력된 값 반환

ALTER TABLE 테이블명 AUTO_INCREMENT= N;

N에 원하는 값을 넣어서 입력값을 정할 수 있다

SET @@auto_increment_increment=N ;

N에 원하는 값을 넣어서 증가값을 정할 수 있다

대량 샘플데이터 입력

INSERT INTO 테이블(컬럼1,컬럼2,..)
    SELECT문;

SELECT문의 열의 개수는 INSERT할 열의 개수와 같아야함

조건부 데이터 입력,변경

기본키가 중복이 되서 다른 데이터가 INSERT되지 못하는 경우

  • IGNORE 명령어를 통해 중복되는 부분만 제외하고 나머지 데이터는 INSERT기본키가 중복되면 데이터를 수정하는 경우
    ON DUPLICATE KEY UPDATE
  • INSERT INTO 테이블명 VALUES(값1,값2,..) ON DUPLICATE KEY UPDATE 컬럼명1=값1 , 컬럼명2=값2;
  • INSERT IGNORE INTO 테이블명 VALUES(값1,값2,...)

UPDATE

데이터의 수정

UPDATE 테이블
SET 컬럼1=값1,컬럼2=값2 ...
WHERE 조건;
  • WHERE은 생략가능하지만 생략하면 전체행이 바꾸려는 값으로 변경

DELETE

데이터의 삭제

DELETE FROM 테이블 WHERE 조건;
  • 행 단위로 데이터를 삭제
  • LIMIT N 사용시 상위 N개 삭제 가능

예제

-- Q1) 사원 테이블에서 부서별 최대 월급을 출력하자.
SELECT deptno,MAX(sal)
FROM emp
GROUP BY deptno;

-- Q2) 사원테이블에서 직업별 최소 월급을 구하되, 직업이 'CLERK' 인 것만 출력하자.
SELECT job,MIN(sal)
FROM emp
WHERE job='clerk'
GROUP BY job;

-- Q3) 사원테이블에서 커미션이 책정된 사원은 모두 몇 명인지 출력하자.
SELECT COUNT(comm)
FROM emp;

-- Q4) 사원테이블에서 직업이 'SALESMAN'이고 월급이 1000 이상인 사원의 이름과 월급을 출력하자.
SELECT ename,sal
FROM emp
WHERE job='salesman' AND sal>=1000;

-- Q5) 사원테이블에서 부서별 평균 월급을 출력하되, 평균 월급이 2000보다 큰 부서의 부서번호와 평균 월급을 출력하자.
SELECT deptno,AVG(sal) AS '부서별평균월급'
FROM emp
GROUP BY deptno
HAVING AVG(sal)>2000;

-- Q6) 사원테이블에서 직업이 'MANAGER' 인 사원을 출력하되, 월급이 높은 순으로 이름, 직업, 월급을 출력하자.(내림차순)
SELECT ename,job,sal
FROM emp
WHERE job='manager'
ORDER BY sal DESC;

-- Q7) 사원테이블에서 각 직업별 총 월급을 출력하되 월급이 낮은 순으로 출력하자.(오름차순)
SELECT job,SUM(sal)
FROM emp
GROUP BY job
ORDER BY SUM(sal);

-- Q8) 사원테이블에서 직업별 총 월급을 출력하되, 직업이 'MANAGER'인 사원들은 제외하고, 총 월급이 5000보다 큰 직업만 출력하자.
SELECT job,SUM(sal)
FROM emp
WHERE job!='manager'
GROUP BY job
HAVING SUM(sal)>5000;

-- Q9) 사원테이블에서 직업별 최대 월급을 출력하되, 직업이 'CLERK' 인 사원들은 제외하고, 총 월급이 2000 이상인 직업과 최대월급을 오름차순으로 정렬하여 출력하자.
SELECT job,MAX(sal)
FROM emp
WHERE job !='clerk'
GROUP BY job
HAVING SUM(sal)>=2000
ORDER BY MAX(sal);

-- Q10) 사원테이블에서 부서별 총 월급을 출력하되, 30번 부서를 제외하고, 총 월급이 8000 이상인 부서를 총 월급이 높은 순으로 출력하자.(내림차순)
SELECT deptno,SUM(sal)
FROM emp
WHERE deptno !=30
GROUP BY deptno
HAVING SUM(sal) >=8000
ORDER BY SUM(sal) DESC;

-- 11) 사원테이블에서 부서별 평균 월급을 출력하되, 커미션이 책정된 사원만 구하고, 평균 월급이 1000 달러 이상인 부서만 구하고, 평균 월급이 높은 순으로 출력하자.(내림차순)
SELECT deptno,AVG(sal)
FROM emp
WHERE comm IS NOT NULL
GROUP BY deptno
HAVING AVG(sal) >=1000
ORDER BY AVG(sal) DESC;

반응형

'CS > 데이터베이스' 카테고리의 다른 글

(MariaDB)조인  (0) 2023.02.07
(MariaDB)내장함수  (0) 2023.02.07
(MariaDB)SQL기본 2-GROUP BY, HAVING  (0) 2023.02.02
(MariaDB)SQL기본  (0) 2023.02.01
(MariaDB)데이터베이스  (0) 2023.01.31