join
컬럼 별칭(alias)
SQL1> select 컬럼1, 컬럼2,... from 테이블 A join 테이블 B on 테이블 A.컬럼= 테이블B.컬럼
SQL2> 컬럼명 앞에 테이블명을 접두어로 붙여서 컬럼의 소속을 밝힘 → 성능 향상
select 테이블A.컬럼1, 테이블A.컬럼2,..., 테이블B.컬럼1, 테이블B.컬럼2,...
from 테이블A join 테이블 B
on 테이블A.컬럼명 = 테이블B.컬럼명
order by 테이블A.컬럼명;
SQL3> 테이블 alias 활용. 컬럼명 앞에 테이블 alias 접두어를 붙힘 → 성능 향상
select * from 첫번째 테이블 이름 별칭1 두번째 테이블 이름 별칭2 where 조건
join 추가 문법(오라클)
inner join(내부조인) : 조인조건을 만족하는 행만 반환하는 조인 유형. on절 조인(기본조인 유형)
outer join(외부조인) : 조인조건을 만족하는 행과 조인조건을 만족하지 않는 행까지 반환하는 조인 유형.
left outer join, right outer join
-- left outer join예제
-- employees 테이블과 departments 테이블을 사용해서 직원 정보(employee_id, last_name, salary)와
-- 직원이 소속된 부서 정보(department_id, department_name)를 함께 출력하되
-- 부서가 없는 직원도 출력
select e.employee_id, e.last_name, e.salary, d.department_id, d.department_name
from employees e left outer join departements d
on e.department_id = d.department_id
order by e.employee_id;
-- right outer join
-- employees 테이블과 departments 테이블을 사용해서
-- 직원 정보(employee_id, last_name, salary)와
-- 직원이 소속된 부서 정보(department_id, department_name)를 함께 출력하되
-- 소속된 직원이 없는 빈 부서 출력
select e.employee_id, e.last_name, e.salary, d.department_id, d.department_name
from employees e right outer join departements d
on e.department_id = d.department_id
order by d.department_id;
-- left outer join 예제
-- employees 테이블을 사용해서 직원 정보(employee_id, last_name, manager_id)와
-- 직원의 매니저 이름(last_name)을 함께 출력하되 매니저가 없는 사장도 출력 포함
select e1.employee_id, e1.last_name, e1.manager_id, e2.last_name
from employees e1 left outer join employees e2
on e1.manager_id = e2.employees_id
order by e1.employee_id;
-- 연습문제1)
-- members, orders 테이블 사용.
-- 주문정보(orde_num, member_id, order_date)와
-- 주문자의 정보(member_name, phone, address)를 함께 출력
use shopdb;
desc members;
select * from members;
desc products;
select * from products;
desc orders;
select * from orders;
-- ※order_num X orde_num O 테이블 만들다가 오타남
select o.orde_num, o.member_id, o.order_date, m.member_name, m.phone, m.address
from orders o join members m
on o.member_id = m.member_id;
-- 연습문제2)
-- products, orders 테이블 사용
-- 주문 정보(orde_num, member_id, prod_id, order_date)와 제품 정보(prod_name, price)를 함께 출력
select o.orde_num, o.member_id, o.prod_id, p.prod_name, p.price o.order_date
from orders o join products p
on o.prod_id = p.prod_id;
order by orde_num;
-- 연습문제3)
-- members, products, orders 테이블 사용
-- 주문 정보(orde_num, order_date)와 주문자의 정보(member_name, phone, address)와
-- 주문한 제품의 정보(prod_name, price, company)을 함께 출력
select o.orde_num o.order_date, m.member_name, m.phone, m.address, p.prod_name, p.price, p.company
from orders o join members m on o.member_id = m.member_id
join products p on o.prod_id = p.prod_id
order by orde_num;
단일행함수 - 문자함수
함수란? 인수를 받아서 정해진 조작을 한 후 반드시 하나의 결과값을 반환함.
SQL 함수 유형 : 단일행함수, 다중행함수(그룹함수)
단일행함수란? 행당 조작해서 하나의 결과값을 반환하는 함수 유형
ascii(문자) : 해당 문자의 아스키코드값을 반환
char(숫자) : 아스키코드값에 해당하는 문자를 반환
※SQL에서 출력은 select from으로 함. 접근해야할 테이블이 없는 경우에는 from dual을 사용함.
단, mySQL에서는 from dual이 생략이 가능함.
select ascii('A'), ascii('a')
from dual;
select char(65), char(97) from dual;
-- Workbench의 버그 그림8처럼 나타남. 우클릭 후 Open Value in Viewer - Text들어가면된다(그림 9).
length(문자열) : 문자열의 bytes 수를 반환
bit_length(문자열) : 문자열의 bit 수를 반환
char_length(문자열) : 문자열의 문자의 개수를 반환
select length('java'), bit_length('java'), char_length('java') from dual;
select length('자바'), bit_length('자바'), char_length('자바') from dual;
※한자의 경우 한자마다 다 다름. 동일하지 않음
select last_name, length(last_name) from employees;
concat(인수1, 인수2, ...., 인수n) : 인수를 연결해서 하나의 문자열로 반환함.
select employee_id, concat(first_name, last_name) as "이름" from employees;
select employee_id, concat(first_name,' ', last_name) as "이름" from employees;
select concat('A','/','B','/','C','/','D','/','E') as value;
concat_ws(구분자,인수1, 인수2, ..., 인수n) : 구분자와 함께 인수를 연결
select concat_ws('/','A','B','C','D','E') as value;
select concat_ws('--',last_name,job_id,salary) as value from employees;
instr(문자열, 특정문자) : 문자열부터 특정 문자의 첫번째 위치를 반환함.
select instr('daceaes','a'), instr('하나둘셋','둘');
select last_name, instr(last_name,'a') as "a의 첫번째 위치?" from employees;
upper/ lower
upper(문자열) : 문자열를 대문자로 반환함.
lower(문자열) : 문자열을 소문자로 변환함.
select employee_id, upper(last_name) as "L-name", lower(job_id) as "Job", lower(email) as "E-mail" from employees;
select concat('The job id for ' , upper(last_name), ' is', lower(job_id)) as value from employees;
left, right
left(문자열, 길이) : 문자열 왼쪽부터 해당 길이만큼 반환함
right(문자열, 길이) : 문자열 오른쪽부터 해당 길이만큼 반환함
select left('abcdefg',3) as "왼쪽부터글자반환", right('abcdefg',3) as "오른쪽부터글자반환";
select left('0001011234567',6) as "생년월일";
select concat(left('010-1234-5678',3), '-****-', right('010-1234-5678',4)) as "전화번호";
select last_name, left(last_name,2), right(last_name,2) from employees;
lpad, rpad
lpad(문자열, 전체자리수, 채울문자) : 전체자리수만큼 잡아서 문자열을 출력하되 남는 공간이 있다면 왼쪽부터 채울문자로 채워주는 함수. 오른쪽 정렬.
rpad(문자열, 전체자리수, 채울문자) : 전체자리수만큼 잡아서 문자열을 출력하되 남는 공간이 있다면 오른쪽부터 채울문자로 채워주는 함수. 왼쪽 정렬.
select lpad('가나다',10,'★'), rpad('가나다',10,'★');
select lpad(last_name,20,' ') as "L-name", rpad(first_name, 20, ' ') as "F-name" from employees;
ltrim/ rtrim / trim
ltrim(문자열) : 문자열의 왼쪽 공백을 제거해주는 함수
rtrim(문자열) : 문자열의 오른쪽 공백을 제거해주는 함수
trim(문자열) : 문자열의 공백을 제거해주는 함수
trim(방향 제거문자 from 문자열) : 문자열로부터 해당 방향에 있는 제거 문자를 삭제함.
방향 leading(앞), trailing(뒤), both(양쪽)
select ltrim(' SQL '), rtrim(' SQL '), trim(' SQL ');
select trim(both '_' from '______SQL________________');
select trim(leading '0' from '01');
replace(문자열, 기준문자, 바꿀문자) : 문자열에서 기존 문자를 바꿀 문자로 바꿔서 반환함.
select employee_id, last_name, replace(phone_number,'.','-') from employees;
space(길이) : 해당 길이만큼의 공백을 반환함.
select concat('A',' ', 'B') as "결과"; = select concat('A',space(30), 'B') as "결과";
'KDT > DB' 카테고리의 다른 글
231129 DB - 단일행함수 3, 그룹 함수와 그룹화 1 (0) | 2023.11.29 |
---|---|
231124 DB - 단일행 함수2 (0) | 2023.11.24 |
231115 DB - ERD, JOIN 1 (0) | 2023.11.17 |
231108 DB - WHERE 2, ORDER BY (0) | 2023.11.08 |
231103 DB - SELECT, 비교연산자, 정렬, WHERE 1 (0) | 2023.11.03 |