본문 바로가기

DataBase/Mysql

(6)
[ mysql ] with recursive 문법 (+ 프로그래머스 특정 세대의 대장균 찾기) with recursive 는 재귀 쿼리 문법이다. 아래의 예시를 통해서 자세히 알아보자. (아래 링크의 프로그래머스의 문제를 예시로 든 것이기 때문에, 자세한 문제는 아래를 참고하길 바람) 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr | 테이블 ecoli_data 테이블이 존재하고 부모-자식 관계를 나타내는 데이터가 저장되어 있다. ID 1,2 는 1세대 ID 3,4,5 는 2세대 ID 6,7 은 3세대 ID 8 은 4세대 그럼 ID 를 기준으로 세대를 구하는 쿼리는 어떻게 짤 것인가? with recursive 문법을 쓰면 쿼리는 다음과 같다. | ..
[ mysql ] join using 과 on 차이(각각 어디에 적절한가?) 쿼리를 짤 때 join 이 필요할 경우에는 항상 on 을 사용했는데, 최근에 using 문법을 알게 되었다. using 문법은 어떨 때 사용하는 것이 적절할까? 아래와 같이 테이블 2개가 있다고 가정해보자. 두 테이블을 INNER JOIN 해서 각 테이블의 정보를 조회하는 쿼리와 결과는 다음과 같다. -- on 사용 SELECT u.*, o.* FROM tb_user u INNER JOIN tb_office o ON u.user_no = o.user_no; -- using 사용 SELECT u.*, o.* FROM tb_user u INNER JOIN tb_office o USING (user_no); ON 절에서 각 테이블의 키를 연결하여 조회할 수도 있고, USING 뒤에 두 테이블을 연결하는 키를 ..
[ mysql ] 예시로 보는 인덱스 (Index) 개념 완전 이해하기 인덱스(Index) 란? 배경 DB 작업을 하면서 가장 많으 접하게 되는 인덱스. 하지만 생각보다 정확한 개념을 이해하고 있지 못한 사람들이 있다. 예시를 통해서 쉽게 인덱스를 되짚어보자. 개념 직관적으로 이해할 수 있도록 책에 비유해보겠다. 예를 들어 학생 정보가 천만 건이 기록되어 있는 책이 있다고 가정해보자. 그 안에서 '이말년' 학생을 검색해야 한다면 어떤 방법으로 찾을 수 있을까? 첫 번째 행부터 마지막 행까지 하나씩 살펴보는 방법이 있다. 그러나 이러한 방식은 시간이 오래걸릴 것이다. 책의 두께가 두꺼워질수록 검색할 분량이 늘어날수록 검색 속도가 급격히 느려지므로 매우 비효율적이다. 그렇다면 책이 특정 기준으로 정렬이 되어있다면 어떨까? 흔히 우리가 알고있는 책의 목차처럼 말이다. 예를 들어 ..
[ mysql ] 기본키(Primary Key) 와 유니크키(Unique Key) 차이 기본키(Primary Key) -값 중복을 허용하지 않는다. 식별키이다. -NULL값을 허용하지 않는다. -테이블에서 한 개만 생성 가능하다. 유니크키(Unique Key, Unique Index) -값 중복을 허용하지 않는다. -NULL값을 허용한다. -테이블에서 여러 개 생성 가능하다. "테이블은 오직 하나의 기본키(PK)를 가질 수 있다." 이는 여러 개의 기본키는 생성할 수 없다는 것을 의미한다. 아래의 ERD 테이블을 보자. 게시글을 읽은 사람들을 저장하기 위한 테이블이다. board_no 와 user_id 2개의 컬럼을 기본키로 설정할 수 있는 것을 확인할 수 있다. (예시를 위해 두 컬럼을 PK로 설정하였으나, 실제로는 UNIQUE INDEX로 설정하는 것을 권장한다.) 즉, 기본키는 단 하..
[ mysql ] select insert 문법 + duplicate key 기본키 중복 해결 안녕하세요 코띵입니다 :D 프로젝트를 진행하던 중에 select insert 문법을 써야돼서 사용하려는데, 기본키에 auto_increment 가 적용되어 있지 않아서 문제가 발생했습니다. 그래서 이를 해결하는 방법을 찾아서 포스팅해보려고 합니다. 하나의 테이블에서 select 하여 어떤 테이블로 insert 하고 싶을 경우에 아래와 같이 실행하면 됩니다. insert into 테이블A ( 컬럼명1, 컬럼명2, 컬럼명3 ) select 컬럼명4, 컬럼명5, 컬럼명6 from 테이블B ( 이 때, insert 와 select 사이의 컬럼 개수는 동일해야합니다. ) 저 구문을 실행할 때 키를 포함하고 있지 않으면 문제될 것은 없습니다. 하지만 컬럼값의 기본키를 반드시 넣어야하는 경우라면 기본키 값을 증가시키..
[ mysql ] merge update insert 프로젝트를 하다보면 oracle로 할 때가 있고 mysql로 할 때가 있다. 하지만 서로 쿼리가 다른 것들이 많다. 그 중 하나가 오늘 포스팅할 개념이다. 먼저 테이블을 생성합니다. | 테이블 생성 CREATE USER(USER_ID VARCHAR(20), USER_NAME VARCHAR(20), USER_TEL VARCHAR(13), PRIMARY KEY(USER_ID) ); 그 다음에, 예시를 위해서 데이터를 넣어보겠습니다. | 데이터 삽입 INSERT INTO USER(USER_ID, USER_NAME, USER_TEL) VALUES('imcodding0616', 'codding', '010-1234-5678'); USER_ID USER_NAME USER_TEL imcodding0616 coddin..

반응형