웹개발_DB 4
빨간 밑줄친 아이콘을 클릭하면
커밋과 롤백을 유동적으로 활용할 수 있어
수정된 테이블을 원상복구하는데에
용이하다
*DB 실습
/*PLAYER 테이블에서 TEAM_ID가 'K01'인 선수 이름을 다른 이름으로 바꾸기*/
UPDATE PLAYER
SET PLAYER_NAME = '송태섭'
WHERE TEAM_ID ='K01';
SELECT * FROM PLAYER WHERE TEAM_ID ='K01';
/*PLAYER 테이블에서 POSITION이 MF인 선수 삭제하기*/
DELETE FROM PLAYER WHERE "POSITION" = 'MF';
SELECT * FROM PLAYER WHERE "POSITION" = 'MF';
/*PLAYER 테이블에서 HEIGHT가 180이상인 선수 삭제하기*/
DELETE PLAYER WHERE HEIGHT >=180;
SELECT * FROM PLAYER WHERE HEIGHT>= 180;
/*PLAYER 테이블에서 POSITION이 NULL인 선수*/
SELECT * FROM PLAYER WHERE "POSITION" IS NULL;
/*PLAYER 테이블에서 POSITION이 NULL이 아닌 선수*/
SELECT * FROM PLAYER WHERE NOT "POSITION" IS NULL;
SELECT * FROM PLAYER WHERE "POSITION" IS NOT NULL;
/*AS(ALIAS): 별칭
SELECT 절과 FROM절에서 사용할 수 잇다
선수 이름과 생일 조회, 컬럼명을 별칭으로 변경하여 출력해준다 AS는 생략가능*/
SELECT PLAYER_NAME AS 선수이름, BIRTH_DATE 선수생일 FROM PLAYER;
SELECT * FROM PLAYER ;
/*CONCATENAION: 연결, ||*/
SELECT PLAYER_NAME || '님의 영어 이름은'|| E_PLAYER_NAME 자기소개 FROM PLAYER;
LIKE
포함된 문자열 값을 찾고, 문자의 개수도 제한을 주 수 있다.
WHERE [컬럼명] LIKE '서식';
%:모든 것
_:글자 수
예)
'%A' : A로 끝나는 모든 것
'A%' : A로 시작하는 모든것
'%A% : A가 포함된 모든 것
'A__': A로 시작하는 세글자
'_A' : A로 끝나는 두글자
/*'천마'로 끝나는 팀 이름 조회*/
SELECT TEAM_ID, TEAM_NAME FROM TEAM
WHERE TEAM_NAME LIKE '%천마';
/*LIKE 실습*/
/*PLAYER 테이블로 김씨 찾기*/
SELECT PLAYER_NAME FROM PLAYER
WHERE PLAYER_NAME LIKE '김%';
/*PLAYER 테이블로 김씨 외 자 찾기*/
SELECT PLAYER_NAME FROM PLAYER
WHERE PLAYER_NAME LIKE '김_';
/*PLAYER 테이블로 김씨와 이씨 찾기*/
SELECT PLAYER_NAME FROM PLAYER
WHERE PLAYER_NAME LIKE '김%' OR PLAYER_NAME LIKE '이%';
/*PLAYER 테이블로 이씨가 아닌 사람 찾기*/
SELECT PLAYER_NAME FROM PLAYER
WHERE NOT PLAYER_NAME LIKE '이%';
집계 함수 : 결과 행 1개
※주의사항: NULL은 포함시키지 않는다, WHERE절에서 사용불가
평균 : AVG()
최대값 : MAX()
최소값 : MIN()
총합 : SUM()
개수 : COUNT()
SELECT AVG(HEIGHT),MAX(HEIGHT),MIN(HEIGHT),SUM(HEIGHT),COUNT(HEIGHT) FROM PLAYER p ;
정렬
ORDER BY 컬럼명, ... ASC: 오름차순
ORDER BY 컬럼명, ... DESC: 내림차순
/*오름차순 ASC는 생략가능*/
SELECT * FROM PLAYER p ORDER BY HEIGHT ;
/*내림차순*/
/*키가 큰사람 먼저 내림차순 같은 키면 몸무게 내림차순*/
SELECT * FROM PLAYER p ORDER BY
HEIGHT DESC, WEIGHT DESC;
GROUP BY: ~별 ㅁㅁ ex) 포지션 별 평균 키
WHERE 절이 GROUP BY보다 먼저 실행되기 때문에
WHERE절에서 우선적으로 처리할 조건식을 작성해야 효율적이다
묶기 전에는 WHERE절, 묶고 나서는 HAVING절을 사용하여 적절히 문제를 해결할 줄 알아야한다.
/*GROUP BY POSITION이면 POSITION 을 필수로 SELECT */
SELECT "POSITION", AVG(HEIGHT) FROM PLAYER p
/*NULL 삭제 */
WHERE "POSITION" IS NOT NULL
GROUP BY "POSITION";
/*PLAYER 테이블에서 몸무게가 80이상인 선수들의 평균 키가 180이상인 포지션 검색*/
SELECT "POSITION",AVG(WEIGHT),MIN(WEIGHT) FROM PLAYER
WHERE WEIGHT >=80
GROUP BY "POSITION"
HAVING AVG(HEIGHT)>=180;
/*EMPLOYEES 테이블에서 JOB_ID별 평균 SALARY가 10000미만인 JOB_ID 검색*/
SELECT JOB_ID,AVG(SALARY) FROM EMPLOYEES e
GROUP BY JOB_ID
HAVING AVG(SALARY)<10000
ORDER BY AVG(SALARY);
SUB QUERY
FROM 절: IN LINE VIEW
SELECT절: SCALAR
WHERE절: SUB QUERY
/*PLAYER 테이블에서 전체 평균 키와 포지션별 평균 키 구하기*/
SELECT "POSITION", AVG(HEIGHT), (SELECT AVG(HEIGHT) FROM PLAYER)
FROM PLAYER
WHERE "POSITION" IS NOT NULL
GROUP BY "POSITION";
SELECT * FROM PLAYER WHERE TEAM_ID ='K01'
/*+*/
SELECT * FROM PLAYER WHERE "POSITION" ='GK';
SELECT * FROM
(
SELECT PLAYER_NAME,"POSITION" FROM PLAYER p WHERE TEAM_ID ='K01'
)
PLAYER WHERE "POSITION" ='GK';
/*PLAYER 테이블에서 평균 몸무게보다 더 많이 나가는 선수들 검색*/
SELECT WEIGHT, PLAYER_NAME FROM PLAYER p
WHERE WEIGHT > (SELECT AVG(WEIGHT) FROM PLAYER p2 );
/*PLAYER 테이블에서 정남일 선수가 소속된 팀의 선수들 조회 */
SELECT * FROM PLAYER;
SELECT PLAYER_NAME, TEAM_ID FROM PLAYER
WHERE TEAM_ID = (SELECT TEAM_ID FROM PLAYER WHERE PLAYER_NAME = '정남일');
/*PLAYER 테이블에서 평균 키보다 작은 선수 검색, 조회 결과가 맞는지 검사까지 한번에 하기*/
SELECT HEIGHT ,PLAYER_NAME,(SELECT AVG(HEIGHT) FROM PLAYER ) FROM PLAYER
WHERE HEIGHT < (SELECT AVG(HEIGHT) FROM PLAYER) ;
/*SCHEDULE 테이블에서 경기 일정이 20120501 ~ 20120502 사이에 있는 경기장 정보 조회*/
SELECT * FROM SCHEDULE
WHERE SCHE_DATE >= '20120501' AND SCHE_DATE <='20120502';
UPDATE PLAYER
SET NICKNAME = (SELECT NICKNAME FROM PLAYER WHERE PLAYER_NAME = '정태민')
WHERE NICKNAME IS NULL;
SELECT * FROM PLAYER WHERE NICKNAME = '킹카';
SELECT * FROM EMPLOYEES e ;
UPDATE EMPLOYEES
SET SALARY = SALARY *1.2
WHERE SALARY < (SELECT AVG(SALARY) FROM EMPLOYEES e );
SELECT SALARY FROM EMPLOYEES e ORDER BY SALARY ;
/*PLAYER 테이블에서 평균 키보다 큰 선수들을 삭제*/
SELECT PLAYER_NAME,HEIGHT,(SELECT AVG(HEIGHT) FROM PLAYER p) FROM PLAYER;
DELETE FROM PLAYER
WHERE HEIGHT > (SELECT AVG(HEIGHT) FROM PLAYER p) ;
SELECT PLAYER_NAME,HEIGHT,(SELECT AVG(HEIGHT) FROM PLAYER p) FROM PLAYER;