본문 바로가기
MySQL

table CRUD

by 개발자공부 2024. 6. 11.

INSERT

-- 테이블을 삭제하는 명령 
-- drop table student; 

-- 테이블 생성시에 디폴트 값을 제약 설정하는 방법 

create table student(
	student_id int primary key, 
    name varchar(50) not null, 
    grade int not null, 
    major varchar(50) default '미정' not null
); 
desc student;

-- 기본 문구 모양 
-- INSERT INTO 테이블명(컬럼명1, 컬럼명2, ...) VALUES(값1, 값2, ...); 
-- INSERT INTO 테이블명 VALUES (값1, 값2, ...);  - 생략 버전 

insert into student(student_id, name, grade, major)
values(1, '홍길동', 3, '컴퓨터공학과');

-- 디폴트 제약을 사용했을 때 값을 넣은 방법 1
insert into student(student_id, name, grade)
values(2, '길철수', 1);

-- 컬럼명  생략 버전 
insert into student values(3, '이영희', 4, '경영학과');

select * from student;

-- 디폴트 제약을 사용했을 때 값을 넣은 방법 2
insert into student(student_id, name, grade, major)
values(4, '야스오', 2, default);

-- delete from 구문을 사용할 때는 (실무) 반드시 필터를 걸자 
delete from student where student_id = 4;
-- delete from student;
-- date 타입 형식을 사용할 때 연습 

drop table `order`;

create table `order`(
	id int primary key,
    cusotmer_order varchar(50),
    product_name varchar(20) not null, 
    quantity int not null, 
    order_date date not null    
); 

insert into `order` values(1, '빠른배송', '신라면', 2, '2024-05-30');
insert into `order` values(2, '느린배송', '신라면', 3, '20240530');

-- 오류가 되는 상황 보기 
insert into `order` values(3, '아주느린배송', '신라면', 4, '2024530');
-- 1년은 12개월이기 때문에 13이 들어 갈 수 없다. 
insert into `order` values(4, '너무느린배송', '신라면', 4, '20241330');
select * from `order`;

 

AUTO_INCREMENT

오토 인크리먼트(auto-increment)는 MySQL과 같은 데이터베이스 시스템에서 자동으로 순차적인 번호를 생성해주는 기능이다. 일반적으로 테이블에서 기본키(PK)를 지정할 때 사용한다. 즉 새로운 레코드를 삽입할 때마다 기본키 값이 자동으로 증가하며, 중복된 값이 입력되지 않도록 보장한다.


SELECT

 

조건절 WHERE

MySQL에서 WHERE 절은 SELECT, UPDATE, DELETE, INSERT 문에서 조건을 지정하여 해당하는 데이터를 선택하거나 수정하거나 삭제할 때 사용하는 절이다.

WHERE 절은 기본적으로 조건식을 포함하며, 조건식은 연산자와 피연산자로 이루어져 있다. 연산자는 비교 연산자(=, <>, <, <=, >, >=)나 논리 연산자(AND, OR, NOT) 등이 있으며, 피연산자는 컬럼명, 상수값, 서브쿼리 등이 올 수 있다.

 

조건절에서 사용할 수 있는 대표 연산자

  • = (equal)
  • (greater than)
  • < (less than)
  • = (greater than or equal to)
  • <= (less than or equal to)
  • <> or != (not equal to)
  • BETWEEN (between a range of values)
  • LIKE (search for a pattern) → 서울%
  • IN (search for multiple values) —> 여러 조건을 한번에 선택할 때 사용 가능 → age in (10, 13, 15)
select * from student; 

INSERT INTO student (student_id, name, grade, major)
VALUES
  (2, '박영희', 2, '경영학과'),
  (3, '이민수', 4, '전자공학과'),
  (4, '홍길동', 1, '디자인학과'),
  (5, '임성민', 3, '컴퓨터공학과'),
  (6, '한지원', 2, '경영학과'),
  (7, '박준형', 4, '전자공학과'),
  (8, '김민지', 1, '디자인학과'),
  (9, '이현수', 3, '컴퓨터공학과'),
  (10, '정미경', 2, '경영학과'),
  (11, '김성진', 4, '전자공학과'),
  (12, '임승환', 1, '디자인학과');
  
  -- 1. grade가 3인 학생들 조회 하기 (특정 데이터를 지정하지 않으면 전부 출력 - 컬럼)
select * from student where grade = 3;

-- 2. 이름이 홍길동인 학생 조회 하기 
select * from student where name = '홍길동';

-- 3. 학번이 1부터 10까지인 학생들 조회하기 (between )
select * from student where student_id between 1 AND 10; 

-- 4. 학과가 컴퓨터 공학과 그리고, 학년이 2학년인 학생들만 조회 해줘 
select * from student where major = '디자인학과' and grade = 1; 

-- 5. 학과가 컴퓨터공학과 이거나(또는) 학년이 2학년인 학생들을 조회 해주세요
select * from student where major = '컴퓨터공학과' or grade = 2; 

-- 6. 학생 이름이 박영희 아닌 학생들을 조회해주세요
select * 
from student
where name != '박영희';

select * 
from student
where name <> '박영희';

-- 7. 학생들의 학년이 3학년 이상인 사람들을 조회 
select * from student where grade >= 3;

-- 8. 학생들의 학년이 2학년 미만인 사람들을 조회 
select * from student where grade < 2;

-- 9. 학년이 1학년 이거나 3학년인, 4학년 학생들 조회하기 
-- IN 으로 사용 
select * from student where grade in(1, 3, 4);
select * from student where grade != 2;

 

문제 제출

1. 강남 3구 사는 사람들을 조회(서초구,송파구,강남구)

2. email을 입력하지 않은 사람의 데이터를 출력하세요

3. id가 5이상이며 주소가 서울시에 거주하는 사람 이름을 검색해라 단, 서울시는 다음과 같은 주소가 있다 강남구, 서초구, 송파구, 강서구 종로구

4. email이 NULL인 사람을 조회하는 쿼리 (IS NULL 을 사용해보세요)

5. 이메일이 NULL 이 아니고 주문 번호가 2번이 넘으며 종로구에 사시는 분.

6. 주소가 '서울'이면서 id가 5이하인 고객 조회하는 쿼리

7. 서울시에 사는 고객들을 조회하는 쿼리 (LIKE 사용해보기)

8. 아이디가 3에서 8까지의 사람 중 '경기도 의정부'에 거주하고 있는 사람 중 이메일을 입력한 사람을 출력하시오

-- drop table customer;
-- drop table subject;

CREATE TABLE subject (
  subject_id INT AUTO_INCREMENT PRIMARY KEY,
  subject_name VARCHAR(50) NOT NULL,
  credit INT NOT NULL,
  department VARCHAR(50) NOT NULL,
  professor VARCHAR(50) NOT NULL
);


CREATE TABLE customer (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(50),
  address VARCHAR(100) NOT NULL
);

-- subject 테이블 샘플 데이터 

INSERT INTO subject (subject_id, subject_name, credit, department, professor)
VALUES
(1, '영어회화', 3, '외국어학과', '김영희'),
(2, '프로그래밍 기초', 3, '컴퓨터공학과', '박철수'),
(3, '데이터베이스 개론', 3, '컴퓨터공학과', '이승호'),
(4, '컴퓨터 시스템 개론', 3, '컴퓨터공학과', '홍길동'),
(5, '선형대수학', 3, '수학과', '김영수'),
(6, '미적분학', 3, '수학과', '박순영'),
(7, '국어문학사', 3, '국어국문학과', '최지혜'),
(8, '국어문법론', 3, '국어국문학과', '이상호'),
(9, '일본어회화', 3, '외국어학과', '김현진'),
(10, '중국어학', 3, '외국어학과', '최영식'),
(11, '미국사', 3, '사학과', '박영진');


-- customer 샘플 데이터 
INSERT INTO customer (id, name, email, address) VALUES
(1, '김철수', 'kim@example.com', '서울시 강남구'),
(2, '박영희', 'park@example.com', '서울시 서초구'),
(3, '이민수', NULL, '경기도 성남시 분당구'),
(4, '최영진', 'choi@example.com', '서울시 송파구'),
(5, '한미영', 'han@example.com', '경기도 수원시 장안구'),
(6, '강종현', 'kang@example.com', '서울시 강서구'),
(7, '신영수', 'shin@example.com', '경기도 의정부시'),
(8, '유승환', 'yoo@example.com', '경기도 부천시'),
(9, '서민지', 'seo@example.com', '서울시 종로구'),
(10, '임진우', 'lim@example.com', '경기도 안양시 동안구');


select * from customer; 
select * from subject; 


-- 1. 강남 3구에 사는 사람들을 조회(서초구, 송파구, 강남구)
select * 
from  customer
where address in('서울시 강남구', '서울시 서초구', '서울시 송파구');


-- 2. email을 입력하지 않은 사람의 데이터를 출력하시오
-- null 찾을 때 사용 방법  --> 공백 데이터 이고 빈 문자열도 데이터 이다. 
select * 
from customer 
where email is null;


-- 3. ID가 5이상이며 주소가 서울시에 거주하는 사람 이름을 검색해라
select *  
from customer
where id >= 5 
      AND address in('서울시 강남구', '서울시 서초구', '서울시 송파구', '서울시 강서구'); 

select *  
from customer
where id >= 5 
      AND address like '서울시%'; 

-- 4. 이메일이 NULL이 아니고 주문번호가 2번이 넘으며 종로구에 사는 분을 검색해보자
select * 
from customer
where email is not null 
      AND id > 2 AND address = '서울시 종로구';


-- 5. 주소가 '서울'이면서 id가 5 이하인 고객 조회하는 쿼리
select * 
from customer
where address like '서울%' and id <= 5;


-- 6. 아이디가 3에서 8까지의 사람 중 '경기도 의정부'에 거주하고 있는 사람 중 이메일을 입력한 사람을 출력하시오.
select * 
from customer
where (id between 3 and 8) 
	 and address = '경기도 의정부시' and email is not null;	
     
     
-- 7. email이 NULL인 사람을 조회하는 쿼리 (IS NULL 을 사용해보세요)
select * 
from customer
where email is null;

-- 8. 서울시에 사는 고객들을 조회하는 쿼리 (LIKE 사용해보기) 
select * 
from customer
where address like '서울시%';

UPDATE

UPDATE  [테이블 이름]
SET [칼럼 이름1] = [새로운 값1], [칼럼 이름2] = [새로운 값2], ...
WHERE [조건];
drop table `order`;

CREATE TABLE `order` (
  id INT PRIMARY KEY,
  order_name VARCHAR(20) NOT NULL,
  product_name VARCHAR(20) NOT NULL,
  quantity INT NOT NULL,
  order_date DATE NOT NULL
);


INSERT INTO `order` (id, order_name, product_name, quantity, order_date) 
VALUES
(1, '홍길동', '피자', 2, '2022-02-26'),
(2, '김영희', '치킨', 3, '2022-02-26'),
(3, '이철수', '햄버거', 1, '2022-02-27'),
(4, '박지민', '스테이크', 2, '2022-02-27'),
(5, '최영희', '짬뽕', 1, '2022-02-27'),
(6, '박서준', '초밥', 3, '2022-02-28'),
(7, '김민지', '파스타', 2, '2022-02-28'),
(8, '정재은', '토스트', 1, '2022-02-28'),
(9, '신은주', '감바스', 2, '2022-03-01'),
(10, '유지훈', '돈까스', 1, '2022-03-01');

select * from `order`;

-- UPDATE 구문을 사용할 때는 천천히 WHERE 확인하기 
-- 1. id가 1인 주문의 상품 수량을 5개로 수정 

UPDATE `order` 
SET quantity = 5
WHERE  id = 1; 


-- 2. id가 3인 사람에 메뉴를 감바스로 수정해주세요 
UPDATE `order`
SET  product_name = '감바스'
WHERE id = 3; 

-- 3. id가 5인 주문의 주문 일자를 '2024-05-31'로 수정
UPDATE `order` 
SET order_date = '2024-05-31'
WHERE id = 5;


-- 주문 수량이 2개 이상이고, 상품명이 '피자'인 주문의 수령인 이름을 '김철수'로 수정
UPDATE `order`
SET order_name = '김철수'
WHERE quantity >= 2 
	AND product_name = '피자';


-- 주문 날짜가 '2022-02-28'이고, 상품명이 '초밥'인 주문의 주문 수량을 5개로 수정 
UPDATE `order` 
SET quantity = 5
WHERE order_date = '2022-02-28' 
	  and product_name = '초밥';


-- SQL 
	-- DDL(Data Definition Language) : 테이블의 구조를 변경할 때 사용됩니다.
	-- DML(정의)  
	-- DCL(정의) 

-- 테이블의 구조를 변경
alter table `order` add column address varchar(100); 

-- '경기도 성남시'로 수정 ?? <-- 컬럼이 존재 하지 않음 !! 
-- 주문 수량이 1개 이하이고, 상품명이 '감바스'인 주문의 수령인 주소를 '부산시 진구'로 수정
update `order` 
set address = '부산시 진구'
where quantity = 1 and product_name = '감바스';


select * from `order`;

DELETE

-- member 테이블에서 id가 3인 행 삭제
DELETE FROM member WHERE id = 3;

-- member 테이블에서 gender가 'F'이고 age가 20보다 큰 행 삭제
DELETE FROM member WHERE gender = 'F' AND age > 20;
CREATE TABLE product (
  id INT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  price INT NOT NULL,
  description VARCHAR(200)
);

INSERT INTO product (id, name, price, description) 
VALUES
(1, '아이폰 13', 1300000, 'Apple의 최신 모델 스마트폰'),
(2, '갤럭시 S21', 1200000, '삼성의 최신 모델 스마트폰'),
(3, '맥북 에어', 1500000, 'Apple의 대표적인 노트북'),
(4, 'LG 그램', 1300000, 'LG전자의 대표적인 노트북'),
(5, '아이패드', 800000, 'Apple의 태블릿'),
(6, '갤럭시 탭', 700000, '삼성의 태블릿'),
(7, '애플 워치', 500000, 'Apple의 스마트 워치'),
(8, '갤럭시 워치', 400000, '삼성의 스마트 워치'),
(9, '에어팟 프로', 300000, 'Apple의 무선 이어폰'),
(10, '갤럭시 버즈', 200000, '삼성의 무선 이어폰');

-- 가격이 1,000,000원 이상인 상품 삭제
delete
from product
where price >= 1000000;

select * from product;

-- 1	
-- 상품 설명에 'Apple'이 포함된 상품 삭제
delete
from product 
where description like '%Apple%';

-- 2 
-- 가격이 500,000원 이하이고, 상품 설명에 '스마트'가 포함된 상품 삭제
DELETE 
FROM product 
WHERE name LIKE '갤럭시%' 
	AND price > 500000;

-- 3
-- 상품 아이디가 2인 상품만 삭제
DELETE 
FROM 
product
WHERE id = 2;

'MySQL' 카테고리의 다른 글

Function  (0) 2024.06.11
JOIN  (0) 2024.06.11
INDEX  (0) 2024.06.11
KEY  (0) 2024.06.11
데이터베이스  (0) 2024.06.05