[SQL] 2장. 데이터 가져오기

김상현·2022년 9월 18일
0

SQL

목록 보기
2/22
post-thumbnail

[손에 잡히는 10분 SQL - 벤 포터 지음, 박남혜 옮김] 책의 학습 후 정리자료입니다.


📍 SELECT 문

📒 키워드

  • SQL 언어의 일부분인 예약어를 말하며, 키워드는 테이블 이름 또는 열 이름으로 사용할 수 없다.

📌 하나의 열 가져오기

# SQL
SELECT prod_name
FROM Products;

  • 위 문장은 Products 테이블에서 prod_name이라고 불리는 하나의 을 가져오기 위해 SELECT 문을 사용하였다. SELECT 키워드 바로 오른쪽에 가져오고 싶은 열 이름을 적고, FROM 절에는 가져올 데이터가 있는 테이블의 이름을 적는다.
  • 이 쿼리문을 집적 실행해보면 데이터가 앞서 본 것과 다른 순서로 출력될 수 있다. 쿼리 결과를 정렬하겠다고 명시하지 않으면, 데이터는 의미 없는 순서로 반환된다.
  • 여러 SQL 문을 사용할 때는 반드시 세미콜론(;)으로 분리해야 한다.
  • SQL 문은 대소문자를 구분하지 않는다.
  • 하지만 많은 SQL 개발자들은 SQL 키워드는 대문자로 작성하고 열 이름이나 테이블 이름은 소문자로 작성한다.

📌 여러개의 열 가져오기

  • 테이블에서 여러 열을 가져올 때, SELECT 키워드 옆에 가져오려는 열 이름을 콤마(,)로 구분하여 모두 나열한다.
# SQL
SELECT prod_id, prod_name, prod_price
FROM Products;

  • 이 문장은 SELECT 문을 사용하여 Products 테이블에서 데이터를 가져오는데, prod_id, prod_name, prod_price 3개의 열 이름을 나열하였고, 각 열은 콤마(,)로 구분하였다.

📌 모든 열 가져오기

  • 열 이름을 일일이 나열하지 않고 와일드카드 문자(*)를 사용하여 모든 열을 가져올 수도 있다.
SELECT *
FROM Products;

  • 와일드카드 문자(*)를 사용하면, 테이블의 모든 열이 반환되는데, 열의 순서는 일반적으로 테이블에서 정의한 순서대로 불러온다.

❗️ 와일드카드 문자의 사용

  • 테이블에 있는 모든 열이 필요하지 않다면, 와일드 카드 문자(*)를 사용하지 않는 것이 더 낫다. 원하는 열을 직접 적는 것보다 와일드 카드 문자를 쓰는 것이 시간과 노력을 절약할 수 있지만, 불필요한 열을 가져와 검색 성능을 저하한다.

📌 행의 중복 출력 방지하기

SELECT vend_id
FROM Products

  • 실제 목록에서 BRS01, DLL01, FNG01 로 3개의 판매처를 가지고 있지만 결과는 9개의 레코드를 호출한다.
  • 그 이유는 Products 테이블이 9개의 레코드로 구성되어 있기 때문이다.
  • 이를 해결하기 위해서는 열 이름 바로 왼쪽에 DISTINCT 키워드를 사용하면 된다.
  • DISTINCT 키워드는 중복되는 값을 제거한다.
SELECT DISTINCT vend_id
FROM Products

❗️ DISTNCT를 부분적으로 적용할 수는 없다.

  • DISTINCT 키워드는 모든 열에 일괄 적용된다. 하나의 열에만 부분적으로 적용할 수는 없다. 만약 SELECT DISTINCT a, b FROM table 라고 적는다면 지정된 두 항목을 결합하여 생성된 고유한 조합이 반환된다.

📌 결과 제한하기

  • SELECT 문은 지정한 테이블에서 일치하는 모든 행을 가져온다.
  • 만약 첫 번째 행이나 특정 몇 행만 가져오고 싶다면 각 DBMS에서 제공하는 SQL 키워드를 사용해야 한다.
  • MySQL, MariaDB, PostgreSQL 이나 SQLite 를 사용한다면 LIMIT 키워드를 사용하면 된다.
SELECT prod_name
FROM Products
LIMIT 3, 4;
  • LIMIT 3, 4; 의 의미는 Products 테이블에서 추출한 prod_name 열의 레코드 중 인덱스 3 부터 4 개 즉, 인덱스 6번가지의 레코드를 반환하는 것을 의미한다.

📒 SQL은 모두 똑같지 않다.

  • SQL은 여러 실행 환경이 있음에도 불구하고 문법이 꽤 일관성이 있는 편이지만 항상 그것에 의존하면 안 된다. 기본적인 명령문은 서로 호환해서 사용할 수 있지만, 좀 더 복잡한 명령문은 다른 실행 환경에서는 사용하기 어렵다. 문제를 해결해 줄 SQL 문을 인터넷에서 검색할 때, 찾은 해법이 DBMS와는 호환되지 않을 수 있다는 점을 염두에 두어야 한다.

📌 주석 사용하기

  • SQL 문은 DBMS에 의해 처리되는 지시어(instructions)이다.

📒 스크립트(Script)

  • CPU가 아닌 다른 프로그램에 의해 번역되거나 수행되는 프로그램들이나 명령어들의 나열
SELECT prod_name -- 주석
FROM Products
  • 2개의 하이픈(--)을 사용하여 한 줄 주석을 달 수 있다.
  • 위 형태의 주석을 사용하여 CREATE TABLE 문에서 열에 대한 설명을 적는 것은 바람직한 사용 방법이다.
SELECT prod_name # 주석
FROM Products
  • # 으로 시작하는 문장은 주석으로 처리된다.
  • 현재 이 방법은 자주 사용되지 않는다.
/*SELECT prod_name
FROM Products*/
SELECT prod_name
FROM Products
  • /* 으로 시작해서 */ 으로 끝나는 문장은 주석으로 처리된다.
  • 여러 행에 걸친 주석을 작성해야 할 때 사용한다.

📌 도전 과제

  1. Customers 테이블에서 모든 고객 ID(cust_id)를 가져오는 SQL 문을 작성하라.
SELECT cust_id
FROM Customers;

  1. OrderItems 테이블에는 주문 목록을 모두 저장한다(일부는 여러 번 주문되었다). 주문한 제품 목록(prod_id)을 가져오는 SQL 문을 작성하라(모든 주문이 아니라 고유한 제품 목록이다). 결과로 7개의 행이 표시되어야 한다.
SELECT DISTINCT prod_id
FROM OrderItems;

  1. Customers 테이블에서 모든 열을 가져오는 SQL 문을 작성해 보고 고객 ID만 가져오는 SELECT 문을 작성하라. 한 문장을 주석 처리하여 하나만 실행하게 한다(그러고 나서 다른 문장을 주석 처리하여 실행한다).
SELECT *
FROM Customers;
/* SELECT cust_id
FROM Customers; */

/* SELECT *
FROM Customers; */
SELECT cust_id
FROM Customers;

profile
목적 있는 글쓰기

0개의 댓글