스터디/SQL

[SQL] SELECT

latter2005 2021. 2. 26. 22:34

SELECT

하나 이상의 테이블에서 특정 데이터를 추출하는 SQL의 기본 언어입니다.

FROM 와 같이 사용해야 하며, WHERE, GROUP BY, HAVING, ORDER BY와 함께 사용하며 다음과 같은 의미를 가집니다.

  • SELECT : 테이블에서 항목, 즉 특정 열을 선택합니다. SELECT * : 모든 열을 가져옵니다. DISTINCT를 이용해서 중복을 빼고 추출할 수 있습니다.
  • FROM : 어떤 테이블에서 해당 내용을 가져올지 선택합니다.
  • WHERE : 테이블의 레코드, 즉 열에 조건을 거는 선택 절이며 =, !=, <, 등 연산자를 이용합니다.
  • GROUP BY : SELECT 연산 절의 연산이 해당 그룹에 적용되도록 하며 열을 기준으로 그룹으로 묶습니다.
  • HAVING : GROUP BY에 의해 정의된 그룹들 중에서 검색을 합니다.
  • ORDER BY : 어떤 열을 기준으로 순서를 지정합니다. ORDER BY " " DESC를 통해 역순으로 정렬할 수 있습니다.

 

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

모든 레코드 조회하기

SELECT * from ANIMAL_INS order by ANIMAL_ID;

 

역순 정렬하기

SELECT * from ANIMAL_INS order by ANIMAL_ID;

 

아픈 동물 찾기

SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION="Sick";

 

어린 동물 찾기

SELECT ANIMAL_ID, NAME FROM ANIMAL_INS WHERE INTAKE_CONDITION!="Aged" order by ANIMAL_ID;

 

동물의 아이디와 이름

SELECT ANIMAL_ID, NAME NAME from ANIMAL_INS order by ANIMAL_ID;

 

여러 기준으로 정렬하기

SELECT ANIMAL_ID, NAME, DATETIME
FROM ANIMAL_INS
ORDER BY  NAME, DATETIME DESC, ANIMAL_ID;

아이디, 이름, 보호 시작일을 기준으로 정렬해야 합니다.

이때 같은 이름인 경우 ANIMAL_ID를 무시하고 보호를 나중에 시작한 동물을 먼저 보여주어야 하므로 NAME, DATETIME, ANIMAL_ID 순으로 정렬을 하며 DATETIME은 역순으로 DESC를 적용해줍니다.

 

상위 N개 레코드

MYSQL에선 LIMIT 절을 이용합니다.

SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME LIMIT 1;

Oracle에서는 limit가 없으므로 서브 쿼리를 이용해서 풀어야 합니다. DATETIME 기준으로 정렬된 NAME 서브쿼리를 만들고  rownum = 1을 이용해 하나를 가저옵니다.

SELECT NAME
FROM (SELECT NAME FROM ANIMAL_INS ORDER BY DATETIME)
WHERE rownum = 1;
반응형

'스터디 > SQL' 카테고리의 다른 글

[SQL] String, Date 처리  (0) 2021.03.03
[SQL] Join  (0) 2021.03.02
[SQL] NULL 처리  (0) 2021.02.28
[SQL] GROUP BY  (0) 2021.02.28
[SQL] 집계 함수  (0) 2021.02.26