Data Manipulation Language는 모두 동사로 시작하고 아래와 같이 4가지 조작어가 존재한다.
- select(검색) / insert(등록) / update(수정) / delete(삭제)
SELECT 구문
select 구문의 기본형은 다음과 같다.
- distinct: 중복행을 제거한다.
- alias: 나타날 칼럼에 대한 다른 이름을 부여한다.
- Ex) select deptno as '부서 번호', name as '부서 이름' from department;
select [distinct] (Column_Name) as [alias] from (Table_Name);
이때 Column Name이 나오는 자리에 *을 사용하여 원하는 테이블의 모든 데이터를 출력할 수도 있다.
Column 결합 (Concat)
concat 함수를 사용하면 해당 테이블의 원하는 column들을 합쳐서 출력할 수 있다.
- Ex) select concat(empno,'-', deptno, '-', job) as 'empno-deptno-job' from employee;
select concat(Columns) from (Table_Name);
중복행 제거 (distinct)
만약 원하는 데이터 출력시 동일한 값을(동일한 행을) 출력하고 싶지 않다면 distinct 키워드로 중복행을 제거할 수 있다.
- Ex) select distinct job from employee;
select distinct (Column_Name) from (Table_Name);
특정 데이터 기준 정렬 (order by)
만약 특정 열을 기준으로 행을 정렬하고 싶다면 order by 절을 사용하면 된다. 오름차순 정렬의 경우 order by (Column Name) 뒤에 ASC를 붙이면 되고, 내림차순의 경우 DESC를 붙이면 된다. 단, 기본값은 ASC이므로 오름차순 정렬의 경우 굳이 명시할 필요는 없다.
- Ex) select empno, name, boss from employee order by boss, name; →내림차순
- Ex) select empno, name, boss from employee order by boss, name desc; → 오름차순
select [distinct] (Column_Name) as (alias) from (Table_Name) order by (Column_Name) [desc]
특정 행 검색 (where)
특정 행을 검색할 때 where절을 사용한다. 이때 where 뒤에는 조건식이 나오며 조건식은 Column Name이나 상수 및 연산자로 구성된다. 예를 들어, where title = 'test'는 title이 test인 행들을 검색하고, where salary between 1000 and 2000은 salary값이 1000~2000 사이인 행들을 검색한다. 아래는 where 절을 사용한 select 구문 예시들이다.
- Ex) select name, hiredate from employee where hiredate < '1981-01-01';
- Ex) select * from employee where deptno = 10;
select [distinct] (Column_Name) as (alias) from (Table_Name) where (Condition) order by (Column_Name) [desc]
추가적으로 in 키워드를 사용하면 원하는 값들 중 하나를 가지는 행들을 검색할 수 있다. 아래 두 개의 쿼리들은 서로 같은 의미를 가진다.
- Ex) select empno, deptno from employee where deptno in (10, 30);
- Ex) select empno, deptno from employee where deptno = 10 or deptno = 30;
또 like라는 키워드도 존재한다. 이 키워드는 와일드 카드를 사용하여 특정 문자를 포함한 값에 대한 조건을 처리하게 한다. 이때 와일드 카드 중 '%'는 0~여러 개의 문자열을 의미하고, '_'는 단 하나의 문자를 의미한다.
- Ex) select name, job from employee where name like '%A%'; → name에 A가 들어가는가?
- Ex) select name, job from employee where name like 'A%'; → name이 A로 시작하는가?
- Ex) select name, job from employee where name like '%A'; → name이 A로 끝나는가?
- Ex) select name, job from employee where name like '_A%'; → name의 두 번째 문자가 A인가?
값의 대소문자 변경 (upper, lower)
해당 열의 값들을 모두 대문자로 바꾸고 싶다면 upper, ucase 함수들을 사용하면 된다. 반대로 모두 소문자로 바꾸고 싶다면 lower, lcase 함수들을 사용할 수 있다.
- Ex) select lower(name) from employee;
문자열 끊기 (substring)
substring 함수를 사용하면 원하는 인덱스를 기준으로 원하는 개수의 문자를 잘라낼 수 있다.
- Ex) substring('string', 3, 2) → 3번째 문자(r)을 기준으로 2개의 문자를 잘라내라 (결과: ri)
출력 공백 채우기 (lpad, rpad)
lpad는 출력시 공백이 존재하면 원하는 문자로 왼쪽에 공백을 채울 수 있고 rpad는 오른쪽에 공백을 채워준다.
- Ex) select lpad(substring(lower(name), 1, 4), 7, '*'), rpad(substring(lower(name), 1, 4), 7, '-') from employee;
출력 공백 지우기 (ltrim, rtrim, trim)
trim 함수를 사용하면 문자들의 양쪽에 원하는 반복되는 문자를 지울 수 있다.
- Ex) select ltrim(lpad(substring(lower(name), 1, 4), 7, ' ')) from employee;
- Ex) select trim(both '*' from rpad(substring(lower(name), 1, 4), 7, '*')) from employee;
형 변환(cast, convert)
MySQL은 cast, convert 함수를 통해 type을 변경할 수 있다. MySQL의 자료형에는 Binary, Char, Date, Datetime, Signed {Integer}, Time, Unsigned {Integer} 등이 존재한다.
- Ex) select cast(now(), date);
참고로 now() 함수는 MySQL에서 현재 시간을 가져오는 함수다.
cast(expression as type)
convert(expression, type)
convert(expr using transcoding_name)
'DB > MySQL' 카테고리의 다른 글
2-3. DML(Insert, Update, Delete) (0) | 2022.10.31 |
---|---|
2-2. DML(Select, 그룹 함수) (0) | 2022.10.31 |
1-2. MySQL (Table) (0) | 2022.10.26 |
1-1. MySQL (DB, User) (0) | 2022.10.26 |
0. 데이터베이스란? (0) | 2022.10.26 |