본문 바로가기
MySQL

[TIL 220120] 데이터 조작어(DML) SELECT문 및 연산자

by 사장님나빠여 2022. 1. 20.

# SELECT문 및 연산자

SELECT문은 데이터베이스로부터 젖아되어 있는 데이터를 검색 하는데 사용한다.

 

-Select [DISTINCT] {*, column [alias], ....}

중괄호 : 안의 구문들 무조건 1개 이상 사용 / 대괄호 :  필요없으면 생략 가능 / * : 모든 필드명 선택 /

[alias] : 해당 column에 대해서 다른 필드명 부여할 떄 사용 / DISTINCT : 중복되는 행을 제거하는 옵션

 

- FROM table name

해당 table로 부터 데이터를 가져온다는 의미

table_name : 질의 대상 테이블명

 

-[WHERE condition]

WHERE절 조건식은 FROM절 뒤에 적고 조건을 만족하는 행들만 검색/ 마찬가지로 대괄호 안의 구문 생략 가능

 

-[ORDER BY {column, expression} [ASC | DESC]

질의 결과 정렬을 위한 옵션(ASC:오름차순(Default), DESC:내림차순)

 

-그 외

문자 결합함수 concat 사용 시 두개의 컬럼을 하나의 컬럼으로 결합

CAST형변환 : CAST(expression AStype) or CONVERT(expression type)

MySQL 타입 : binary, char, date, datetime,. signed(interger), time,. unsigned(integer)

 

-SELECT구문에서 사용하는 함수

  • UCASE('str'), UPPER('str') : 문자열을 대문자로 변환
  • LCASE('str'), LOWER('str') : 문자열을 소문자로 변환
  • substring('str',idx,cnt) : 문자열의 idx부터 cnt개 출력
  • LPAD('str',num,'ch'), RPAD('str',num,'ch') : num크기의 길이를 두고
    str의 나머지 부분을 ch로 왼쪽 또는 오른쪽에 채워줌
  • TRIM('str'), LTRIM, RTRIM : 문자열의 앞뒤, 왼쪽, 오른쪽 공백 제거
  • ABS(x) : x의 절댓값 반환
  • MOD(n,m) , % : n을 m으로 나눈 나머지 값 반환
  • 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나 YYYYMMDDHHMMSS 형식으로 반환 
  • DATE_FORMAT(date,format) : 입력된 date를 format 형식으로 반환
  • PERIOD_DIFF(p1,p2) : YYMM이나 YYYYMM으로 표기되는 p1과 p2의 차이 개월을 반환



출처: https://ivory-room.tistory.com/6 [개발로 자기개발]

 

# SQL문의 작성 방법

- SQL문장은 대소문자를 구별하지 않는다

- SQL문장은 한 줄 또는 여러 줄에 입력될 수 있다.

- 일반적으로 키워드는 대문자로 입력한다. 다른 모든 단어, 즉 테이블 이름, 열 이름은 소문자로 입력한다.(권장)

- 가장 최근의 명령어 1개가 SQL buffer에 저장 된다.

- sql문 마지막 절의 끝에 " ; "를 기술하여 명령의 끝을 표시 한다

 

ex) SQL> SELECT emp_no as '사번', first_name '성명', gender FROM employees WHERE gender = 'M';

= emp_no와 first_name은 각각 사번과 성명이라는 컬럼 별칭(alias)으로 만들어 출력했다. alias를 사용할 때 as라는 키워드를 사용해도 되고 생략할 수도 있다.

 

# 오라클 연산자

1. 산술 연산자 : +, -, *, /

2. 비교 연산자 : =, !=, <>, ^=, >, <, >=, <=

3. 논리 연산자 : AND 또는 &&, OR 또는 ||

4. WHERE절에 사용될 수 있는 SQL연산자

연산자 설명
BETWEEN a AND b a와 b 사이의 데이터를 출력한다. (a, b값 포함)
IN (list) list의 값 중 어느 하나와 일치하는 데이터를 출력한다.
LIKE 문자 형태로 일치하는 데이터를 출력한다.(%, _ 사용)
IS NULL NULL값을 가진 데이터를 출력한다
NOT BETWEEN a AND b a와 b사이에 있지 않은 데이터를 출력한다. (a, b,갑 미포함)
NOT IN (list) list의 값과 일치하지 않는 데이터를 출력한다
NOT LIKE 문자 형태와 일치하지 않는 데이터를 출력한다
IS NOT NULL NULL값을 가지지 않는 데이터를 출력한다

 

# IN, NOT IN,  BETWEEN 연산자

IN연산자 : 연산자 OR연산의 결과를 보여준다

ex) SQL> SELECT emp_no, first_name, FROM employees WHERE emp_no IN(10005, 10009);

 = 사번이 10005번, 10009번인 사원의 사번과 성명 출력

NOT IN 연산자

ex) SQL> SELECT emp_no, first_name FROM employees WHERE emp_no NOT IN (10005, 10009);

 = 사번이 10005, 10009번이 아닌 사원의 사번과 성명 출력

BETWEEN 연산자 : 연산자(AND를 이용해 두 조건을 결합한 검색과 같은 결과값을 보여준다.

ex) SQL> SELECT emp_no, first_name FROM employees WHERE emp_no BETWEEN 30000 AND 30005;

 =사원번호가 30000에서 30005인 사원만 선택

# LIKE 연산자

-검색 STRING 값에 대한 와일드 카드 검색을 위해서 LIKE 연산자를 사용한다.

- % : 여러개의 문자열을 나타내는 와일드 카드

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

- ESCAPE : 와일드카드 문자를 일반문자처럼 사용하고 싶은 경우 사용한다. ex) WHERE name LIKE '%a\_y%' ESCAPE '\';

구분 설명
LIKE 'A%' 컬럼이 'A'로 시작하는 데이터들만 검색한다
LIKE '%A' 컬럼이 'A'로 끝나는 데이터들만 검색한다
LIKE '%'KIM%' 컬럼에 'KIM'문자가 있는 데이터들만 검색한다
LIKE '%K%A%' 컬럼에 'K'문자와 'I'문자가 있는 데이터들만 검색한다
LIKE '_A%' 컬럼에 'A'문자가 두번째 위치한 데이터들만 검색한다

-'%'를 이용한 LIKE검색

ex) SQL> SELECT emp_no, first_name FROM employees WHERE first_name LIKE '%K%';

 =employees테이블로부터 사원넘버와 이름을 가져오는데 'K'가 들어가는 데이터만 검색

 

-'_'를 이용한 LIKE검색

ex) SQL> SELECT  emp_no, first_name FROM employees WHERE first_name LIKE '_I%';

 =employees테이블로부터 사원넘버와 이름을 가져오는데 'I'가 두번째 글자에 들어가는 데이터만 검색

 

# ORDER BY(ASC, DESC)

ORDER BY 절은 데이터의 정렬을 위해 사용한다. ASC 나 1은 오름차순, DESC는 내림차순을 의미한다.

ex) SQL> SELECT emp_no, first_name FROM employees WHERE gender = 'F' && first_name like '_T%' ORDER BY           emp_no ASC;

댓글