Today
USE employees;
SHOW DATABASES;
SELECT COUNT(*) FROM salaries;
SELECT COUNT(DISTINCT emp_no) FROM salaries;
SELECT from_date, COUNT(*)
FROM salaries
GROUP BY from_date
ORDER BY from_date
LIMIT 10;
SELECT from_date, COUNT(*)
FROM salaries
GROUP BY CONVERT(from_date, CHAR(10))
ORDER BY CONVERT(from_date, CHAR(10))
LIMIT 10;
SELECT from_date, SUM(salary) AS 'total'
FROM salaries
GROUP BY from_date
HAVING from_Date BETWEEN '1986-06-26' AND '1986-06-27'
ORDER BY from_date ASC;
SELECT from_date, SUM(salary) AS 'total'
FROM salaries
WHERE from_Date BETWEEN '1986-06-26' AND '1986-06-27'
GROUP BY from_date
ORDER BY from_date ASC;
SELECT CONVERT(from_date, CHAR(4)) AS from_year, SUM(salary) AS sum_sal
FROM salaries
GROUP BY CONVERT(from_date, CHAR(4))
ORDER BY CONVERT(from_date, CHAR(4));
SELECT * from salaries WHERE from_date BETWEEN '2002-08-01' AND '2002-08-31';
SELECT CONVERT(year(from_date),CHAR(4)) AS 'YEAR', CONVERT(MONTH(from_date),CHAR(2)) AS 'MONTH', SUM(salary)
FROM salaries
WHERE YEAR(from_date) = 2002
GROUP BY CONVERT(from_date, CHAR(7));
SELECT emp_no, SUM(salary) AS total
FROM salaries
WHERE from_date BETWEEN '2002-08-01' AND '2002-08-31'
GROUP BY emp_no
ORDER BY total ASC
;
SELECT * FROM tbl_orderinfo;
SELECT * FROM tbl_orderdetail;
SELECT
to_char(OI.regDate, 'YYYY-MM') AS order_date, OD.goodsCode, SUM(OI.orderAmount) AS SUM_OrderAmount, SUM(OD.amount) AS SUM_amount
FROM tbl_orderinfo AS OI
INNER JOIN tbl_orderdetail AS OD ON OD.orderNo = OI.orderNo
GROUP BY order_date, OD.goodsCode
;
SELECT
to_char(OI.regDate, 'YYYY-MM') AS order_date, OD.goodsCode, SUM(OI.orderAmount) AS SUM_OrderAmount, SUM(OD.amount) AS SUM_amount
FROM tbl_orderinfo AS OI
INNER JOIN tbl_orderdetail AS OD ON OD.orderNo = OI.orderNo
GROUP BY OD.goodsCode, order_date
;
SELECT * FROM tbl_orderinfo;
SELECT * FROM tbl_orderdetail;
SELECT
to_char(OI.orderDate, 'YYYY-MM') AS order_date
, OD.goodsCode
, MAX(OD.amount) AS MAX_amount
, MIN(OD.amount) AS MIN_amount
, AVG(OD.orderedCnt) AS AVG_cnt
, SUM(OD.orderedCnt) AS SUM_cnt
, MAX(OD.orderedCnt) AS MAX_cnt
, MIN(OD.orderedCnt) AS MIN_cnt
FROM tbl_orderdetail AS OD
INNER JOIN tbl_orderinfo AS OI ON OI.orderNo = OD.orderNo
GROUP BY order_date, OD.goodsCode;
SELECT
to_char(OI.orderDate, 'YYYY-MM') AS order_date
, MAX(OD.amount) AS MAX_amount
, MIN(OD.amount) AS MIN_amount
, AVG(OD.orderedCnt) AS AVG_cnt
, SUM(OD.orderedCnt) AS SUM_cnt
, MAX(OD.orderedCnt) AS MAX_cnt
, MIN(OD.orderedCnt) AS MIN_cnt
FROM tbl_orderdetail AS OD
INNER JOIN tbl_orderinfo AS OI ON OI.orderNo = OD.orderNo
GROUP BY order_date;
SELECT
OD.goodsCode
, MAX(OD.amount) AS MAX_amount
, MIN(OD.amount) AS MIN_amount
, AVG(OD.orderedCnt) AS AVG_cnt
, SUM(OD.orderedCnt) AS SUM_cnt
, MAX(OD.orderedCnt) AS MAX_cnt
, MIN(OD.orderedCnt) AS MIN_cnt
FROM tbl_orderdetail AS OD
INNER JOIN tbl_orderinfo AS OI ON OI.orderNo = OD.orderNo
GROUP BY OD.goodsCode;
SELECT * FROM tbl_orderinfo;
SELECT * FROM tbl_orderdetail;
SELECT OI.orderNo, OD.regDate, OD.amount
FROM tbl_orderdetail AS OD
INNER JOIN tbl_orderinfo AS OI ON OI.orderNo = OD.orderNo
WHERE OD.amount > (
SELECT AVG(amount) FROM tbl_orderdetail WHERE to_char(regDate, 'YYYY') = '2023'
);
SELECT * FROM tbl_orderinfo;
SELECT * FROM tbl_orderdetail;
SET autocommit=0;
START TRANSACTION;
UPDATE tbl_orderinfo AS OI
INNER JOIN tbl_orderdetail AS OD
SET OI.orderAmount = (
SELECT SUM(OD.amount) FROM tbl_orderdetail as OD2 WHERE OI.orderNo = OD2.orderNo
)
WHERE OI.orderNo = OD.orderNo
;
UPDATE tbl_orderinfo AS OI INNER JOIN tbl_orderdetail AS OD
SET OI.orderAmount = (
SELECT SUM(OD2.amount) FROM tbl_orderdetail AS OD2 WHERE OD2.orderNo = OI.orderNo
)
WHERE OI.orderNo = OD.orderNo;
UPDATE tbl_orderinfo AS OI
SET OI.orderAmount = (
SELECT SUM(OD.amount) FROM tbl_orderdetail AS OD WHERE OD.orderNo = OI.orderNo
);
SELECT OD.orderNo,
SUM(OD.amount) AS sum_amount
FROM tbl_orderinfo AS OI
INNER JOIN tbl_orderdetail AS OD ON OD.orderNo = OI.orderNo
WHERE OI.orderNo = OD.orderNo
GROUP BY OD.orderNo;
ROLLBACK;
COMMIT;
SELECT
OI.orderNo, OD.orderNo, OI.orderAmount, SUM(OD.amount)
FROM tbl_orderinfo AS OI
INNER JOIN tbl_orderdetail AS OD ON OD.orderNo = OI.orderNo
GROUP BY OI.orderNo
;
USE employees;
DESC salaries;
SELECT *, COUNT(emp_no) FROM salaries
WHERE from_date BETWEEN '2002-01-01' AND '2002-12-31'
GROUP BY emp_no
ORDER BY emp_no
LIMIT 500;
SELECT *
FROM salaries
WHERE emp_no = 10009;
SELECT
emp_no
, AVG(case MONTH(from_date) when 1 then salary ELSE 0 END) AS '1월'
, AVG(case MONTH(from_date) when 2 then salary ELSE 0 END) AS '2월'
, AVG(case MONTH(from_date) when 3 then salary ELSE 0 END) AS '3월'
, AVG(case MONTH(from_date) when 4 then salary ELSE 0 END) AS '4월'
, AVG(case MONTH(from_date) when 5 then salary ELSE 0 END) AS '5월'
, AVG(case MONTH(from_date) when 6 then salary ELSE 0 END) AS '6월'
, AVG(case MONTH(from_date) when 7 then salary ELSE 0 END) AS '7월'
, AVG(case MONTH(from_date) when 8 then salary ELSE 0 END) AS '8월'
FROM salaries
WHERE from_date BETWEEN '2002-01-01' AND '2002-12-31'
GROUP BY emp_no
;
SELECT emp_no, salary, to_char(from_date, 'YYYY-MM'), COUNT(from_date)
FROM salaries
WHERE from_date BETWEEN '2002-01-01' AND '2002-12-31'
GROUP BY emp_no, to_char(from_date, 'YYYY-MM')
LIMIT 100;
SELECT to_char(from_date, 'YYYY-MM'), SUM(salary) AS sum_salary
FROM salaries
WHERE from_date BETWEEN '2002-01-01' AND '2002-12-31'
GROUP BY to_char(from_date, 'YYYY-MM') WITH ROLLUP;
SELECT emp_no, to_char(from_date, 'YYYY-MM'), SUM(salary) AS sum_salary
FROM salaries
WHERE from_date BETWEEN '2002-01-01' AND '2002-12-31'
GROUP BY to_char(from_date, 'YYYY-MM'), emp_no WITH ROLLUP;
SELECT emp_no, to_char(from_date, 'YYYY'), SUM(salary) AS sum_salary
FROM salaries
WHERE (from_date BETWEEN '1995-01-01' AND '2002-12-31') && (emp_no BETWEEN 10001 AND 10010)
GROUP BY to_char(from_date, 'YYYY'), emp_no WITH ROLLUP;
SELECT
A.emp_no, A.from_date, A.sum_salary, B.total
FROM (
SELECT
emp_no
, to_char(from_date, 'YYYY-MM') AS from_date
, SUM(salary) AS sum_salary
FROM salaries
WHERE from_date BETWEEN '2002-01-01' AND '2002-12-31'
GROUP BY to_char(from_date, 'YYYY-MM'), emp_no
) AS A
INNER JOIN (
SELECT
to_char(from_date, 'YYYY-MM') AS from_date
, SUM(salary) AS total
FROM salaries
WHERE from_date BETWEEN '2002-01-01' AND '2002-12-31'
GROUP BY to_char(from_date, 'YYYY-MM')
) AS B ON B.from_date = A.from_date
;
USE employees;
SELECT
emp_no, from_date, sum_salary
FROM(
SELECT
emp_no
, to_char(from_date, 'YYYY-MM') AS from_date
, SUM(salary) AS sum_salary
FROM salaries
WHERE from_date BETWEEN '2002-01-01' AND '2002-12-31'
GROUP BY to_char(from_date, 'YYYY-MM'), emp_no
UNION
SELECT
''
,concat(to_char(from_date, 'YYYY-MM'), '월 총합') AS from_date
, SUM(salary) AS sum_salary
FROM salaries
WHERE to_char(from_date, 'YYYY-MM') BETWEEN '2002-01-01' AND '2002-12-31'
GROUP BY to_char(from_date, 'YYYY-MM')
UNION
SELECT
''
, concat('총합계') AS from_date
, SUM(salary) AS sum_salary
FROM salaries
WHERE to_char(from_date, 'YYYY-MM') BETWEEN '2002-01-01' AND '2002-12-31'
) AS A
;
SELECT
emp_no
, to_char(from_date, 'YYYY-MM') AS from_date
, SUM(salary) AS sum_salary
FROM salaries
WHERE from_date BETWEEN '2002-01-01' AND '2002-12-31'
GROUP BY to_char(from_date, 'YYYY-MM'), emp_no;
SELECT
'' AS emp_no
, concat(to_char(from_date, 'YYYY-MM'), '월 총합') AS from_date
, SUM(salary) AS sum_salary
FROM salaries
WHERE to_char(from_date, 'YYYY-MM') BETWEEN '2002-01-01' AND '2002-12-31'
GROUP BY to_char(from_date, 'YYYY-MM')
;
SELECT
'' AS emp_no
, concat('총합계') AS from_date
, SUM(salary) AS sum_salary
FROM salaries
WHERE to_char(from_date, 'YYYY-MM') BETWEEN '2002-01-01' AND '2002-12-31'
;
USE maria;
WITH temp_orderDetail(goodsCode, total) AS (
SELECT goodsCode, SUM(amount)
FROM tbl_orderDetail
GROUP BY goodsCode
)
SELECT * FROM temp_orderDetail;
SELECT * FROM temp_orderDetail;
1. 다음 중 변수나 상수 선언 명령으로 적절한 것은 O, 그렇지 않은 것은 X를 표시하고, 이유를 적으시오.
1) boolean flag; 답 : o
2) byte public; 답 : x / 예약어 사용 불가
3) short data$; 답 : o
4) char 이름; 답 : o / 가능은 하나 한글 사용 지양함이 좋음
5) int name3; 답 : o
6) long 3name; 답 : X / 첫글자 숫자 안됨
7) final double USER_DATE; 답 : o
8) final int &MY_DATA; 답 : o
9) final float HELLO^^; 답 : x / 특수문자 $, _ 제외 불가
4. 다음 산술 연산의 결과를 적으시오.
1) System.out.println(2 + 3 / 2); 답 : 3
2) System.out.println(12 % 3 + 5 / 2); 답 : 2
3) System.out.println((3 + 7 / 2) % 4); 답 : 2
5. 다음 연산의 결과를 적으시오.
int a=4, b=5, c=6;
1) System.out.println(false && a-- > 6); 답 : FALSE
2) System.out.println(true || b++ > 6); 답 : TRUE
3) System.out.println(true ^ c++ > 6); 답 : TRUE
4) a: 답 : 3
5) b: 답 : 6
6) c: 답 : 7
6. OOP(Object Oriented Programming)의 4가지 특징에 대하여 설명하시오.
답 :
- 상속
: 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 자바의 문법 요소로 상위 클래스로부터 확장된 여러 개의 하위 클래스들이 모두 상위 클래스의 속성과 기능들을 간편하게 사용할 수 있으며 오버라이딩을 통해 상속받은 메서드를 재정의해서 사용할 수도 있음.
- 추상성
: 중요한 부분을 강조하기 위해 불필요한 세부 사항들은 제거하고 가장 본질적이고 공통적인 부분만을 추출하여 표현하는 것, 즉 객체의 공통적인 속성과 기능을 추출하여 정의하는것을 의미. 인터페이스로 객체의 기능과 역할을 추상적으로 정의 후 해당 인터페이스를 상속받아 구현하는 것
- 캡슐화
: 캡슐화란 클래스 안에 서로 연관있는 속성과 기능들을 하나의 캡슐(capsule)로 만들어 데이터를 외부로부터 보호하는 것으로 데이터 보호(data protection)와 데이터 은닉(data hiding)을 목적으로 함.
- 다형성
: 어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질을 의미, 부모 클래스를 상속받은 클래스의 경우 상황에 따라 자기 자신으로 정의되기도 부모클래스로도 정의할 수 있음.
14. StudentTest의 출력 결과가 다음처럼 나오도록 Student 클래스를 구현하시오.
public class StudentTest {
public static void main(String[] args) {
HashSet<Student> set = new HashSet<Student>();
set.add(new Student("100", "홍길동"));
set.add(new Student("200", "이순신"));
set.add(new Student("300", "정약용"));
set.add(new Student("400", "강감찬"));
set.add(new Student("100", "송중기"));
System.out.println(set);
}
}
<출력결과>
100 : 홍길동, 200 : 이순신, 300 : 정약용, 400 : 강감찬
답:
class Student {
String k;
String v;
Student() {}
Student(String k, String v) {
this.k = k;
this.v = v;
}
@Override
public String toString() {
return k + " : " + v;
}
}
+ 240221 bbbooo님 의견 추가!! : toString() 오버라이딩 추가
19. try{} 블록이 수행되면 블록으로서 주로 열린 파일이나 네트워크 리소스의 해제를 수행하는 블록을 구현하는 예약어는 _____ 입니다.
답 : finally
20. 바이트로 읽어 들인 자료를 문자로 변환해주는 스트림은 _____ 입니다.
답 : InputSreamReader
Review
- Java 재시험을 볼 예정일 듯함 => 이번주 내로 자바책 정리 완료 필요
컬렉션(정리중)/람다식/자바IO
- Java 1차, 2차 기초 시험 오답노트 진행 => 틀렸던거 또 틀리지 않도록!!!
TO DO
- Java 최종 정리(~2/25)
- Maria DB 정리 수업진도 따라잡기
안녕하세요! 오늘도 글 잘 봤습니다! 시험도 보시다니 고생 많으셨겠어요..! 그런데 읽다보니 조금 의문점이 생기더라구여. 14번의 경우 toString()을 오버라이딩 하지 않으면 객체의 해시코드가 나오지 않을까요? 그래서 toString()을 오버라이딩하는 코드가 추가되면 더욱 정답에 가깝지 않을까.. 하는 생각이 드는데 어떻게 생각하시나요??