SQL(1)(select, from, limit, where, Comparison Operators, Logical Operators)

https://mode.com/sql-tutorial

위의 사이트에서 SQL에 대해 공부할 예정이다.

SQL이란?

SQL(Structured Query Language)은 관계형 데이터베이스에서 데이터를 관리하기 위해 설계된 프로그래밍 언어이다. SQL에는 사용자가 데이터를 읽고, 조작하고, 변경할 수 있는 다양한 기능이 있다.

데이터베이스란?

데이터의 조직 모음.

테이블은 스키마로 구성된다. 모드에서는 업로드 한 사용자를 중심으로 테이블을 구성하여 각 사용자가 자신의 스키마를 갖도록 한다.

SELECT 및 FROM

select는 보려는 열, 해당 열이 from 있는 테이블을 식별한다.

1
2
3
4
SELECT year,
       month,
       west
  FROM tutorial.us_housing_units
cs

아래와 같이 지정한 테이블의 year, month, west 세가지의 열을 볼 수 있다.







1
2
SELECT *
  FROM tutorial.us_housing_units
cs

다음과 같이 작성하면 지정한 테이블의 모든 열을 볼 수 있다.







연습문제

tutorial.us_housing_units테이블의 *을 사용하지 않고 모든 열을 선택하는 쿼리를 작성

1
2
3
4
5
6
7
8
SELECT year,
       month,
       month_name,
       west,
       midwest,
       south,
       northeast
  FROM tutorial.us_housing_units
cs

결과는 위의 *를 사용했을 때와 동일하다.

쿼리를 실행하면?

위와 같이 쿼리를 실행하면 테이블을 얻는다. 그러나 그 테이블은 데이터베이스에 영구적으로 저장되지 않는다. 또한 데이터베이스의 테이블을 변경하지 않는다. select명령문은 기본 테이블에서 아무것도 변경하지 않는다.

서식 규칙

select 및 from 명령이 대문자로 표시되어 있지만 소문자로 입력해도 상관없다. 또한, 하나의 공백, 여러 공백 또는 줄 바꿈을 동일한 것으로 취급한다.

열이름

열이름이나 테이블이름에 공백 대신 _를 사용한다. 열 이름에 공백을 넣으려면 항상 ""로 해당 열을 참조해야하기 때문이다.

다음과 같이 열 이름을 바꿀 수 있다.

1
2
SELECT west AS "West Region"
  FROM tutorial.us_housing_units
cs

1
2
3
SELECT west AS West_Region,
       south AS South_Region
  FROM tutorial.us_housing_units
cs

위와 같이 하면 대문자로 인식이 되지 않는다.

연습문제

모든 열을 선택하는 쿼리를 작성하고 첫 글자가 대문자가되도록 이름을 바꾼다.

1
2
3
4
5
6
7
8
SELECT year as "Year",
       month as "Month",
       month_name as "Month_name",
       west as "West",
       midwest as "Midwest",
       south as "South",
       northeast as "Northeast"
  FROM tutorial.us_housing_units
cs







LIMIT

많은 쿼리의 목적은 단순히 특정 테이블이 어떻게 보이는지 확인하는 것이다. 테이터의 처음 몇 행을 스캔하여 관심있는 필드와 해당 필드를 조작 할 방법에 대한 아이디어를 얻을 수 있다. 매우 큰 테이블을 limit을 사용하지 않으면 모든 결과가 표시될 때까지 오랜시간 동안 기다려야한다.

다음 구문은 데이터를 100개로 제한한다.

1
2
3
SELECT *
  FROM tutorial.us_housing_units
 LIMIT 100
cs








연습문제

limit명령을 사용하여 결과 집합을 15개 행으로만 제한하는 쿼리를 작성

1
2
3
SELECT *
  FROM tutorial.us_housing_units
 LIMIT 15
cs







WHERE

where은 다음과 같이 조건을 사용하여 데이터를 필터링하는 것이다.

1
2
3
SELECT *
  FROM tutorial.us_housing_units
 WHERE month = 1
cs






Comparison Operators

수치 데이터









예를 들어, 서부지역에서 30,000개 이상의 주택을 생산 한 행만 반환할 때 

1
2
3
SELECT *
  FROM tutorial.us_housing_units
 WHERE west > 30
cs







연습문제

서부지역은 한 달에 50,000개 보다 더 많은 주택을 생산 한 적이 있습니까?

1
2
3
SELECT *
  FROM tutorial.us_housing_units
 WHERE west > 50
cs






남부 지역에서 한 달에 20,000개 이하의 주택을 생산 한 적이 있습니까?

1
2
3
SELECT *
  FROM tutorial.us_housing_units
 WHERE south <= 20
cs






숫자가 아닌 데이터

SQL은 ''를 사용하여 열 값을 참조

1월이 아닌 행

1
2
3
SELECT *
  FROM tutorial.us_housing_units
 WHERE month_name != 'January'
cs







1
2
3
SELECT *
  FROM tutorial.us_housing_units
 WHERE month_name > 'January'
cs







SQL이 알파벳 순서를 처리하는 방식은 까다롭다. 아래 쿼리에서 J이상으로 시작하는 행만 생성된다. 'Ja'가 'J'보다 큰 것으로 간주한다.

1
2
3
SELECT *
  FROM tutorial.us_housing_units
 WHERE month_name > 'J'
cs







연습문제

월 이름이 February인 행만 표시하는 쿼리를 작성

1
2
3
SELECT *
  FROM tutorial.us_housing_units
 WHERE month_name = 'February'
cs







month_name가 "N"으로 시작하거나 이전의 문자로 시작하는 행만 표시하는 쿼리

1
2
3
SELECT *
  FROM tutorial.us_housing_units
 WHERE month_name < 'O'
cs







SQL 산술

연산자를 사용하여 연산 수행을 할 수 있다. 그러나 SQL에서는 주어진 행의 값에 대한 열에 대해서만 산술을 수행할 수 있다.

다음 예는 각 행의 south와 west열에 있는 항목의 합계를 표시하는 열을 생성

1
2
3
4
5
6
SELECT year,
       month,
       west,
       south,
       west + south AS south_plus_west
  FROM tutorial.us_housing_units
cs







열 이름과 실제 숫자를 포함하여 산술 함수를 연결할 수 있다.

1
2
3
4
5
6
SELECT year,
       month,
       west,
       south,
       west + south - 4 * year AS nonsense_column
  FROM tutorial.us_housing_units
cs







산술 함수를 포함하는 열은 기본 데이터에있는 정보를 수정하여 생성되기 때문에 "파생 열"이라고 한다.

연습문제

별도의 열에 4개 지역의 합계를 계산하는 쿼리

1
2
3
SELECT *,
      south + west + midwest + northeast as total
  FROM tutorial.us_housing_units
cs







중서부 및 북동부 지역을 합친것보다 서부 지역에서 더 많은 단위가 생산 된 모든 행을 반환하는 쿼리

1
2
3
SELECT *
  FROM tutorial.us_housing_units
 where (midwest + northeast) < west
cs







각 지역이 대표하는 미국에서 완공 된 모든 주택의 비율을 계산하는 쿼리, 2000년 이후의 결과만 반환

1
2
3
4
5
6
7
8
9
10
11
12
SELECT year,
       month,
       west,
       south,
       midwest,
       northeast,
       west/(west + south + midwest + northeast)*100 as west_percentages,
       south/(west + south + midwest + northeast)*100 as south_percentages,
       midwest/(west + south + midwest + northeast)*100 as midwest_percentages,
       northeast/(west + south + midwest + northeast)*100 as northeast_percentages
  FROM tutorial.us_housing_units
  WHERE year >= 2000
cs







Logical Operators

논리 연산자를 사용하면 하나의 쿼리에서 여러 비교 연산자를 사용할 수 있다.

- LIKE : 정확한 값 대신 유사한 값을 일치시킬 수 있다.

- IN : 포함 할 값 목록을 지정할 수 있다.

- BETWEEN : 특정 범위 내의 행만 선택할 수 있다.

- IS NULL : 주어진 열에 데이터가 없는 행을 선택할 수 있다.

- AND : 두 가지 조건을 만족하는 행만 선택할 수 있다.

- OR : 두 조건 중 하나를 만족하는 행을 선택할 수 있다.

- NOT : 특정 조건과 일치하지 않는 행을 선택할 수 있다.



댓글

이 블로그의 인기 게시물

SQL(9)(performance tuning queries, pivoting data)

데이터 크롤링(3주차)

SQL(8)(writing subqueries, window functions)