select문에 들어가기 앞서...

RDBMS에서는 데이터베이스 조작을 위해 SQL문을 명령어로 사용한다.

SQL문을 세 가지로 분류할 수 있다.

DML(Data Manipulation Language)

테이블의 행을 조작(선택, 삽입, 수정, 삭제)

트랜잭션 발생:

트랜잭션 제어어(TCL: Transaction Control Language):

DML을 사용할 때 실제 테이블에 완전히 적용하지 않고, 임시로 적용시킴

COMMIT/ ROLLBACK/ SAVEPOINT

SELECT

INSERT

UPDATE

DELETE

DDL(Data Definition Language)

데이터베이스 개체를 조작(생성, 삭제, 변경)

트랜잭션이 없어서 실행 즉시 MySQL에 적용

CREATE

ALTER

DROP

RENAME

TRUNCATE

DCL

데이터베이스에 접근하고 객체들을 사용하도록 권한을 부여하고 회수하는 명령어

GRANT

REVOKE


SQL문의 특징이 있다.

  • 대소문자를 구분하지 않는다: USE, use, uSE를 모두 동일하게 인식한다.
  • MySQL의 주석: 주석으로 묶으면 글자들이 회색이 된다

-한줄 주석: --

-블록 주석: /* */

  • 열 이름에 별칭(Alias)을 지정할 수 있다: select first_name as이름 from employees;
  • 식별자(데이터베이스 개체의 이름)를 만들 때 규칙:

-a-z, A-Z, 0-9, $, _를 사용할 수 있다.

-최대 64자로 제한

-예약어를 사용할 수 없다.

-공백을 사용하려면 백틱(``)으로 묶어서 사용한다.

-의미 있는 이름을 짓되 너무 길거나 짧은 것은 좋지 않다.


DML 중 테이블의 행을 선택할 수 있는 SELECT문에 대해서 알아본다.

MySQL 5.7버전 document에서 가져온 SELECT문이다.

보이는 것이 SELECT문의 거의 전부이다.

가장 기본적으로 사용하는 것이 select * from tablename; 인데

이 외에도 사진에서 보듯 다양한 옵션을 붙일 수 있다.

 


 

DB를 먼저 선택한다.


employees DB에서 테이블의 정보를 확인한다.


  • FROM

맨 처음 언급했던 가장 기본적으로 쓰이는 select * from tablename; 형태이다.

*는 모든 행을 뜻한다.

from은 지정한 테이블에서 찾는다는 의미이다.


 


  • AS

as를 사용하면 그 행의 alias(별칭)을 지정할 수 있다. 보다 쉽게 불러오기 위하여..


  • WHERE

where은 조건을 붙이는 것이다. DB 테이블에서 이름이 김경호인 행을 찾는다.


  • 연산자 사용

다음은 연산자를 사용하여 행을 선택하는 것이다.

연산자의 종류는 두 가지로 나눌 수 있다.

조건 연산자

=, <, >, <=, <=, <>, !=

관계 연산자 NOT, AND, OR

  • BETWEEN ... AND

between과 and를 사용하면 조건연산자를 사용하지 않고도 범위를 정할 수 있다.


  • IN()

in은 or 조건연산자를 보다 쉽게 사용할 수 있게 한다.


  • LIKE

like는 검색할 때 쓰는 예약어이다. 글자 앞뒤에 %를 붙이면 그 글자를 포함한 단어를 검색한다.

_종신이면 종신앞에 한 글자가 있는 단어를 찾는다.


  • 서브쿼리

예를 들어 김경호보다 키 큰 사람을 선택하려고 한다.

김경호의 키는 177이다. 직접 김경호의 키를 알아놓은 후에 그 키를 설정해서 select할 필요가 없다.

서브쿼리를 사용하면 김경호의 키를 알 수 없어도 김경호보다 큰 사람을 선택할 수 있다.


  • 서브쿼리 ANY

서브쿼리의 다른 예이다.

주소지가 경남인 사람보다 키가 큰 사람을 찾으려고 서브쿼리를 사용했더니 오류가 발생했다.

오류문을 자세히 읽어보면 값이 1개보다 많다고 한다. 주소지가 경남인 사람이 1명보다 더 많기 때문인 것이다.

이러한 경우에는 서브쿼리 앞에 any를 붙여주면 주소지가 경남인 사람들 모두보다 키가 큰 사람들을 선택할 수 있는 것이다.


  • 서브쿼리 =ANY

주소지가 경남인 사람들과 키가 같은 사람들을 선택하고자 한다.

height=any(서브쿼리)를 했더니 두 사람의 값이 나왔다.

=any 대신 in을 썼더니 같은 값을 출력하였다. 주소지가 경남인 사람과 키가 같은 사람 1이거나 2인 사람 모두를 출력한 것이다.


  • ORDER BY

DESC는 내림차순, ASC는 올림차순이다. ASC가 디폴트이다.


  • DISTINCT

중복된 값을 제거하고 선택한다.


  • LIMIT

데이터가 30만 개나 되는 행을 다 출력할 수는 없다. 지정된 개수만 선택할 수 있다.

지정할 개수와 시작점을 설정할 수 있다.


  • 테이블을 복사하여 CREATE

한 테이블을 복사한 새로운 테이블을 생성할 수 있다. 기존 테이블의 특정 열만 선택하여 생성할 수도 있다.

단, PK나 FK 등 제약조건은 복사할 수 없다.


  • GROUP BY

userid로 묶어서 선택한 값들은 볼 수 있다.

sql문을 사용할 때 간단한 사칙연산도 할 수 있는 것을 아는가?

이를 이용한 것이 집계함수이다.

함수명 설명
SUM() 총합
AVG() 평균
MIN() 최소값
MAX() 최대값
COUNT() 행의 개수
COUNT(DISTINCT) 중복 없는 행의 개수
STDEV() 표준편차
VAR_SAMP() 분산

집계함수를 사용하여 키가 가장 큰 사람과 작은 사람을 선택하고자 한다.

첫 번째 명령문처럼 단순히 이름, 키의 최대값, 최소값을 선택하였더니 예상대로 나오지 않는다.

다시 이름별로 지정하여 SQL문을 실행하여도 원하는대로 나오지 않는다.

최대값과 최소값을 서브쿼리를 사용하여 설정하였더니 원하는대로 값을 확인할 수 있었다.


  • HAVING

총 구매액 중 1000을 넘은 사람을 선택하고자 한다.

WHERE절을 사용하였지만 오류가 발생한다.

집계함수에 대한 조건을 설정할 때에는 HAVING을 사용해야 한다.


  • ROLLUP

이름별로 중간합계를 내고 싶을 때 사용할 수 있다.


맨 처음 보여주었던 MySQL 5.7 document의 SELECT문의 거의 모든 것이다.

나도 실습하면서 SELECT문을 아는 데 많이 도움이 되었다.

'MySQL' 카테고리의 다른 글

MySQL 전체 텍스트 검색  (0) 2020.03.19
MySQL 잠금기능  (0) 2020.02.20
MySQL view(뷰)  (0) 2020.02.17

고가용성은 aws의 RDS 서비스의 특징이다.

 

고가용성: High Availability(HA)

고가용성은 서버와 네트워크, 프로그램, 애플리케이션 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질을 말한다. "절대 고장나지 않음"을 의미한다.

흔히 가용한 시간의 비율을 99%나 99.9% 등과 같은 퍼센티지로 표현한다.

파이브 나인스(5 nines) 즉 99.999%는 매우 높은 수준으로 고품질의 데이터센터에서 목표로 한다고 알려져 있다.

 

RDS뿐 아니라 다른 서비스에서도 고가용성을 제공하고자 하는 aws.

이번 SNS project에서 controller, domain, repository, util로 패키지를 나누었습니다.

보통 보안, 문자열처리, 날짜 처리 등등 특정 비즈니스 로직과 독립적인 기능들은 util 패키지에 넣고 XXXUtil 클래스로 만들어서 사용합니다. 

만약에 RandomToken이 무조건 회원과 관련되서만 사용이 된다고 하면 회원 관련 패키지에 들어갈수도 있긴 하겠지만, 토큰을 만들어내는 것 자체는 비즈니스 로직과 관련이 없기 때문에 util 패키지에 들어가는 것입니다.

 

특정 개념과 독립적인 기능 + 다른 부분과 의존성이 없고 input parameter 만 갖고 단순한 처리만 하는 메소드들은 특히 정적(static) 메소드로 많이 구성을 합니다.

Bean으로 주입하지 않습니다. 

이렇게 하는 것이 규칙은 아니지만 개발을 할 때 주로 권고되는 방식입니다.

 

참고: 이동훈대표님, 

https://stackoverflow.com/questions/7270681/utility-class-in-spring-application-should-i-use-static-methods-or-not

 

* 사실 제가 대표님께 질문을 해서 답해주신 내용입니다

(RandomToken 관련 수정하는 중인데, controller, domain, repository, service까지는 그 패키지를 나누는 기준을 알겠는데 RandomToken이 왜 util 패키지에 들어가는지, util 패키지가 도대체 어떤 역할인지를 잘 모르겠습니다 ㅠㅠ)

'Spring' 카테고리의 다른 글

자바 for문에서 length cannot be resolved or is not a field 해결  (0) 2020.02.14
jar 파일 실행하기  (0) 2020.02.11
DevOps 191226  (0) 2019.12.27
  • 캐시(cache)란?

프로그램이 수행될 때 나타나는 지역성을 이용하여 메모리나 디스크에서 사용되었던 내용을 특별하게 접근할 수 있는 곳에 보관하고 관리함으로써, 이 내용을 다시 필요로 할 때보다 빠르게 참조하도록 하는 것이다.

(일단 느낌은 메모리 저장 느낌적인 느낌)

사용되었던 데이터는 다시 사용되어질 가능성이 높다는 개념을 이용하였다.

 

참조: https://richong.tistory.com/95

 

캐시[Cache]란?

캐시를 설명하기에 앞서 사상(Mapping)이라는 용어에 대해서 알고 들어가려 한다. 사상이라고 하면 보통.. 그.. 사상.. 우리가 생각하는 사상을 많이 생각했다. 하지만 컴퓨터 용어에서 사상이란 사상(寫像, mappi..

richong.tistory.com

  • Ajax 동기vs비동기

요청처리방식 차이.

요청을 받아도 확인을 하고 비즈니스 로직을 처리하느냐, 확인 없이 하느냐.

참조에서는 비동기 방식이 응답(결과)과는 상관 없이 다음 요청이 동작하는 방식이라는 차이를 말하고 있다.

비동기식은 이러한 처리를 요청할 때 할 일이 끝난 후 처리결과를 알려주는 콜백이라는 함수를 함께 알려준다.

왜 나왔냐하면 jQuery의 Ajax는 비동기 방식을 사용하기 때문이다.

Asynchronous Javascript + xml

비동기는 요청 page로 결과를 반환하는 게 포인트이다.

 

참조: https://jieun0113.tistory.com/73

 

[용어정리] 동기방식&비동기방식 비교

동기방식 (Synchronous) 요청을 보낸 후 응답(=결과)를 받아야지만 다음 동작이 이루어지는 방식이다. 어떠한 일을 처리할 동안 다른 프로그램은 정지한다. 실제 cpu가 느려지는 것은 아니지만 시스템의 전체적인..

jieun0113.tistory.com

  • 프레임워크(Framework)와 라이브러리(Library)의 차이

내 머릿속에서 framework는 대충 웹프로그램을 제어하는 controller의 느낌이었고, 그 종류가 tomcat, spring 정도가 있다고 생각하였다. 그리고 library는 내가 코드를 짜면서 쓰고 싶은 기능(?)들(jar 파일들)을 모아놓은 것 정도.

 

둘의 차이는 제어 흐름에 대한 주도성이 누구에게/어디에게 있는가에 있다.

application의 흐름을 누가 쥐고 있느냐의 여부이다.

 

더 자세한 설명은 역시 참조: https://webclub.tistory.com/458

 

프레임워크와 라이브러리의 차이점

Framework Vs Library 프레임워크와 라이브러리의 정확한 차이점은 무엇일까요? 대중 알것 같지만 정확히 어떠한 차이점이 있는지 모르고 있는 경우가 많을지도 모릅니다. 프레임워크는 단지 미리 만들어 둔 반제..

webclub.tistory.com

 

'Spring' 카테고리의 다른 글

자바 for문에서 length cannot be resolved or is not a field 해결  (0) 2020.02.14
jar 파일 실행하기  (0) 2020.02.11
util 클래스의 역할  (0) 2020.02.07

+ Recent posts