SELECT *
FROM t_reg
--WHERE REGEXP_LIKE(text, '[a-z]'); --소문자가 포함된 경우
--WHERE REGEXP_LIKE(text, '[A-Z]'); --대문자가 포함된 경우
--WHERE REGEXP_LIKE(text, '[a-zA-Z]'); --대소문자가 포함된 경우
--WHERE REGEXP_LIKE(text, '[a-z] '); --소문자 뒤에 공백이 한칸 있는 패턴
--WHERE REGEXP_LIKE(text, '[a-z] [0-9]'); --소문자+공백 한칸+숫자의 패턴
--WHERE REGEXP_LIKE(text, '[[[:space:]]'); --공백이 포함된 패턴
--WHERE REGEXP_LIKE(text, '[A-Z]{3}'); --대문자가 연속으로 3글자 이상 있는 패턴
--WHERE REGEXP_LIKE(text, '[0-9]{4}');
--WHERE REGEXP_LIKE(text, '[A-Z][0-9]{3}'); --대문자가 있고 뒤에 숫자가 3자리 이상인 패턴
--WHERE REGEXP_LIKE(text, '[0-9][A-Z]{3}'); --앞에 숫자 뒤에 대문작가 3자리 이상인 패턴
--WHERE REGEXP_LIKE(text, '[a-zA-Z0-9]{3}'); --대소문자, 숫자 관계없이 3자리
--[가-힣] : 한글이 포함된 경우
--WHERE REGEXP_LIKE(text, '^a'); --소문자 a로 시작하는 경우
--WHERE REGEXP_LIKE(text, '^[a-zA-Z0-9]');
--WHERE REGEXP_LIKE(text, '[a-z0-9]$'); --소문자나 숫자로 끝나는 패턴
-- 대괄호 안에 있는 '^' 는 부정의 의미
--WHERE NOT REGEXP_LIKE(text, '[a-z]');
WHERE REGEXP_LIKE(text, '[^a-z]'); --소문자로만 구성된 패턴을 제거
SELECT name, tel, id
FROM student
--지역번호가 2자리, 이후 숫자가 4자리가 나오는 패턴을 출력하기
--WHERE REGEXP_LIKE(tel, '^[0-9]{2}\)[0-9]{4}');
WHERE REGEXP_LIKE(id, '...r.');
SELECT *
FROM t_reg2;
--WHERE REGEXP_LIKE(ip, '^[10]{2}\.[10]{2}\.[10]{2}');
-- ( ){1, } : 공백이 한자리 이상인 패턴
-- 홈페이지가 있는 교수들을 조사해서 http://를 삭제하고 출력
SELECT name, LTRIM(REGEXP_SUBSTR(hpage, '/([a-z0-9]+\.?){3,4}?'), '/') URL
FROM professor
WHERE hpage IS NOT NULL;
--문
--이름(Firstname)이 대문자로 시작하면서 총 5글자인 이름을 출력.
--student 테이블
SELECT name--, REGEXP_SUBSTR(name, '[^ ][a-zA-Z]{1,}') RESULT
FROM student
--WHERE REGEXP_COUNT( (REGEXP_SUBSTR(name, '[^ ][a-zA-Z]{1,}')), '[A-Za-z]' ) = 5;
WHERE REGEXP_LIKE(name, '^[A-Z][a-z]{4} ');
SELECT COUNT(*)
FROM student;
SELECT MAX(studno), MIN(name), MAX(grade), COUNT(*)
FROM student
WHERE grade = 3;
SELECT COUNT(*), SUM(weight), AVG(weight)
, MAX(weight), MIN(weight)
FROM student
WHERE grade IN (3,4);
SELECT COUNT(*)
FROM student
WHERE deptno2 IS NOT NULL;
SELECT grade, deptno1, COUNT(*)
FROM student
WHERE weight >= 50
GROUP BY grade, deptno1
ORDER BY 1 DESC, 2 DESC, 3 ASC;
SELECT grade, AVG(height)
FROM student
WHERE grade IN (2, 3, 4)
GROUP BY grade
HAVING AVG(height) > 170
ORDER BY grade;
SELECT deptno, job, ROUND(AVG(sal), 1), COUNT(*) cnt_emp
FROM emp
GROUP BY CUBE(deptno, job)
ORDER BY 1, 2, 3;
--학년별, 전공별, 평균키, 몇명
SELECT grade, deptno1, AVG(height), COUNT(*)
FROM student
GROUP BY ROLLUP(grade, deptno1);
--emp2 테이블
--취미가 같은 사람, 직업분류가 같은 사람, 몇명, 급여총합
SELECT emp_type, hobby, COUNT(*), SUM(pay)
FROM emp2
GROUP BY ROLLUP(emp_type, hobby);