본문 바로가기
Database

[MariaDB] DML

by qoth_0 2023. 11. 22.
728x90
반응형

DML - INSERT

  • 테이블에 새로운 레코드를 추가
    • INSERT INTO 테이블이름(필드이름1, 필드이름2, 필드이름3, ...) VALUES (데이터값1, 데이터값2, 데이터값3, ...)
    • 예제
      • insert author(id, name, email) values(1. 'kim', 'abc@naver.com');
    • MariaDB에서 문자열은 쌍따옴표가 아닌, 따옴표(')로 감싼다.
    • MariaDB에서 명령문은 대소문자를 구분X 그러나 대문자가 관례
      • 테이블명, 컬럼명은 소문자가 관례
      • 테이블명은 대소문자를 구분

DML -UPDATE

  • 테이블 레코드의 내용을 수정
    • UPDATE 테이블이름 SET 필드이름1=데이터값1, 필드이름2=데이터값2, ... WHERE 필드이름=데이터값
    • 만약 WHERE 절을 생략하면, 해당 테이블의 모든 레코드값이 위 설정대로 수정되므로 유의
    • ex) update author set email='abc2@test.com' where id=1;
    • 여기서 =의 쓰임새는 2가지
      • where문 뒤에 나오는 비교문은 java 기준으로 ==로
      • 어떤 값을 set할때도 =을 사용하여 대입 (java =과 동일)

DML - DELETE

  • DELETE FROM 테이블이름 WHERE 필드이름=데이터값
    • WHERE 절을 생략하면, 해당 테이블에 저장된 모든 데이터가 삭제
    • ex) DELETE FROM author WHERE author_id=5;

DELETE, TRUNCATE, DROP 차이

  • DROP은 테이블 구조까지 전체 삭제
  • DELETE와 truncate의 차이
    • delete는 storage까지 삭제하지는 않아 복구가 가능
    • delete는 log를 남기
    • delete의 삭제속도는 truncate보다 느림

DML - SELECT

SELECT 속성이름 FROM 테이블이름 [WHERE 조건];

  • 모든 필드 선택
    • select * from member;

SELECT * FROM author WHERE id = 1;

select name, email from author where id=1;

select *from author where id > 1;

select * from author id > 1 AND name = “kim”;

  • 프로그래머스 SQL 문제 풀이 (SELECT, WHERE - 어린동물찾기)
    • 정렬은 무시해도 좋음, select의 기본이 id로 오름차순 정렬이므로

https://school.programmers.co.kr/learn/courses/30/lessons/59037

INTAKE_CONDITION이 Aged가 아닌 동물을 찾는것.

SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION != 'Aged';

  • 프로그래머스 sql 문제 풀이 (SELECT, WHERE - 아픈 동물 찾기)

INTAKE_CONDITION이 Sick인 동물을 찾는 것

SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION = 'Sick';

SELCT 시 중복되는 값제거

  • SELECT DISTINCT name from author;

선택한 결과의 정렬

  • SELCT 문으로 선택한 결과를 ORDER BY 절을 사용하여 정렬
  • 기본설정은 오름차순(ASC)이며, 내림차순 시 DESC
  • 여러 필드의 데이터를 쉼표(,)를 사용하여 여러기준으로 정렬할 수도 있음
  • order by 생략시 pk를 기준으로 오름차순 정렬하여 결과값 반환
  • SELECT *FROM AUTHOR LIMIT number; 반환할 행의 최대 수를 지정

→ select *from author order by id desc limit 2; 로 실무에서 많이 사용

별칭(alias)를 이용하여 처리

  • 테이블과 필드에 임시로 별칭을 부여하고, 해당 별칭을 SELECT 문에서 사용
  • SELECT 필드이름 AS 별칭 FROM 테이블이름;
  • SELECT 필드이름 FROM 테이블이름 AS 별칭;

→ 테이블에 별칭을 지정하는 경우는 두 테이블을 사용할 때 서로 같은 속성이 있는 경우 a.name, b.name 식으로 구분하기 위해 사용

  • 프로그래머스 SQL 문제 풀이 (SELECT, ORDER BY - 역순 정렬하기)
SELECT NAME, DATETIME FROM ANIMAL_INS ORDER BY ANIMAL_ID DESC;

  • 프로그래머스 SQL 문제 풀이 (SELECT, ORDER BY - 여러 기준 정렬하기)
SELECT ANIMAL_ID, NAME, DATETIME FROM ANIMAL_INS ORDER BY NAME, DATETIME DESC;

  • 프로그래머스 SQL 문제 풀이 (SELECT, ORDER BY, LIMIT - 상위 n개 레코드)
SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME LIMIT 1;


DML 실습

  • 전체 쿼리 작성 후 한번에 실행
  • 게시판 회원은 총 5명이 되도록하고, 게시판에 실명으로 글이 쓰여진 게시글은 총 3건, 익명으로 글이 쓰여진 글은 총 2건이 있도록 데이터 insert
USE board;

INSERT INTO author(id, name) VALUES (1, '배');
INSERT INTO author(id, name) VALUES (2, '김');
INSERT INTO author(id, name) VALUES (3, '송');
INSERT INTO author(id, name) VALUES (4, '이');
INSERT INTO author(id, name) VALUES (5, '신');

INSERT INTO post(id, title, contents, author_id) VALUES (1, '가', '하하', 1);
INSERT INTO post(id, title, contents, author_id) VALUES (2, '나', '마마', 3);
INSERT INTO post(id, title, contents, author_id) VALUES (3, '다', '라라', 5);
INSERT INTO post(id, title, contents) VALUES (4, '라', '노노' );
INSERT INTO post(id, title, contents) VALUES (5, '바', '비비');
  • 게시판의 회원을 모두 delete하되, 기존에 posting된 글은 삭제되지 않고 남아있또록 하여라. → where author_id ! = null

DELETE 한번에 할 경우 환경설정 필요 → Edit - Preferences - SQL Editor - Other에 Safe Updates 체크 해제

update post set author_id = null where author_id is not null;
delete from author;

  • post의 글을 3개만 조회하되, title을 기준으로 오름차순하고 만약 제목이 같은 경우 contents로 내림차순이 되도록 조회
select * from post order by title asc, contents desc limit 3;


Uploaded by N2T

728x90
반응형

'Database' 카테고리의 다른 글

[MariaDB] 제약조건  (0) 2023.11.22
[MariaDB] 연산자  (1) 2023.11.22
[MariaDB] 데이터타입  (0) 2023.11.22
[MariaDB] DDL  (1) 2023.11.22
[MariaDB] 설치, MariaDB란  (1) 2023.11.22