SELECT 함수이름(컬럼)
FROM 테이블명
[WHERE 함수가 적용된 검색조건]
List<POJO>예를 들어 이름 3글자가 있을때, 김** 으로 출력해야한다고 가정하면.
👉 2번이 훨씬 편할 것이다 !
| 함수 이름 | 설명 |
|---|---|
| left(값, 길이) | 주어진 값을 길이의 글자 수 만큼 왼쪽에서 잘라낸다. |
| right(값, 길이) | 주어진 값을 길이의 글자 수 만큼 오른쪽에서 잘라낸다. |
| substring(값, 시작위치, 길이) | 주어진 값을 시작위치부터 길이만큼 잘라낸다. 만약 길이가 주어지지 않은 경우 시작위치부터 끝까지 잘라낸다. |
| replace(값, A, B) | 주어진 값에서 A를 찾아 B로 바꾼다 |
| concat(값1, 값2, …, 값n) | 주어진 값들을 하나의 문자열로 연결한다. |
| trim(값) | 주어진 값의 앞뒤 공백을 제거한다. |
| ltrim(값) | 주어진 값의 왼쪽 공백을 제거한다. |
| rtrim(값) | 주어진 값의 오른쪽 공백을 제거한다. |
| md5(값) | 주어진 값을 암호화 한다. |
| char_length(값) | 주어진 값의 글자수를 리턴한다. |
| instr(값, 찾을 내용) | 주어진 값에서 찾을 내용이 시작되는 위치를 리턴한다. 찾지 못할 경우 0을 리턴한다. |
| upper(값) | 주어진 값을 대문자로 변경한다 |
| lower(값) | 주어진 값을 소문자로 변경한다. |
SELECT name, left(name, 1) FROM student;
+--------+---------------+
| name | left(name, 1) |
+--------+---------------+
| 전인하 | 전 |
| 박미경 | 박 |
| 김영균 | 김 |
| 지은경 | 지 |
| 임유진 | 임 |
| 서재진 | 서 |
| 이광훈 | 이 |
| 류민정 | 류 |
| 김진영 | 김 |
| 오유석 | 오 |
| 하나리 | 하 |
| 윤진욱 | 윤 |
| 이동훈 | 이 |
| 박동진 | 박 |
| 김진경 | 김 |
| 조명훈 | 조 |
+--------+---------------+
16 rows in set (0.00 sec)
left(값,길이) : 주어진 값을 길이의 글자 수 만큼 왼쪽에서 잘라낸다.substring(startIndex, endIndex) : startIndex(포함)부터 endIndex(불포함)까지의 문자열을 리턴(잘라내기)
SELECT name, right(name, 1) FROM student;
+--------+----------------+
| name | right(name, 1) |
+--------+----------------+
| 전인하 | 하 |
| 박미경 | 경 |
| 김영균 | 균 |
| 지은경 | 경 |
| 임유진 | 진 |
| 서재진 | 진 |
| 이광훈 | 훈 |
| 류민정 | 정 |
| 김진영 | 영 |
| 오유석 | 석 |
| 하나리 | 리 |
| 윤진욱 | 욱 |
| 이동훈 | 훈 |
| 박동진 | 진 |
| 김진경 | 경 |
| 조명훈 | 훈 |
+--------+----------------+
16 rows in set (0.00 sec)
문자열이 s일때
p=s.length(); 👉 문자열의 길이
s.substring(p-1);
SELECT name, substring(name, 2, 1) FROM student;
+--------+-----------------------+
| name | substring(name, 2, 1) |
+--------+-----------------------+
| 전인하 | 인 |
| 박미경 | 미 |
| 김영균 | 영 |
| 지은경 | 은 |
| 임유진 | 유 |
| 서재진 | 재 |
| 이광훈 | 광 |
| 류민정 | 민 |
| 김진영 | 진 |
| 오유석 | 유 |
| 하나리 | 나 |
| 윤진욱 | 진 |
| 이동훈 | 동 |
| 박동진 | 동 |
| 김진경 | 진 |
| 조명훈 | 명 |
+--------+-----------------------+
substring(값, 시작위치, 길이)SQL과 JAVA의 다른점
1. 시작위치가 SQL은 1부터 시작. JAVA는 0부터 시작.
2. JAVA는 (1,2) : 파라미터 두개가 모두 문자열의 인덱스 번호. SQL은 두번째 파라미터가 글자수.
SELECT name, REPLACE(name, '이', 'lee') FROM student;
+--------+----------------------------+
| name | replace(name, '이', 'lee') |
+--------+----------------------------+
| 전인하 | 전인하 |
| 박미경 | 박미경 |
| 김영균 | 김영균 |
| 지은경 | 지은경 |
| 임유진 | 임유진 |
| 서재진 | 서재진 |
| 이광훈 | lee광훈 |
| 류민정 | 류민정 |
| 김진영 | 김진영 |
| 오유석 | 오유석 |
| 하나리 | 하나리 |
| 윤진욱 | 윤진욱 |
| 이동훈 | lee동훈 |
| 박동진 | 박동진 |
| 김진경 | 김진경 |
| 조명훈 | 조명훈 |
+--------+----------------------------+
16 rows in set (0.00 sec)
JAVA 👉 replace
JS 👉 replaceAll
각각의 언어에서 대응되는 부분 비교해보기!
SQL은 문자열+문자열일때 문자열 연결을 안함 👉 해결 : CONCAT
CONCAT(컬럼1, 컬럼2) : 컬럼1+컬럼2 문자열 연결.
파라미터의 갯수 제한이 없다. (컬럼1, 컬럼2,..,컬럼n)
학생 이름과 학년을 하나의 문장으로 합쳐 출력하시오.
SELECT CONCAT(name, grade) FROM student;
+---------------------+
| CONCAT(name, grade) |
+---------------------+
| 전인하4 |
| 박미경1 |
| 김영균3 |
| 지은경2 |
| 임유진2 |
| 서재진1 |
| 이광훈4 |
| 류민정2 |
| 김진영2 |
| 오유석4 |
| 하나리1 |
| 윤진욱3 |
| 이동훈1 |
| 박동진1 |
| 김진경2 |
| 조명훈1 |
+---------------------+
16 rows in set (0.00 sec)
MySQL : CONCAT(A,B,C)Oracle : CONCAT(CONCAT(A,B) ,C) 또는 A||B||C (문자열 연결 연산자)SELECT CONCAT(name, ' ', grade, '학년') FROM student;
+----------------------------------+
| CONCAT(name, ' ', grade, '학년') |
+----------------------------------+
| 전인하 4학년 |
| 박미경 1학년 |
| 김영균 3학년 |
| 지은경 2학년 |
| 임유진 2학년 |
| 서재진 1학년 |
| 이광훈 4학년 |
| 류민정 2학년 |
| 김진영 2학년 |
| 오유석 4학년 |
| 하나리 1학년 |
| 윤진욱 3학년 |
| 이동훈 1학년 |
| 박동진 1학년 |
| 김진경 2학년 |
| 조명훈 1학년 |
+----------------------------------+
16 rows in set (0.00 sec)
SELECT trim(name) FROM student;
+------------+
| trim(name) |
+------------+
| 전인하 |
| 박미경 |
| 김영균 |
| 지은경 |
| 임유진 |
| 서재진 |
| 이광훈 |
| 류민정 |
| 김진영 |
| 오유석 |
| 하나리 |
| 윤진욱 |
| 이동훈 |
| 박동진 |
| 김진경 |
| 조명훈 |
+------------+
16 rows in set (0.00 sec)
JAVA에서도 trim()함수를 쓴다.
SELECT LTRIM(name) FROM student;
+-------------+
| LTRIM(name) |
+-------------+
| 전인하 |
| 박미경 |
| 김영균 |
| 지은경 |
| 임유진 |
| 서재진 |
| 이광훈 |
| 류민정 |
| 김진영 |
| 오유석 |
| 하나리 |
| 윤진욱 |
| 이동훈 |
| 박동진 |
| 김진경 |
| 조명훈 |
+-------------+
16 rows in set (0.00 sec)
SELECT RTRIM(name) FROM student;
+-------------+
| RTRIM(name) |
+-------------+
| 전인하 |
| 박미경 |
| 김영균 |
| 지은경 |
| 임유진 |
| 서재진 |
| 이광훈 |
| 류민정 |
| 김진영 |
| 오유석 |
| 하나리 |
| 윤진욱 |
| 이동훈 |
| 박동진 |
| 김진경 |
| 조명훈 |
+-------------+
16 rows in set (0.00 sec)
SELECT md5(name) FROM student;
+----------------------------------+
| md5(name) |
+----------------------------------+
| 502a9ea0d0b99944ff2e01e1eb509f3f |
| 167c1446b6031e7e9ea19b2e61071718 |
| a965195d8ff7f2578ded7023158551d6 |
| fa4cf978744d94bb0f671a072c2164f9 |
| e3e7062eec14e85b3c599f509de7ede7 |
| 718752ea6162894807162c0fcad90279 |
| 37d2073e95928ba8bb6ceec546e3feff |
| 0ec9c231ae3c73a9d45cffdb81094c79 |
| c444ea4d425b22e4398b226be9d6b185 |
| aa4a066ee8459d526b5fb608998e412d |
| 9a9ddb33cc169386c0dc17af7afd0127 |
| 2607dca37796e50ee192cf075f41fe02 |
| da78898e4f770ca67155f0f0c569b471 |
| 9a3ec7fa19a04a6dc3036509b1779a21 |
| ee84f899be798f93181c6db5916c6fbd |
| 82b343678cdec365475d3083c1eee774 |
+----------------------------------+
16 rows in set (0.00 sec)
암호화해서 출력PASSWORD()함수를 사용한다.민감한 개인정보는 암호화해서 저장해야함.
SELECT CHAR_LENGTH(name) FROM student;
+-------------------+
| CHAR_LENGTH(name) |
+-------------------+
| 3 |
| 3 |
| 3 |
| 3 |
| 3 |
| 3 |
| 3 |
| 3 |
| 3 |
| 3 |
| 3 |
| 3 |
| 3 |
| 3 |
| 3 |
| 3 |
+-------------------+
16 rows in set (0.01 sec)
SELECT INSTR(name, '이'), name FROM student;
+-------------------+--------+
| INSTR(name, '이') | name |
+-------------------+--------+
| 0 | 전인하 |
| 0 | 박미경 |
| 0 | 김영균 |
| 0 | 지은경 |
| 0 | 임유진 |
| 0 | 서재진 |
| 1 | 이광훈 |
| 0 | 류민정 |
| 0 | 김진영 |
| 0 | 오유석 |
| 0 | 하나리 |
| 0 | 윤진욱 |
| 1 | 이동훈 |
| 0 | 박동진 |
| 0 | 김진경 |
| 0 | 조명훈 |
+-------------------+--------+
16 rows in set (0.00 sec)
indexOf : 문자열 찾지 못하면 -1 리턴SELECT UPPER(userid) FROM student;
+---------------+
| UPPER(userid) |
+---------------+
| JUN123 |
| ANSEL414 |
| MANDU |
| GOMO00 |
| YOUJIN12 |
| SEOLLY |
| HURIKY |
| CLEANSKY |
| SIMPLY |
| YOUSUK |
| HANAL |
| SAMBA7 |
| DALS |
| PING2 |
| LOVELY |
| RADER214 |
+---------------+
16 rows in set (0.00 sec)
SELECT LOWER(userid) FROM student;
+---------------+
| LOWER(userid) |
+---------------+
| jun123 |
| ansel414 |
| mandu |
| gomo00 |
| youjin12 |
| seolly |
| huriky |
| cleansky |
| simply |
| yousuk |
| hanal |
| samba7 |
| dals |
| ping2 |
| lovely |
| rader214 |
+---------------+
16 rows in set (0.00 sec)
SELECT name, idnum FROM student;
+--------+---------------+
| name | idnum |
+--------+---------------+
| 전인하 | 7907021369824 |
| 박미경 | 8405162123648 |
| 김영균 | 8103211063421 |
| 지은경 | 8004122298371 |
| 임유진 | 8301212196482 |
| 서재진 | 8511291186273 |
| 이광훈 | 8109131276431 |
| 류민정 | 8108192157498 |
| 김진영 | 8206062186327 |
| 오유석 | 7709121128379 |
| 하나리 | 8501092378641 |
| 윤진욱 | 7904021358671 |
| 이동훈 | 8312101128467 |
| 박동진 | 8511241639826 |
| 김진경 | 8302282169387 |
| 조명훈 | 8412141254963 |
+--------+---------------+
16 rows in set (0.00 sec)
*로 변경한 이름을 조회하시오SELECT REPLACE (LEFT(name,3), (SUBSTRING(name,2,1)), '*') `학생 이름` FROM student;
+-----------+
| 학생 이름 |
+-----------+
| 전*하 |
| 박*경 |
| 김*균 |
| 지*경 |
| 임*진 |
| 서*진 |
| 이*훈 |
| 류*정 |
| 김*영 |
| 오*석 |
| 하*리 |
| 윤*욱 |
| 이*훈 |
| 박*진 |
| 김*경 |
| 조*훈 |
+-----------+
16 rows in set (0.00 sec)
SELECT name, REPLACE (idnum, (SUBSTRING(idnum,7)), '*') `주민번호` FROM student;
+--------+----------+
| name | 주민번호 |
+--------+----------+
| 전인하 | 790702* |
| 박미경 | 840516* |
| 김영균 | 810321* |
| 지은경 | 800412* |
| 임유진 | 830121* |
| 서재진 | 851129* |
| 이광훈 | 810913* |
| 류민정 | 810819* |
| 김진영 | 820606* |
| 오유석 | 770912* |
| 하나리 | 850109* |
| 윤진욱 | 790402* |
| 이동훈 | 831210* |
| 박동진 | 851124* |
| 김진경 | 830228* |
| 조명훈 | 841214* |
+--------+----------+
16 rows in set (0.00 sec)
SUBSTRING(idnum,7) 에서 시작위치만 정하고 길이를 정하지 않은 경우는 시작 위치부터 끝까지 잘라낸다.