추씨의DBMS일기8편(국비Ver)

2023. 10. 26. 12:24DBMS

금일강의내용정리

==========================================================================

1. Group by
부서별 직원 수를 출력하시오  


use grpdb;
create table company (
com_id int not null auto_increment,
com_buseo varchar(10) not null,
com_name varchar(10),
primary key(com_id)
);


INSERT INTO company VALUES(NULL, '통신과', '이명철');
INSERT INTO company VALUES(NULL, '정작과', '안주영');
INSERT INTO company VALUES(NULL, '인사과', '권현지');
INSERT INTO company VALUES(NULL, '정작과', '주세현');
INSERT INTO company VALUES(NULL, '정작과', '임종서');
INSERT INTO company VALUES(NULL, '인사과', '방유미');

SELECT COUNT(*) as '전체 간부 수' FROM company;

SELECT COUNT(DISTINCT(com_buseo)) as '전체 부서 수' FROM company;


부서별 직원 수를 출력하시오 단, 직원수가 2명 이상인 부서만 출력하시오.
예시 - 인사과(3), 자재과(10), 임원수(2) 형태로 출력하시오.

SELECT com_buseo, count(com_name) FROM company
GROUP BY com_buseo
HAVING count(com_name) >= 2 
ORDER BY com_buseo 
DESC LIMIT 1, 1;
------------------------------------------------------------------------------------------------
MySQL 내장함수


create table scores(
family char(1),
name varchar(10),
passwd varchar(10),
score int,
birth date
);

INSERT INTO scores VALUES('h', '홍길동', '1234', 82.33333, '1990-01-01');
INSERT INTO scores VALUES('k', '김철수', '0000', 95.77777, '2000-01-01');
INSERT INTO scores VALUES(' ', 'null', 'null', 0, '2010-01-01');


점수가 0보다 크면 응시 아니면 미응시로 출력하시오.
SELECT name, if(score > 0, '응시', '미응시') as '응시/미응시', score FROM scores;

1990년대 생은 '90s', 2000년대 생은 '00s'로 표시하시오.
SELECT if(birth >= '2000-01-01', '90s', '00s') as 'Generation' FROM scores;


family 컬럼의 값을 대문자 : upper( ), Lower( )
SELECT UPPER(family) FROM scores;

trim 좌우공백제거
INSERT INTO scores VALUES('c', '코리아', ' 1234&', 99, '2023-01-01');

SELECT passwd FROM scores;
SELECT trim(passwd) FROM scores;


replace(컬러명, '원본', '바꿀내용')
SELECT passwd FROM scores;
SELECT REPLACE(passwd, '&', ' ') FROM scores;

SELECT REPLACE(trim(passwd), '&', ' ') FROM scores;

CREATE TABLE tel(
tell1 char(3),
tell2 char(4),
tell3 char(4)
);

INSERT INTO tel VALUES('010', '1234', '6789');
INSERT INTO tel VALUES('011', '5555', '5432');

010-1234-5678
이어붙이기(concat), 잘라내기(left, right), 바꾸기(6789 -> ****)

공백 제거
SELECT TRIM(LEFT(concat(tell1, ' - ', tell2, ' - ', tell3), 3)) AS '통신사' FROM tel;

휴대폰번호 끝자리만 ****
SELECT INSERT(TRIM(RIGHT(concat(tell1, tell2, tell3), 4)), 1, 4, '****') FROM tel;

SELECT concat(tell1, tell2, tell3) FROM tel;

------------------------------------------------------------------------------------------------


CREATE TABLE timer(
time1 datetime,
time2 datetime,
time3 datetime,
time4 datetime
);

INSERT INTO timer 
VALUES(now(), sysdate(), curdate(), current_timestamp());

SELECT time1 FROM timer;

년 YEAR()
월 MONTH()
일 DAY()


SELECT YEAR(time1), MONTH(time1), DAY(time1) FROM timer;

날짜 포멧 변경 DATE_FORMAT(값, 형식)
날짜 포멧 변경 DATE_FORMAT(값, '%Y-%M-%D');
날짜 포멧 변경 DATE_FORMAT(값, '%Y.%M.%D');
날짜 포멧 변경 DATE_FORMAT(값, '%Y-%M-%D' %H:%I:%S');

SELECT time1 FROMAT timer;

SELECT DATE_FORMAT(time1, '%Y.%M.%D') FROM timer;

SELECT DATE_FORMAT(time1, '%Y/%M/%D') FROM timer;

SELECT DATE_FORMAT(time1, '%Y.%M.%D %H:%I:%S') FROM timer;

------------------------------------------------------------------------------------------------
테이블 조인(primary key, foreign key)
 - 테이블에 null 값이 들어가지 못하게 함.


shop -> member, buyer

CREATE TABLE member(
userid varchar(20) not null,
passwd varchar(10) not null,   
name varchar(20) not null,
regdate date,
primary key(userid )
);

CREATE TABLE buyer(
item_name varchar(20), 
item_price int, 
item_amount int,
item_regdate date,
user_id varchar(20) not null,
foreign key(user_id) references member(userid)
);

 

조인(연결해서 하나처럼 사용할 때)
  1. pk(기본키 : 중요도 가장) : null 값, 중복 데이터 x
  2. fk(외래키 : 자식 테이블)
   - 외래키는 부모테이블의 기본키와 동일해야 한다.
      (외래키로 지정하는 컬럼은 기본키의 데이터 타입, 사이즈와 동일해야 한다)

* member, buyer
  삭제는 자식부터...
  DROP TABLE buyer;
  DROP TABLE member;

여기까지 금일강의내용 정리

==========================================================================

느낀점 : 피곤타

==========================================================================

오늘의 결론

.

.

.

.

.

.

.

한번의 실패와 영원한 실패를 혼동하지 마라 -F.스콧 핏제랄드

'DBMS' 카테고리의 다른 글

추씨의DBMS일기10편(국비Ver)  (1) 2023.10.30
추씨의DBMS일기9편(국비Ver)  (0) 2023.10.27
추씨의DBMS일기7편  (0) 2023.10.25
추씨의DBMS일기6편(국비Ver)  (0) 2023.10.25
추씨의DBMS일기5편(국비Ver)  (1) 2023.10.23