SQL/sql 문법(mysql, mariaDB)

DML 조작어_ select / insert / update / delete

읽히는 블로그 2024. 4. 28. 08:34

▤ 목차

     
    DML은 Data Manipulation Language의 약자로 데이터 조작 어를 말한다. 정의된 데이터 베이스에 입력된 레코드를 조회하거나 수정하거나 삭제하는 등의 역할을 한다.

    ✔ select

    select는 테이블의 레코드를 선택할 수 있다.
    이번에는 단순한 형식만 알아보고 다양한 사용들은 따로 정리하겠다.

    🪄 알고 가자!

    더보기

    지금 우리는 같은 컴퓨터 안에서 데이터를 받고있다. 

    나중에 원격으로 데이터 서버에 연결해 데이터를 읽어올것이다.

     

    select 구문으로 원본 db를 읽어온다(읽는 동안만 연결이 state상태이고 데이터를 넘기고 나면 less 상태이다.)

    만약 계속 원db랑 연결되어있다면? 부하가 올것.

     

    select 구문으로 내 로컬 RAM에 가져오면 사용하는 언어로 RAM에서 작업(delete, update, insert)하게 되어있다.

    작업을 하는 동안 과정에 대한 log가 찍한다.

    작업을 마치면 원본 db에 넘길지, rollback할지 선택하면 된다.

     

    db의 양이 엄청나기때문에 로컬의 RAM은 메모리 용량이 부족할텐데?

    우리는 select * from ~; 하면 다 가져온다고 생각하지만 실제로 그렇지 않다.

    일정부분만 읽어온다. 조금씩 읽어온다.

     

    일단 알아야 할 점은 원본 db를 직접 쓰는 것이 아니라는 것이다.

     

    ⌨ 형식

    SELECT 필드이름 FROM 테이블이름
    [WHERE 조건]
    SELECT *FROM 테이블이름;

    해당 테이블 전체를 가져올 수 있다.

    💻 코드로 보기

    SELECT *FROM test where testnum=1;

     

    SELECT *FROM test;

     

    👏 중요

    from 절은 레코드를 선택할 테이블의 이름을 명시한다.
    해당 테이블에서 선택하고 싶은 필드의 이름을 select 키워드 바로 뒤에 명시한다.
    이때 where절을 사용해 여러 개의 조건을 명시할 수 있다.
    이때 AND 혹은 OR 연산자를 이용하여 연결한다.

    insert

    ⌨ 형식

    -- insert into를 사용하여 테이블에 새로운 레코드를 추가
    INSERT INTO 테이블이름(필드이름1, 필드이름2, ...)
    VALUES (데이터값1, 데이터값2, ...)

    💻 코드로 보기

    INSERT INTO professorTable VALUES('24816d','천송이',100);

    insert into 다음 필드명은 반드시 명시하지 않아도 된다.
    데이터베이스의 스키마와 같은 순서대로 필드의 값이 자동 대입된다.
     
    특정 데이터만 넣어야 한다면 명시적으로 넣어주어야 하고 not null 조건이 있으면 무조건 값을 넣어줘야 한다.

    INSERT INTO professorTable(code,name) VALUES('24816f','백송이');
    codenamenum
    24816d천송이100
    24816f백송이null

     

    update

    ⌨ 형식

    UPDATE 테이블이름 SET 필드이름1=데이터값1, 필드이름2=데이터값2, ...
    WHERE 조건절

    update 문은 해당 테이블에서 where절의 조건을 만족하는 레코드의 값만 수정한다.
     

    💻 코드로 보기

    원하는 레코드의 모든 필드값을 변경할 수도 있다.

    UPDATE test SET inwon=123 WHERE NO=1;
    # test 테이블에서 inwon을 123으로 변경해줘. no이 1인 곳에만

     

    null값으로 만들기

    UPDATE test SET inwon=null WHERE NO=1;

     

    delete

    ⌨ 형식

    DELETE FROM 테이블이름;

    아무 조건(where) 없이 delete 하면 해당 테이블에 저장된 모든 데이터가 삭제된다.
    테이블 구조는 남아있다! 테이블을 자체를 삭제하고 싶다면 drop table문을 사용해서 삭제해야 한다.

    DELETE FROM 테이블이름 WHERE 필드이름=데이터값

    where절의 조건을 만족하는 레코드를 삭제한다. 테이블에서 명시된 필드와 일치하는 레코드만을 삭제한다.
     
     

    💻 코드로 보기

    CREATE TABLE hak(
    	num		INT PRIMARY KEY AUTO_INCREMENT,
    	hakname 	VARCHAR(10),
    	birth		VARCHAR(15)	 
    );
    
    INSERT INTO hak VALUES(1, '짱구','2000-02-12');
    INSERT INTO hak(hakname,birth) VALUES('맹구','2000-01-11');
    INSERT INTO hak(hakname,birth) VALUES('유리','2000-05-15');
    
    SELECT * FROM hak;
    DELETE FROM hak WHERE hakname = '맹구';

     

    TRUNCATE

    모든 레코드를 삭제하는 명령어이다.

    TRUNCATE TABLE test;

     
    트렌젝션 로그를 만들기 때문에 DELETE보다 속도가 느리다.
     
     
     
     

    😊정리

    table 자체를 지운 것인지 헷갈릴 수 있다.
    기본 구문에 대해서는 익숙해질 수 있도록 연습해여한다.
    자주 사용하다보면 구조가 자연스럽게 체화될 것이다.

    select 구문은 다양한 조건들이 붙어서 구조를 복잡하게 만든다면 충분히 복잡해질 수 있다.
    이후에 select문에 대해 자세히 정리하겠다 :-)
    https://hi-hahahoho.tistory.com/m/9