Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준
- react
- ChainMap
- java
- 자바
- JIT
- 외부조인
- 개발기록
- 오버라이딩
- 싱글톤 레지스트리
- 쓰는이유
- 싱글톤
- overriding
- DAO의 분리
- 파이썬
- GCP Storage
- 121
- Spring Framework
- defaultdict
- 데이터베이스
- 스프링
- select
- 청크
- orderedDict
- DAO
- null
- Oracle
- PYTHON
- 리스트 자르기
- spring
Archives
- Today
- Total
PengTory
SQL 학습 정리 본문
--DML Insert
INSERT INTO member (
id, name, age, email
) VALUES (
'test', '테스터', 10, 'test@gamil.com'
);
-- update
UPDATE member SET
name = '홍길동',
age = 10
WHERE id = 'hong';
-- delete
DELETE FROM member WHERE id = 'hong';
-- insert, update, delete 실행결과 값이 변형된 개수가 리턴된다!
-- select
-- 어디에서? 어떻게? 무엇을?
/*
SELECT
컬럼명..
FROM 테이블명
WHERE 조건
GROUP BY
ORDER BY...
*/
-- where 조건식 (비교, 논리, IN, LIKE)
-- ~별 -> group by (group by 하면 group by 한것만 출력 가능!! group by 한 컬럼이나 직계 함수만 가능)
-- order by 정렬, (asc: 오름차순, desc: 내림차순) -> 가장 마지막에 실행!
-- 학생, 교수의 이름 아이디 출력
SELECT name, id, 1 type FROM student
UNION ALL
SELECT name, id, 2 FROM professor ORDER BY name;
-- join
SELECT
s.name, p.name
FROM student s JOIN professor p -- inner join
ON s.profno = p.no
AND s.grade = 2;
-- outer join (join을 기준으로 left, right)
SELECT
s.name, p.name
FROM student s LEFT JOIN professor p -- outer join
ON s.profno = p.no
AND s.grade = 2;
-- subquery (쿼리 안의 쿼리)
SELECT
ename, salary
FROM emp
WHERE salary > (SELECT salary FROM emp WHERE ename = '양준혁'); -- 단일 행
SELECT
ename, salary
FROM emp
WHERE salary in (SELECT salary FROM emp WHERE deptno = 20); -- 다중 행
-- 스칼라 서브쿼리 **(복습 필요해보임 헷갈림)
SELECT
name, (select name from professor where no = student.profno) pname
FROM student; -- 단일 행
-- inline view (view: 가상의 테이블)
-- 학생 + 교수 이름, 아이디, 학생1/ 교수2 -> 박씨들만 출력
SELECT * FROM (
SELECT name, id, 1 type FROM student
UNION ALL
SELECT name, id, 2 FROM professor ORDER BY name
) a
WHERE name LIKE '박%';
-- 가장 먼저 입사한 직원명, 입사일 출력
-- rownum, rowid 라는 것이 오라클 내부적으로 존재함. 따라서 alias를 주는게 추후에 헷갈리지 않을 수 있음
-- 두번 걸어주지 않아도 WHERE =1 로 하면 동작은 함. 그러나 우리가 만든 rn이 아닌 오라클 내부의 rownum
SELECT * FROM(
SELECT rownum rn, ename, hiredate FROM (
SELECT
ename, hiredate
FROM emp
ORDER BY hiredate
) a
)b
WHERE rn <= 3;
SELECT ename, hiredate from emp where hiredate = (select min(hiredate) from emp);
SELECT ename, hiredate from emp where hiredate = min(hiredate); -- 얘는 안됨! 이유는 min()은 함수이기 때문에 where절에서 그룹함수를 쓸 수 없음.
-- 백업
create table emp_bak as select * from emp;
-- emp_back -> 급여 10% 인상
update emp_bak set salary = salary * 1.1;
CREATE SEQUENCE emp_ex_seq
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 99999;
SELECT emp_ex_seq.CURRVAL FROM dual;
SELECT emp_ex_seq.NEXTVAL FROM dual;
-- 실제 INSERT 활용
INSERT INTO emp_ex VALUES (emp_ex_seq.nextval, '유관순', 500);
-- view 활용
CREATE VIEW stupro AS
SELECT * FROM(
SELECT name, id FROM student
UNION ALL
SELECT name, id FROM professor
ORDER BY NAME
) b;
-- 만약에 새로운 학생이 테이블에 추가될 시 view는 연동이 되어있지 않기 때문에 view에는 추가되지 않는다는 문제가 있다. => 무결성이 떨어짐 그래서 잘 안쓴다.
select * from stupro;
'데이터베이스' 카테고리의 다른 글
JOIN이란? (feat. oracle) (0) | 2023.02.23 |
---|---|
GROUPING - GROUP BY 와 HAVING(feat. oracle) (0) | 2023.02.23 |
Oracle 리스너란? (0) | 2023.02.22 |
SQL (feat. Oracle) (0) | 2023.02.22 |
데이터베이스 이론 (0) | 2023.02.21 |