본문 바로가기
CS/Database

[Edwith] 4. DML - Select 알아보기

by 쵸빙 2020. 4. 16.

이번 시간에는 MySQL에서 많이 쓰이는 DML 중 SELECT에 대해 알아보도록 하겠다.

 

 

데이터 조작어(Data Manipulation Language, DML)의 종류

-데이터 조작어는 모두 동사로 시작한다.

-시작하는 동사에 따라서 다음과 같이 4가지 조작어가 있다.

SELECT검색

INSERT등록

UPDATE수정

DELETE삭제

이 중 오늘은 SELECT에 대해 알아보도록 하겠다.

 

 

SELECT 구문의 기본문형

SELECT (DISTINCT) 칼럼명(ALIAS)

FROM 테이블명;

SELECT

검색하고자하는 데이터(칼럼)를 나열한다.

DISTINCT

중복행을 제거

ALIAS

나타날 컬럼에 대한 다른 이름 부여

FROM

선택한 컬럼이 있는 테이블을 명시한다.

 

SELECT 구문 예제(전체 데이터 검색)

-전체 데이터 검색

-SELECT 뒤에 *를 기술함으로써 나타낼 수 있다.

-DEPARTMENT 테이블의 모든 데이터를 출력해보자.

 

SELECT 구문 예제(특정 컬럼 검색)

-SELECT 뒤에 컬럼을 콤마(,)로 구별해서 나열

: employee 테이블에서 직원의 사번(empno), 이름(name), 직업(job)을 출력하시오.

어떤 칼럼이 있는지는 desc 명령으로 확인

SELECT empno, name, job from EMPLOYEE;

 

 

SELECT 구문 예제(특정 컬럼에 Alias 부여하기)

SELECT empno as 사번, name as 이름, job as 직업 from EMPLOYEE;

 

 

SELECT 구문 예제(컬럼의 합성(Concatenation))

-문자열 결합함수 concat 사용

-: employee 테이블에서 사번과 부서번호를 하나의 칼럼으로 출력하시오.

SELECT concat(empno, ‘-‘, deptno) AS ‘사번-부서번호’

FROM employee;

 

 

SELECT 구문 예제(중복행의 제거)

-중복되는 행이 출력되는 경우, DISTINCT 키워드로 중복행을 제거

-: 사원 테이블의 모든 부서번호를 출력하시오. (사원 수만큼 출력된다.)

SELECT deptno FROM employee;

 

 

-2: 사원 테이블의 부서번호를 중복되지 않게 출력하시오.

SELECT DISTINCT deptno FROM employee;

 

 

 

SELECT 구문 예제(정렬하기)

ORDER BY 절

SELECT (DISTINCT) 칼럼명(ALIAS)

FROM 테이블명

ORDER BY 칼럼이나 표현식 (ASC 또는 DESC);

-ASC : 오름차순 정렬, 기본값

-DESC : 내림차순

 

-: employee 테이블에서 직원의 사번(empno), 이름(name), 직업(job)을 출력하시오.

, 이름을 기준으로 오름차순 정렬합니다.

SELECT empno, name, job FROM employee order by name;

SELECT empno as 사번, name as 이름, job as 직업 FROM employee ORDERED BY 이름;

-SELECT 구문 예제 (ALIAS를 사용하지 않았을 경우)

 

-: employee 테이블에서의 직원의 사번(empno), 이름(name), 직업(job)을 출력하시오.

, 이름을 기준으로 내림차순 정렬합니다.

SELECT empno, name, job FROM employee ORDER BY name DESC;

 

 

SELECT 구문 예제(특정 행 검색 – where)

SELECT (DISTINCT) 칼럼명(ALIAS)

FROM 테이블명

WHERE 조건식

ORDDER BY 칼럼이나 표현식 (ASC 또는 DESC)

 

-조건식 : 컬럼이름이나 표현식의 상수, 연산자로 구성

: WHERE titlte = ‘Staff’

      WHERE salary BETWEEN 1000 AND 2000

 

* 산술비교 연산자

-: employee 테이블에서 고용일(hierdate)1981년 이전의 사원 이름과 고용일을 출력하시오.

SELECT name, hierdate FROM employee WHERE hierdate < ‘1981-01-01’

 

 

* 논리연산자

-: employee 테이블에서 부서번호가 30인 사원이름과 부서번호를 출력하시오.

SELECT name, deptno from employee where deptno = 30;

 

 

* IN 키워드

-: employee 테이블에서 부서번호가 10 또는 30인 사원이름과 부서번호를 출력하시오.

SELECT name, deptno FROM employee where deptno in (10, 30);

 

 

* LIKE 키워드

-와일드 카드를 사용하여 특정 문자를 포함한 값에 대한 조건을 처리

-%0에서부터 여러 개의 문자열을 나타냄

-_는 단 하나의 문자를 나타내는 와일드 카드

-: employee 테이블에서 이름에 ‘A’가 포함된 사원의 이름(name)과 직업(job)을 출력하시오.

SELECT name, job FROM employee WHERE name LIKE ‘%A%’;

 

 

* UCASE, UPPER

-from 다음에 테이블이 없을 경우에는 테이블에서 조회하는 것이 아니다.

 

 

* LCASE, LOWER

 

* substring

 

* LPAD, RPAD

 

 

* TRIM, LTRIM, RTRIM

 

 

* ABS(x)

-x의 절대값을 구한다.

 

 

* MOD(n, m) % : nm으로 나눈 나머지 값을 출력한다.

 

 

SELECT 구문 예제(함수의 사용)

FLOOR(x) x보다 크지 않은 가장 큰 정수를 반환한다. BIGINT로 자동 변환한다.
CEILING(x) x보다 작지 않은 가장 작은 정수를 반환한다.
ROUND(x) x에 가장 근접한 정수를 반환한다.
POW(x, y), POWER(x, y)  x y제곱 승을 반환한다.
GREATEST(x, y, …) 가장 큰 값을 반환한다.
LEAST(x, y, …)  가장 작은 값을 반환한다.

CURDATE(), CURRENT_DATE

오늘 날짜를 YYYY-MM-DD YYYYMMDD 형식으로 반환한다.
CURTIME(), CURRENT_TIME 현재 시각을 HH:MM:SS HHMMSS 형식으로 반환한다.

NOW(), SYSDATE(),CURRENT_TIMESTAMP

오늘 현시각을 YYYY-MM-DD HH:MM:SS YYYYMMDDSS 형식으로 반환한다.

DATE_FORMAT(date, format)

입력된 date format 형식으로 반환한다.
PERIOD_DIFF(p1, p2) YYMM이나 YYYYMM으로 표기되는 p1과 p2의 차이 개월을 반환한다.

 

 

SELECT 구문 (CAST 형변환)

-CAST 함수는 type을 변경(지정)하는 데 유용하다.

-CAST 함수의 사용법: CAST(expression AS type) 또는 CONVERT(expression, type)

-MySQL 타입 : BINARY, CHAR, DATE, DATETIME, SIGNED (INTEGER), TIME, UNSIGNED (INTEGER)

 

 

SELECT 구문 (그룹함수)

COUNT(expr)

non-NULLrow의 숫자를 반환

COUNT(DISTINCT expr, [expr…])

non-NULL인 중복되지 않은 row의 숫자를 반환

COUNT(*)

row의 숫자를 반환

AVG(expr)

expr의 평균값을 반환

MIN(expr)

expr의 최소값을 반환

MAX(expr)

expr의 최대값을 반환

SUM(expr)

expr의 합계를 반환

GROUP_CONCAT(expr)

그룹에서 concatenated한 문자를 반환

VARIANCE(expr)

분산

STDDEV(expr)

expr의 표준 편차를 반환

 

-: employee 테이블에서 부서번호가 30인 직원의 급여 평균과 총합계를 출력하시오.

SELECT AVG(salary), SUM(salary)

FROM employee

WHERE deptno = 30;

 

 

-: employee 테이블에서 부서별 직원의 부서번호, 급여 평균과 총합계를 출력하시오.

 

다음 시간에는 또다른 DML 중 하나인 INSERT에 대해 배우도록 하겠다.

'CS > Database' 카테고리의 다른 글

[Edwith] 6. DML - UPDATE 알아보기  (0) 2020.04.16
[Edwith] 5. DML - INSERT 알아보기  (0) 2020.04.16
[Edwith] 3. 테이블 관리  (0) 2020.04.15
[Edwith] 2. SQL 소개  (0) 2020.04.15
[Edwith] 1. Introduction  (0) 2020.04.15