일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- PHPStorm
- run sql script
- console창
- MySQL
- 따옴표 삭제
- DataGrip
- 단축키
- 깃 토큰
- github clone
- database
- github token
- 데이터베이스
- jupyter
- 에러
- 오류
- OrCAD 다운로드
- clone
- visualstudio code
- error 해결
- csv
- vscode
- import data
- Python
- php
- localhost
- cmd
- Visual Studio Code
- 클론
- error
- 파이썬
- Today
- Total
개발 노트
3/29 4주차 본문
[ sql developer로 table 다루기]
1. @안쓰고 start 해도 실행 됨
start \oraclexe\demobld.sql
2. 모든 table 가져와라
select * from tab;
DESC EMP;
3. EMP의 모든 테이블 가져와라
SELECT * FROM EMP;
4. 행 삽입 (날짜 형식이 이게 맞음)
INSERT INTO EMP VALUES (7370, 'SMITH', 'CLERK', 7902, to_date('80-12-17'), 800, NULL, 20);
5. 삽입한 행 7370 보여줘라
SELECT * FROM EMP WHERE empno=7370;
6. 행 7371 넣고 보여주기
INSERT INTO EMP(empno, ename, job, deptno) VALUES (7371, 'SMITH', 'CLERK', 20);
SELECT * FROM EMP WHERE empno=7371;
7. DROP은 테이블 삭제
DROP TABLE EMP;
DROP TABLE DEPT;
8. 2주차 demobld.sql 코드 파일 내용 중
set termout off #터미널 출력 off
#테이블 삭제
DROP TABLE EMP;
DROP TABLE DEPT;
DROP TABLE BONUS;
DROP TABLE SALGRADE;
COMMIT; #커밋 반영
SET TERMOUT ON #글자 출력
PROMPT Demonstration table build is complete.
EXIT #터미널창 빠져나감
9. 화면 사이즈를 1000으로 조절
SET LINESIZE 1000;
10. SELECT해서 일부분(empno, ename)만 가져와라
SELECT empno, ename from EMP;
11. select문으로 연산 가능
SELECT ENAME, SAL/12 FROM EMP; #sal 열에서 x12로 연봉을 계산하여 보여줌
SELECT ENAME, SAL/30 FROM EMP; #sal 열에서 /30으로 하루에 얼마를 버는 지 보여줌
12. where 사용 시에는 조건이 중요함.
SELECT EMPNO, ENAME FROM EMP WHERE DEPTNO=20; #부서 번호가 20번인 EMPNO, ENAME 가져오기
13.
SELECT EMPNO, ENAME FROM EMP WHERE ENAME like '%LA'; #LA로 끝나는 것 select
SELECT EMPNO, ENAME FROM EMP WHERE ENAME like 'LA%'; #LA로 시작하는 것 select
SELECT EMPNO, ENAME FROM EMP WHERE ENAME like '%LA%'; #LA가 들어가는 것 select
세번째 줄 실행 결과
14. 7371인 행 삭제
DELETE FROM EMP WHERE EMPNO=7371;
SELECT * FROM EMP;
15. 급여 2000 이상인 사람 확인
SELECT EMPNO, ENAME, SAL, MGR FROM EMP WHERE SAL > 2000;
16. 급여가 2000보다 크면 지움
DELETE FROM EMP WHERE SAL > 2000;
17. EMPNO이 7369인 데이터 가져옴
SELECT EMPNO, JOB FROM EMP WHERE EMPNO=7369;
18. EMPNO이 7369인 행의 JOB을 SALESMAN으로 바꿔라 **외우기!!
UPDATE EMP SET JOB='SALESMAN' WHERE EMPNO=7369;
19. 급여 10% 인상하기
SELECT SAL FROM EMP;
UPDATE EMP SET SAL=SAL*1.1
기존값
코드 실행 후 값 (10%증가하였음)
20. 테이블 사이즈를 20으로 바꾸기 (alter는 테이블 속성)
ALTER TABLE EMP MODIFY ename VARCHAR2(20);
기존 테이블
코드 실행 후 속성이 변경된 테이블
(직접 메뉴에서 테이블을 편집할 수도 있음)
하지만 sql developer를 사용 못 하는 환경이 있을 수도 있음. 그럴 땐 쿼리 사용 필요.
21. emp테이블에 password 열을 넣고 싶을 때 (자리수는 20)
ALTER TABLE EMP ADD password VARCHAR2(20);
결과
22. column password 지우기
ALTER TABLE EMP DROP COLUMN password;
결과값 : password column이 사라짐
23. 컬럼 이름 바꾸기
ALTER TABLE 테이블명 RENAME COLUMN 원래컬럼명 TO 바꿀컬럼명
ALTER TABLE EMP RENAME COLUMN ename TO empname;
결과 : 두번째 줄 이름 바뀜
24. 사원번호에 자동으로 증가하는 시퀀스 만들기
*교재 11장 연습문제에 시퀀스에 대한 내용 나와있음
CREATE SEQUENCE empno_seq;
위처럼 아무런 말이 없으면 하단처럼 1부터 시작하여 1씩 증가하는 게 기본값임
CREATE SEQUENCE empno_seq INCREMENT BY 1 START WITH 1;
ESEQ_ID라는 이름의 시퀀스 만들기
CREATE SEQUENCE ESEQ_ID INCREMENT BY 10 START WITH 100;
결과 : increment_by를 보면 둘째 줄은 1씩 증가, 셋째 줄은 10씩 증가를 알 수 있음
SELECT * FROM user_sequences;
25. 시퀀스도 삭제 가능
DROP SEQUENCE ESEQ_ID;
SELECT * FROM user_sequences;
26. 7371이 없는 것을 확인한 후, 숫자에 신경 안쓰고 nextval을 통해 다음 값으로 자동으로 설정함
SELECT * FROM EMP WHERE empno=7371;
INSERT INTO EMP(empno, ename, job, deptno) VALUES (empno_seq.NEXTVAL, 'SMITH', 'CLERK', 20);
결과값 1,2,3으로 들어간 것 확인 가능
empno에 증가는 1씩, 시작은 8000부터 자동으로 넣기
DROP SEQUENCE empno_seq;
CREATE SEQUENCE empno_seq INCREMENT BY 1 START WITH 8000;
위의 4줄 전부 실행하면 다음과 같이 empno가 8000부터 만들어진 것 확인 가능
27. empno 순서대로 보기
SELECT * FROM EMP;
SELECT * FROM EMP ORDER BY empno;
SELECT * FROM EMP ORDER BY empno ASC;
SELECT * FROM EMP ORDER BY empno DESC;
오름차순 asc(아무것도 안 써도 오름차순)
desc는 내림차순
empno 내림차순 결과
28. enpno는 내림차순, ename은 오름차순
SELECT empno, ename, sal FROM EMP ORDER BY empno DESC, sal ASC;
29. 날짜 직접 입력 대신 오늘의 날짜 자동으로 입력하기
hiredate는 저장된 날짜 값 가져오기
sysdate는 오늘 날짜 입력하기
SELECT sysdate from DUAL;
INSERT INTO EMP VALUES (empno_seq.NEXTVAL, 'SMITH', 'CLERK', 7902, SYSDATE, 800, NULL, 20);
SELECT empno, ename, sal, hiredate FROM EMP ORDER BY empno DESC, sal ASC;
30. 날짜 년도를 4자리로 가져오기
SELECT hiredate FROM EMP;
SELECT TO_CHAR(hiredate, 'YYYY-MM-DD') FROM EMP;
31. empno이 7499인 comm의 수를 1 증가시킨다.
UPDATE Emp SET COMM=COMM+1 WHERE empno=7499;
SELECT * FROM EMP WHERE empno=7499;
실행 전
실행 후
32. mgr이 7698이고 sal이 1375인 경우 출력
SELECT * FROM EMP WHERE mgr=7698 and sal=1375;
결과
33. like는 검색 기능
SELECT * FROM EMP WHERE ename like '%LA%';
34. 집계함수 : 20번 부서 사원이 몇 명인가
SELECT count(*) FROM EMP where deptno=20;
결과
35. 집계함수 : 20번 부서 사원의 급여 합계
SELECT sum(sal) FROM EMP where deptno=20;
36. 부서를 group으로 잡기
SELECT deptno, count(*) FROM EMP GROUP BY deptno;
결과 : 30부서가 7명, 10부서가 2명, 20 부서가 16명 있다.
37. 위 36번에서 group으로 잡은 부서 중 급여의 최고값, 최저값, 평균값 구하기
SELECT max(sal), min(sal), avg(sal) FROM EMP;
결과
38. emp의 depno와 dept의 depno가 같은 것 가져오기
SELECT emp.*, dept.* from emp, dept where emp.deptno=dept.deptno;
SELECT e.*, d.* from emp e, dept d where e.deptno=d.deptno; #이름을 e와 d로 줄여 표현
SELECT e.empno, e.ename, e.job, e.mgr, e.hiredate, e.sal, e.comm, d.dname, d.loc from emp e, dept d where e.deptno=d.deptno;
#필요한 항목만 표현
SELECT empno, ename, job, mgr, hiredate, sal, comm, dname, loc from emp e, dept d where e.deptno=d.deptno;
#e.과 d.을 생략하여 표현
39. deptno로 그룹을 잡았을 때 가장 큰 개수
부서 중 가장 많은 수가 몇 명인가.
SELECT max(count(*)) FROM EMP GROUP BY deptno;
출력결과 16임.
40. 어느 부서가 (16으로) 가장 많은가
SELECT deptno FROM EMP WHERE rownum=1 GROUP BY deptno ORDER BY count(*) DESC;
41. 서브쿼리(Select안에 Select가 있는 구조)
E.deptno와 D.deptno가 같고
E.DEPTNO(부서번호)가 20인 ({}괄호 안의 SELECT deptno FROM EMP B WHERE rownum=1 GROUP BY B.deptno의 결과값이 20임)
E.ENAME, E.SAL, D.dname, D.loc을 출력해라
SELECT E.ENAME, E.SAL, D.dname, D.loc FROM EMP E, Dept D
WHERE E.deptno=D.deptno and E.DEPTNO = (
SELECT deptno FROM EMP B WHERE rownum=1 GROUP BY B.deptno
);
결과
[Java, Emp, Dept 응용 오브젝트 배열과 Vector 클래스]
1. Eclipse 접속 후 Project 생성
2. src 우클릭 > new > class
3. Emp class 생성
4. 우클릭 후 Source . Generate Constructor using Fields > OK
실행 시 생성자 코드가 자동으로 생성 됨
public class Emp {
int empno;
String empname;
int deptno;
public Emp(int empno, String empname, int deptno) {
super();
this.empno = empno;
this.empname = empname;
this.deptno = deptno;
}
}
5. 우클릭 > Source > Generate toString
하단 소스코드 생성 됨
@Override
public String toString() {
return "Emp [empno=" + empno + ", empname=" + empname + ", deptno=" + deptno + "]";
}
6. Source > Generate Getters and Setters > select all 생성
public int getEmpno() {
return empno;
}
public void setEmpno(int empno) {
this.empno = empno;
}
public String getEmpname() {
return empname;
}
public void setEmpname(String empname) {
this.empname = empname;
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
7. src > new > class > 클래스명 Dept 생성 후 4, 5, 6번 반복
8. default package 우클릭 > New > Class
9. class 이름 설정
*Emp.java와 Dept.java는 실행하는 것이 아닌 가져다 씀.
9. 위와 같이 EmpDept 생성
public class EmpDept {
int deptno;
int empcnt;
public EmpDept(int deptno, int empcnt) {
super();
this.deptno = deptno;
this.empcnt = empcnt;
}
public String toString() {
return "EmpDept [deptno=" + deptno + ", empcnt=" + empcnt + "]";
}
public int getDeptno() {
return deptno;
}
public void setDeptno(int deptno) {
this.deptno = deptno;
}
public int getEmpcnt() {
return empcnt;
}
public void setEmpcnt(int empcnt) {
this.empcnt = empcnt;
}
}
10. EmpDeptMnt 생성
import java.util.Iterator;
import java.util.*;
public class EmpDeptMnt {
Emp emps[];
Dept depts[];
Vector ed;
String _emps[][] = {
{"10", "Kim", "200" },
{"20", "Lee", "100" },
{"30", "Park", "200" },
{"40", "Choi", "300" },
{"50", "Kwon", "300" },
{"60", "Shim", "300" },
{"70", "Hwang", "200" },
{"80", "Jenny", "300" }
};
String _depts[][] = {
{"100", "Marketing" },
{"200", "Planning" },
{"300", "Financing" }
};
public EmpDeptMnt() {
emps = new Emp[8]; //8칸 공간 생성, 고정길이 배열
depts = new Dept[3]; //3칸 공간 생성, 고정길이 배열
ed = new Vector(); //가변길이 배열
//emps[0] = new Emp(10, "Kim", 200);
//틀을 만듦
for (int i = 0; i < _emps.length; i++) {
emps[i] = new Emp(Integer.parseInt(_emps[i][0]), _emps[i][1], Integer.parseInt(_emps[i][2]));
}
for (int i = 0; i < _depts.length; i++) {
depts[i] = new Dept(Integer.parseInt(_depts[i][0]), _depts[i][1]);
}
//getAllEmp(); //사원 리스트 출력
//getAllDept(); //부서 리스트 출력
getAll(emps); //사원 리스트 출력
getAll(depts); //부서 리스트 출력
getAllEmpwithDeptname(); //사원 리스트와 부서명 함꼐 출력
getNumDept(); //부서별 인원수 구하기
int maxempdept = getMaxNumDept(); // 인원수가 가장 많은 부서번호 출력
getMaxDeptEmpList(maxempdept); //인원수가 가장 많은 부서의 사원 리스트(부서명 포함) 출력
}
private void getMaxDeptEmpList(int maxempdept) { //인원수가 가장 많은 부서의 사원 리스트(부서명 포함) 출력
for (int i = 0; i < emps.length; i++) {
for (int j = 0; j < depts.length; j++) {
if (emps[i].deptno == depts[j].deptno && depts [j].deptno == maxempdept)
System.out.println(emps[i].empno +", "+ emps[i].empname +", "+ depts[j].deptname);
}
}
}
private int getMaxNumDept() { //인원수가 가장 많은 부서번호 출력
int deptmax=-1, maxempdept=0;
for(int i=0; i<ed.size(); i++) {
EmpDept obj = (EmpDept)ed.get(i);
if(obj.deptno > deptmax) {
deptmax=obj.empcnt;
maxempdept=obj.deptno;
}
}
System.out.println("deptmax:" + deptmax + ", maxempdept:" + maxempdept);
return maxempdept;
}
private void getNumDept() { //부서별 인원수 구하기
boolean found = false;
System.out.println("* Get the # of emp grouping by deptname...");
for(int i=0; i < emps.length; i++) {
found = false;
//기존 같은 부서 번호가 있으면 그 부서번호의 인원수를 1 증가시킨다.
for(int j=0; j < ed.size(); j++) { //백터의 사이즈만큼 반복
EmpDept obj = (EmpDept)ed.get(j);
if(emps[i].deptno == obj.deptno) {
obj.empcnt++;
found=true;
}
}
if(!found) { //없었다면(found가 true 이면) 부서를 새로 추가한다.
ed.add(new EmpDept(emps[i].deptno, 1));
}
}
for(int i = 0; i< ed.size(); i++) {
EmpDept obj = (EmpDept)ed.get(i);
System.out.println(obj.toString());
}
}
private void getAllEmpwithDeptname() { //사원 리스트와 부서명 함께 출력
for (int i = 0; i < emps.length; i++) { //EMP
for (int j = 0; j < depts.length; j++) { //DEPT
if (emps[i].deptno == depts[j].deptno)
System.out.println(emps[i].empno +", "+ emps[i].empname +", "+ depts[j].deptname);
}
}
}
private void getAll(Dept[] depts2) {
for (int i = 0; i < depts2.length; i++) {
System.out.println(depts2[i].toString());
}
}
private void getAll(Emp[] emps2) {
for (int i = 0; i < emps2.length; i++) {
System.out.println(emps2[i].toString());
}
}
private void getAllDept() {
for (int i = 0; i < depts.length; i++) {
System.out.println(depts[i].toString());
}
}
private void getAllEmp() {
for (int i = 0; i < emps.length; i++) {
System.out.println(emps[i].toString());
}
}
public static void main(String[] args) {
new EmpDeptMnt();
}
}
출력 결과
'학부 공부 : 21.03.02~06.20 > 데이터베이스 이론 및 실습' 카테고리의 다른 글
4/26 8주차 (0) | 2021.04.26 |
---|---|
4/5 5주차 수업 (0) | 2021.04.05 |
3/22 3주차(종강 후 공개) (0) | 2021.03.22 |
3/15 2주차 수업 (0) | 2021.03.15 |
3/8 Window와 Raspberry pi 에 JAVA, Gradle, Spring 설치 + Spring 예제 실습 (0) | 2021.03.15 |