본문 바로가기

데이터/SQL

[SQL 기초] SELECT와 연산자

SELECT

  • 조회하는 기능입니다.
  • sql에서 대부분의 구문은 대문자로 사용(가독성을 위해서)합니다.
  • 쿼리가 끝나는 부분에 ; 을 입력하여 가독성을 올릴 수 있습니다.
SELECT column_name FROM table_name;
  • 컴퓨터는 뒤에서부터 읽는데, 테이블 이름을 조회하여 그 테이블 내에 컬럼을 조회합니다.
  • 컬럼명은 쉼표로 구분하여 여러개의 컬럼을 조회할 수 있고 → 입력한 순서대로 반환됩니다.

 

SELECT * FROM table_1
  • 모든 테이블을 조회합니다.
  • 일반적으로 정말 모든 내용을 원하는 것이 아니라면 *을 사용하는 것은 좋지 않습니다. → 테이블이 방대한 경우, 데이터 베이스 서버와 애플리케이션에 트래픽이 발생, 느려질 수 있기 때문
  • 특정 열만 필요하다면 가급적 그 열만 조회합니다.
SELECT first_name, last_name, email FROM customer;
  • custmer 테이블에서 first_name, last_name, email 컬럼 조회하는 쿼리

 

고유한 값만 조회하는 DISTICT

  • 고유한 값, 중복을 제거한 값만 조회하고 싶을 경우에 DISTINCT를 사용합니다.
SELECT DISTINCT column FROM table
  • 조회하고 싶은 컬럼 앞에 DISTINCT 를 작성하면 됩니다.
  • DISTINCT(column)과 같이 괄호를 사용할 수도 있으며 이는 무엇을 호출했는 지 알려주어 가독성을 올려줍니다.
  • 그 테이블, 그 열에 고유한 이름은 몇개인가? 에 대한 문제를 해결할 수 있습니다.

 

COUNT

  • 특정 쿼리 조건에 맞는 입력 행의 개수를 구하는 함수입니다.
  • 특정 열의 개수를 구할 수도 있고, COUNT(*)로 모든 열을 구할 수도 있습니다.
SELECT COUNT(name) FROM table;
  • 어떤 열을 선택하든 같은 결과를 반환합니다 → 행의 개수는 열마다 모두 같기때문입니다
  • → 따라서 보통 COUNT(*)을 사용하지만, 문제를 해결하는 과정에서는 특정 열의 이름을 사용하는 것이 나중에 쿼리를 읽을 때 편할 수도 있다.
  • 다른 명령어와 함께 사용하는 것이 훨신 유용하다
SELECT COUNT(DISTINCT name) FROM table; 
/* 위와 같이 사용하면 고유한 name이 몇개 있는 지 개수를 셀 수 있다. */

 

WHERE

  • 열에 조건을 지정하여 그에 해당하는 행을 반환합니다.
SELECT column1, column2 FROM table WHERE conditions;
  • FROM 절 뒤에 WHERE 절이 나옵니다

비교 연산자

  • ex) ‘3,000원이 넘는 제품은 뭐가 있나?’ 를 조회하기 위한 경우 
= 같다
> 크다
< 작다
>= 크거나 같다
<= 작거나 같다
<> or != 같지 않다

논리 연산자

  • AND : 둘 다 참
  • OR : 둘 중 하나만 참
  • NOT : 지정한 조건과 반대 조건
SELECT * FROM film
WHERE rental_rate > 4 AND replacement_cost >= 19.99
  • rental_rate이 4보다 크고, replacement_cost가 19.99보다 크거나 같은 모든 열 조회

 

ORDER BY

  • 동일한 쿼리를 수행해도 컴퓨터마다 다른 순서로 반환할 수도 있습니다.
  • ORDER BY를 이용해 정렬이 가능합니다.
  • ORDER BY는 마지막에 사용해서 결과를 정렬합니다. (WHERE 문 등을 사용한 후 뒤에 사용)
  • 기본값 - 오름차순
  • ASC - 오름차순
  • DESC - 내림차순
SELECT column_1, column_2 
FROM table
ORDER BY column_1 ASC / DESC 
  • 컬럼별로 오름차순, 내림차순 따로 지정이 가능합니다
SELECT store_id, first_name, last_name FROM customer
ORDER BY store_id DESC, first_name ASC;
/*store_id 는 내림차순, first_name은 오름차순으로 정렬*/
  • 또한, SELECT에서 지정하지 않는 컬럼으로도 정렬이 가능합니다.
SELECT first_name, last_name FROM customer
ORDER BY store_id;

 

LIMIT

  • 쿼리 요청의 가장 마지막에 입력되며, 모든 조건과 필터를 거친 후에 최종적으로 몇개의 행을 표시할 지 설정하는 구문입니다.
  • 비즈니스 문제를 해결하기 위해서는 ORDER BY와 함께 사용합니다.
  • LIMIT 1만 사용하여 테이블의 일반적인 레이아웃을 훑기 위해 사용할 수도 있습니다.
SELECT * FROM payment
WHERE amount != 0
ORDER BY payment_date DESC 
LIMIT 5;

 

BETWEEN

  • BETWEEN 연산자는 값을 값 범위와 비교할 때 사용합니다. 범위를 조회할 때 유용합니다.
  • low 값과 high 값 사이의 값을 조회해볼 수 있습니다
  • WHERE 문 뒤에 사용하는 조건문입니다.
  • NOT BETWEEN 문은 다음과 같다.
    • 값 < 최소 범위 OR 값 > 최대 범위
    • 값 NOT BETWEEN 최소범위 AND 최대범위
    • 즉, 범위를 벗어나는 값만 조회
  • BETWEEN 연산자는 다음과 같습니다
    • 값 >= 최소 범위 AND 값 <= 최대 범위
  • 날짜와 결합해서 사용이 가능합니다.
    • ISO 8601형식 : ‘YYYY-MM-DD’
    • 타임스탬프 형식으로 초까지 반환됩니다.
    • NOT BETWEEN연산자를 사용할 때 꼬일 수 있으니 주의해야 합니다.(자정을 포함할 것인지 말 것인지에 따라 달라짐)
    • 데이터 베이스를 생성할 때, 하루의 시작을 24시로 할 것인지, 0시로 할 것인지 잘 고려해야합니다.
    SELECT * FROM payment
    WHERE payment_date 
    BETWEEN '2007-02-01' AND '2007-02-14';
    /* 이 경우 2007-02-14 00:00:00 까지만 조회하기 때문에 2007-02-14의 값은 볼 수 없다 */
    

 

IN

  • 여러가지 다양한 옵션을 확인하는 경우
  • OR 연산자를 여러번 사용하지 않고 IN 연산자를 활용하여 값이 여러 옵션 목록에 포함되는 지 확인할 수 있는 조건을 생성할 수 있습니다. → 이름이 John 혹은 Robert 인 경우
value IN (option1, option_2, ..., option_n)
  • NOT 연산자와 결합하여 사용할 수 있음
    • 옵션에 해당하지 않는 값들 조회
SELECT * FROM payment
WHERE amount IN (0.99, 1.98, 1.99);
/* amount가 0.99이거나, 1.98이거나, 1.99인 데이터 조회 */

 

LIKE와 ILIKE

  • 단순한 키워드가 아닌 문자열 매칭을 통해 조회 기능 입니다.
  • LIKE는 대소문자를 구분하며, ILIKE는 대소문자 구분 없이 사용합니다.
  • 와일드 카드 문자를 사용하여 조회합니다.
    • % : 문자의 수의 상관 없이 매칭 (0개부터 무한대)
    • _ : 하나의 문자만 있는 경우 매칭
    • ‘A%’ : A로 시작하는 이름 전부 조회
    • ‘%a’ : a로 끝나는 이름 전부 조회
    • ‘Mission Impossible _’ : Mission Impossible 1, 2, 3, 4 조회
    • ‘Version#_ _’ : Version#A4, Version#B3 등 조회

WHERE name LIKE '_her%' → 조합해서 사용이 가능합니다.

  • Cheryl
  • Theresa
  • Sherri

 

위 내용은 Udemy 데이터 역량강화를 위한 SQL 부트캠프 인터넷 강의를 공부하고 정리한 내용입니다.

https://www.udemy.com/course/best-sql-2022/

'데이터 > SQL' 카테고리의 다른 글

구글 코랩에서 빅쿼리 테이블 불러오기  (1) 2024.05.14
[SQL 기초] 문자열 합치기  (0) 2023.04.23
[SQL기초] Timestamp  (0) 2023.04.23
[SQL 기초] JOINS  (0) 2023.04.07
[SQL 기초] GROUP BY  (1) 2023.03.19