(2023-01-09) SQL-1 (데이터 조회)

C one·2023년 1월 9일

/ USE문

USE 데이터베이스 이름;

USE market_db;

한번 실행하면 사용할 데이터베이스 지정하고 입력하는 SQL문 여기서 지정한 데이터베이스 사용한다

/ SELECT 문의 기본형식

SELECT select_expr
	[FROM table_references]
	[WHERE where_condision]
	[GROUP BY {col_name | expr | position}]
	[HAVING where_condition]
	[ORDER BY {col_name | expr | position}]
	[LIMIT {[offset,] row_count | row_count OFFSET offset}];
    ( 마지막에 ; )
    
> 대괄호 묶인 부분 생략가능

> 생략은 가능하지만 작성순서를 지켜야한다!

> 아래부터 기본형식에 대한 설명

/ SELECT ~ FROM

SELECT 열_이름 FROM 테이블_이름;

> 열_이름 : 테이블의 컬럼 이름이다

> 테이블_이름 : 데이터를 가져올 테이블을 지정

> 테이블의 모든 열의 내용을 가져오려면 -> 열_이름에 "*" 사용
	SELECT*FROM 테이블_이름
    
> 여러개의 열을 가져올때 콤마로 구분한다
	SELECT 열_이름1,열_이름2,열_이름3 FROM 테이블_이름
    
> 열 이름 별칭 기능 : 테이블 출력시 열이름을 지정할 수 있다
	SELECT 열_이름 변경할_열_이름 FROM 테이블_이름
*DISTINCT : 조회된 결과를 출력시 중복값 하나만 남긴다

SELECT DISTNCT addr ( 주소중 중복값 날리고 하나만 남김)
FROM member;

/ SELECT ~ FROM ~ WHERE

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

> 조건식 : 컬럼에 대한 조건식
	- 관계연산자: >  <  >=  <=  =
	- 논리연산자: AND  OR
      쓰인다

/ BETWEEN ~ AND

숫자의 범위를 조건식에서 표현할때 용이함

SELECT 열_이름 
FROM 테이블_이름 
WHERE 열_이름 BETWEEN 조건식1 AND 조건식2

=> 조건식1 이상 , 조건식2 이하

/ IN()

문자로 표현되는 조건식 조합할때 용이함

SELECT 열_이름 
FROM 테이블_이름 
WHERE 열_이름 IN('조건식1','조건식2',..);

/ LIKE

문자열의 일부글자로 검색할때 사용한다

USE market_db;
SELECT * 
from member 
WHERE mem_name LIKE '우%'; ( '우'로 시작하는 문자열 검색 )

> % : AB%(AB로 시작하는 문자) / %AB(AB로 끝나는 문자) 검색
> _ : __핑크(_하나에 한글자 매칭) -> 블랙핑크, 에이핑크 검색됨

/ 서브쿼리

SELECT문 안의 SELECT문

> 이름(mem_name)이 ‘에이핑크’인 회원의 평균 키(height) 보다 큰 모든 회원을 검색

SELECT mem_name, height 
FROM member 
WHERE height > (SELECT height FROM member WHERE mem_name = '에이핑크');

>SELECT문을 조건식으로 사용한것!

/ ORDER BY

결과의 값, 개수에 영향없지만
결과가 출력되는 순서를 결정한다

* 기본 오름차순( ASC(ascending) 생략가능함)

>데뷔일자 빠른순서로 출력하겟다 , 오름차순(기본)

SELECT *
FROM member
ORDER BY debut_date;

>데뷔일자 늦은순서로 출력하겟다 , 내림차순(DESC)

SELECT *
FROM member
ORDER BY debut_date DESC;
> 여러 열의 순서를 지정할 수 있다 ( 우선순위 앞->)
키가 큰순으로 정렬하고 -> 데뷔일자 빠른순으로 정렬

SELECT * 
from member 
ORDER BY height DESC ,debut_date ASC;

/ LIMIT

출력하는 개수를 제한한다

* 형식

LIMIT 시작, 개수
( LIMIT 3 == LIMIT 0, 3 == LIMIT 3 OFFSET 0 ) 모두같다

/ GROUP BY

출력결과를 그룹으로 묶어준다
주로 집계함수와 같이 사용된다

* 집계함수 :
SUM() 합계 / AVG() 평균 / MIN() 최소값 / MAX() 쵀대값 
/ COUNT() 행의개수 / COUNT(DISTINCT) 행의개수(중복제거)
> 구매내역을 모두 출력

SELECT mem_id, amount FROM buy ORDER BY mem_id;	

--------------------------------------------------

> 각 회원의 구매한 개수(amount) 를 합쳐서 출력 하려면

SELECT mem_id, SUM(amount) FROM buy GROUP BY mem_id;

-------------------------------------------------- // 컬럼이름에 집계함수 붙이네

> 각 회원이 구매한 금액의 총합 (price * amount)을 출력 하려면

SELECT mem_id, SUM(price*amount) FROM buy GROUP BY mem_id;

/ HAVING 절

WHERE 함수에는 집계함수 사용할 수 없다

그래서 WHERE 대신 HAVING 사용한다.

> HAVING절은 집계함수 다음에 나와서 조건을 제한한다
> HAVING절은 반드시 GROUP BY 절 다음에 나와야 한다
SELECT mem_id, SUM(amount*price) 
from buy
group by mem_id
having SUM(amount*price) >1000;

profile
🌽

0개의 댓글