[20231229 TIL] SQL과 SQL연산자

Haizel·2023년 12월 30일
1
post-thumbnail

01. SQL(Structured Query Language)


✴︎ SQL이란

SQL은 데이터베이스에서 원하는 데이터를 추출하고 분석하는 데 도움을 주는 쿼리 언어로, 데이터베이스에서 데이터를 추축하고 조작하는 데에 사용하는 데이터 처리 언어이다.

쉽게 말해,

"데이터베이스에 저장된 정보를 쉽게 찾고 정리할 수 있는 도구"

라고 할 수 있다.

💡 쿼리(query)란?

query란 쉽게 얘기해서 데이터베이스(DB)에 정보를 요청하는 것을 말한다.

클라이언트가 서버에게 특정한 키워드에 대한 검색 요청을 하면, DB에서 해당 키워드를 찾아 해당 내용을 서버에게, 최종적으로 클라이언트에게 응답하는 형식이다.

때문에 인터넷 검색 시 http://google.com?serach='nike' 👈 이부분에 해당하는 것이 쿼리이다.

❓ SQL VS NoSQL

가장 큰 차이점은 SQL은 관계형 데이터 베이스(RDBMS)로, 테이블(table)이라는 최소 단위로 구성되며, 이 테이블은 하나 이상의 열(column)과 행(row)으로 이루어졌으며, 모든 데이터가 해당 테이블에 저장된다.

반면 NoSQL은 문서 지향 데이터베이스로, 데이터의 구조가 고정되어 있지 않은 데이터베이스이다.

※ DBMS는 크게 계층형, 망형, 관계형, 객체 지향형, 객체 관계형, 문서형 등이 있다.
※ 많이 쓰이는 MySQL, Oracle, SQLite, PostgresSQL, MariaDB는 모두 관계형 데이터 베이스이다.

👀 DB와 DBMS란?

  • DB(Database) : 데이터의 집합
  • DBMS(Database Managment System) : 데이터 베이스를 관리하고 운영하는 소프트위어
    • DBMS는 대용량의 데이터를 사용하고 저장 관리할 수 있다.
    • DBMS는 공유개념을 가져, 동시에 다른 사용자가 공유할 수 있다.

02. pgAdmin 4 환경 설정


1. database create

2. restore

3. Data Options 설정

4. Query Tool 열기


03 . 기본 SQL 구문 문법


SQL의 연산자란, WHERE절에서 산수와 같은 연산을 수행하기 위해 사용되는, 사전에 예약된 단어 또는 문자를 말한다.

연산자는 SQL문에서 조건을 명시할 때나 여러 개의 조건을 위한 접속사로 사용된다.

  • 산술 연사자
  • 비교 연산자
  • 논리 연산자
  • 부정 연산자

키워드(SELECT, FROM 등)은 대/소문자 둘다 가능하지만, 사용자가 작성한 열과 테이블 이름과 ↔️ 기본 SQL 구문 문법을 구분하기 위해 보통 대문자로 표기한다.


① SELECT, FROM

✔️ 기본 문법

SELECT  column FROM table
  • 모든 열 데이터 보기(전체) : SELECT * FROM film;

  • 특정 열 보기 : SELECT title FROM film;


② SELECT DISTINCT column FROM table

해당 열에서 중복되지 않는, 고유한 값만 반환하고 싶을 때 사용한다.

✔️ 기본 문법

SLECT  DISTINCT `column` FROM `table`

 SLECT  DISTINCT(`column`) FROM `table`
  • DISTINCT 키워드에 column값을 직접 넘겨줄 수 있다.

③ SELECT COUNT column FROM table

해당 열의 개수를 구하고 싶을 때 사용한다.

✔️ 기본 문법

 SELECT COUNT column FROM table
  // SELECT COUNT realease_year FROM film;

SELECT COUNT(column) FROM table
  // SELECT COUNT (realease_year) FROM film;

✔️ 문법 활용

해당 열에서 고유한 값이 몇개인지 구하고 싶을 때 사용한다.

SELECT COUNT (DISTINCT column) FROM table
   // SELECT COUNT (DISTINCT realease_year) FROM film;

④ SELECT WHERE

열에 조건을 지정하여 그에 맞는 행이 반환되도록 할때 사용한다.

✔️ 기본문법

SELECT column1, column2 FROM table WHERE conditions;

✔️ 예제

❶ 이름이 'David'인 사람이 선택한 색상 값을 구해라.

SELECT name, choice FROM table WHERE name='David';

❷ 이름이 'David'이고 선택한 색이 'Red'인 행을 구하라.

SELECT name, choice FROM table WHERE name='David' AND choice=Red;

❸ 렌탈료가 4달러 이상인 행을 구하라

SELECT *`FROM film WHERE rental_rate > 4;

❹ 렌탈료가 4달러 이상인 영화의 개수를 구하라

SELECT COUNT(title) FROM film WHERE rental_rate > 4;

💡 조건을 적용하여 필터링할 때는 열을 두 개 이상 선택해야 한다.


⑤ ORDER BY

PostgreSQL에서 가끔 동일한 요청에 대해 쿼리 결과를 다른 순서로 반환할 때가 있다. 이 문제를 해소하기 위해 요청 쿼리 결과를 특정한 순서로 표시하고 싶다면, ORDER BY를 이용할 수 있다

ORDER BY를 이용해 열의 값에 따라 오름차순 또는 내림차순으로 행을 정렬 할 수 있다. 또한 ORDER BY를 여러 열에 사용할 수 있다.

  • 문자열 : 알파벳 순
  • 숫자열 : 번호순

✔️ 기본 문법

SELECT column_1, column_2 FROM table ORDER BY column_1 ASC / DESC
  1. 표에서 정렬을 원하는 열을 선택을 선택한 후, 어떤 열을 기준으로 정렬할 지 결정한다.

  2. 쿼리 맨 마지막에 오름차순(ASC) 또는 내림차순(DESC)으로 정렬 방식을 결정한다.

  3. 이떄 정령 방식을 정하지 않으면, 기본값으로 오름차순 정렬이 된다.

💡 선택(SELECT)이나 필터링(WHERE) 구문이 있을 경우, ORDER BY 앞에 입력한다


✔️ 예제

SELECT Company, Name,  Sales FROM table ORDER BY Company, Sales;
  • 3개의 열(Company, Name, Sales)을 Company 열을 기준으로 정렬 한 후, Sales열을 기준으로 정렬한다.

SELECT store_id, first_name, last_name FROM customer
ORDER BY store_id DESC, first_name ASC;
  • 각 열마다 정렬 기준을 결정할 수 있다.

  • 또한 SELECT 요소에서 store_id를 제거해도 동일한 순서로 정렬되는데, SELECT문은 실제로 요청하지 않은 열로도 정렬된다.

💡 SELECT으로 A열을 설정하지 않아도, ORDER BY를 통해 A열을 기준으로 정렬할 수 있다. 하지만 보편적으로 정렬 기준이 되는 열(ORDER BY)은 선택(SELECT)하는 것이 좋다.


⑥ LIMIT

LIMIT은 쿼리에 대해 반환되는 행의 개수를 제한할 수 있는 명령어이다.

특히 LIMIT은 테이블의 모든 행을 반환하는 것이 아니라, 상위 몇 개의 행만 표시하여 테이블 레이아웃을 파악하려고 할 때 유용하다.

✔️ 기본 문법

LIMIT은 쿼리 요청의 가장 아래로 내려가며, 가장 마지막에 실행되는 명령이다.

👉 LIMIT이 하는 일을 생각하면 당연하다. 왜냐하면 LIMIT이 하는 일은 WHERE문으로 필터링하고, ORDER 문으로 정렬 및 분류를 거친 다음 LIMIT을 통해 최적적으로 몇 개의 행을 표시할 건지 결정하기 때문이다.


✔️ 예제

❶ payment Table에서 가장 최근에 구매한 10건의 행을 반환하라.

SELECT * FROM payment

ORDER BY pament_date DESC

LIMIT 10;

❷ payment Table에서 가장 최근에 구매한 10건의 행을 반환하라(단, 결제 금액은 0 이상이어야 한다.)

SELECT * FROM payment

WHERE amount != 0.00 또는 WHERE amount > 0.00

ORDER BY pament_date DESC

LIMIT 10

⑦ BETWEEN 연산자

BETWEEN 연산자는 값을 값 범위와 비교할 때 사용한다.

BETWEEN 연산자는 WHERE문 뒤에 사용하는 조건문으로 쓰인다.

대표적으로 low값과 high값 사이의 값을 조회해 볼 수 있다. 이때 low값과 high값도 포함된다.


✔️ 기본 문법

❶ 이상 / 이하

SELECT * FROM payment

WHERE value BETWEEN low AND high

=== value >= low AND value <= high

❷ NOT BETWEEN (!)


SELECT * FROM payment

WHERE value NOT BETWEEN low AND high

=== value < low OR value > high
  • low와 high 사이에 포함되지 않는 값


✔️ 예제

SELECT * FROM payment

WHRER date BETWEEN '2007-01-01' AND '2007-02-01';

💡 날짜를 비교할 땐, 타임스탬프 정보도 포함되기 때문에 날짜뿐만 아니라 시간, 분, 초도 모두 포함된다.

따라서 날짜를 비교할 땐 주의가 필요하며, 특히 자정(00:00)을 포함할 것인지 결정해야 한다.

예를 들어 12/11 ~ 12/12일까지의 기록을 보고 싶다면,
-> ~ AND '2023-12-12' 는 11일의 자정(24:00)까지가 되므로, ~AND '2023-12-13'로 해야 12일의 자정(24:00)까지의 데이터를 필터링할 수 있다.


⑧ IN 연산자

테이들의 1개 이상의 다중 옵션을 확인해야 할 때 사용하며, 옵션에 대해 OR문을 적용한다.


✔️ 기본 문법

❶ option1이나 option2를 포함한 열의 정보를 반환

SELECT * FROM table
WHERE value IN('option1', 'option2');

❷ option1이나 option2를 포함하지 않은 열의 정보를 반환

SELECT * FROM table
WHERE value NOT IN('option1', 'option2');

✔️ 예제

SELECT * FROM payment
WHERE color IN('red', 'blue');

⑨ LIKE와 ILIKE 연산자

문자열 데이터에 대한 패턴 매칭을 할 때 사용한다. 이때 LIKE는 대소문자를 구분하고, ILIKE는 대소문자를 구분하지 않는다.
ex. @gmail.com으로 끝나는 모든 이메일 결과 반환

✔️ 와일드 카드

❶ % (퍼센트)

문자의 순서나 문자의 수에 상관 없이 매칭된다.

case% : case로 시작하는 값 (수, 순서 관계 없이)

대문자 A로 시작하는 값들을 순서에 상관없이 알고싶을때

~

WHERE name Like A%

%case : case로 끝나는 값 (수, 순서 관계 없이)

대문자 A로 끝나는 값들을 순서에 상관없이 알고싶을때

~

WHERE name Like %A

❷ 2. _ (언더바)

단 하나의 문자만 매칭되며, 문자열 내에 있는 하나의 문자만 사용되는 와일드카드이다.

~

WHERE name Like '_her%''
  • Cherisy
  • Sherry

👉 더 많은 SQL 연산자가 궁금하다면 Click!



profile
한입 크기로 베어먹는 개발지식 🍰

0개의 댓글

관련 채용 정보