유튜브강의 6~8강
-- 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 '__핑크';
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; -- 순서중요
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 쿼리가 안먹힐때
p. 138의 확인 문제 2번 풀고 인증하기
데이터 입력, 삭제하는 기본 형식 작성하기
📍 데이터 입력
INSERT INTO 테이블명 [(컬럼1, 컬럼2, 컬럼3 ...)] VALUES (값1, 값2, 값3 ...);
📍 데이터 삭제
DELETE FROM 테이블명 WHERE 조건 (LIMIT 삭제행 개수 지정);
DELETE : 행 삭제 (느림), WHERE 조건 설정 가능 DROP : 테이블 삭제 (빠름) TRUNCATE : 테이블 구조는 남기고, 안에 내용물만 삭제(빠름), WHERE 조건설정 불가능, 전체 행 삭제만 가능