혼자 공부하는 SQL
✔️ SELECT문
✔️ SELECT + WHERE문
✔️ ORDER BY(정렬) - 2주차(2) 블로그 참조
✔️ GROUP BY(그룹핑) - 2주차(2) 블로그 참조
✔️ 데이터 변경 위한 쿼리 작성 - 2주차(3) 블로그 글 참조
✔️ 데이터 변경 위한 쿼리 작성
# INSERT(데이터 입력)
테이블에 데이터를 삽입하는 명령어
-- INSERT 기본 형식
insert into 테이블명[(열1, 열2, 열3, ...)] values (값1, 값2. 값3, ...)
태이블 명 다음에 나오는 열은 생략이 가능
(열 이름 생략하는 경우, values 다음에 나오는 값들의 순서와 개수는 테이블에 정의된 열 순서 및 개수와 동일해야함)
-- 책과 다르게 테이블 생성 진행
-- market_db에 들어갈만한 product의 정보를 담은 products 테이블 생성
create table products (
pdt_id int,
pdt_name char(4),
pdt_orders int
);
insert into products values (1, '연필', 25);
-- 테이블 확인
select * from products;
pdt_id와 pdt_name만 입력하고 pdt_orders 입력하지 않는 경우 NULL값이 들어가게 됨
-- values 이후 각 수에 맞춰 쓰지 않은 경우는 NULL값 들어가게 됨
-- 테이블 생성 시, NOT NULL 조건을 주는 경우는 무조건 데이터가 입력되어야 함
insert into products (pdt_id, pdt_name) values (2, '장난감');
-- 열의 순서를 바꿔 입력하고 싶은 경우, 열 이름과 값을 원하는 순서 맞춰 작성
insert into products (pdt_name, pdt_orders, pdt_id) values ('책', 20, 3);
-- 데이터 확인
select
*
from products;
# AUTO_INCREMENT(자동으로 증가)
열 정의 시, 1부터 증가하는 값을 입력(대부분 id값에 활용)
해당 열은 없다고 생각하며 NULL 입력
(auto_increment로 지정하는 열은 꼭 PRIMARY KEY로 지정)
-- products2 테이블 생성
create table products2 (
pdt_id int auto_increment, -- primary key 입력해도 적용됨
pdt_name char(4),
pdt_orders int
primary key (pdt_id)
);
-- 데이터 입력
insert into products2 values (null, '물건1', 25)
insert into products2 values (null, '물건2', 22)
insert into products2 values (null, '물건3', 30)
-- 데이터 확인
select * from products2;
현재 어디까지 증가되었는지 확인(last_insert_id())
select last_insert_id();
입력되는 값을 100부터 시작하도록 변경하고 싶다면
-- 100부터 시작으로 변경 진행
-- alter table은 테이블 변경하라는 의미
alter table products2 auto_increment = 100;
-- 데이터 입력 및 확인
insert into products2 values (null, '물건4', 35);
select * from prodcuts2;
입력되는 값을 1000으로 시작하고, 다음 값은 3씩 증가하도록 설정
create table prodcuts3 (
pdt_id int auto_increment primary key,
pdt_name char(4),
pdt_orders int
);
-- 1000부터 시작하면서 3씩 증가하도록 변경
-- @@시스템 변수 활용 -> show grobal variables 실행하여 확인
alter table products3 auto_increment = 1000;
set @@auto_increment_increment = 3;
-- 데이터 입력 및 확인
-- 한 줄로 한번에 작성하는 방법 사용
insert into products3 values (null, '물건00', 20), (null, '물건01', 23), (null, '물건02', 25);
select * from products3;
# INSERT INTO ~ SELECT(다른 테이블의 데이터를 한 번에 입력)
많은 양의 데이터를 한번에 입력하기 위해 다른 태이블에 입력된 데이터 활용하여
해당 테이블의 데이터를 가져와서 입력 진행
-- 다른 테이블의 데이터 가져와 입력 구문 기본 형식
insert into 테이블명 (열이름1, 열이름2, 열이름3, ...)
select 문;
-- 다른 테이블의 데이터 수 확인
select count(*) from 타데이터베이스명.타테이블명;
DESC
Describe의 약자로 테이블의 구조 출력 기능 수행
-- 테임블 구조 확인
DESC 타데이터베이스명.타테이블명;
-- 5개 정도의 데이터 확인
select
*
from 타데이터베이스명.타테이블명
limit 5;
타테이블에서 가져온 데이터를 바탕으로 새로운 테이블 생성
DESC로 확인한 열 이름과 데이터 형식 활용(열 이름은 변경해도 상관X)
-- 타테이블 조회한 것을 바탕으로 새로운 테이블 생성
create table table1 (열이름1 데이터형식1, 열이름2 데이터형식2, ...)
-- 타테이블의 데이터를 불러와서 생성된 table1에 입력
insert into table1
select 열이름1, 열이름2 from 타데이터베이스명.타테이블명;
(실제 데이터베이스의 테이블로 진행하면 될 것 같습니다)
# UPDATE(데이터 수정)
데이터가 변경되는 경우 행 데이터를 수정해야 하는 경우 사용
기존에 입력되어 있는 값을 수정하는 명령
▶︎ MySQL Workbench 설정 변경 진행
MySQL 워크벤치는 기본적으로 UPDATE와 DELETE를 허용하지 않기 때문에 UPDATE를 실행하기 전에 설정 변경이 필수!
[MYSQLWorkbench] > [Settings...] > [SQL Editor] > [Others] > Safe Updates 체크 헤제 후 [OK] 버튼 누르기
워크벤치 종료 후 다시 실행하여 접속 수행
데이터 수정 진행
-- UPDATE 기본 형식
update 테이블명
set 열1 = 값1, 열2 = 값2, ...
where 조건;
-- products2를 이용하여 데이터 수정 진행
-- products2 데이터 확인
select * from products2;
pdt_name이 물건1이라는 데이터를 물건11로 수정 진행
-- 물건1이라는 pdt_mame을 물건11로 변경
update products2
set pdt_name = '물건11'
where pdt_name = '물건1';
-- 데이터 확인
select
*
from products2;
물건2라는 데이터와 22라는 pdt_orders 데이터를
물건22 / 33으로 데이터 수정 진행
-- 물건2 / 22
-- 물건22 / 33
update prodcuts2
set pdt_name = '물건22', pdt_orders = 33
where pdt_name = '물건2';
-- 변경된 데이터 확인
select * from products2;
+
where절이 없는 update문
where절을 생략하게 된다면 모든 행의 값이 변경되게 되는데
전체 행의 값을 변경하는 경우는 많지 않으므로 주의하기
# DELETE(데이터 삭제)
테이블의 행 데이터를 삭제해야 하는 경우 사용(update와 동일하게 행 단위로 삭제)
예) 탈퇴한 회원의 정보를 삭제해야 하는 경우 등
-- DELETE 구문의 기본 형식
delete from 테이블명 where 조건;
products3 테이블에서 pdt_id에서 03이 포함된 경우 제거
-- products3 데이터 확인
select * from products3;
-- pdt_id에서 03이 포함된 경우 제거
delete from products3
where pdt_id like '%03%';
-- 삭제한 데이터 반영되었는지 확인
select * from products3;
+
만약 삭제되어야 하는 데이터의 수가 많은 경우 limit를 활용하여 원하는 데이터만큼 제거 가능
대용량 테이블의 경우
- DELETE문은 삭제에 시간이 오래 걸림(빈 테이블을 남김)
- DROP문은 테이블 자체를 삭제 진행 -> 속도가 가장 빠름(테이블이 남지 X)
- TURNCATE문도 DELETE와 동일한 효과를 내지만 삭제하는 속도가 매우 빠름(빈 테이블을 남김)
이상으로 2주차 내용 정리를 마치겠습니다
혹시 위와 같은 내용을 더 자세히 공부해보고 싶다면
https://www.youtube.com/watch?v=_JURyg_KzHE&list=PLVsNizTWUw7GCfy5RH27cQL5MeKYnl8Pm&index=7
6~8강 까지의 내용을 다루고 있으니 필요하신 분은 유튜브 영상을 참고하여 공부하시기 바랍니다😊

'SQL > 혼자 공부하는 SQL' 카테고리의 다른 글
[혼공S] 4주차_제약조건을 활용한 테이블 및 가상 테이블(VIEW) 생성 및 활용 (0) | 2025.02.03 |
---|---|
[혼공S] 3주차_MySQL 데이터 형식과 JOIN(조인), SQL 프로그래밍 활용 (0) | 2025.01.23 |
[혼공S] 2주차_SELECT문과 WHERE절 활용 (0) | 2025.01.18 |
[혼공S] 2주차 _SELECT문의 ORDER BY와 GROUP BY 활용 (0) | 2025.01.18 |
[혼공S] 1주차_DB부터 MySQL 활용까지 (0) | 2025.01.09 |