기본 미션: p.138의 확인 문제 2번
SELECT * FROM member ORDER BY height;
SELECT * FROM member LIMIT 5.2;
SELECT DISTINCT phone1 FROM member;
SQL의 기본 중에 기본: SELECT ~ FROM ~ WHERE
SELECT 열 이름
FROM 테이블_이름
WHERE 조건식
GROUP BY 열_이름
HAVING 조건식
ORDER BY 열_이름
LIMIT 숫자
- SELECT: 구축이 완료된 테이블에서 데이터를 추출. 기존의 데이터가 변경되지 않는다
- SELECT 이하의 절은 생략 가능하지만 사용해야 한다면 순서를 지켜야한다.
WHERE
- WHERE 없이 SELECT ~ FROM으로 테이블을 조회하면 테이블의 모든 행이 출력된다.
- WHERE의 조건절은 관계 연산자(<, >)와 논리 연산자(OR, AND)를 사용할 수 있다
- AND, OR, BETWEEN A AND B, IN(A, B, C), LIKE '_A%'
- %는 그 무엇이든 허용하고, _는 한 글자와 매치한다
서브쿼리: select 안의 select문
-- 이름이 에이핑크인 회원의 키보다 큰 회원을 검색하는 SQL문
SELECT mem_name, height FROM member
WHERE height > (SELECT height FROM member WHERE mem_name = '에이핑크');
- 서브쿼리는 1줄 이상을 return하면 안된다!
SELECT문 심화
ORDER BY
SELECT mem_id, mem_name, debut_date, height
FROM member
WHERE height >= 164
ORDER BY height DESC, debut_date ASC;
- 결과의 값이나 개수에 영향은 없음
- 결과가 출력되는 순서를 조절
- 기본값은 오름차순(ASC), 내림차순도 가능(DESC)
LIMIT
-- 평균 키가 큰 순으로 정렬하되, 3번쨰부터 2건만 조회
SELECT mem_name, height
FROM member
ORDER BY height DESC
LIMIT 3, 2;
- 출력하는 개수 제한
LIMIT 시작, 개수
DISTINCT
SELECT DISTINCT addr FROM member;
- 조회된 결과에서 중복된 데이터를 1개만 남김
- 열 이름 앞에 붙이면 중복된 값은 1개만 출력된다
GROUP BY
SELECT mem_id "회원 아이디", SUM(amount) "총 구매 개수"
FROM buy GROUP BY mem_id;
GROUP BY 열_이름
= 열에서 같은 이름을 가진 행을 그룹으로 묶고, 집계함수를 같이 써서 결과를 낸다.
- COUNT(*)은 모든 행의 개수를 세고 COUNT(열_이름)은 값이 NULL이 아닌 값을 센다
- 집계함수는 WHERE절에서 사용할 수 없다
HAVING
SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
FROM buy
GROUP BY mem id
HAVING SUM(price*amount) > 1000
ORDER BY SUM(price*amount) DESC;
- WHERE과 비슷하지만 집계함수에 대해서 조건을 제한하는 것
- 무조건 GROUP BY 다음에 온다
데이터 변경을 위한 SQL문
INSERT: 데이터 입력
INSERT INTO 테이블 [(열1, 열2, ...)] VALUES (값1, 값2, ...);
- 열1, 열2 ...는 생략 가능하지만 그럴 경우에 값들의 순서 및 개수는 테이블을 정의할 때와 같아야한다.
AUTO_INCREMENT
- 테이블을 정의할 때 AUTO_INCREMENT를 사용했다면 INSERT에서는 해당 열이 없다고 생각하고(NULL) 입력하면 된다. 해당 열은 무조건 PK이다.
SELECT LAST_INSERT_ID();
를 사용하면 어느 숫자까지 증가되었는지 확인할 수 있다.ALTER TABLE tb3 AUTO_INCREMENT = 1000;
-> 시작값 1000으로 지정SET @@auto_increment_increment = 3;
-> 증가값 3 지정- 앞에 @@가 붙는 것은 시스템 변수.
SHOW GLOBAL VARIABLES
를 통해 확인 가능
INSERT INTO ~ SELECT
-- world.city 테이블의 Name, Population을 city 테이블에 입력
INSERT INTO city_popul
SELECT Name, Population FROM world.city;
- 다른 테이블의 데이터를 한 번에 입력
UPDATE: 데이터 수정
UPDATE 테이블_이름
SET 열1=값1, 열2=값2, ...
WHERE 조건;
- 기존에 입력되어 있는 값을 수정
- WHERE절을 생략하면 테이블의 모든 행의 값이 변경됨
DELETE: 데이터 삭제
DELETE FROM 테이블_이름 WHERE 조건;
- 행 단위로 삭제
- WHERE절을 생략하면 테이블의 모든 행의 값이 변경됨
테이블 삭제법
- DELETE: 오래걸림. 빈 테이블 남김. WHERE절 사용 가능
- TRUNCATE: DELETE와 동일한 효과이지만 WHERE 사용 불가. 속도 매우 빠름. 빈 테이블 남김
- DROP: 속도 빠름. 테이블 자체를 삭제.