ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CodeIgniter] 데이터베이스(Database) 쿼리 빌더 - SELECT
    프로그래밍/CodeIgniter 2018. 9. 18. 16:02

    ▶CodeIgniter 데이터베이스(Database) 쿼리 빌더 - SELECT



    ▶설명


    코드이그나이터(CodeIniter)에서 데이터베이스를 사용할 때, 쿼리를 직접 입력하는 것보다 간단한 방법을 제공합니다.

    그게 바로 쿼리 빌더 클래스(Query Builder Class)입니다.

    쿼리 빌더 함수를 사용하면 자동으로 값들을 이스케이프(escape)하기 때문에 안전한 쿼리를 만들어냅니다.

    내용이 많은 관계로 자주 사용하는 항목만 정리하겠습니다.

    쿼리 빌더 클래스에 대한 자세한 내용은 아래의 매뉴얼을 참조하시기 바랍니다.


    ▶데이터 조회 (SELECT)


    아래의 함수들은 SELECT문을 생성합니다.


    $this->db->get()

    조회 쿼리를 수행하며 결과를 반환합니다.

    해당 함수만을 사용하면 모든 레코드를 가져오는 쿼리를 자동으로 실행합니다.


    첫 번째 파라미터 : TABLE

    $this->db->get('mytable');
    // 실행 결과 : SELECT * FROM `mytable`

    두 번째 파라미터 : LIMIT

    $this->db->get('mytable', 10);
    // 실행 결과 : SELECT * FROM `mytable` LIMIT 10

    세 번째 파라미터 : OFFSET

    $this->db->get('mytable', 10, 20);
    // 실행 결과 : SELECT * FROM `mytable` LIMIT 20, 10

    쿼리 결과 활용

    $query = $this->db->get('mytable');
    foreach($query->result() as $row)
    {
        echo $row->title;
    }


    쿼리 결과 생성에 대한 자세한 정보는 [CodeIgniter 데이터베이스(Database) 쿼리 실행 및 결과 생성] 를 참고하시기 바랍니다.


    $this->db->get_compiled_select()

    조회 쿼리를 $this->db->get()와 같이 컴파일하지만, 쿼리를 실행하지 않습니다.

    이 함수는 SQL 쿼리 문자열로 반환합니다.


    첫 번째 파라미터 : TABLE

    $sql = $this->db->get_compiled_select('mytable');
    echo $sql;

    출력 결과

    SELECT * FROM `products`

    두 번째 파라미터 : 쿼리 빌더 재설정 여부 (Boolean)

    echo $this->db->limit(10,20)->get_compiled_select('mytable', FALSE);
    // 출력 결과 : SELECT * FROM `mytable` LIMIT 20, 10
    echo $this->db->select('title, content, date')->get_compiled_select();
    // 출력 결과 : SELECT `title`, `content`, `date` FROM `mytable` LIMIT 20, 10

    첫 번째 쿼리에서 쿼리 빌더 재설정 여부를 FALSE로 설정 했기 때문에, 두 번째 쿼리는 첫 번째 쿼리에 이어서 생성된 것입니다.


    $this->db->get_where()

    두 번째 파라미터를 "where"절을 사용한다는 점을 빼면 $this->db->get() 함수와 동일합니다.


    예제

    $this->db->get_where('mytable', array('title' => 'Hello'), 10, 20);
    // 실행 결과 : SELECT * FROM mytable` WHERE `title` = 'Hello' LIMIT 20, 10

    뒤에 나오는 where 함수의 내용을 보시면 자세한 정보를 얻을 수 있습니다.


    $this->db->select()

    쿼리에서 SELECT 부분을 직접 입력할 수 잇습니다.

    모든 레코드를 조회할 때는 이 함수가 필요없습니다.


    예제

    $this->db->select('title, content, date');
    $this->db->get('mytable');
    // 실행 결과 : SELECT `title`, `content`, `date` FROM `mytable`

    두 번째 파라미터 : 백틱 ` 보호 여부

    $this->db->select('title, content, date', FALSE);
    $this->db->get('mytable');
    // 실행 결과 : SELECT title, content, date FROM `mytable`

    $this->db->select() 함수는 옵션으로 두 번째 파라미터를 설정할 수 있습니다.

    두 번째 파라미터를 FALSE로 설정하면 필드를 백틱 ` 으로 감싸지 않습니다.

    복잡한 SELECT 문을 사용할 때 유용합니다.


    $this->db->select_max()

    SELECT MAX(필드) 를 사용 할 수 있습니다.

    두 번째 파라미터를 사용하면 결과 값의 필드명을 바꿀 수 있습니다.


    예제

    $this->db->select_max('price');
    $this->db->get('product');
    // 실행 결과 : SELECT MAX(`price`) AS `price` FROM `products`

    두 번째 파라미터 : 필드명 변경

    $this->db->select_max('price', 'max_price');
    $this->db->get('product');
    // 실행 결과 : SELECT MAX(`price`) AS `max_price` FROM `products`


    $this->db->select_min()

    SELECT MIN(필드) 를 사용 할 수 있습니다.

    두 번째 파라미터를 사용하면 결과 값의 필드명을 바꿀 수 있습니다.


    예제

    $this->db->select_min('price');
    $this->db->get('product');
    // 실행 결과 : SELECT MIN(`price`) AS `price` FROM `products`

    두 번째 파라미터 : 필드명 변경

    $this->db->select_min('price', 'min_price');
    $this->db->get('product');
    // 실행 결과 : SELECT MIN(`price`) AS `min_price` FROM `products`


    $this->db->select_avg()

    SELECT AVG(필드) 를 사용 할 수 있습니다.

    두 번째 파라미터를 사용하면 결과 값의 필드명을 바꿀 수 있습니다.


    예제

    $this->db->select_avg('price');
    $this->db->get('product');
    // 실행 결과 : SELECT AVG(`price`) AS `price` FROM `products`

    두 번째 파라미터 : 필드명 변경

    $this->db->select_avg('price', 'avg_price');
    $this->db->get('product');
    // 실행 결과 : SELECT AVG(`price`) AS `avg_price` FROM `products`


    $this->db->select_sum()

    SELECT SUM(필드) 를 사용 할 수 있습니다.

    두 번째 파라미터를 사용하면 결과 값의 필드명을 바꿀 수 있습니다.


    예제

    $this->db->select_sum('price');
    $this->db->get('product');
    // 실행 결과 : SELECT SUM(`price`) AS `price` FROM `products`

    두 번째 파라미터 : 필드명 변경

    $this->db->select_sum('price', 'sum_price');
    $this->db->get('product');                
    // 실행 결과 : SELECT SUM(`price`) AS `sum_price` FROM `products`


    $this->db->from()

    쿼리에 FROM 부분을 사용 할 수 있습니다.

    FROM 부분은 $this->db->get() 함수에서도 정의 할 수 있기 때문에,

    위 함수의 사용 여부는 선택적입니다.


    예제

    $this->db->select('name', 'price');
    $this->db->from('products');
    $this->db->get();
    // 실행 결과 : SELECT `name` FROM `products`


    $this->db->join()

    쿼리에 JOIN 부분을 사용 할 수 있습니다.

    여러 개의 조인을 단일 쿼리에 사용할  경우 여러 개의 함수를 호출하여 사용할 수 있습니다.


    예제

    $this->db->select('products.name, products.price, shop.title');
    $this->db->from('products');
    $this->db->join('shop', 'products.name = shop.name');
    $this->db->get();
    // 실행 결과 : SELECT `products`.`name`, `products`.`price`, `shop`.`title` FROM `products` JOIN `shop` ON `products`.`name` = `shop`.`name`

    세 번째 파라미터 : 다른 JOIN 사용하기 

    $this->db->select('products.name, products.price, shop.title');
    $this->db->from('products');
    $this->db->join('shop', 'products.name = shop.name', 'left');
    $this->db->get();
    // 실행 결과 : SELECT `products`.`name`, `products`.`price`, `shop`.`title` FROM `products` LEFT JOIN `shop` ON `products`.`name` = `shop`.`name`

    세 번째 파라미터에 가능한 항목

    • inner
    • left
    • right
    • left outer
    • right outer


    별칭(alias) 사용하기

    그냥 테이블 이름으로 사용하면 쿼리가 정말 길어보이기 때문에

    별칭을 이용하여 사용하는 방법까지 설명하겠습니다.

    $this->db->select('p.name, p.price, s.title');
    $this->db->from('products as p');
    $this->db->join('shop as s', 'p.name = s.name', 'left');
    $this->db->get();
    // 실행 결과 : SELECT `p`.`name`, `p`.`price`, `s`.`title` FROM `products` as `p` LEFT JOIN `shop` as `s` ON `p`.`name` = `s`.`name`


    ▶마치며


    내용이 많기 때문에 다음 글에 추가로 작성하겠습니다.


    댓글

Designed by Tistory.