Day053

RISK_TAKER·2023년 4월 14일
0

정규식

  • abc.* = 모든 갯수
    abc abc. abc.. abc...
  • abc.+ = 1<=갯수
    abc(x), abc. abc.. abc...
  • abc.? = 0 or 1

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);

0개의 댓글