728x90

-1.없어진 기록 찾기 문제

 

  • 문제 설명

 

ANIMAL_INS 테이블은 동물 보호소에 들어온 동물의 정보를 담은 테이블입니다. ANIMAL_INS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME,INTAKE_CONDITION, NAME, SEX_UPON_INTAKE는 각각 동물의 아이디, 생물 종, 보호 시작일, 보호 시작 시 상태, 이름, 성별 및 중성화 여부를 나타냅니다.

 

 

 

 

 

 

 

ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 종, 입양일, 이름, 성별 및 중성화 여부를 나타냅니다. ANIMAL_OUTS 테이블의 ANIMAL_ID는 ANIMAL_INS의 ANIMAL_ID의 외래 키입니다.

 

 

 

천재지변으로 인해 일부 데이터가 유실되었습니다. 입양을 간 기록은 있는데, 보호소에 들어온 기록이 없는 동물의 ID와 이름을 ID 순으로 조회하는 SQL문을 작성해주세요.

 

내 답 ) 

1
2
3
4
#OUTS 테이블에만 존재하는 것을 뽑아 내면 된다.
SELECT outs.ANIMAL_ID,outs.NAME from ANIMAL_OUTS outs left join
ANIMAL_INS ins on outs.ANIMAL_ID=ins.ANIMAL_ID 
where ins.ANIMAL_ID is null order by outs.ANIMAL_ID;
cs

 

jeong-in 님의 답 ) 

1
select animal_id, name from animal_outs where animal_id not in (select animal_id from animal_ins);
cs

 

bigMango 님의 답 )

1
2
3
4
5
select o.animal_id, o.name
from animal_outs o
    left join animal_ins i using(animal_id)
where i.animal_id is null
order by o.animal_id;
cs

mysql에서 join을 사용할때  using 이나 on이나 결과는 동일하다 .

다만 ,  using 은 두 테이블간 필드이름이 같은 경우에만 사용하고  ,

on 은 두 테이블간 필드이름이 같던 다르던 사용가능하다.

상황에 따라서 using을 사용하면 조금이나마 코드가 짧아지겠다..

 

 

 

-2. 있었는데요 없었습니다

  • 문제설명

기본 문제형식은 1번과 동일합니다.

관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다.

 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요.

 이때 결과는 보호 시작일이 빠른 순으로 조회해야합니다.

 

내답 ) 

1
2
3
4
#INNER JOIN 이용후 조건 만족하는 데이터 찾아서 출력
SELECT INS.ANIMAL_ID,OUTS.NAME FROM ANIMAL_INS INS INNER JOIN
ANIMAL_OUTS OUTS USING(ANIMAL_ID) WHERE INS.DATETIME>OUTS.DATETIME
ORDER BY INS.DATETIME ASC;
cs

 

herjh0405 님의 답 ) 

1
2
3
4
5
6
SELECT AI.ANIMAL_ID, AI.NAME FROM ANIMAL_INS AS AI
JOIN 
ANIMAL_OUTS AS AO
ON AI.ANIMAL_ID = AO.ANIMAL_ID
WHERE AI.DATETIME > AO.DATETIME
ORDER BY AI.DATETIME
cs

2: INNER JOIN 에서 INNER는 생략이 가능하다.

 

박현수 님의 답 )

1
2
3
SELECT a.animal_id, a.name from animal_ins a, animal_outs b
where a.animal_id = b.animal_id and a.datetime > b.datetime
order by a.datetime
cs

 

 

-3. 오랜 기간 보호한 동물(1)

  • 문제설명

기본 문제형식은 1번과 동일합니다.

아직 입양을 못 간 동물 중, 가장 오래 보호소에 있었던 동물 3마리의 이름과 보호 시작일을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일 순으로 조회해야 합니다.

내답 )

1
2
3
4
5
6
SELECT INS.NAME,INS.DATETIME FROM ANIMAL_INS INS LEFT JOIN
ANIMAL_OUTS OUTS USING(ANIMAL_ID) WHERE OUTS.ANIMAL_ID IS NULL
ORDER BY INS.DATETIME LIMIT 0,3;
#INS 에만 있는 기록 중 , 가장 오래 보호소에 있었던 동물 3마리를
#이름,보호시작일 조회 (ORDER BY ANIMAL_INS.DATETIME ASC)
=> INS만의 차집합을 뽑아내면 해결.
cs

 

이필환님의 답)

1
2
3
4
5
6
SELECT NAME, DATETIME
from ANIMAL_INS
where ANIMAL_ID not in (select ANIMAL_ID from ANIMAL_OUTS)
order by DATETIME 
limit 3
;
cs

join 없이 서브쿼리로 해결하셨다.

 

-4. 보호소에서 중성화한 동물

  • 문제설명

기본 문제형식은 1번과 동일합니다.

보호소에서 중성화 수술을 거친 동물 정보를 알아보려 합니다. 

보호소에 들어올 당시에는 중성화되지 않았지만, 보호소를 나갈 당시에는 중성화된 동물의 아이디와 생물 종, 이름을 조회하는 아이디 순으로 조회하는 SQL 문을 작성해주세요.

중성화를 거치지 않은 동물은 성별 및 중성화 여부에 Intact, 중성화를 거친 동물은 Spayed 또는 Neutered라고 표시되어있습니다. 

내답 )

1
2
3
4
5
6
7
8
9
10
SELECT INS.ANIMAL_ID,INS.ANIMAL_TYPE,INS.NAME FROM ANIMAL_INS INS
INNER JOIN ANIMAL_OUTS OUTS USING(ANIMAL_ID) 
WHERE INS.SEX_UPON_INTAKE LIKE 'Intact%' and
OUTS.SEX_UPON_OUTCOME NOT LIKE 'Intact%' ORDER BY INS.ANIMAL_ID;
#중성화를 거치지 않은 동물은  Intact 문자열이 들어가있음.
#먼저 INS와 OUTS에 동일한 동물이 존재해야하므로 ,
#INS와 OUTS가 ANIMAL_ID로 inner join 후 
#INS.SEX_UPON_INTAKE 가 Intact 를 포함하며 , 
#OUTS.SEX_UPON_OUTCOME 가 Intact를 포함하지 않는 경우의
# 아이디와 생물 종, 이름을 조회 (ORDER BY INS.ANIMAL_ID ASC)
cs

가뜩이나 인덱스가 적용안된 SEX_UPON_INTAKE(SEX_UPON_OUTCOME) 에  

WHERE 조건으로 Spayed , Neutered 를  두가지 모두 사용하는 것은 부담스러워서 Intact만을 사용하였다.

 

lazy-sky 님의 답 )

1
2
3
4
5
6
SELECT O.ANIMAL_ID, O.ANIMAL_TYPE, O.NAME
FROM ANIMAL_OUTS AS O
LEFT OUTER JOIN ANIMAL_INS AS I
ON O.ANIMAL_ID = I.ANIMAL_ID
WHERE O.SEX_UPON_OUTCOME != I.SEX_UPON_INTAKE
ORDER BY ANIMAL_ID;
cs

실로 놀랍다.

먼저 , 

1. 범위성 측면에서 ANIMAL_OUTS 테이블은 ANIMAL_INS 테이블보다 작고,

   ANIMAL_OUTS 테이블에 있는 동물은 ANIMAL_INS 테이블에 기본적으로 모두 포함되어있다.

=> 'A' LEFT OUTER JOIN 'B' 의  'A'부분에 ANIMAL_OUTS를 놓음 으로써 INNER JOIN 과 동일한 결과가 나온다.

2. INS테이블의 성별과 OUTS테이블이 성별이 다르다는 것은 , 의미하는 바가 한가지이다.

(중성 -> 성별을갖는것 은 될수가 없다.)성별을갖는것 ->중성O 이 만족한다, 즉 중성화가 된다..

=> WHERE  O.SEX_UPON_OUTCOME != I.SEX_UPON_INTAKE 으로 표현이 된다.

 

'21년이전 > 국비-sql' 카테고리의 다른 글

SQL - JOIN  (0) 2021.06.22
SQL - DDL  (0) 2021.05.12
DB - 개념모델링  (0) 2021.05.10
국비 SQL - 명령어 모음  (0) 2021.02.22
728x90

-JOIN  

*LEFT JOIN

*INNER JOIN

*RIGHT JOIN

*FULL OUTER JOIN

 

*INNER JOIN    
-양쪽다 존재하는 것만 출력한다 .  
-NULL 행이 존재하지 않게 된다.
-JOIN 성능중 가장 좋다

*LEFT JOIN
-가장 일반적으로 사용된다
-기준테이블에만 존재하는 것과 INNER JOIN 내용이 함께 출력된다. 
-실제론 LEFT JOIN , INNER JOIN만 이용된다. 

*RIGHT JOIN
-LEFT JOIN과 똑같은 역할을 한다, 테이블 기준만 다르다.

*FULL OUTER JOIN
-mysql은 지원하지 않고 , union으로 만들수 있다

 

하단은 JOIN을 설명하기 위한 샘플예제이다.  왼쪽) 학생테이블 , 오른쪽) 상담사테이블 

학생 테이블의 consultor_id는 상담사 테이블의 consultor_id(PK)를 참조한 외래키 이다.

학생 테이블의 student_id=10,11 인 값은 해당 테이블내에만 존재하고

상담사 테이블의 consultor_id=5 인값은  해당 테이블내에만 존재한다.

 

 

공통질문 

student_id 오름차순 으로 표시하라.

 

Q1) 상담사 정보가 학생테이블에 표시되도록 하며, 모든 학생 테이블을 보여라. ( 상담사 정보가 없다면 NULL로 표시 )

 

Result) 표준형태의 LEFT JOIN 을 수행. 

1
SELECT * FROM student st LEFT JOIN consultor co ON st.consultor_id=co.consultor_id ORDER BY st.student_id ASC;
cs

 

비교용도 테이블)

왼쪽) 학생테이블 , 오른쪽) 상담사테이블

 

 

 

 

Q2) 학생 테이블에 상담사 정보가 표시되도록 하며 , 상담사가 학생에게 붙은 경우만의 테이블을 보여라.

Result1)  LEFT JOIN에 조건 절을 추가하여 INNER JOIN 효과를 냈음.

1
SELECT * FROM student st LEFT JOIN consultor co ON st.consultor_id=co.consultor_id WHERE st.consultor_id IS NOT NULL;
cs

비교용도 테이블)

 

Result2) 표준 형태의 INNER JOIN 수행.

1
SELECT * FROM student st INNER JOIN consultor co ON st.consultor_id=co.consultor_id ORDER BY st.student_id ASC;
cs

비교용도 테이블)

 

RESULT 1 와 RESULT 2 는 동일하다.

 

 

 

 

Q3) 학생 테이블에 상담사 정보가 표시되도록 하며 , 상담사가 정해지지 않은 경우만의 테이블을 보여라.

 

RESULT) LEFT JOIN 에 조건절을 추가하여 해결.

1
SELECT * FROM student st LEFT JOIN consultor co ON st.consultor_id=co.consultor_id WHERE co.consultor_id IS NULL;
cs

 

비교용도 테이블)

 

 

 

 

Q4) 학생,상담사 테이블의 합집합을 표시하라 . 

 

Result) mysql 에서 FULL OUTER JOIN 효과를 내기 위해 union을 사용한다.

1
2
(SELECT * FROM student st LEFT JOIN consultor co ON st.consultor_id=co.consultor_id) UNION
(SELECT * FROM student st RIGHT JOIN consultor co ON st.consultor_id=co.consultor_id );
cs

비교용도 테이블)

 

 

 

 

Q5) 상담사가 안붙은 학생정보와 학생이 안붙은 상담사 정보를 가져오세요

 

Result) LEFT JOIN , RIGHT JOIN 에 각각 조건절을 달아주고  UNION 시킴

1
2
(SELECT * FROM student st LEFT JOIN consultor co ON st.consultor_id=co.consultor_id WHERE co.consultor_id IS NULL) UNION
(SELECT * FROM student st RIGHT JOIN consultor co ON st.consultor_id=co.consultor_id WHERE st.consultor_id IS NULL);
cs

 

 

 

 

 

 

참고로 시각적으로 JOIN 효과 보여주는 사이트  https://sql-joins.leopard.in.ua/  

'21년이전 > 국비-sql' 카테고리의 다른 글

프로그래머스 - JOIN 문제모음  (0) 2021.06.22
SQL - DDL  (0) 2021.05.12
DB - 개념모델링  (0) 2021.05.10
국비 SQL - 명령어 모음  (0) 2021.02.22
728x90

-데이터 베이스 한글지정-

1
alter database DB_NAME default character set utf8 collate utf8_general_ci;
cs

 

-테이블을 생성하기 위해 속할 데이터베이스를 사전에 지정하기-

1
use 데이터베이스명;
cs

 

 

-조합키(중복키=Composite key) 추가방법-

alter table 테이블이름 add PRIMARY KEY(column1, column2);  #다만 기존 Table에 PK가 정의되어 있으면 중복에러발생.

ex)

1
2
ALTER TABLE ITcomment ADD PRIMARY KEY(cidx,bidx);
ALTER TABLE humorcomment ADD PRIMARY KEY(cidx,bidx);
cs

참고 : hoho325.tistory.com/61

 

-RESTRICT , CASCADE , NOT NULL , NO ACTION

RESTRICT : 개체를 변경/삭제할 때 다른 개체가 변경/삭제할 개체를 참조하고 있을 경우 변경/삭제가 취소된다.
CASCADE : 개체를 변경/삭제할 때 다른 개체가 변경/삭제할 개체를 참조하고 있을 경우 함께 변경/삭제된다.
NO ACTION : MYSQL에서는 RESTRICT와 동일하다.
SET NULL : 개체를 변경/삭제할 때 다른 개체가 변경/삭제할 개체를 참조하고 있을 경우 참조하고 있는 값은 NULL로 세팅된다.
ex)

1
2
3
4
5
6
ALTER TABLE ITcomment
    ADD FOREIGN KEY (bidx)
    REFERENCES ITboard (bidx)
    ON UPDATE RESTRICT
    ON DELETE RESTRICT
;
cs

외래키 지정시 명령어이다.

4,5 : 업데이트, 삭제의 경우 제한사항을 RESTRICT 라고 지정하였다.

위에서 설명하였듯이  참조된 개체는 변경/삭제가 불가능하다. 

참고  : h5bak.tistory.com/125

'21년이전 > 국비-sql' 카테고리의 다른 글

프로그래머스 - JOIN 문제모음  (0) 2021.06.22
SQL - JOIN  (0) 2021.06.22
DB - 개념모델링  (0) 2021.05.10
국비 SQL - 명령어 모음  (0) 2021.02.22
728x90

-개요 

프로젝트진행전 ERD의 필요성에 의해 작성하기 위해 정확한 ERD 표기법및 사용법을 정리하도록한다.

실제 DB테이블 작성에 참고되는 논리모델링은

어차피 개념모델링을 작성하면 단기간에 그릴수 있으므로 작성하도록 한다..

 

-모델링의 구성

기획(스토리보드) ->  개념 모델링(ERD) -> 논리모델링(가상 테이블처럼 구성 PK등 표시 ) -> 물리모델링(실제 테이블이용)

 

-연관개념

식별자가 될수있는 키 : 후보키(CK)
후보키중에서 선택된 하나의 식별자 키 : 기본키(PK)
후보키 중에서 기본키가 아닌 키들 : 대체키(AK)
테이블에서 기본키가 없을 경우 
식별을 위해서 두개의 키를 합쳐서 만드는 키 : 중복키(composite key)=복합키
인조키 : autoincrement 이용하여 만듬.  

 

-ERD에 필요한 개념들-
Cardinality = 1:1 or 1:다 or 다:다 이런걸 말함 
1:1관계 
1:N 관계 = 1대 다 관계  (대략적설명.. ^^ 까마귀발 )
N:M관계 = 다 대 다 관계 (대략적설명.. ^^ 양까마귀발 )   
= 다만 다대다 관계를 DB테이블에서 표현하려면 연결테이블을 중간에 만들어서 컨버팅함.
Optionality =Optional = 있어도되고 없어도되고 (O) 표시
Mandatory = 필수적인 =  짝대기(|) 하나더표시

 

Optional , Mandatory  은 ERD 툴을 이용하면 자주 보게 될것이다.

 

아래그림은 프로젝트 진행중 작성한 ERD 이다.

 

 

-참고자료

ERD 내용부분에 대한 참고자료 : opentutorials.org/course/3883/25272

ERD 표기작성법에 대한 참고자료 : bamdule.tistory.com/46

백문이 불여일견으로 , Gliffy,DrawIO를 이용하여 직접그려보기.

'21년이전 > 국비-sql' 카테고리의 다른 글

프로그래머스 - JOIN 문제모음  (0) 2021.06.22
SQL - JOIN  (0) 2021.06.22
SQL - DDL  (0) 2021.05.12
국비 SQL - 명령어 모음  (0) 2021.02.22
728x90

-CRUD ( CREATE , READ , UPDATE , DELETE) -

 

 

-CREATE-

 

1
2
3
4
5
6
7
8
#주석입니다
#삽입
#INSERT INTO 테이블이름(필드이름,...) VALUES (데이터, ...);
#문자데이터는 작은따옴표로 묶어줌
INSERT INTO memo(NAME,PASSWORD,memo) VALUES ('홍길동','1111','1등 입니다.');
INSERT INTO memo(NAME,PASSWORD,memo) VALUES ('임꺽정','2222','2등 입니다.');
INSERT INTO memo(NAME,PASSWORD,memo) VALUES ('장길산','3333','3등 입니다.');
INSERT INTO memo(NAME,PASSWORD,memo) VALUES ('일지매','4444','4등 입니다.');
cs
 

 

-READ-

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#검색
#SELECT [DISTINCT] 필드이름 또는 * FROM 테이블이름;
SELECT NAME FROM memo;
SELECT DISTINCT NAME FROM memo; #DISTINCT 는 중복되는 데이터를 한번만 출력함 
#SELECT * FROM 테이블이름 ORDER BY 필드이름 [ASC/DESC]; 
ORDER BY => 지정된 필드를 기준으로 정렬함. ASC가 디폴트
SELECT * FROM memo ORDER BY NAME ASC;
SELECT * FROM memo ORDER BY idx DESC; #최신글부터 얻어옴 
#이름으로 오름  , 이름이 동일시  IDX내림
SELECT * FROM memo ORDER BY NAME ASC, idx DESC;
#SELECT * FROM 테이블이름 WHERE 조건식;
SELECT * FROM memo WHERE idx = 20 ;
SELECT * FROM memo WHERE NAME = '홍길동' ;
SELECT * FROM memo WHERE NAME = '홍길동' || NAME = '장길산' ;
SELECT * FROM memo WHERE NAME = '임꺽정' OR NAME = '일지매' ;
SELECT * FROM memo WHERE NAME IN ('홍길동','임꺽정','일지매'); #장길산 빼고다 나옴 
SELECT * FROM memo WHERE NAME NOT IN ('홍길동','임꺽정','일지매'); #장길산만 나옴
 
SELECT * FROM memo WHERE idx>5 && idx<=10;
SELECT * FROM memo WHERE idx BETWEEN 25 AND 30;   # 25<=x<=30 
#부분일치 조건
#와일드카드(대체) 문자.   '%','_',LIKE 연산자를 사용해서 부분일치 조건을 지정할 수 있다.
#'_'는 1문자를 대체할 수 있고 '%'는 여러문자를 대체할 수 있다.
#'역삼_동' => 역삼1동,역삼2동,역삼3동,... 처럼 '_' 자리에는 어떤 문자가 나와도 상관없다는 의미.
#'홍%' =>  홍으로 시작하는 모든 문자열
#'%홍' => 홍으로 끝나는 모든 문자열
#'%홍%' => 홍을 포함하는 모든 문자열
SELECT * FROM memo WHERE NAME LIKE '홍%';#홍길동
SELECT * FROM memo WHERE NAME LIKE '%공';#손오공
SELECT * FROM memo WHERE NAME LIKE '%길%';#검색기능 구현에 많이 사용
#LIMIT를 사용해서 특정 index부터 원하는 개수를 지정해 얻어올 수 있다.
#LIMIT 시작인덱스, 개수
#MYSQL 에서 인덱스는 , SELECT 가 실행됬을때 처음부터 0으로 시작됨, 인위적인 인덱스랑 다름
SELECT * FROM memo ORDER BY idx DESC LIMIT 0,10;#0번째 인덱스부터 10개를 가져옴.
SELECT * FROM memo ORDER BY idx ASC LIMIT 0,10;
#그룹 함수 : SUM(합계) ,AVG(평균) , MAX(최댓값), MIN(최솟값), COUNT(갯수)
SELECT SUM(idx) FROM memo WHERE idx<=10;#idx 1부터 10까지 쭉더해서 55가나옴
SELECT AVG(idx) FROM memo WHERE idx<=10;
SELECT MAX(idx) FROM memo WHERE idx<=10
SELECT MIN(idx) FROM memo WHERE idx<=10
#개수는 어떤 필드의 갯수를 세더라도 같은 결과가 나오기 때문에 인수로 *를 사용한다.
SELECT COUNT(*FROM memo WHERE idx<=10; #테이블에 저장된 전체글의 갯수를 얻어올수 있다.
#SELECT 그룹함수(필드이름) FROM 테이블이름 WHERE 전체조건 GROUP BY  필드이름 HAVING 그룹조건
SELECT NAME,COUNT(*FROM memo GROUP BY NAME;#각 이름마다(중복없이) 갯수가 나옴.
SELECT NAME,COUNT(*FROM memo GROUP BY NAME HAVING NAME LIKE '%길%'
#그룹함수를 실행한 결과는 필드 이름이 없기 때문에 as로 볆명을 지정할수 있다.
SELECT NAME,COUNT(*) AS '인원수' FROM memo GROUP BY NAME HAVING NAME LIKE '%길%'
 
 
cs

-UPDATE-

 

1
2
3
4
5
6
7
#UPDATE 테이블이름 SET 수정할내용, ... WHERE 조건식;
#조건식을 생략하면 테이블 전체 데이터를 수정하기 때문에 반드시 조건을 지정해서 사용한다.
UPDATE memo SET PASSWORD ='9999';#대형사고
UPDATE memo SET PASSWORD ='1111' WHERE NAME='홍길동';
UPDATE memo SET PASSWORD ='2222' WHERE NAME='임꺽정';
UPDATE memo SET PASSWORD ='3333' WHERE NAME='장길산';
UPDATE memo SET PASSWORD ='4444' WHERE NAME='일지매';
cs

 

-DELETE-

 

1
2
3
4
5
6
7
8
9
#DELETE FROM 테이블이름 WHERE 조건식;
#조건식을 생략하면 테이블 전체 데이터를 삭제하기 때문에 반드시 조건을 지정해서 사용한다.
DELETE FROM memo;#대형사고
INSERT INTO memo(NAME,PASSWORD,memo) VALUES ('홍길동','1111','1등 입니다.');#idx가 다시 1로 시작안됨.
DELETE FROM memo WHERE NAME='홍길동';
#테이블데이터 전체제거후 ,자동증가속성이 있는 idx 를 초기화 시키는방법
DELETE FROM memo;#전체 제거후
ALTER TABLE memo AUTO_INCREMENT = 1;
INSERT INTO memo(NAME,PASSWORD,memo) VALUES ('홍길동','1111','1등 입니다.');#idx가 다시 1부터 시작됨
cs

 

-ALTER-

1
2
#bidx 컬럼에 AUTO_INCREMET 넣어주기
ALTER TABLE itboard MODIFY bidx INT NOT NULL AUTO_INCREMENT;
cs
1
2
3
4
5
6
7
# 레코드들이 이미 존재하는 상황에서 auto_increment 재정렬 시켜주기 (  인덱스를 다시 1부터 순차적으로 나오게함 )
# @이 들어가는건 변수 설정임
# := 은 대입연산자임 ( 기존의 = 는 대입인지 비교인지 애매할 수 있기 때문에 := 이라는 것을 만듬 )
# 속도효율은 확답할수 없다. 왜냐하면 기존의 모든 레코드들을 한번씩 거쳐서 update 해주는 것으로 보이기 때문이다.
ALTER TABLE testtable AUTO_INCREMENT=1;
SET @COUNT = 0;
UPDATE testtable SET idx = @COUNT:=@COUNT+1;
cs

'21년이전 > 국비-sql' 카테고리의 다른 글

프로그래머스 - JOIN 문제모음  (0) 2021.06.22
SQL - JOIN  (0) 2021.06.22
SQL - DDL  (0) 2021.05.12
DB - 개념모델링  (0) 2021.05.10

+ Recent posts