ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 8. SELECT
    개발자 수업/DB 2021. 11. 10. 17:48

    1. 관계 대수 (formal query language)
        1) 릴레이션에서 원하는 결과를 얻기 위해 수학의 대수와 같은 연산을 이용하여 질의하는 방법을 기술하는 언어
        2) 절차적인 언어, DBMS 내부의 처리 언어로 사용됨
        3) 수학기호를 사용하여 데이터 처리를 기술한 언어
        4) 관계 대수 연산자
            - select (셀렉션) : 릴레이션에서 조건에 만족하는 튜플을 선택
            - theta join, outer join

    2. SQL
        1) 수학적인 원리를 기반으로 사용하기 쉽게 만들어진 언어
        2) commercial language
        3) 관계 대수로 만들어진 모든 질의가 표현 가능

    3. select operation
        1) 형식 : σ <조건> (R)
        2) 조건에서 비교연산자, 논리연산자 이용하여 속성의 값을 비교하는 비교식을 사용

    4. SELECT
        1) 테이블에서 원하는 데이터를 검색하는 SQL
        2) Syntax
            - SELECT [DISTINCT] {* | <column_name, ...} 
              FROM 테이블 이름(들)
              [WHERE 검색조건(들)]
              [GROUP BY 속성이름]
              [HAVING 검색조건(들)]
              [ORDER BY 속성이름[ASC | DESC]];

            - SELECT [ALL | DISTINCT] {* | <column_name> [AS ] 별칭, ...}
              FROM {테이블 이름(들) [AS 테이블이름별칭] [JOIN 테이블 이름]}
              [WHERE 검색조건(들)]
              [GROUP BY 속성이름]
              [HAVING 검색조건(들)]
              [ORDER BY 속성이름[ASC | DESC]];
        3) example
            - SELECT DISTINCT dept_name FROM student;
                - DISTINCT : 결과 테이블에서 중복된 레코드를 제거하는 키워드
        4) SELECT 절에 산술식 포함 가능
            - +, -, *, /
            - SELECT id, name, salary/12 from employee;

    -- 도서 테이블에 있는 모든 출판사를 검색하시오
    select publisher from book;
    
    
    -- 중복을 제거하고 출력
    select DISTINCT publisher from book;
    
    
    -- 모든 도서의 이름과 가격을 검색하시오
    SELECT bookname, price FROM book;
    
    
    -- 모든 도서의 도서번호, 도서이름, 출판사, 가격을 검색하시오
    select bookid, bookname, publisher, price from book;
    select * from book;



    5. SELECT with WHERE
        1) 테이블에서 조건에 맞는 데이터만 검색하기 위해 WHERE 절 이용
        2) Syntax
            - SELECT [DISTINCT] {* | <column_name, ...}
              FROM <table list> 
              [WHERE condition]
            - condition : 비교 연산자(=, <>, <, >, <=, =>)와 논리 연산자(AND, OR, NOT)
        3) example
            - SELECT name FROM employee 
              WHERE dept_name = 'SALES' AND salary > 1000000
        4) LIKE 키워드 (패턴)
            - 문자열 컬럼인 경우 부분적인 매칭으로 조건 검색 가능
            - % : 0개 이상의 문자 
              _ : 1개의 문자
            - SELECT * FROM employee WHERE name LIKE '이%';
              SELECT * FROM employee WHERE name LIKE '이순_';
        5) BETWEEN (범위)
            - price BETWEEN 10000 AND 20000
           IN, NOT IN (집합)
            - price IN (10000, 20000, 30000)
        6) is null, is not null
            - price is null

    -- 가격이 20,000원 미만인 도서를 검색하시오
    SELECT * FROM book
    WHERE price < 20000;
    
    
    -- 가격이 10,000원 이상 20,000원 이하인 도서를 검색하시오
    SELECT * FROM book
    WHERE price between 10000 and 20000;
    
    SELECT * FROM book
    WHERE price >= 10000 and price <= 20000;
    
    
    -- 출판사가 '굿스포츠' 혹은 '대한미디어'인 도서를 검색하시오
    SELECT * FROM book
    WHERE publisher IN ('굿스포츠', '대한미디어');
    
    
    -- 출판사가 '굿스포츠' 혹은 '대한미디어'가 아닌 도서를 검색하시오
    SELECT * FROM book
    WHERE publisher NOT IN ('굿스포츠', '대한미디어');
    
    
    -- '축구의 역사'를 출간한 출판사를 검색하시오
    SELECT bookname, publisher FROM book
    WHERE bookname LIKE '축구의 역사';
    
    
    -- 도서이름에 '축구'가 포함된 책제목과 출판사를 검색하시오
    SELECT bookname, publisher FROM book
    WHERE bookname LIKE '%축구%';
    
    
    -- 도서이름의 왼쪽 두번째 위치에 '구'라는 문자열을 갖는 도서를 검색하시오
    SELECT * FROM book
    WHERE bookname LIKE '_구%';
    
    
    -- 축구에 관한 도서 중 가격이 20000원 이상인 도서를 검색하시오
    SELECT * FROM book
    WHERE bookname LIKE '%축구%' AND price >= 20000;
    
    
    -- 출판사가 '굿스포츠' 혹은 '대한미디어'인 도서를 검색하시오
    SELECT * FROM book
    WHERE publisher = '굿스포츠' OR publisher = '대한미디어';



    6. NULL value
        1) null은 empty가 아닌 unknown
        2) null 값은 산술 연산 및 비교 연산 결과는 null
            - 5 + null      ---> null
            - null > 5      ---> null
            - null = null   ---> null
        3) null과 논리 연산 결과
            - OR
                - (null OR true) = true
                  (null OR false) = null
                  (null or null) = null
            - AND
                - (true AND null) = null
                  (false AND null) = null
                  (null and null) = null
            - NOT
                - (NOT null) = null
        4) null 값을 가진 row를 찾기 위한 조건식 -- IS NULL
            - SELECT id, name FROM customer
              WHERE age IS NULL;

    7. ORDER BY
        1) SELECT의 검색 결과를 정렬하기 위해 ORDER BY 키워드 사용
        2) Syntax
            - SELECT [DISTINCT] {* | <column_name>, ...}
              FROM <table_name> [WHERE condition]
              [ORDER BY <column_name>, ... [ASC | DESC]];
            - ASC : 오름차순 정렬 (default), DESC : 내림차순 정렬
        3) example
            - SELECT id, name, age, address FORM customer ORDER BY age desc;
            - SELECT id, name, dept_name, salary FROM employee ORDER BY salary;
            - SELECT id, product, quantity, order_date FROM salesOrders
              ORDER BY order_date ASC, quantity desc;

        4) 결과값을 특정 컬럼을 기준으로 오름차순(ASC) 내림차순(DESC) 정렬해서 표현
           여러 개의 경우 컬럼 나열된 순서대로 적용(1차정렬, 2차정렬, ...)

    -- 도서를 이름순으로 검색하시오
    SELECT * FROM book ORDER BY bookname;
    
    
    -- 도서를 가격순으로 검색하고, 가격이 같으면 이름순으로 검색하시오
    SELECT * FROM book ORDER BY price, bookname;
    
    
    -- 도서를 가격의 내림차순으로 검색하시오 만약 가격이 같다면 출판사의 오름차순으로 검색하시오
    SELECT * FROM book ORDER BY price DESC, publisher;


    8. Aggregation Function
        1) 특정 컬럼의 값을 통계적으로 계산한 결과를 보여주는 SQL 함수
            - COUNT : 컬럼 값의 개수
            - MAX : 컬럼 값의 최대값
            - MIN : 컬럼 값의 최소값
            - SUM : 컬럼 값의 합계      --> 숫자 데이터만 가능
            - AVG : 컬럼 값의 평균      --> 숫자 데이터만 가능
        2) example
            - SELECT SUM(salary) FROM employee WHERE dept_name = 'sales';
            - SELECT COUNT(id) FROM orders WHERE product = 'smartphone';

    9. 별명 (Alias)
        1) SQL 쿼리 결과 생성 시 컬럼명에 대한 별명을 사용해 표시하는 기능
        2) SELECT 컬럼명1 AS 별명1, 컬럼명2 별명2 FROM 테이블명
        3) 조인할 때 많이 사용됨

     


    10. NULL value in Aggregation Function
        1) SELECT SUM(salary) FROM employee;
            - 만약 컬럼 값이 NULL이면 합을 계산할 때 무시
            - 만약 컬럼 값이 모두 NULL이면 NULL이 출력
        2) MAX, MIN, SUM, AVG 경우 NULL이 아닌 값으로만 계산
            - 모두 NULL인 경우 NULL을 리턴
        3) COUNT : NULL이 아닌 값의 개수를 출력
            - 컬럼이 모두 NULL인 경우 0 리턴
        4) 테이블에 레코드가 없는 경우
            - SUM, AVG, MAX, MIN : return NULL
            - COUNT : return 0

    -- 고객이 주문한 도서의 총 판매액을 구하시오
    -- : 의미있는 열 이름 출력시 속성이름의 별칭을 지칭하는 AS 키워드를 사용하여 열이름을 부여
    SELECT SUM(sellprice) AS 총매출 FROM orders;
    
    
    -- 2번 김연아 고객이 주문한 도서의 총 판매액을 구하시오
    SELECT SUM(sellprice) AS total FROM orders WHERE custid = 2;
    
    
    -- 고객이 주문한 도서의 총판매액, 평균값, 최저가, 최고가를 구하시오
    -- total, average, minimum, maximum 
    SELECT SUM(sellprice) AS total, 
            AVG(sellprice) AS average, 
            MIN(sellprice) AS minimum, 
            MAX(sellprice) AS maximum 
    FROM orders;
    
    
    -- 도서 판매 건수를 구하시오
    SELECT COUNT(*) FROM orders;



    11. GROUP BY
        1) 테이블에서 특정 컬럼의 값이 같은 rows를 모아 그룹을 만들고, 그룹별로 검색하기 위해 사용되는 KEYWORD
        2) 그룹에 대한 조건을 추가하려면 HAVING 키워드를 이용
            - WHERE 조건 : 레코드들를 grouping 하기 전에 조건을 검색
            - HAVING 조건 : 레코드들을 grouping 후에 그룹에 대한 조건을 검색
        3) SELECT [DISTINCT] {* | <column_name>, ...}
           FROM <table_name> [WHERE condition]
           [GROUP BY <column_name list> [HAVING condition]]
           [ORDER BY <column_name list> [ASC | DESC]];
        4) Aggregation Function을 제외한 select 문의 컬럼은 GROUP BY 컬럼 리스트에 포함된 컬럼들만 가능함
            - SELECT dept_name, id, AVG(salary) FROM employee
              GROUP BY dept_name;
              ---> return error : select list is not in GROUP BY clause and contains nonaggreated column
        5) example
            - SELECT dept_name, AVG(salary) FROM employee GROUP BY dept_name;
            - SELECT dept_name, AVG(salary) FROM employee GROUP BY 1;

            - SELECT dept_name, AVG(salary) FROM employee GROUP BY dept_name
              HAVING AVG(salary) > 5000000;

    '개발자 수업 > DB' 카테고리의 다른 글

    10. 내장함수  (0) 2021.11.11
    9. SELECT2  (0) 2021.11.11
    7. DML  (0) 2021.11.10
    6. DDL  (0) 2021.11.09
    5. SQL 기초  (0) 2021.11.09

    댓글