1. FROM, JOIN

 

- 먼저 FROM ( 테이블 ) JOIN ( 테이블 ) 이 실행되어 데이터셋을 뽑아냅니다.

 

- Sub Query문 (서브쿼리)도 실행되며 임시 테이블이 생성될 수 있습니다.

 

 

 

2. WHERE

 

- 1에서 뽑아낸 데이터셋에서 WHERE 조건문에 기재된 제약조건 대로 이를 충족하는 행만 뽑아냅니다.

 

 

 

3. GROUP BY

 

- 2에서 뽑아낸 데이터셋에 대해서 그룹조건을 적용하여 그룹으로 묶어줍니다.

 

 

 

4. HAVING

 

- 그룹으로 묶여진 데이터셋에 대해서 HAVING 조건절을 만족하는 행만이 남습니다.

 

 

 

5. SELECT

 

- 4까지 완료된 데이터 셋에 대하여 SELECT문을 실행하여 원하는 칼럼을 설정합니다.

 

 

 

6. DINSTINCT

 

- DISTINCT를 사용할 경우 이 단계에서 중복되는 행은 제거 됩니다.

 

 

 

 

7. ORDER BY

 

- 지금까지 만들어진 데이터셋을 어떤식으로 정렬 할 것인지 정합니다(오름차순, 내림차순)

 

 

 

8. LIMIT / OFFSET

 

- 최종적으로 범위를 지정 (지정된 범위를 벗어나는 행을 제거) 합니다.

 

 

 

 

 

[출처]:

https://sqlbolt.com/lesson/select_queries_order_of_execution
jaimemin.tistory.com/1475?category=1060172

 

데이터베이스 쿼리 실행 순서

회사를 직접적으로 언급할 수는 없지만 데이터베이스 쿼리 실행 순서를 질문받은 적 있습니다. 코딩 테스트 난이도 정도의 쿼리 작성에는 어느 정도 자신이 있었지만 실행 순서는 한 번도 생각

jaimemin.tistory.com

 

SQLBolt - Learn SQL - SQL Lesson 12: Order of execution of a Query

Now that we have an idea of all the parts of a query, we can now talk about how they all fit together in the context of a complete query. Complete SELECT query SELECT DISTINCT column, AGG_FUNC(column_or_expression), … FROM mytable JOIN another_table ON m

sqlbolt.com

 

'Web & App > Mysql' 카테고리의 다른 글

Pagenation(페이징) [Offset-based, Cursor-based)  (0) 2020.10.17
mysql 외부 접속 허용  (0) 2020.08.17

** Pdo사용을 위해선 php 버전이 5.1.0 이상 이어야 합니다**

 

1.PDO(PHP Data Object) 란?

- PHP에서 여러종류의 데이터 베이스에 접근할 수 있게 해주는 PHP 확장 모듈이다.(클래스)

- (MySQL, MS SQL, Oracle......)

-반면, mysql 함수나 mysqli 클래스는 MySQL 서버만을 대상

- 즉, 여러종류의 데이터베이스를 같은 방식으로 사용할 수 있게 해준다.

- Pdo는 Prepared Statement를 제공하여 SQL을 미리 데이터베이스에서 컴파일 해두고

  parameter만 값만 바꿔 처리 함으로써 성능의 향상을 위해 된다. 그리고 SQL injection 방어용

  으로도 사용될 수 있는데, Pdo 역시 Prepared Statement를 제공하므로 SQL injection 방어에 사용될

  수 있습니다. <밑에 예시 코드에서 확인하시면 됩니다.>

 

 

2. 데이터베이스에 연결

- 데이터베이스에 접속하기 위해서 Pdo를 이용해보자.

- 먼저 pdo를 생성하여야 한다.

 

3.쿼리준비

- 데이터베이스와 연결후 

- prepare() 메소드를 사용.

 

4.데이터를 바인딩, 실행

- execute() 메소드의 인수로 쿼리 파라미터에 사용할 값을 넘겨준다.

 

5. 결과값 가져오기

-이는 다른 예시인데 위의 예시는 그냥 insert를 하는 기능을 수행하는 함수 였기 때문이다.

-(1) fetch()

    : 메소드를 한번 실행하면 쿼리결과에서 한행을 가지고 온다

      반복문을 통해 처리하는 경우가 많다.

-(2) fetchAll()

    : 한번에 모든 행을 가지고 올 떄 사용한다.

**fetch의 모드 구성

      -1 FETCH_BOTH

          - 가져오기 모드를 지정해주지 않으면 이 모드가 지정되는데,

             결과 값을 가지고 올떄 칼럼이름을 키로 사용하는 배열과 칼럼의 순서를 키로 사용하는

             배열 두가지 배열을 만들기 때문에 성능이 좋지않다.

      -2 FETCH_ASSOC

          - 칼럼명을 키로 사용하는 연관배열을 반환한다.

          - $row['COLUMN_NAME']와 같은 방식으로 사용한다.

      -3 FETCH_NUM

          - 컬럼의 순서를 키로 사용하는 연관배열을 반환한다.

          - 가져온 데이터는 $row[NUM]과 같은 식으로 사용한다.

       - 이 3가지 외에도 OBJ(객체) 등이 있다....

ec2 인스턴스에서 임대한 서버에 apm이나 nginx mysql php 등등 을 구축해서

 

사용을 하려다 보면 예상치 못한 오류들을 만나는데요 

 

권한과 관련된 문제들도 많이 만나고, ec2의 경우 유저명과 관련된 오류도 만나고...(ubuntu, ec2-user...)

 

..... 방화벽과 관련된 문제들도 만나는데요

 

저는 데이터그립과 ec2 서버에 설치된 mysql 데이터 베이스를 연동해서 사용하려 하는데 test connection에서

 

오류가 나타나서 확인해보니

 

ec2에 설치된 mysql 이 외부에서 접속이 가능하도록 해주어야 연결이 되더군요  !

 

아래와 같이 입력 하셔서 외부접속을 허용해주시면 됩니다. !

 

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root의 패스워드';

'Web & App > Mysql' 카테고리의 다른 글

Query문의 실행 순서  (2) 2020.10.27
Pagenation(페이징) [Offset-based, Cursor-based)  (0) 2020.10.17

+ Recent posts