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