내용 정리
Chapter 03. SQL 기본 문법
03-1. 기본 중에 기본 SELECT ~ FROM ~WHERE
1) USE문 : SELECT문
USE 데이터베이스_이름;
2) SELECT문
SELECT 열_이름
FROM 테이블_이름
WHERE 조건식
GROUP BY 열_이름
HAVING 조건식
ORDER BY 열_이름
LIMIT 숫자
- 원래 테이블의 전체 이름은 데이터베이스_이름.테이블_이름 형식으로 표현하지만 USE문으로 선택된 데이터베이스가 자동으로 선택되므로 데이터베이스_이름 생략 가능.
- 'SELECT 열_이름'에서 열_이름의 순서는 보고 싶은 순서대로 열을 나열
- 별칭(alias) : 열_이름 다음에 지정하고 싶은 별칭을 입력하면 됨. 별칭에 공백이 있을 경우 큰따옴표(")로 묶어줌.
- 조건식 : >, >=, <=, <, BETWEEN AND, AND, OR, IN(), LIKE
3) 서브쿼리(subquery)
: SELECT 안에 또 다른 SELECT가 들어갈 수 있음.
SELECT mem_name, height FROM member
WHERE height > (SELECT height FROM member WHERE mem_name = '에이핑크');
03-2. 좀 더 깊게 알아보는 SELECT문
1) ORDER BY
: 기본값은 ASC이며 오름차순을 나타내며, DESC는 내림차순을 나타냄.
- 정렬 기준을 여러 개 사용하고 싶은 경우 콤마(,)로 구분
SELECT mem_id, mem_name, debut_date, height
FROM member
WHERE height >= 164
ORDER BY height DESC, debut_date ASC;
2) LIMIT
: 출력하는 개수를 제한
- SQL에서 index는 0부터 시작
-- 0번째부터 2번쨰까지 3건이 출력
SELECT *
FROM member
LIMIT 3;
-- LIMIT 시작, 개수
SELECT mem_name, height
FROM member
ORDER BY height DESC
LIMIT 3, 2;
-- LIMIT 개수 OFFSET 시작
SELECT mem_name, height
FROM member
ORDER BY height DESC
LIMIT 2 OFFSET 3;
3) DISTINCT
: 조회된 결과에서 중복된 데이터 1개만을 남김.
: 열 이름 앞에 DISTINCT를 쓰면 됨.
SELECT DISTINCT addr FROM member;
4) GROUP BY, HAVING
: 주로 집계함수(aggregate function)과 함께 사용됨.
- 집계함수(aggregate function)의 종류 : SUM(), AVG(), MIN(), MAX(), COUNT(), COUNT(DISTINCT)
- 별칭에는 큰 따옴표(") 사용이 권장, 작은 따옴표(')는 INSERT문 등에서 문자를 입력할 때 사용됨.
- COUNT(*)는 모든 행의 개수를 세고, COUNT(열_이름)은 열 이름의 값이 NULL인 것을 제외한 행의 개수를 셈.
-- 전체 행의 개수 count(NULL 포함)
SELECT COUNT(*) FROM member;
-- 특정 열에 해당하는 행의 개수 count(NULL 포함X)
SELECT COUNT(phone1) FROM member;
-- 특정 열에 해당하는 중복이 없는 행의 개수 count(NULL 포함X)
SELECT COUNT(DISTINCT phone1) FROM member;
SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
FROM buy
GROUP BY mem_id
HAVING SUM(price*amount) > 1000
ORDER BY SUM(price*amount) DESC;
03-3. 데이터 변경을 위한 SQL문
1) INSERT
INSERT INTO 테이블_이름 (열1, 열2, ...) VALUES (값1, 값2, ...);
-- 여러 줄을 한줄로 작성
INSERT INTO 테이블_이름 VALUES (값1, 값2, ...), (값3, 값4, ...), (값5, 값6,...);
2) AUTO_INCREMENT
: AUTO_INCREMENT로 지정하는 열은 꼭 PRIMARY KEY로 지정해줘야 함.
: 자동 증가하는 부분은 NULL 값으로 채워 놓으면 됨.
: 가장 마지막 숫자 확인 : SELECT LAST_INSERT_ID();
: 자동 증가를 임의의 숫자(100 등)으로 하고 싶을 때 : ALTER TABLE hongong2 AUTO_INCREMENT=100;
: 증가값을 임의의 숫자(3 등)으로 하고 싶을 때 : SET @@auto_increment_increment=3;
CREATE TABLE hongong1(
toy_id INT AUTO_INCREMENT PK,
toy_name CHAR(4),
age INT);
- 시스템 변수
: MySQL에서 자체적으로 가지고 있는 설정값이 저장된 변수이며 앞에 @@가 붙는 것이 특징
: 시스템 변수의 값을 확인하려면 SELECT @@시스템변수;
: 시스템 변수의 종류를 확인하려면 SHOW GLOBAL VARIABLES;
3) 다른 테이블의 데이터를 한 번에 입력하는 INSERT INTO ~ SELECT
INSERT INTO 테이블_이름 (열_이름1, 열_이름2, ...)
SELECT문;
4) DESC
: 테이블의 구조를 살펴볼 때 사용
DESC world.city;
5) UPDATE
UPDATE city_popul
SET city_name = '뉴욕', population = 0
WHERE city_name = 'New York';
6) DELETE
DELETE FROM city_popul
WHERE city_name LIKE 'New%';
-- 상위 5건만 삭제
DELETE FROM city_popul
WHERE city_name LIKE 'New%'
LIMIT 5;
7) DELETE, DROP, TRUNCATE
- DELETE : 삭제에 오래 걸림(테이블 유지)
- TRUNCATE : 조건 없이 전체 행을 삭제할 때(테이블 유지)
- DROP : (테이블 자체 삭제)
기본 미션
p. 138의 확인문제 2번 풀고 인증하기
2. 다음 보기 중에서 각 문항의 빈칸에 들어갈 것을 고르세요.
[ LIKE, DESC, ORDER BY, DISTINCT, ASC, AND, OR, >=, LIMIT ]
① SELECT * FROM member ORDER BY height;
② SELECT * FROM member LIMIT 5,2;
③ SELECT DISTINCT phone1 FROM member;
선택 미션
데이터 입력, 삭제하는 기본 형식 작성하기
1. 데이터 입력 - INSERT
: INSERT문의 기본 문법
INSERT INTO 테이블 (열1, 열2, ...) VALUES (값1, 값2, ...);
-- 여러 줄을 한줄로 작성
INSERT INTO 테이블 VALUES (값1, 값2, ...), (값3, 값4, ...), (값5, 값6, ...);
2. 데이터 수정 - UPDATE
: UPDATE문의 기본 문법
UPDATE 테이블_이름
SET 열1=값1, 열2=값2, ...
WHERE 조건;
: WHERE가 없는 UPDATE문
* UPDATE문은 WHERE절 없이 사용하면 모든 행이 변경됨.
UPDATE city_popul
SET population = population/10000;
3. 데이터 삭제 - DELETE
: DELETE문의 기본 문법
DELETE FROM 테이블 WHERE 조건;
: 상위 5건만 삭제하는 법
DELETE FROM city_popul
WHERE city_name LIKE 'New%'
LIMIT 5;
: 대용량 데이터의 삭제
1) DELETE : 삭제에 오래 걸림(테이블 유지)
2) TRUNCATE : 조건 없이 전체 행을 삭제할 때(테이블 유지)
3) DROP : (테이블 자체 삭제)
DELETE FROM big_table1;
DROP TABLE big_table2;
TRUNCATE TABLE big_table3;
'혼자 공부하는 SQL(혼공단 9기)' 카테고리의 다른 글
(6주차) Chapter 07 ~ 08 (0) | 2023.02.09 |
---|---|
(5주차) Chapter 06 (0) | 2023.02.06 |
(4주차) Chapter 05 (0) | 2023.01.31 |
(3주차) Chapter 04 (0) | 2023.01.13 |
(1주차) Chapter 01 ~ 02 (0) | 2023.01.03 |