본문 바로가기

Structured Query Language/MY_SQL_basic

SQL_Basic 02_Day 03. 데이터 가져오기

Day 03. 데이터 가져오기


1. 데이터 가져오기


우리가 데이터베이스에서 꺼내보고 싶은 데이터는
“고객 리스트 뽑아주세요”
“상품 리스트 뽑아주세요” 와 같이 특정 되어있다.
따라서, 이번 day에서 우리는 원하는 데이터를 가져오는 방법을 배운다.

 

가져올 데이터를 선택하는 키워드

SELECT

 

SELECT 123; --결과: 123
SELECT 1 + 2 + 3; --결과: 6
SELECT “ABC”; -- 결과:“ABC”

 

 

2. 테이블에서 데이터 가져오기


데이터를 가져올 테이블을 지정하는 키워드

 

FROM

 

FROM 특징

  • FROM [테이블이름] 형식으로 사용.
  • 테이블이 어떤 데이터베이스 안에 있는지 데이터베이스 이름도 같이 명시해야 한다.
  • 단, USE키워드를 통해 사용할 데이터베이스를 지정해주었다면 생략가능하다.

 

SELECT 특징

 

모든쿼리에필수포함키워드입니다.

(1)  숫자,문자 데이터를 가져올 수 있습니다.
       SELECT 데이터 형식으로 사용합니다.
(2)  컬럼을 선택해 컬럼의 값을 가져 올 수 있습니다.
      SELECT [컬럼이름] 형식으로 사용합니다.
(3)  * (별표)를 통해 컬럼 전체를 가져올 수 있습니다.
      SELECT * 형식으로 사용합니다.
      * (별표)는 컬럼 전체(ALL)를 의미합니다.

 

 

SELECT, FROM 문법

 

컬럼을 하나만 선택하는 경우

 

SELECT [컬럼이름]
FROM[데이터베이스이름].[테이블이름];

 

컬럼을 여러개 선택하는 경우

 

SELECT [컬럼이름], [컬럼이름],…[컬럼이름]
FROM[데이터베이스이름].[테이블이름];

 

컬럼 전체를 선택하는 경우

 

SELECT *
FROM[데이터베이스이름].[테이블이름];

 

데이터 베이스 지정

 

※ 데이터 베이스를 지정해주지 않으면 테이블을 특정 할 수 없습니다.

 

SELECT [컬럼이름]
FROM[데이터베이스이름].[테이블이름];

 

USE [데이터베이스이름]; --데이터베이스지정
SELECT [컬럼이름]
FROM[테이블이름];

 

 

SELECT name
FROM pokemon.mypokemon;

 

 

 

SELECT *
FROM pokemon.mypokemon;

 

 

 

3.별명 붙이기


가져온 데이터에 별명을 지정하는 키워드

AS

컬럼 이름에 부가 설명을 하거나 불필요한 내용을 제거할때 사용

 

AS 특징

  • AS [컬럼별명] 형식으로 사용.
  • 테이블 내의 실제 컬럼 이름은 변하지 않으며, 별명은 쿼리 내 에서만 유효.
  • 만약 실제컬럼 이름을 변경하고 싶다면, ALTER TABLE 구문을 사용해야함.

 

SELECT [컬럼이름] AS [컬럼별명]
FROM[테이블이름];

 

SELECT number AS national_number
FROM pokemon.mypokemon;

 

 

4. 데이터 일부만 가져오기


가져올 데이터의 로우 개수를 지정하는 키워드

LIMIT

데이터의 일부만 확인하고 싶을때 사용

 

 

LIMIT 특징

  • LIMIT [로우수] 형식으로 사용.
  • 쿼리의 가장 마지막에 위치.
  • 만약 입력한 숫자가 전체row수보다 크다면, 있는row까지만 가져온다.

SELECT number, name
FROM pokemon.mypokemon
mypokemon LIMIT 2;

 

 

 

5. 중복 제거하기


중복된 데이터는 제외하고 같은 값은 한번만 가져오는 키워드

DISTINCT

컬럼에 어떤값들이 있는지 확인하고 싶을때 사용

 

DISTINCT 특징

  • DISTINCT [컬럼이름] 형식으로 사용.
  • SELECT 절에 위치하여 컬럼의 유일한 값들을 가져온다.

 

SELECT DISTINCT type
FROM pokemon.mypokemon;

 

 

6. [실습] 테이블에서 데이터를 가져와보자 (SELECT, FROM)


[포켓몬 데이터 입력 쿼리]

 

DROP DATABASE IF EXISTS pokemon;
CREATE DATABASE pokemon;
USE pokemon;
CREATE TABLE mypokemon (
number int,
name varchar(20),
type varchar(20),
height float,
weight float,
attack float,
defense float,
speed float
);
INSERT INTO mypokemon (number, name, type, height, weight, attack, defense, speed)
VALUES (10, 'caterpie', 'bug', 0.3, 2.9, 30, 35, 45),
(25, 'pikachu', 'electric', 0.4, 6, 55, 40, 90),
(26, 'raichu', 'electric', 0.8, 30, 90, 55, 110),
(133, 'eevee', 'normal', 0.3, 6.5, 55, 50, 55),
(152, 'chikoirita', 'grass', 0.9, 6.4, 49, 65, 45);

 

MISSION (1)
123 곱하기 456을 가져와 주세요.
(힌트) MySQL에서 곱하기 기호(×)는 * 로 표현합니다. (숫자 * 숫자)

 

SELECT 123*456;

 

 

MISSION (2)
2310 나누기 30을 가져와 주세요.
(힌트) MySQL에서 나누기 기호(÷)는 / 로 표현합니다. (숫자 / 숫자)

 

SELECT 2310 / 30 ;

 

 

MISSION (3)
‘피카츄’라는 문자열을 ‘포켓몬’이라는 이름의 컬럼 별명으로 가져와주세요.

 

SELECT "피카츄" AS '포켓몬';

 

 

MISSION (4)
포켓몬테이블에서 모든 포켓몬들의 컬럼과 값전체를 가져와주세요.

 

 

USE pokemon;  -- 데이터 베이스 이름
SELECT *
FROM mypokemon;

 

 

MISSION (5)
포켓몬 테이블에서 모든 포켓몬들의 이름을 가져와주세요.

 

SELECT name
FROM mypokemon;

 

 

MISSION (6)
포켓몬 테이블에서 모든 포켓몬들의 이름과 키, 몸무게를 가져와주세요.

 

USE pokemon;
SELECT name ,height,weight
FROM mypokemon;

 

 

MISSION (7)
포켓몬 테이블에서 포켓몬들의 키를 중복제거하고 가져와주세요.

 

SELECT DISTINCT height
FROM mypokemon;

 

 

MISSION (8)
포켓몬 테이블에서 모든 포켓몬들의 공격력을 2배해 ‘attack2’ 라는 별명으로 이름과 함께 가져와주세요.

 

SELECT name ,attack * 2 AS attack2
FROM pokemon.mypokemon;

 

 

MISSION (9)
포켓몬 테이블에서 모든 포켓몬들의 이름을 ‘이름’이라는 한글별명으로 가져와주세요.

 

SELECT name AS 이름
FROM pokemon.mypokemon;

 

 

MISSION (10)
포켓몬 테이블에서 모든 포켓몬들의 공격력은 ‘공격력’이라는 한글별명으로, 방어력은 ‘방어력 ’이라는
한글별명으로 가져와주세요

 

SELECT attack AS 공격력 ,  defense AS 방어력
FROM pokemon.mypokemon;

 

 

MISSION (11)
현재 포켓몬테이블의 키 컬럼은m단위 입니다. (1m = 100cm)
포켓몬 테이블에서 모든 포켓몬들의 키를 cm단위로 환산하여 ‘height(cm)’라는 별명으로 가져와주세요.
(힌트) 쿼리 내 이름에 괄호‘(, )’가 있을경우 괄호가 쿼리의 한부분을 의미하는지 이름을의미하는지
인지하기 어렵기 때문에, 따옴표(‘’, “”)로 감싸주어 의미를 분명하게 합니다.
※ FLOAT 데이터타입은 입력값의 근사치를 저장하기 때문에, 소수점이 나오는게 정상입니다.

 

SELECT height * 100 AS 'height(cm)' 
FROM pokemon.mypokemon;

 

 

MISSION (12)
포켓몬 테이블에서 첫번째 로우에 위치한 포켓몬 데이터만 컬럼값 전체를 가져와주세요.

 

SELECT *
FROM pokemon.mypokemon
LIMIT 1;

 

MISSION (13)
포켓몬 테이블에서 2개의 포켓몬 데이터만 이름은 ‘영문명’이라는 별명으로,
키는 ‘키(m)’라는 별명으로, 몸무게는 ‘몸무게(kg)’이라는 별명으로 가져와주세요.
(힌트) 쿼리 내 이름에 괄호‘(, )’가 있을 경우 괄호가 쿼리의 한부분을 의미하는지 이름을 의미하는지 인지하기 어렵기 때문에, 따옴표(‘’, “”)로 감싸주어 의미를 분명하게 합니다.

 

SELECT name AS 영문명 , height AS '키(m)' , weight AS '몸무게(kg)'
FROM pokemon.mypokemon
LIMIT 2;

 

 

 

MISSION (14)
포켓몬 테이블에서 모든 포켓몬들의 이름과 능력치의 합을 가져오고,
이때 능력치의 합은 ‘total’이라는 별명으로 가져와주세요.
조건1. 능력치의 합은 공격력, 방어력, 속도의 합을 의미합니다.

 

SELECT name, attack + defense + speed AS total
FROM pokemon.mypokemon;

 

 

MISSION (15)
포켓몬테이블에서 모든 포켓몬들의 BMI 지수를 구해서 ‘BMI’라는 별명으로 가져와 주세요.
이때, 포켓몬을 구분하기 위해 이름도 함께 가져와주세요.
조건1. BMI지수 = 몸무게(kg) ÷ (키(m))²
조건2. 포켓몬 테이블 데이터의 체중은kg 단위, 키는 m 단위입니다.
(힌트) MySQL에서 제곱은 ^ 로 표현합니다. (예시: 10²은 10^2로 표현합니다.)
※ FLOAT 데이터타입은 입력값의 근사치를 저장하기 때문에, 소수점이 나오는게 정상입니다.

 

SELECT name, weight / height ^ 2 AS BMI
FROM pokemon.mypokemon;