반응형
1. IFNULL( 'TRUE', 'FALSE')
참일시 앞부분, 거짓일시 뒷부분이 출력.
2. union
여러 검색문을 묶어 검색내용을 한번에 처리
- 유니온의 규칙
1. 하나의 ORDER BY만 사용할 수 있다.
2. 각 SELECT의 열수, 표현식가 같아야 한다.
3. SELECT 문들 끼리 순서는 상관없다.
4. 유니온을 한 결과가 중복되면 하나만 나온다. (DEFAULT)
5. 열의 타입은 같거나 반환 가능한 형태여야 한다.
6. 중복값을 나타내고 싶다면 UNION ALL
3. TRUNCATE artcile;
article 테이블의 모든 내용을 지운다
# a6 DB 삭제/생성/선택
CREATE DATABASE `a6`;
DROP DATABASE IF EXISTS `a6`;
USE `a6`;
# 부서(홍보, 기획, IT)
CREATE TABLE dept(
id INT(100) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(100) NOT NULL,
regDate DATETIME NOT NULL
);
DROP TABLE dept;
INSERT INTO dept SET NAME ='홍보', regDate =NOW();
INSERT INTO dept SET NAME ='기획', regDate =NOW();
INSERT INTO dept SET NAME ='IT', regDate =NOW();
SELECT * FROM dept;
# 사원(홍길동/홍보/5000만원, 홍길순/홍보/6000만원, 임꺽정/기획/4000만원)
## IT부서는 아직 사원이 없음
CREATE TABLE emp(
id INT(100) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(100) NOT NULL,
regDate DATETIME NOT NULL,
salary INT(200) NOT NULL,
deptId INT(100) NOT NULL
);
DESC emp;
DROP TABLE emp;
INSERT INTO emp SET NAME ='홍길동', regDate =NOW(), salary = 50000000, deptId = 1;
INSERT INTO emp SET NAME ='홍길순', regDate =NOW(), salary = 60000000, deptId = 1;
INSERT INTO emp SET NAME ='임꺽정', regDate =NOW(), salary = 4000000, deptId = 2;
SELECT * FROM emp;
# 전 사원에 대하여, [부서명, 사원번호, 사원명] 양식으로 출력
SELECT D.name AS '부서명',E.id AS '사원번호' ,E.name AS '사원번호' FROM emp AS E JOIN dept AS D ON E.deptId = D.id;
# 전 사원에 대하여, [부서명, 사원번호, 사원명] 양식으로 출력
## IT부서는 [IT, NULL, NULL] 으로 출력
SELECT D.name AS '부서명',E.id AS '사원번호' ,E.name AS '사원번호' FROM emp AS E RIGHT JOIN dept AS D ON E.deptId = D.id;
# 전 사원에 대하여, [부서명, 사원번호, 사원명] 양식으로 출력
## IT부서는 [IT, 0, -] 으로 출력
SELECT D.name AS '부서명',IFNULL(E.id,0) AS '사원번호' ,IFNULL(E.name,' -') AS '사원번호' FROM emp AS E RIGHT JOIN dept AS D ON E.deptId = D.id;
SELECT * FROM emp;
# 모든 부서별, 최고연봉, IT부서는 0원으로 표시
SELECT D.name AS '부서명',IFNULL(MAX(E.salary), 0) AS '최고연봉' FROM emp AS E RIGHT JOIN dept AS D ON E.deptId = D.id GROUP BY D.id;
# 모든 부서별, 최저연봉, IT부서는 0원으로 표시
SELECT D.name AS '부서명',IFNULL(MIN(E.salary), 0) AS '최고연봉' FROM emp AS E RIGHT JOIN dept AS D ON E.deptId = D.id GROUP BY D.id;
# 모든 부서별, 평균연봉, IT부서는 0원으로 표시
SELECT D.name AS '부서명',IFNULL(AVG(E.salary), 0) AS '최고연봉' FROM emp AS E RIGHT JOIN dept AS D ON E.deptId = D.id GROUP BY D.id;
# 하나의 쿼리로 최고액연봉자와 최저역연봉자의 이름과 연봉
SELECT NAME, MAX(salary) FROM emp;
SELECT MIN(salary) FROM emp;
SELECT E.* FROM (SELECT MIN(salary) FROM emp) E, dept;
SELECT emp.name AS '이름', emp.salary AS '연봉' FROM (SELECT MIN(salary) AS 'min' FROM emp) E,
(SELECT NAME, MAX(salary) AS 'max' FROM emp) AS D,
emp
WHERE salary = E.min OR salary = D.max;
반응형
'Web Back-End > MySQL' 카테고리의 다른 글
JDBC, DBCP, JNDI 차이점 (1) | 2024.09.08 |
---|---|
MySQL 학습 01 - UNSIGNED, AUTO_INCREMENT , INNER JOIN (0) | 2021.05.18 |
MySQL 연습장 02 (0) | 2021.05.18 |
MySQL 연습장 01 (0) | 2021.05.17 |