DB , Table 생성하기
데이터베이스 개체 : 테이블 인덱스, 뷰, 스토어 프로시저
- 개체 생성시 : create <개체종류> <개체이름> ~~
- 개체 삭제시 :drop <개체종류> <개체이름>
✔️ DB 생성, 테이블 생성
DROP DATABASE IF EXISTS market_db; -- 만약 market_db가 존재하면 우선 삭제한다.
CREATE DATABASE market_db; -- market_db라는 데이터베이스 생성
USE market_db; -- db명 더블클릭 한 것과 같음.
✔️ 테이블 생성
CREATE TABLE member -- member 테이블 생성
( mem_id CHAR(8) NOT NULL PRIMARY KEY, -- 사용자 아이디(PK)
mem_name VARCHAR(10) NOT NULL, -- 이름
mem_number INT NOT NULL, -- 인원수
addr CHAR(2) NOT NULL, -- 지역(경기,서울,경남 식으로 2글자만입력)
height SMALLINT, -- 평균 키
debut_date DATE -- 데뷔 일자
);
PRIMARY KEY
: pk를 설정하면 NOT NULL과 UNIQUE 특징을 갖게된다. 때문에 null값 허용x, 중복값 허용x
✔️ 자동으로 증가하는 pk
자동 증가하는 값 설정시는 꼭 pk로 설정해줘야 함
- MySQL : AUTO_INCREMENT
CREATE TABLE toy (
toy_id INT AUTO_INCREMENT PRIMARY KEY,
toy_name CHAR(4),
age INT
)
- PostgreSQL : SERIAL
CREATE TABLE toy (
toy_id SERIAL PRIMARY KEY,
toy_name CHAR(4),
age INT
)
※ MySQL에서 이미 만들어져 있는 테이블에 자동 증가(auto-increment) 설정 추가하는 법
ALTER TABLE boards MODIFY id INT AUTO_INCREMENT; -- 테이블 수정
desc boards; -- 테이블 정보 출력해봄
행 입력, 수정, 삭제
- INSERT : 테이블 행 입력
- UPDATE : 테이블 행 정보 수정
- DELETE " 테이블 행 삭제
✅ INSERT
[기본형태]
INSERT INTO 테이블명(컬럼1, 컬럼2, 컬럼3) VALUES (값1, 값2, 값3);
INSERT INTO 테이블명 VALUES (값1, 값2, 값3); -- 컬럼명 생략 형태
[여러 값을 한번에 입력하기]
INSERT into toy3 VALUES(null,'가비',1),(null,'나비',1),(null,'바비',1);
[auth increment에 값 설정하기]
-- MYSQL : toy_id는 자동증가(AUTO_INCREMENT)
insert into toy(toy_id,toy_name,age) values(null,'양이', 6); -- null값, 자동으로 숫자 증가
insert into toy values(null, '강쥐', 3); -- 컬럼명 생략 가능
insert into toy(toy_name,age) values('양이', 6);
-- PostgreSQL : toy_id은 자동증가(SERIAL)
insert into toy(toy_id,toy_name,age) values(DEFAULT,'강쥐', 3); -- DEFAULT값, 자동으로 숫자 증가
insert into toy( toy_name,age) values( '양이', 2);
insert into toy( toy_name,age) values('대럼쥐', 5);
[자동증가되는 숫자의 다음값을 갑자기 100부터 시작하도록 변경하는 법]
ALTER TABLE toy AUTO_INCREMENT=100;
insert into toy values(null,'루피',1);
-- ALTER TABLE toy : toy테이블로 변경하라,
-- AUTO_INCREMENT=100 : 100부터 숫자 증가
[처음부터 auto_increment값을 1000으로 시작, 3단위로 숫자 증가 하는 법]
create table toy3(
toy_id INT AUTO_INCREMENT PRIMARY KEY, -- id는 자동증가
toy_name CHAR(4),
age INT
);
ALTER TABLE toy3 AUTO_INCREMENT=1000; -- 자동증가 숫자는 1000부터 시작
SET @@auto_increment_increment=3; -- 자동증가 숫자는 3씩 증가
- @@auto_increment_increment : mysql의 시스템 변수 (내장되있는 글로벌 변수와 같은 것임.)

[다른 테이블의 데이터를 한번에 가져오기] INSERT INTO ~ SELECT ~
: 원본 테이블과 복사 하려는 테이블의 "열 개수"가 같아야 됨.
- 전체 열을 가져올 떄
INSERT INTO <TABLE_COPY>
SELECT * FROM <TABLE_ORIGIN>
- 특정 열을 가져올 떄
INSERT INTO <TABLE_COPY>
(컬럼명1, 컬럼명2, 컬럼명3)
SELECT 컬럼명1, 컬럼명2, 컬럼명3
FROM <TABLE_ORIGIN>
(예제) market.db에 있는 buy 테이블에 mem_id, prod_name값을 buy_copy에 복사
CREATE TABLE buy_copy (
mem_id char(8) ,
prod_name char(6)
)
INSERT INTO buy_copy
SELECT mem_id, prod_name from market_db.buy
✅ UPDATE
[기본형태]
UPDATE 테이블명
SET 컬럼명1 = 변경값1, 컬럼명2 = 변경값2
WHERE 컬럼명3 = 조건값;
[where문이 있는 UPDATE문] : 조건 충족시 컬럼 값 수정
UPDATE toy
SET age = 9999, toy_name="어른토이"
where age = 6
-- age가 6인 행의 age와 toy_name값이 변경됨.
[where문이 는 UPDATE문] : 모든 행이 다 변경됨.
UPDATE toy
SET age = 9999, toy_name="어른토이"
-- 모든 행의 age가 9999로, toy_name는 "어른토이"로 모두 변경됨.
✅ DELETE
[기본형태]
DELETE FROM 테이블명 WHERE 컬럼명 = 조건값;
DELETE from toy where toy_name like "어른%"
-- toy_name에 "어른"이 들어간 행만 삭제
[DELETE, TRUNCATE, DROP 차이점]
- DELETE : 테이블은 남아있고 모든 행이 삭제됨. where문 조건 사용 가능
- TRUNCATE
: 테이블은 남아있고 모든 행이 삭제됨. where문 조건 사용 불가(무조건 모든 행 삭제됨)
: delete보다 속도가 더 빠름.
- DROP : 테이블 자체를 삭제함
'DB > SQL' 카테고리의 다른 글
[SQL] 데이터 형식, 형변환 (mysql) (0) | 2023.05.31 |
---|---|
[SQL]프로그래머스 - 자동차 평균 대여 기간 구하기 (0) | 2023.05.31 |
[SQL]프로그래머스 - 즐겨찾기가 가장 많은 식당 정보 출력 (0) | 2023.05.30 |
[SQL] join, on (0) | 2023.05.25 |
[SQL]Group by, Having, 집계함수 (0) | 2023.05.23 |
DB , Table 생성하기
데이터베이스 개체 : 테이블 인덱스, 뷰, 스토어 프로시저
- 개체 생성시 : create <개체종류> <개체이름> ~~
- 개체 삭제시 :drop <개체종류> <개체이름>
✔️ DB 생성, 테이블 생성
DROP DATABASE IF EXISTS market_db; -- 만약 market_db가 존재하면 우선 삭제한다.
CREATE DATABASE market_db; -- market_db라는 데이터베이스 생성
USE market_db; -- db명 더블클릭 한 것과 같음.
✔️ 테이블 생성
CREATE TABLE member -- member 테이블 생성
( mem_id CHAR(8) NOT NULL PRIMARY KEY, -- 사용자 아이디(PK)
mem_name VARCHAR(10) NOT NULL, -- 이름
mem_number INT NOT NULL, -- 인원수
addr CHAR(2) NOT NULL, -- 지역(경기,서울,경남 식으로 2글자만입력)
height SMALLINT, -- 평균 키
debut_date DATE -- 데뷔 일자
);
PRIMARY KEY
: pk를 설정하면 NOT NULL과 UNIQUE 특징을 갖게된다. 때문에 null값 허용x, 중복값 허용x
✔️ 자동으로 증가하는 pk
자동 증가하는 값 설정시는 꼭 pk로 설정해줘야 함
- MySQL : AUTO_INCREMENT
CREATE TABLE toy (
toy_id INT AUTO_INCREMENT PRIMARY KEY,
toy_name CHAR(4),
age INT
)
- PostgreSQL : SERIAL
CREATE TABLE toy (
toy_id SERIAL PRIMARY KEY,
toy_name CHAR(4),
age INT
)
※ MySQL에서 이미 만들어져 있는 테이블에 자동 증가(auto-increment) 설정 추가하는 법
ALTER TABLE boards MODIFY id INT AUTO_INCREMENT; -- 테이블 수정
desc boards; -- 테이블 정보 출력해봄
행 입력, 수정, 삭제
- INSERT : 테이블 행 입력
- UPDATE : 테이블 행 정보 수정
- DELETE " 테이블 행 삭제
✅ INSERT
[기본형태]
INSERT INTO 테이블명(컬럼1, 컬럼2, 컬럼3) VALUES (값1, 값2, 값3);
INSERT INTO 테이블명 VALUES (값1, 값2, 값3); -- 컬럼명 생략 형태
[여러 값을 한번에 입력하기]
INSERT into toy3 VALUES(null,'가비',1),(null,'나비',1),(null,'바비',1);
[auth increment에 값 설정하기]
-- MYSQL : toy_id는 자동증가(AUTO_INCREMENT)
insert into toy(toy_id,toy_name,age) values(null,'양이', 6); -- null값, 자동으로 숫자 증가
insert into toy values(null, '강쥐', 3); -- 컬럼명 생략 가능
insert into toy(toy_name,age) values('양이', 6);
-- PostgreSQL : toy_id은 자동증가(SERIAL)
insert into toy(toy_id,toy_name,age) values(DEFAULT,'강쥐', 3); -- DEFAULT값, 자동으로 숫자 증가
insert into toy( toy_name,age) values( '양이', 2);
insert into toy( toy_name,age) values('대럼쥐', 5);
[자동증가되는 숫자의 다음값을 갑자기 100부터 시작하도록 변경하는 법]
ALTER TABLE toy AUTO_INCREMENT=100;
insert into toy values(null,'루피',1);
-- ALTER TABLE toy : toy테이블로 변경하라,
-- AUTO_INCREMENT=100 : 100부터 숫자 증가
[처음부터 auto_increment값을 1000으로 시작, 3단위로 숫자 증가 하는 법]
create table toy3(
toy_id INT AUTO_INCREMENT PRIMARY KEY, -- id는 자동증가
toy_name CHAR(4),
age INT
);
ALTER TABLE toy3 AUTO_INCREMENT=1000; -- 자동증가 숫자는 1000부터 시작
SET @@auto_increment_increment=3; -- 자동증가 숫자는 3씩 증가
- @@auto_increment_increment : mysql의 시스템 변수 (내장되있는 글로벌 변수와 같은 것임.)

[다른 테이블의 데이터를 한번에 가져오기] INSERT INTO ~ SELECT ~
: 원본 테이블과 복사 하려는 테이블의 "열 개수"가 같아야 됨.
- 전체 열을 가져올 떄
INSERT INTO <TABLE_COPY>
SELECT * FROM <TABLE_ORIGIN>
- 특정 열을 가져올 떄
INSERT INTO <TABLE_COPY>
(컬럼명1, 컬럼명2, 컬럼명3)
SELECT 컬럼명1, 컬럼명2, 컬럼명3
FROM <TABLE_ORIGIN>
(예제) market.db에 있는 buy 테이블에 mem_id, prod_name값을 buy_copy에 복사
CREATE TABLE buy_copy (
mem_id char(8) ,
prod_name char(6)
)
INSERT INTO buy_copy
SELECT mem_id, prod_name from market_db.buy
✅ UPDATE
[기본형태]
UPDATE 테이블명
SET 컬럼명1 = 변경값1, 컬럼명2 = 변경값2
WHERE 컬럼명3 = 조건값;
[where문이 있는 UPDATE문] : 조건 충족시 컬럼 값 수정
UPDATE toy
SET age = 9999, toy_name="어른토이"
where age = 6
-- age가 6인 행의 age와 toy_name값이 변경됨.
[where문이 는 UPDATE문] : 모든 행이 다 변경됨.
UPDATE toy
SET age = 9999, toy_name="어른토이"
-- 모든 행의 age가 9999로, toy_name는 "어른토이"로 모두 변경됨.
✅ DELETE
[기본형태]
DELETE FROM 테이블명 WHERE 컬럼명 = 조건값;
DELETE from toy where toy_name like "어른%"
-- toy_name에 "어른"이 들어간 행만 삭제
[DELETE, TRUNCATE, DROP 차이점]
- DELETE : 테이블은 남아있고 모든 행이 삭제됨. where문 조건 사용 가능
- TRUNCATE
: 테이블은 남아있고 모든 행이 삭제됨. where문 조건 사용 불가(무조건 모든 행 삭제됨)
: delete보다 속도가 더 빠름.
- DROP : 테이블 자체를 삭제함
'DB > SQL' 카테고리의 다른 글
[SQL] 데이터 형식, 형변환 (mysql) (0) | 2023.05.31 |
---|---|
[SQL]프로그래머스 - 자동차 평균 대여 기간 구하기 (0) | 2023.05.31 |
[SQL]프로그래머스 - 즐겨찾기가 가장 많은 식당 정보 출력 (0) | 2023.05.30 |
[SQL] join, on (0) | 2023.05.25 |
[SQL]Group by, Having, 집계함수 (0) | 2023.05.23 |