한빛출판사 우재남 저 <혼자 공부하는 SQL>을 참고하여 작성하였습니다.
1. SELECT
1) 기본 형식 : SELECT 열 이름 FROM +테이블 이름
SELECT * FROM member;
SELECT mem_name FROM member;
1번째 줄 : member 테이블의 모든 열을 출력함.
2번째 줄: member 테이블의 mem_id 열을 출력함.
cf) 만약 선택된 데이터 베이스가 있다면 SELECT * FROM member; 와 같이 사용이 가능하지만 없다면 SELECT * FROM market_db.member;처럼 데이터베이스를 지정해줘야 함
2) 특정 조건만 조회하기 : SELECT ~ FROM ~WHERE
SELECT * FROM member WHERE mem_name='홍길동';
WHRER 뒤에는 행 이름을 조건식으로 지정해줄 수 있음. 위 같은 경우 member 테이블에서 이름이 홍길동인 사람의 모든 열 내용을 출력함.
cf) 조건식에 관계 연산자와 논리 연산자 사용하기
-관계 연산자의 예시 : >,<,>=,<=,= 등
ex) SELECT mem_id, mem_name FROM member WHERE height<=n;
member 테이블에서 키가 n보다 작거나 같다는 조건에 해당하는 행의 mem_id와 mem_name을 출력함.
-논리 연산자의 예시 : AND, OR 등
ex) SELECT mem_id, mem_name FROM member WHERE height<=n and mem_number>6;
member 테이블에서 키가 n보다 작거나 같고, mem_number가 n보다 작다는 조건에 해당하는 행의 mem_id와 mem_name을 출력함.
cf) 관계 연산자의 범위 지정 : BETWEEN ~ AND ~
SELECT mem_name, height FROM member WHERE height>=163 and height<=165;
SELECT mem_name, height FROM member WHERE height BETWEEN 163 AND 165;
BETWEEN ~ AND ~ 를 이용하여 관계 연산자의 범위를 지정할 수 있음. 위 내용의 경우 첫번째 줄과 두번째 줄이 같은 내용을 출력함.
cf) 논리 연산자 간결하게 표현하기 : IN
SELECT mem_name, addr FROM member WHERE addr='서울' or addr='경기';
SELECT mem_name, addr FROM member WHERE addr IN('서울','경기');
IN을 이용하면 논리 연산자가 여러 개 붙는 경우 연산자를 모두 작성하지 않고 간결하게 표현할 수 있음. 위 내용의 경우 첫번째 줄과 두번째 줄이 같은 내용을 출력함.
cf)LIKE
SELECT * FROM member WHERE mem_name LIKE '우%';
SELECT * FROM member WHERE mem_name LIKE '__우';
LIKE는 문자열에 특정 글자를 포함하여 검색하고 싶을 때 사용함. 특정 글자로 시작하는 경우를 검색하고 싶을 때는 %를 사용하고, 특정 글자로 끝나는 경우를 검색하고 싶다면 __을 사용. 첫번째 줄의 경우 mem_name이 우로 시작하는 경우를 출력하며 두번째 줄의 경우 mem_name이 우로 끝나는 경우를 출력.
cf) 데이터 복사하기 : INSERT INTO SELECT FROM
INSERT INTO table1 SELECT column1, column2 FROM db.table2;
테이블2의 열1, 열2가 테이블1의 데이터로 복사됨. 모든 열을 가져오려면 '*'을 사용.
2. CREATE
CREATE TABLE table1 (column1, column2, column3);
column1, 2, 3을 열로 하는 테이블 table1이 만들어짐. 이때 열마다의 자료형을 명시해야 하며 구분자인 PK(Primary Key) 및 NOT NULL 등의 속성을 지정해야함.
cf) AUTO_INCREMENT
CREATE TABLE member (mem_id INT AUTO_INCREMENT PRIMARY KEY, mem_name CHAR(4), age INT);
-테이블을 만들 때 다음과 같이 AUTO_INCREMENT를 설정하면 열 값이 자동으로 1씩 증가함.
-'SELECT LAST_INSERT_ID();'를 이용하여 어디까지 증가했는지 확인.
-'@@auto_increment_increment=n;' 를 이용하여 n씩 증가하도록 조정.
-'ARTER TABLE 테이블 이름 AUTO_INCREMENT = n'을 이용하여 시작값을 n으로 조정.
3. INSERT
INSERT INTO TABLE (column1, column2, column3) VALUES (value1, value2, value3);
열 순서대로 저장한다면 (column1, column2, column3) 부분은 생략 가능.
4. ORDER BY, LIMIT, DISTINCT, GROUP BY, HAVING
1) ORDER BY & LIMIT
ORDER BY 절은 결과가 출력되는 순서를 조절함.
SELECT mem_id, mem_name FROM member ORDER BY mem_id;
SELECT mem_id, mem_name FROM member ORDER BY mem_id DESC; -- 내림차순
SELECT mem_id, mem_name FROM member ORDER BY mem_id ASC; -- 오름차순
예컨대 위와 같은 경우 mem_id, mem_name을 출력하는데 이때 정렬 기준을 mem_id의 가나다순으로 설정함.
ASC, DESC를 붙여주면 순서대로 오름차순, 내림차순으로 정렬하라고 요구할 수 있음.
정렬 기준을 여러 개 사용할 때는 ‘,’로 구분하며 이때 앞에 있는 정렬 기준이 우선적으로 고려됨.
SELECT * FROM member LIMIT 3;
LIMIT 절은 출력되는 개수를조절. 위와 같이 실행하면 member의 모든 열을 포함하는 3개의 행이 출력될 것.
SELECT * FROM member ORDER BY mem_id LIMIT 4,5;
ORDER 절은 LIMIT절과 함께 자주 사용.
위와 같이 입력하면 member 테이블을 mem_id의 가나다순으로 정렬하고 4번째 행을 시작으로 5개 행을 출력.
2) DISTINCT
SELECT DISTINCT addr FROM member;
열 이름 앞에 DISTINCT를 써주면 중복된 데이터를 1개만 남기고 출력함. 따라서 DISTINCT를 사용하면 해당 열에 어떤 입력 값들이 존재하는지 쉽게 확인이 가능.
3) GROUP BY & HAVING
GROUP BY는 뒤에 나오는 열을 기준으로 데이터를 그룹으로 묶어주는 역할을 한다.
SELECT mem_id, amount FROM buy ORDER BY mem_id;
SELECT mem_id, SUM(amount) FROM buy GROUP BY mem_id;
buy 테이블에 member id 별로 구매한 상품의 양(amount)이 저장되어 있다고 할 때,
첫번째처럼 명령어를 입력하면 한 회원이 여러 차례 나누어 구매한 경우가 모두 따로 출력.
두번째처럼 명령어를 입력하면 회원별로 구매한 양을 합쳐 출력.
cf) 집계함수의 종류
SUM() - 합계
AVG() - 평균
MAX() - 최댓값
COUNT() - 행의 개수
COUNT(DISTINCT) - 중복을 제외한 행의 개수
SELECT mem_id, SUM(price*amount) FROM buy GROUP BY mem_id HAVING SUM(price*amount)>=1000;
HAVING은 WHERE문과 유사한 역할을 수행.
집계함수를 사용하면 WHERE을 사용할 수 없기 때문에 WHERE 대신 HAVING을 사용.
위 명령문의 경우 mem_id와 mem_id별 총 구매 금액을 구한 뒤 총 구매 금액이 1000이 넘어가는 경우를 출력.
5. UPDATE
UPDATE SET mem_id='홍길동' WHERE mem_id='김길동';
UPDATE 문은 테이블에 이미 입력되어있는 값을 수정할 때 사용.
mem_id가 '김길동'인 곳을 찾아 값을 '홍길동'으로 바꿈.
이때 WHERE문을 사용하지 않으면 모든 열의 값이 다 바뀌어버리니 주의!
6.DELETE
DELETE member WHERE mem_id='홍길동';
DELETE문은 테이블에서 값을 삭제할 때 사용.
'SQL' 카테고리의 다른 글
5. SQL 고급 문법 - 스토어드 프로시저/스토어드 함수/커서/트리거 (0) | 2022.07.29 |
---|---|
4. SQL 고급 문법 - 인덱스 (0) | 2022.07.23 |
3. SQL 고급 문법 - 제약조건, 뷰 (0) | 2022.07.20 |
2. SQL 고급 문법 - SQL 데이터 형식, JOIN (0) | 2022.07.19 |