[2주차] Chapter 03

Jisoo Yu·2024년 1월 14일
1

혼공학습단 SQL

목록 보기
3/5

진도: Chapter 03

유튜브강의 6~8강

강의 내용 정리

  • 1장
-- USE : 해당 DB 사용하겠다는 의미, 한번만 하면 됨
USE market_db;
SELECT * 
-- 사용중인 스키마(DB) 외 다른 스키마에 있는 테이블 조회하고 싶을때
   => 스키마명.테이블명 
FROM market_db.member
-- where : 어떤 '조건'만 보겠다. 조건 주는 명령어
WHERE mem_name = '블랙핑크';
-- SELECT문에서 컬럼 순서 지정가능
-- 별명(alias)줄땐 띄어쓰기 하나(또는 AS) 하고 뒤에 적으면 됨
   * 별명에 띄어쓰기가 있을땐 큰 따옴표 사용 필요
SELECT height 키, debut_date "데뷔 일자", addr 
FROM member;
논리연산자 활용예시(=, <=, >= 등)
SELECT * FROM member WHERE mem_number = 4;

SELECT mem_id, mem_name
	FROM member 
	WHERE height <= 162;

SELECT mem_name, height, mem_number
	FROM member
    WHERE height >= 165 OR mem_number > 6;
-- 아래 두개는 결과가 같음
SELECT mem_name, height
	FROM member
    WHERE height >= 163 AND height <= 165;

SELECT mem_name, height
	FROM member
    -- BETWEEN : 특정 범위 사이에 있는지 여부 확인할 때 (숫자)
    WHERE height BETWEEN 163 AND 165;
-- 아래 두개는 결과가 같음
SELECT mem_name, addr
	FROM member
    WHERE addr = '경기' OR addr = '전남' OR addr = '경남';
  
SELECT mem_name, addr
	FROM member
    -- IN :특정 집합에 속하는지 여부 확인할 때 (문자)
    WHERE addr IN ('경기','전남','경남');
-- LIKE : 문자비교
SELECT *
	FROM member
    -- '%' : 여러글자 ex) '우%' 우로 시작하는 모든 문자
    WHERE mem_name LIKE '우%';
 
SELECT *
	FROM member
    -- '_' : 1글자 ex) '__핑크' 핑크로 끝나고 앞에 두 글자 오는 문자
    WHERE mem_name LIKE '__핑크';
  • 2장
SELECT mem_id, mem_name, debut_date
FROM member
-- ASC : 오름차순 (기본값, 생략가능)
ORDER BY debut_date;

SELECT mem_id, mem_name, debut_date
FROM member
-- DESC : 내림차순 
ORDER BY debut_date DESC;

SELECT mem_id, mem_name, debut_date, height
FROM member
-- ORDER BY height DESC
WHERE height >= 164; -- 순서 틀려서 오류남

SELECT mem_id, mem_name, debut_date, height
FROM member
WHERE height >= 164
ORDER BY height DESC;

SELECT mem_id, mem_name, debut_date, height
FROM member
WHERE height >= 164
-- 여러개 지정 가능. 앞쪽에 쓴 조건부터 우선 적용, 동률일 경우 뒤에 조건으로 정렬됨
ORDER BY height DESC, debut_date ASC;
SELECT *
	FROM member
    -- LIMIT : 원하는 행 개수만큼만 보여줌
    LIMIT 3;

SELECT mem_name, debut_date
FROM member
ORDER BY debut_date
LIMIT 3; -- ORDER BY 먼저 오고 LIMIT 와야함. 순서중요

SELECT mem_name, height
FROM member
ORDER BY height
-- LIMIT M,N : M번째부터 N개 보여줌
LIMIT 3,2; 
-- DISTINCT : 중복제거, 유니크한 값만 보여줌
SELECT DISTINCT addr FROM member;
-- SUM() : 합계 구하는 함수
SELECT mem_id "회원 아이디", SUM(amount) "총 구매 개수"
FROM buy
-- GROUP BY : 묶어서 계산
GROUP BY mem_id;
-- AVG() : 평균 구하는 함수
SELECT AVG(amount) "평균 구매 개수"
FROM buy;

SELECT mem_id, AVG(amount) "평균 구매 개수"
FROM buy
GROUP BY mem_id;
-- COUNT() : 개수 구하는 함수
SELECT COUNT(*) FROM member;

-- COUNT() : 비어있는건(NULL) 집계 안함
SELECT COUNT(phone1) "연락처가 있는 회원"
FROM member;
SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
FROM buy
-- 오류발생, WHERE절엔 그룹함수 못씀
WHERE SUM(price*amount) >=1000
GROUP BY mem_id;

SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
FROM buy
GROUP BY mem_id
-- HAVING : GROUP BY에서 조건주고 싶을때
HAVING SUM(price*amount) >=1000; -- 순서중요

SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
FROM buy
GROUP BY mem_id
HAVING SUM(price*amount) >=1000
ORDER BY SUM(price*amount) DESC; -- 순서중요
  • 3장
CREATE TABLE hongong1 (toy_id INT, toy_name CHAR(4), age INT);
INSERT INTO hongong1 VALUES (1,'우디',25);

-- 열이름 지정해서 일부 값만 넣기 가능
INSERT INTO hongong1(toy_id, toy_name) VALUES (2,'버즈');

-- 열이름 지정 시, 순서 변경 가능 (권장방식)
INSERT INTO hongong1(toy_name, age ,toy_id) VALUES ('제시',20,3);
CREATE TABLE hongong2(
	-- AUTO_INCREMENT : 순번 자동생성, 기본키로 생성해줘야함
    -- PRIMARY KEY : 기본키, 중복X
	toy_id INT AUTO_INCREMENT PRIMARY KEY,
    toy_name CHAR(4),
    age INT);

INSERT INTO hongong2 VALUES (NULL, '보핍', 25);
INSERT INTO hongong2 VALUES (NULL, '슬링키', 22);
INSERT INTO hongong2 VALUES (NULL, '덱스', 21);
-- LAST_INSERT_ID() : 현재 AUTO_INCREMENT로 몇번까지 생성됐는지 알고 싶을 때 씀
SELECT last_insert_id();    
-- 아래 처럼 값을 지정하면 자동증가되는 값 변경 가능
-- 예시는 3다음에 4가 아닌 100번부터 입력하고 싶을 때
ALTER TABLE hongong2 AUTO_INCREMENT = 100;
INSERT INTO hongong2 VALUES (NULL, '재남', 35);
SELECT * FROM hongong2;
CREATE TABLE hongong3(
	toy_id INT AUTO_INCREMENT PRIMARY KEY,
    toy_name CHAR(4),
    age INT);
-- 테이블 생성할때부터 1000부터 시작하고 싶을때
ALTER TABLE hongong3 AUTO_INCREMENT = 1000;
-- 번호 생성 시, 일정 간격을 지정해주고 싶을 때
SET @@auto_increment_increment=3;
INSERT INTO hongong3 VALUES (NULL, '토마스', 25);
INSERT INTO hongong3 VALUES (NULL, '제임스', 22);
INSERT INTO hongong3 VALUES (NULL, '고든', 21);
--결과확인 (toy_id가 1000,1003,1006 이런식으로 생성됨)
SELECT * FROM hongong3;
-- DESC : 테이블 정보 알려줌
DESC world.city;
-- 다른 스키마에 있는 테이블 가져와서 신규 테이블 생성하는 방법
CREATE TABLE city_popul (city_name CHAR(35), population INT);
INSERT INTO city_popul
	SELECT Name, Population FROM world.city;
-- UPDATE : 기존 값 변경 적용
USE market_db;
UPDATE city_popul
	SET city_name = '서울'
    WHERE city_name = 'Seoul';
-- 변경 확인 쿼리
SELECT * FROM city_popul WHERE city_name = '서울';
UPDATE city_popul
-- where 절 없이 적용하면 전부 변경 적용됨
	SET city_name = '뉴욕', population = 0
    WHERE city_name = 'New York';
-- 변경 확인 쿼리
SELECT * FROM city_popul WHERE city_name = '뉴욕';

-- (드물긴하지만) where절 없이 사용하는 경우도 있긴 함 (단위 변경 등)
UPDATE city_popul
	SET population = population / 10000;
-- DELETE : 데이터 삭제 시 사용
DELETE FROM city_popul
-- city_name이 New로 시작하는 행 다 삭제
WHERE city_name LIKE 'New%';

DELETE FROM city_popul
-- city_name이 New로 시작하는 행 상위 5개만 삭제
WHERE city_name LIKE 'New%'
LIMIT 5;
  • 기타 사항
UPDATE 쿼리가 안먹힐때

image

기본 미션

p. 138의 확인 문제 2번 풀고 인증하기

image

선택 미션

데이터 입력, 삭제하는 기본 형식 작성하기

📍 데이터 입력

INSERT INTO 테이블명 [(컬럼1, 컬럼2, 컬럼3 ...)] VALUES (값1, 값2, 값3 ...);

📍 데이터 삭제

DELETE FROM 테이블명 WHERE 조건 (LIMIT 삭제행 개수 지정); 
DELETE : 행 삭제 (느림), WHERE 조건 설정 가능
DROP : 테이블 삭제 (빠름)
TRUNCATE : 테이블 구조는 남기고, 안에 내용물만 삭제(빠름),
          WHERE 조건설정 불가능, 전체 행 삭제만 가능
profile
꽤 행복한 사람😎

0개의 댓글