DML 이란?
-
Data Manipulation Language
-
데이터 조작어
-
종류
insert - 추가
select - 조회
update - 수정
delete - 삭제
SELECT - 데이터 조회
SELECT *
FROM STUDENTS;
SELECT ALL student_ID
FROM STUDENTS;
SELECT DISTINCT student_ID
FROM STUDENTS;
SELECT student_ID, student_NAME
FROM STUDENTS;
SELECT Clause 조건
- * : 테이블에서 모든 열을 선택
- ALL : 선택된 모든 행을 반환
- DISTINCT : 선택된 모든 행 중에서 중복 행은 제거
- 컬럼명 : 해당 컬럼명을 선택
SELECT student_NAME as 이름
student_EMAIL "이메일"
student_GRADE "점수"
student_GRADE/10 "평균"
FROM STUDENTS;
-
사칙연산 가능 (+ * / - )
-
ALIAS 별칭 : 조회했을 때, 해당 컬럼명의 이름을 설정
예를들어 조회하면
student_NAME student_EMAIL student_GRADE student_GRADE/10 … … … … 이렇게 나오는게 아니라
이름 이메일 점수 평균 … … … … 이렇게 나오게 된다.
IFNULL(값1, 값2) - NULL값 처리하기
SELECT student_NAME as 이름
student_EMAIL "이메일"
student_GRADE "점수"
(IFNULL(student_GRADE,1)/10) "평균"
FROM STUDENTS;
IFNULL은 값1이 NULL일 경우 값2를 리턴해서 계산해준다. 아닐 경우 값1로 계산
CASE문
SELECT student_NAME, student_EMAIL,
case when student_GRADE>80 then '우수'
when student_GRADE>50 then '평균'
else '부족'
end "평가"
FROM STUDENTS;
컬럼 값에 따라 값을 설정해준다
컬럼명 : 평가
80점 이상 : 우수 / 50점 이상 : 평균 / 50점 미만 : 부족
조건 검색 - WHERE
//학생 이름이 TEST이면서 점수가 60점 이상인 학생의 이름,이메일,점수 조회
SELECT student_NAME, student_EMAIL, student_GRAGE
FROM STUDENTS
WHERE student_GRAGE>=60 AND student_NAME = 'TEST';
//점수가 20점이거나 50점인 학생의 이름,이메일,점수 조회
SELECT student_NAME, student_EMAIL, student_GRAGE
FROM STUDENTS
WHERE student_GRAGE = 50 OR student_GRAGE = 20;
//점수가 50점이 아니고 20점이 아닌 학생의 이름,이메일,점수 조회
SELECT student_NAME, student_EMAIL, student_GRAGE
FROM STUDENTS
WHERE student_GRAGE != 50 AND student_GRAGE != 20;
//점수가 20점이거나 50점이 아닌 학생의 이름,이메일,점수 조회
SELECT student_NAME, student_EMAIL, student_GRAGE
FROM STUDENTS
WHERE NOT (student_GRAGE = 50 OR student_GRAGE = 20);
- 조건에 맞는 행만 조회
- AND, OR, NOT 사용 가능
IN, BETWEEN
//학생 PART 번호가 50,60,70인 학생의 이름, 이메일, 성적 조회
SELECT student_NAME, student_EMAIL, student_GRAGE
FROM STUDENTS
WHERE student_PART IN (50, 60, 70);
//학생 PART 번호가 50,60,70이 아닌 학생의 이름, 이메일, 성적 조회
SELECT student_NAME, student_EMAIL, student_GRAGE
FROM STUDENTS
WHERE student_PART NOT IN (50, 60, 70);
//성적이 50이상 80이하인 학생의 이름, 이메일, 성적 조회
SELECT student_NAME, student_EMAIL, student_GRAGE
FROM STUDENTS
WHERE student_GRAGE BETWEEN 50 AND 80;
- 결국 WHERE student_GRAGE >= 50 AND student_GRAGE <=80 이랑 같다
NULL 비교 - IS NULL / IS NOT NULL
//이메일을 알 수 없는 학생의 이름, 이메일, 성적 조회
SELECT student_NAME, student_EMAIL, student_GRAGE
FROM STUDENTS
WHERE student_EMAIL IS NULL;
//이메일을 알 수 있는(NULL값이 아닌) 학생의 이름, 이메일, 성적 조회
SELECT student_NAME, student_EMAIL, student_GRAGE
FROM STUDENTS
WHERE student_EMAIL IS NOT NULL;
※ 주의 ※
절대 = NULL 로 비교할 수 없다
WHERE student_EMAIL = NULL; //안 된다
LIKE (Wild card : %, _ )
//이름에 K가 들어가는 학생의 이름, 이메일, 성적 조회
SELECT student_NAME, student_EMAIL, student_GRAGE
FROM STUDENTS
WHERE student_NAME LIKE '%K%';
//이름의 2번째에 K가 들어간 학생의 이름, 이메일, 성적 조회
SELECT student_NAME, student_EMAIL, student_GRAGE
FROM STUDENTS
WHERE student_NAME LIKE '_K%;
%는 글자 수 상관없는 와일드 카드
_는 1개의 글자수를 나타냄.(자리수를 나타낸다고 생각)
정렬 ORDER BY
//이름 오른차순 정렬
SELECT student_NAME, student_EMAIL, student_GRAGE
FROM STUDENTS
ORDER BY student_NAME ASC ;
//이름 내림차순 정렬
SELECT student_NAME, student_EMAIL, student_GRAGE
FROM STUDENTS
ORDER BY student_NAME DESC ;
- ASC : 오른차순 정렬, 생략 가능
- DESC : 내림차순 정렬
//학생 번호로 오름차순하고 나서 이름으로 내림차순
SELECT student_NAME, student_EMAIL, student_GRAGE
FROM STUDENTS
ORDER BY student_ID , student_NAME DESC ;
- 정렬 조건을 여러가지 사용할 수 있다. 순서대로 정렬이 적용된다
Insert - 데이터 추가
INSERT INT 테이블 명 (컬럼명 ....)
VALUES (값들 ....)
INSERT INTO member (userid, username, userpwd)
VALUES ('kim', '김씨', '1234');
INSERT INTO member (userid, userpwd)
VALUES ('kim', '1234');
INSERT INTO member (userid, username, userpwd)
VALUES
('kim', '김씨', '1234'),
('park', '박씨', '1324');
INSERT INTO member (userid, username, userpwd, joindate)
VALUES
('kim', '김씨', '1234', now()),
('park', '박씨', '1324', now());
-
데이터베이스 객체에 데이터를 입력(추가)할 때
-
now()하면 현재 날짜가 저장됨
Update - 데이터 수정
UPDATE 테이블명 SET 컬럼명='바꿀 값'
WHERE 조건
//userid가 kim인 행의 userpwd와 email 값을 변경
UPDATE member SET userpwd="123123", email="ssafy@naver.com"
where userid = 'kim';
//모든 데이터의 userpwd, email 값을 변경
UPDATE member SET userpwd="123123", email="ssafy@naver.com"
- WHERE 절의 조건에 만족하는 레코드의 값을 변경
- 따라서, WHERE 조건문을 생략하면 모든 데이터가 바뀌게 된다 (생각만해도 끔찍..😫)
DELETE - 데이터 삭제
DELETE FROM 테이블 명 WHERE 조건
//userid가 kim인 레코드 삭제
DELETE from member WHERE userid='kim';
- 조건에 만족하는 레코드의 값을 변경
- 따라서, WHERE 조건문을 생략하면 모든 데이터가 바뀌게 된다 (이것도 끔찍..😫)