본문 바로가기

카테고리 없음

db -4w ORDER BY, GROUP BY, JOIN

01 정렬쿼리

ORDER BY

02

집계 함수와 GROUP BY

 - COUNT, SUM, AVG, MIN, MAX, HAVING

03

JOIN

 

실습> 데이터베이스와 테이블 (account, market)을 만들기

CREATE DATABASE day_4;

USE day_4;

CREATE TABLE account(nickname VARCHAR(30) NOT NULL PRIMARY KEY,

                                         address VARCHAR(100),

                                         manner_point INT,

                                         reg_date DATETIME,

                                         phone_number VARCHAR(15) UNIQUE

                                        );

CREATE TABLE market(market_id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,

                                       seller VARCHAR(30),

                                       product VARCHAR(30),

                                       amount INT,

                                       price BIGINT,

                                       reg_date DATETIME, 

                                       FOREIGN KEY (seller) REFERENCES account(nickname));

 

 

테이블 생성 후 레코드 추가

 

[01 정렬 쿼리 order by]

조회한 레코드 목록을 정렬할 때 사용

- ASC : 오름차순 정렬

- DESC : 내림차순 정렬

 

* select문을 통해 전체 테이블을 가져오거나 규칙 지정하여 테이블의 일부를 가져올 수 있음

기본적인 사용 구문

SELECT 필드명1, 필드명2, 필드명3 ... FROM 테이블명

 

* 필드 (컬럼)명은 하나 또는 여러개가 될 수 있으며 콤마로 구분해서 사용함

또한 테이블의 전체를 가져오려면 필드명에 *을 사용함

SELECT*FROM 테이블명

참고) https://yeolco.tistory.com/98

 

SELECT column1

FROM table_name

ORDER BY column1 ASC | DESC;

 

* 여러 개의 속성을 정렬 할 때

SELECT column1, column2,....

FROM table_name

ORDER BY column1 ASC | DESC , column2 ASC | DESC

 

실습> market 테이블울 판매 상품 이름순으로 정렬해서 조회해라

 

SELECT*

FROM market

ORDER BY product;

 

실습> market 테이블을 비싼 상품순으로 정렬하여 판매자와 상품만 조회하라

SELECT seller, product

FROM market

ORDER BY price DESC; 

 

실습> market테이블을 판매 개수순으로 정렬하고 같은 개수의 상품은 비싼 상품순으로 정렬하라

SELECT*FROM market

ORDER BY amount, price DESC;

 

실습>  account  테이블을 매너가 나쁜 판매자 순으로 정렬해서 조회하라

SELECT*FROM account

ORDER BY manner_point;

 

실습> account 테이블을 등록 날자 순으로 정렬하고 판매자 이름과 전화번호만 조회하라

SELECT nickname, phone_number

FROM account

ORDER_BY reg_date;

 

[02  집계 함수와 GROUP BY]

 

<집계함수> 

집계 함수는 여러 행으로부터 하나의 계산 값을 반환하는 함수임

 

SELECT 문에만 사용 가능함

 

- COUNT (column1)

 선택한 칼럼의 null을 제외한 행의 개수를 셈

  COUNT(*)로 작성하면 테이블에 존재하는 행의 개수를 반환함

 

-AVG(column1)

 선택한 칼럼의 평균을 구함

 숫자인 값에 대해서만 연산이 가능, null값은 무시하고 계산함

 

- SUM(column1)

 선택한 칼럼의 합을 구함

 평균과 마찬가지로 숫자인 값에 대해서면 연산이 가능

 

- MIN(column1) | MAX(column1)

 선택한 칼럼의 최솟값과 최댓값을 구함

 AVG와 SUM과 다르게 숫자가 아닌 값에도 연산이 가능함

 

<GROUP BY / HAVING>

GROUP BY(column1) 은 column1 값들로 그룹을 묶어서 각 그룹별로 계산을 시켜주는 구문임

 

*  칼럼이 여러개일 경우 column1을 기준으로 그룹을 만든 후, 그 안에서 column2를 기준으로 하는 그룹을 만듦

 GROUP BY(column1, column2);

 

HAVING 절은 집계함수 그리고 GROUP BY 와 함께 쓰는 조건문임

   * WEHRE절과는 다르게 집계 함수와 함께 사용 가능함

 

* SELECT문과 사용되는 구문들의 순서

 SELECT- FROM-WHERE-GROUP BY- HAVING- ORDER BY

 

 

 

[03 JOIN  - INNER JOIN, OUTER JOIN]

: JOIN 두개 이상의 테이블을 서로 연결하여 데이터를 검색할 때 사용하는 방법

- 두 테이블의 조인을 위해 키와 외래키 관계를 설정해 두면 속도 향상의 이점이 있음

 

<INNER JOIN>

두 테이블에 지정한 컬럼의 데이터가 있는 경우만 조회

SELECT column1, column2,...

FROM table_A

INNER JOIN table_B

ON table_A.column =  table_B.column;

 

<OUTER JOIN (외부조인)>

 

두 테이블 중 하나의 테이블에만 지정한 컬럼에 값이 있어도 조회

 

SELECT column1, column2,...

FORM table_A - (LEFT 테이블)

<LEFT | RIGHT | FULL> JOIN table_B - (RIGHT 테이블)

ON table_A.column = table_B.column;