레쭈고 혼공스

혼공스 2주 차 (* ̄3 ̄)╭

정땅미 2024. 7. 14. 22:39

기말고사가 끝났구, 여유롭게 혼공스를 공부할 수 있는 시간이 왔습니다 ~ ;D

사실 기말고사를 망해서... 그것도 전공들을.......

너무너무 슬프지만, 이를 극복하고 방학에 부족한 부분을 공부한 후~ 2학기 때에는 더 성장하려고 합니닷! ( ̄︶ ̄)↗ 

그럼 SQL 공부 레쭈고 -


SELECT ~ FROM ~ WHERE

SELECT 문은 구축이 완료된 테이블에서 데이터를 추출하는 기능이기 때문에,

아무리 많이 사용해도 기존의 데이터가 변경되지는 않는다!

 

SELECT의 가장 기본 형식은 SELECT ~ FROM ~ WHERE이다.

SELECT 바로 다음에는 열 이름이, FROM 다음에는 테이블 이름이 나온다. 

WHERE 다음에는 조건식이 나오는데 조건식을 다양하게 표현함으로써 원하는 데이터를 뽑아낼 수 있다! ~_~

 

데이터 베이스 만들기

DROP DATABASE는 market_db를 삭제하는 문장이다.

처음 실행했을 때는 필요가 없지만, 다시 실행할 일이 생길 것이기 때문에 기존의 것을 삭제한 것이다.

CREATE DATABASE market_db는 데이터 베이스를 새로 만든다.

전에 실습했던 내용과 동일한 역할을 하지만, 이름만 다른 것 뿐이다.

USE 문은 market_db 데이터베이스를 선택하는 문장이다.

전에 데이터베이스를 더블 클릭해서 선택한 것과 동일한 효과를 갖는다.

AUTO_INCREMENT는 자동으로 숫자를 입력해 준다는 의미이다.

INSERT 문은 데이터를 입력한다는 의미이다.

SELECT로 데이터를 조회한다.

 

기본 조회하기: SELECT ~ FROM

USE 문

현재 사용하는 데이터 베이스를 지정 또는 변경하는 형식은 이것이다.

USE 데이터베이스_이름;
USE market_db;

 

이렇게 지정해 둔 후 다시 USE 문을 사용하거나 다른 DB를 사용하겠다고 명시하지 않으면

앞으로 모든 SQL문은 market_db에서 수행된다. \^o^/

 

USE market_db;
SELECT * FROM member;

 

SELECT : 테이블에서 데이터를 가져올 때 사용하는 예약어이다.

* : 일반적으로 '모든 것'을 의미한다. 

FROM : 이다음에는 테이블 이름이 나오며 테이블에서 내용을 가져온다는 의미이다.

member : 조회할 테이블의 이름이다.

 

원칙적으로는 데이터베이스_이름.테이블_이름 형식으로 표현한다.

SELECT * FROM market_db.member;

 

원칙적으로는 이렇게 작성하지만 USE 문으로 지정해 놓은 데이터베이스가 자동 선택되기 때문에

위와 같은 방법으로 작성해도 동일한 것이 된다.

 

열을 가져오고 싶다면

SELECT mem_name FROM member;

 

이렇게 작성한다. 여러 개의 열을 가져오고 싶다면 콤마(,)로 구분하고 순서는 상관이 없다.

만약 열 이름에 공백이 있다면 큰따옴표(")로 묶어준다.

 

특정한 조건만 조회하기: SELECT  ~ FROM ~ WHERE

WHERE가 없이 SELECT ~ FROM만으로 테이블을 조회하면 모든 행이 출력된다.

출력된 수백만 건 이상의 결과에서 필요한 데이터를 찾아내는 것은 상당히 어려우며, 컴퓨터의 부담이 커진다.

 

기본적인 WHERE 절

WHERE 절은 조회하는 결과에 특정한 조건을 추가해서 원하는 데이터만 보고 싶을 때 사용한다.

SELECT 열_이름 FROM 테이블_이름 WHERE 조건식;

SELECT 열_이름
	FROM 테이블_이름
	WHERE 조건식;

 

이렇게 두 가지의 형식으로 작성이 가능하다.

 

관계 연산자, 논리 연산자의 사용

숫자로 표현된 데이터는 범위를 지정할 수 있다.

관계 연산자는 >, <, >=, <=. = 등이 있다.

논리 연산자는 AND, OR을 사용할 수 있다.

 

BETWEEN ~ AND

만약 평균 키가 163 ~ 165인 회원을 조회한다고 하면

SELECT mem_name, height
	FROM member
	WHERE height >= 163 AND height <= 165;

 

이렇게 작성할 수도 있지만, 범위에 있는 값을 구하는 경우이니 BETWEEN ~ AND를 사용하면 된다. ( *︾▽︾)

SELECT mem_name, height
	FROM member
    WHERE height BETWEEN 163 AND 165;

 

이렇게 말이다~!

 

IN()

주소와 같은 데이터는 문자로 표현되기 때문에 어느 범위에 들어있다고 표현할 수가 없다.

그렇기 때문에 하나하나를 OR로 써 줘야 한다.

하지만 IN()을 사용하면 코드를 훨씬 간결하게 작성할 수 있다!

SELECT mem_name, addr
	FROM member
	WHERE addr IN('경기', '전남', '경남');

 

LIKE

문자열의 일부 글자를 검색하려면 LIKE를 사용한다.

SELECT *
	FROM member
	WHERE mem_name LIKE '우%';

 

이 조건은 제일 앞 글자가 '우'이고 그 뒤는 무엇이든(%) 허용한다는 의미이다.

한 글자와 매치하기 위해서는 언더바(_)를 사용한다.

SELECT *
	FROM member
	WHERE mem_name LIKE '__핑크';

좀 더 깊게 알아보는 SELECT 문

SELECT 문에서는 결과의 정렬을 위한 ORDER BY, 결과의 개수를 제한하는 LIMIT,

중복된 데이터를 제거하는 DISTINCT 등을 사용할 수 있다.

그리고 GROUP BY 절은 지정한 열의 데이터들을 같은 데이터끼리는 묶어서 결과를 추출한다.

주로 합계, 평균, 개수 등을 처리할 때 사용하므로 집계 함수와 함께 사용된다.

HAVING 절을 이용하여 조건식을 추가할 수 있다.

HAVING 절이 WHERE 절과 비슷해 보이지만, GROUP BY 절과 함께 사용되는 것이 차이점이다.

 

ORDER BY 절

ORDER BY 절은 결과의 값이나 개수에 대해서는 영향을 미치지 않지만, 결과가 출력되는 순서를 조절한다.

SELECT mem_id, mem_name, debut_table
	FROM member
	ORDER BY debut_table;

 

이렇게 작성하면 데뷔 일자(debut_table)가 빠른 순서대로 출력된다.

만약 데뷔 일자가 늦은 순서대로 정렬하고 싶다면 제일 뒤에 DESC라고 작성하면 된다.

기본값은 ASC인데 Ascending의 약자로 오름차순을 의미하고, DESC는 Descending의 약자로 내림차순을 의미한다.

 

ORDER BY 절과 WHERE 절은 함께 사용할 수 있지만, 순서는 WHERE 절이 먼저이다.

이를 지키지 않을 시 오류가 발생한다.

또한 정렬 기준은 한 개의 열이 아니라 여러 개 열로 지정할 수 있다.

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

 

출력의 개수를 제한: LIMIT

LIMIT은 출력하는 개수를 제한한다.

SELECT *
	FROM member
	LIMIT 3;

 

이렇게 작성하면 member 테이블 중 앞에서부터 3건만 조회할 수 있다.

하지만~ 이렇게 사용하는 경우는 드물고 보통은 정렬을 한 후 앞에서 몇 건을 추출하는 것이 대부분이다.

 

LIMIT 형식은 LIMIT 시작, 개수이다.

때문에 필요하다면 중간부터 출력도 가능하다.

SELECT mem_name, height
	FROM member
	ORDER BY height DESC
	LIMIT 3, 2;

 

위 코드는 3번째부터 2건만 조회할 수 있는 코드이다.

 

중복된 결과를 제거: DISTINCT

DISTINCT는 조회된 결과에서 중복된 데이터를 1개만 남긴다.

열 이름 앞에 DISTINCT를 써주기만 하면 중복된 데이터를 한 개만 남기고 제거한다.

SELECT DISTINCT addr FROM member;

 

GROUP BY 절

GROUP BY 절은 말 그대로 그룹을 묶어주는 역할을 한다.

합계나 암산을 쉽게 하기 위해서 집계 함수를 사용한다.

집계 함수는 주로 GROUP BY절과 함께 쓰이며 데이터를 그룹화해 주는 기능을 한다.

함수명 설명
SUM() 합계를 구한다.
AVG() 평균을 구한다.
MIN() 최솟값을 구한다.
MAX() 최댓값을 구한다.
COUNT() 행의 개수를 센다.
COUNT(DISTINCT) 행의 개수를 센다.(중복은 1개만 인정)
SELECT mem_id, SUM(amount) FROM buy GROUP BY mem_id;

 

이렇게 작성하게 되면 각 회원(mem_id) 별로 구매한 개수(amount)를 합쳐서 출력할 수 있다.

SELECT mem_id "회원 아이디", SUM(amount) "총 구매 개수"
	FROM buy GROUP BY mem_id;

 

이렇게 별칭을 사용하면 결과를 더 보기 좋게 만들 수 있다. (^人^)

SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
	FROM buy GROUP BY mem_id;

 

이렇게 코드를 작성하면 회원이 구매한 금액의 총합을 출력할 수도 있다~

평균도 똑같은 방식으로 구할 수 있다.

COUNT(*)은 모든 행의 개수를 세고, COUNT(열_이름)은 열 이름의 값이 NULL인 것을 제외한 행의 개수를 센다.

 

HAVING 절

SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
	FROM buy GROUP BY mem_id;

 

만약 이 코드에서 총구매액이 1000 이상인 회원에게만 사은품을 증정하기 위해서는 HAVING 절을 사용해야 한다.

WHERE 절을 생각했을 수도 있겠지만, WHERE 절을 사용하면 오류가 발생하게 된다.

HAVING은 WHERE과 비슷한 개념으로 조건을 제한하는 것이지만,

집계 함수에 대해서 조건을 제한하는 것이라고 생각하면 된다.

그리고 HAVING 절은 꼭 GROUP BY 절 다음에 나와야 한다.

SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
	FROM buy
	GROUP BY mem_id
	HAVING SUM(price*amount) > 1000;

 

이렇게 간단하게 사용하는 것이다. ( ̄︶ ̄) bb

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


데이터 변경을 위한 SQL 문

데이터베이스와 테이블을 만든 후에는 데이터를 변경하는, 즉 입력/수정/삭제하는 기능이 필요하다.

새로 가입한 회원을 입력하려면 INSERT 문을,

회원의 주소나 연락처가 변경되어 정보를 수정할 때는 UPDATE 문을 사용한다.

또한, 회원이 탈퇴해서 회원을 삭제할 때는 DELETE 문을 사용한다.

 

데이터 입력: INSERT

테이블에 행을 입력하는 기본적은 SQL 문은 INSERT이다.

 

INSERT 문의 기본 문법

 

INSERT INTO 테이블 [(열 1, 열 2,...)] VALUES (값 1, 값 2,...)

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

 

INSERT는 테이블에 데이터를 삽입하는 명령이다.

INSERT 문의 주의할 점은 우선 테이블 다음에 나오는 열은 생략이 가능하다는 것이다.

열 이름을 생략할 경우에 VALUES 다음에 나오는 값들의 순서 및 개수는 테이블을 정의할 때의

열 순서 및 개수와 동일해야 한다.

열의 순서를 바꿔서 입력하고 싶을 때는 열 이름과 값을 원하는 순서에 맞춰 써주면 된다.

 

자동으로 증가하는 AUTO_INCREMENT

AUTO_INCREMENT는 열을 정의할 때 1부터 증가하는 값을 입력해 준다.

INSERT에서는 해당 열이 없다고 생각하고 입력하면 된다.

단, 주의할 점은 AUTO_INCREMENT로 지정하는 열은 꼭 PRIMARY KEY로 지정해 줘야 한다.

자동으로 증가하는 부분은 NULL 값으로 채워 놓으면 된다. o(*°▽°*)o

 

처음부터 입력되는 값을 1000으로 정하고, 다음 값은 1003, 1006, 1009...으로 3씩 증가하도록 설정하는 방법이다.

바로 이럴 땐 시스템 변수인 @@auto_increment_increment를 변경시켜야 한다.

 

다른 테이블의 데이터를 한 번에 입력하는 INSERT INTO ~ SELECT

많은 양의 데이터를 지금까지 했던 방식으로 직접 타이핑을 하면 너무 오래 걸릴 것이다.

다른 테이블에 이미 데이터가 입력되어 있다면 INSERT INTO ~ SELECT 구문을 사용해

해당 테이블의 데이터를 가져와서 한 번에 입력할 수 있다.

주의할 점은 SELECT 문의 열 개수는 INSERT 할 테이블의 열 개수와 같아야 한다.

 

데이터 수정: UPDATE

UPDATE 문의 기본 문법

UPDATE는 기존에 입력되어 있는 값을 수정하는 명령이다.

필요하면 콤마를 사용해서 한꺼번에 여러 열의 값을 변경할 수도 있다.

 

UPDATE 테이블_이름

SET 열 1=값 1, 열 2=값 2,...

WHERE 조건 ;

데이터 수정하는 기본 형식 작성하기

 

WHERE가 없는 UPDATE 문

UPDATE는 사용법이 간단하지만 주의할 사항이 있다.

UPDATE 문에서 WHERE 절은 문법 상 생략이 가능하지만, WHERE 절을 생략하면 테이블의 모든 행의 값이 변경된다.

일반적으로 전체 행의 값을 변경하는 경우는 별로 없으므로 주의해야 한다.

 

데이터 삭제: DELETE

테이블의 행 데이터를 삭제해야 할 때는 DELETE를 사용하면 된다.

DELETE도 UPDATE와 거의 비슷하게 사용할 수 있다.

행 단위로 삭제하며 형식은 다음과 같다.

 

DELETE FROM 테이블이름 WHERE 조건 ;

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

 

DELETE : 삭제가 오래 걸린다.

DROP : 테이블 자체를 삭제한다.

TRUNCATE : DELETE와 동일한 효과를 내지만 속도가 무척 빠르다.

DROP은 테이블 아예 없어지지만, DELETE와 TRUNCATE는 빈 테이블을 남긴다.


이르케 오늘 혼공스 2차시두 마무리했어요 φ(* ̄0 ̄)

아 그리고!!!! 깃허브를 연동하는 건 성공했습니다~!

근데 아직 커밋은 안 해 봐서 그 파일을 당겨와야 하는데 아직은 살짝 어려운 것 같아서

그 부분을 마스터하구, 성공하면 다음번 블로그 때 같이 제출할게요 ♪(^∇^*)

좋은 정보와 도움 감사드립니다아 - 

'레쭈고 혼공스' 카테고리의 다른 글

혼공스 6주 차 (˘・_・˘)  (0) 2024.08.17
혼공스 5주 차 (o゚v゚)ノ  (7) 2024.08.03
혼공스 4주 차 UwU  (7) 2024.07.24
혼공스 3주 차 (* ̄3 ̄)╭  (0) 2024.07.19
혼공스 1주 차 ^^  (0) 2024.07.06