Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags more
Archives
Today
Total
관리 메뉴

ultra_dev

SQL -1 본문

DB

SQL -1

ultra_dev 2023. 1. 13. 01:22

SQL강의 시작 (워크벤치 기준)

 

USE 데이터베이스_이름;

* USE 문은 한번만 실행하면 다른 데이터 앞으로 모든 SQL 문은 지정한 데이터 베이스를 사용하게 됨

 

 

 

SELECT문 기본 형식

 SELECT 열_이름 FROM 테이블_이름 WHERE 조건식;
 
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}

 

 

연산자

  • 관계연산자: > < >= <= =
  • 논리연산자: AND OR

 

숫자의 범위를 조건식에서 사용할 때 : BETWEEN ~ AND 사용

* 예시 코드

SELECT *
FROM member
WHERE height BETWEEN height 163 AND 165;


포함 IN

* 예시 코드

SELECT mem_name, addr

FROM member

WHERE addr IN ('경기', '전남', '경남');

 

 

문자열 일부 글자 검색 LIKE

  • % : 무엇이든 허용
  • 언더바(_): 한글자 매치

 

이름(mem_name)이 ‘우’ 로 시작하는 회원 검색

* 예시 코드

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



이름이 ‘XX핑크’ 인 회원 검색

* 예시 코드

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





서브쿼리

 

- SELECT 안에 또 다른 SELECT

* 예시코드

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



 

ORDER BY 절

=> 결과의 값이나 개수에 대해서는 영향을 미치지 않지만, 결과가 출력되는 순서를 조절

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

SELECT mem_id, mem_name, debut_date FROM member ORDER BY debut_date DESC;

ORDER BY의 기본값은 ASC(ascending) 오름차순

ASC나 DESC를 생략하면 기본적으로  ASC로 동작

 

만약 평균 키가 같을 때는 데뷔일자가 빠른 순서로 정렬하기 위해서는

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

 

 

 

 

LIMIT : 출력하는 개수를 제한

* 예시 코드

SELECT mem_name, debut_date
	FROM member
	ORDER BY debut_date
	LIMIT 3;

 

- LIMIT 형식 :  LIMIT 시작, 개수

  => 다음과 같이 LIMT 3 만 쓰면 LIMIT 0, 3과 동일.

  => 또한 LIMIT 시작, 개수 는 LIMIT 개수 OFFSET 시작 이라고 작성한것과 같음

- LIMIT 3 == LIMIT 0, 3 == LIMIT 3 OFFSET 0

Limit 3,5하면 012345678910이 있다면 3부터 5개 즉, 34567까지 출력




DISTINCT

: 조회된 결과에서 중복된 데이터를 1개만 남김
 - ex) 경기경기전남광주 이런식이면 경기전남광주

 


GROUP BY

: 출력 결과를 그룹으로 묶어줌. 주로 다음의 집계함수와 함께 사용


SUM() 합계
AVG() 평균
MIN() 최소값
MAX() 최대값
COUNT() 행의 개수

 

<잘못된 코드>
SELCET COUNT(DISTINCT men_id, SUM(price*amount) AS distinct_mem_count
FROM buy
WHERE SUM(price(별)amount) > 1000   ==> 여기서 WHERE로 불가능!! 뒤에 HAVING을 써야함
GROUP BY mem_id;

: 💥실행해보면 에러가 발생. 불행하게도 집계 함수는 WHERE 절에 사용할 수 없음

<올바른 코드>

SELECT COUNT(DISTINCT mem_id) AS distinct_mem_count
FROM buy
GROUP BY mem_id
HAVING SUM(price * amount) > 1000;


이럴 때 WHERE 대신에 사용하는 것이 HAVING
HAVING은 집계 함수에 대해서 조건을 제한하는 것이라고 생각하면 됨.
HAVING절은 꼭 GROUP BY 절 다음에 나와야 함

'DB' 카테고리의 다른 글

DB 이것 저것 정리! (feat.SQL 실행순서..)  (0) 2024.01.19
DB Connection Pool !!  (0) 2024.01.04
Docker 내부 PostgresSQL Dump  (0) 2023.12.08
SQL -3  (0) 2023.01.13
SQL -2  (0) 2023.01.13
Comments