230320 DB_DML_(INSERT, UPDATE, DELETE, SELECT)

Myung A Lee·2023년 3월 20일
0

DB

목록 보기
4/15
post-thumbnail

DML : Data Manipulation Language

데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류(데이터 삽입, 수정, 삭제)의 명령어들을 말함.

1. 데이터 삽입 (INSERT)

INSERT INTO [테이블명]([컬럼명, 컬럼명,...,컬럼명]) VALUES([값, 값, 값...,값]);

  • 명령어 작성시 컬럼명의 수와 값의 수가 꼭 일치 해야만한다.
  • 만약 빠진 컬럼명이 있다면 NULL 값이 들어가게 된다.
  • ex) insert into employees(emp_no, first_name, family_name, email, mobile, salary, depart_no, commission) values(111,'이름', '성', 'email@gamil.com', '01001010101', 999999,'dev_001',90);

2. 데이터 수정 (UPDATE)

UPDATE [테이블명] SET [컬럼] = [이름] WHERE [조건]

  • 조건에 is null/ is not null 사용 가능
  • ex) update employees set depart_no = 'dev002' where depart_no is null;

-- commission이 null 이면 10으로 수정
update employees set commission = 10 where commission is null;

3. 데이터 삭제 (DELETE)

DELETE FROM[테이블명] WHERE [조건];

  • 되돌릴 수 없을 수도 있으므로 항상 주의해야 한다.
  • TRUNCATE를 사용하면 데이터만 삭제되는 것처럼 보이나 테이블 삭제 후 재생성의 개념이므로 혼동해서는 안된다.
  • ex) delete from employees where first_name is null;

UPSERT : 값이 없으면 INSERT, 있으면 UPDATE 하기
-- 명령어는 아니지만 제약조건을 이용하여 사용할 수 있다.

4. 데이터 조회 (Select)

데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE 라고도 함

1) 특정 컬럼 조회

SELECT [컬럼] FROM [테이블];

  • 전체 테이블 가져오기
    - ex) select * from employees;
  • 테이블에서 특정 컬럼만 가져오기
    - ex) select first_name, family_name, salary from employees;
  • 산술 표현 : 숫자 컬럼의 경우 산술표현이 된다.
    - ex) select first_name, family_name, salary/10000 from employees;
  • as를 사용하면 컬럼에 별칭을 부여할 수 있다.
    - ex) select first_name, family_name, salary*12 as 연봉 from employees;
  • 두 컬럼을 합쳐서 보여주고 싶으면 concat(컬럼1,컬럼,2)
    - ex) select concat(family_name, first_name) as name, salary*12 as 연봉 from employees;
  • 문자열을 합쳐서 출력 : concat(str1, str2)
    - ex) select concat(family_name, first_name) as name, concat(truncate(salary/10000,0),'만원') as 연봉 from employees;
    - ex) select concat(family_name, first_name) as name, concat(floor(salary/10000),'만원') as 연봉 from employees;

2) 특정 조건을 만족하는 데이터 조회

SELECT [컬럼] FROM [테이블] WHERE [조건]
- ex) select * from employees where family_name ='김';

  • 급여가 300만원 이상인 사원
    - ex) select * from employees where salary >= 3000000;

  • AND 조건 : 급여가 100만원 이상이고 500만원 이하인 사원
    - ex) select * from employees where salary >= 1000000 and salary <= 5000000;

  • OR 조건 : family_name 이 '김' 이거나 급여가 200만원인 사원
    - ex) select * from employees where family_name = '김' or salary = 2000000;

  • BETWEEN AND : 급여가 50만원 이상이고 400만원 이하인 사원의 first_name 과 family_name
    - ex) select first_name,family_name from employees where salary >= 500000 and salary <= 4000000;
    - ex) select first_name,family_name from employees where salary between 500000 and 4000000;

3) 중복 제거

SELECT DISDINCT [중복제거 컬럼,...] FROM [테이블]

  • 메뉴얼 상에는 1 개 이상이 가능하다고 하지만 1개 이상 넣지 않는 것이 좋다.
  • 중복 제거는 1개 컬럼을 대상으로 하는 것이 가장 정확하다.
    - ex) select distinct family_name from employees;
    - ex) select distinct family_name,salary from employees;

4) IN : 공통 컬럼으로 여러 값을 or 조건을 사용할 때 간략화 시킨다. 속도도 빠름(단, 공통컬럼에서 )

  • family_name 이 '김'이거나 '박'이거나 '이'인 사람의 모든 컬럼을 가져와라
    - ex) select from employees where family_name = '김' or family_name = '박' or family_name = '이';
    - ex) select
    from employees where family_name in ('김','이','박');

5) IS NULL / IS NOT NULL

  • NULL 인지 아닌지 확인
    - ex) select from employees where commission is null;
    - ex) select
    from employees where commission is not null;

6) LIKE 검색 : 일부분을 포함하는 검색 (속도가 느리다)

WHERE [컬럼명] LIKE '%[문자열]%'

  • ze% -> ze로 시작하는
    - ex) select * from employees where email like 'ze%';

  • %com -> com으로 끝나는
    - ex) select * from employees where email like '%com';

  • %se% -> se를 포함하는
    - ex) select * from employees where email like '%se%';

  • %s%e% -> s나 e를 포함하는
    - ex) select * from employees where email like '%s%e%';

7) ODER BY : 특정 컬럼을 기준으로 정렬

  • ASC(오름차순) DESC(내림차순)

  • salary가 높은 순으로 (desc)
    - ex) select * from employees order by salary desc;

  • family_name을 가나다 순으로 (asc)
    - ex) select * from employees order by family_name;

  • 연봉이 높은 순으로 정렬
    - ex) select emp_no ,first_name ,family_name ,salary*12 as annsal from employees order by annsal desc;

  • 다중 정렬 (1차 정렬 후 동률의 데이터에서 2차 정렬이 진행)
    - ex) select * from employees order by family_name, salary desc;

  • order by 위치는 가장 마지막으로 데이터를 Select 후 Sort하는 것이 좋다.
    - 급여가 200만원 이상인 사람을 family_name 오름차순
    - ex) select * from employees where salary >=2000000 order by family_name;

8) GROUP BY : 테이터를 특정한 컬럼을 중심으로 묶어서 가져오는것

SELECT [컬럼] FROM [테이블] GROUP BY [묶어줄 기준 컬럼]

  • 묶인 대상 컬럼, 연산(합계, 평균, 집계)

  • depart_no를 기준으로 묶어서 가져오기
    - ex) select depart_no, sum(salary) as '총연봉' from employees group by depart_no;

  • 부서 번호, 부서 급여 평균
    - ex) select depart_no, truncate(avg(salary),0) as '평균 연봉' from employees group by depart_no;

  • 부서 번호, 급여 합계, 팀원 수
    - ex) select depart_no, truncate(sum(salary),0) as '급여 합계', count(depart_no) as '팀원 수' from employees group by depart_no;

9) HAVIGN : GROUP BY 로 얻어온 결과를 특정 조건으로 추출하는 것

  • HAVING에는 별칭을 사용하지 않는다. (특정 DB에서 먹히지 않을 수 있다. )

  • GROUP 해온 테이터 중에서 sum(salary) 가 2000만원이 넘는 데이터만
    - ex) select depart_no , sum(salary) as 'sal_sum' from employees group by depart_no having sum(salary) > 20000000 ;

  • 급여 합계가 천만원 이상인 팀들만 조회(합계 급여가 큰 순으로)
    - ex) select depart_no , sum(salary) as 'sal_sum' from employees group by depart_no having sum(salary) >= 10000000 order by sal_sum desc;

0개의 댓글