구문형식
1. INSERT INTO 테이블이름 VALUES(값1, 값2, ... , 값n)
2. INSERT INTO 테이블이름(컬럼1, 컬럼2, ... 컬럼m) VALUES(값1, 값2, ... 값m)
2번은 각각의 값들이 어느 컬럼에 들어가는지 명시한다.
질의문 1.
학과이름‘영어영문학과‘, 단과대학‘인문과학대학‘, 주소 ‘http://eng.knou.ac.kr’, 전화번호’02-3668-4510’, 졸업학점 135인 레코드를 학과테이블에 삽입하시오.
=> 레코드의 값들이 컬럼 순서와 의미적으로 동일하다.
SQL INSERT INTO 학과 VALUES('영어영문학과', '인문과학대학',
'http://eng.knou.ac.kr', '02-3668-4510’, 135)
문자는 반드시 ''가 들어가야 한다!
질의문 2.
단과대학'자연과학대학', 학과이름'농학과', 졸업학점140, 전화번호'02-3668-4600',인 레코드를 학과테이블에 삽입하시오.
=> 순서가 테이블 컬럼의 순서와 일치하지 않음 + 웹사이트 주소가 없음.
=> VALUES로 값을 나열하기만 하면 DBMS 입장에서 각가의 값들이 어느 컬럼에 들어가야 할 지 알수없다.
=> 컬럼과 값들을 상응하게 나열해주자!
SQL INSERT INTO 학과(단과대학, 학과이름, 졸업학점, 전화번호) VALUES('자연과학대학', '농학과', 140, '02-3668-4600')
구문형식
1. UPDATE 테이블이름 SET 컬럼1=값1[, 컬럼2=값2, ... , 컬럼n=값n][WHERE 조건]
2. UPDATE 테이블_이름 SET 컬럼1=값1[, 컬럼2=수식2, ... , 컬럼n=수식n][WHERE 조건]
연산도 입력 가능
질의문1. 학과이름 '농학과'인 레코드의 주소 컬럼값을 'http://agri.knou.ac.kr'로 수정하시오.
SQL
UPDATE 학과 SET 주소='http://agri.knou.ac.kr' WHERE 학과이름 ='농학과'
학과이름이 농학과인 레코드를 먼저 찾고, 그 레코드에만 update를 진행한다.
질의문2
잔액이 500,000원 이상인 학생 계좌에 2% 이자를 지급하시오.
SQL
UPDATE 학과 SET (현재)잔액=잔액*1.02 WHERE 잔액 >= 500000
구문형식
DELETE FROM 테이블이름 [WHERE 조건]
WHERE이 생략되면, 지목된 테이블의 모든 레코드가 싹 다 지워질수도 있음.
질의문1.
소속학과가 '행정학과'인 교수의 레코드를 삭제하라.
SQL
DELETE FROM 교수 WHERE 소속학과 = '행정학과'
💬 이렇게 하면 삭제가될까?
✔️ 과목테이블의 교수번호를 같이 외래키로 참조시키고 있음. 만약 과목테이블에서 해당 교수의 교수번호를 참조하고 있는 경우, 해당 데이터는 삭제되지 않는다. 참조무결성 제약조건에 의해 삭제되지 않으므로, 참조되는 대상을 먼저 삭제하고나서 구문을 실행하면 삭제가 이루어진다!
질의문2.
모든 강의 레코드를 삭제하시오.
SQL DELETE FROM 강의
실제 DB에 데이터가 있는데, 전체 테이블을 삭제해라? 테스트가 아니라 실제 운용중인 프로그램에서 저런 SQL을 사용할 가능성은 거의 없다. 오히려 누군가 악의적으로 데이터를 모두 제거하려 하거나, 개발자가 실수로 WHERE절은 작성하지 않았을 확률이 더 높다!
=> 이런 상황에 안전핀 역할을 할 SAVE UPDATES 모드를 제공한다!
구문형식
SET SQL_SAFT_UPDATES = 0 또는 1
기본적으로 SAFE UPDATES모드가 켜져 있는 상태. 끄기를 원할경우 =0으로 변경합니다!
구문형식
- SELECT 컬럼1, 컬럼2, ... , 컬럼n FROM 교수
- SELECT * FROM 테이블 (테이블의 모든 항목 가져오기)
질의문 Q1. 교수 테이블에서 '소속학과' 컬럼을 선택하여 출력하시오.
SQL SELECT 소속학과 FORM 교수
SELECT에 기술된 컬럼만을 가져옵니다. 이렇게 가져오면 중복되는 값이 발생할 수 있어용.
SQL SELECT DISTINCT 소속학과 FORM 교수
중복되는 값 없이 하나만 보고 싶습니다! => DISTINCT(중복 배제)
SQL SELECT
*
FROM 교수
*
: 전체를 의미
단순질의문과 달리, 컬럼의 모든 자료가 아니라 몇몇 개의 레코드만을 가져온다.
질의문 Q1. 이수구분 '전공필수'인 과목의 과목명, 학점, 선수과목을 출력하시오.
SQL SELECT 과목명, 학점, 선수과목 FROM 과목 WHERE 이수구분='전공필수'
질의문 Q2. 남학생 중 2000년 이전에 태어난 학생의 학생번호, 학생이름, 전화번호, 나이를 출려하시오.
SQL SELECT 학생번호, 학생이름, 전화번호, 나이 FROM 학생 WHERE 성별='남자' AND 생년월일<'2000-1-1'
어떤 결과물에 특정 컬럼을 기준으로 결과물을 순서화시키는 것. select, from where 다 집어넣고, 마지막에 order by라고 선택적으로 추가할 수 있는 기능.
질의문 Q1. 학생의 계좌정보를 '잔액'기준으로 각각 오름차순, 내림차순으로 정렬하시오. (선정기준이 없으므로 모두 출력할 것)
SQL SELECT
*
FROM 계좌 ORDER BY 잔액 ASC(or DESC)
DBMS에서만 사용하려고 특별히 고안된 연산자라서 특수 연산자
SQL SELECT 계좌번호, 잔액, 학생번호 FROM 계좌 WHERE 잔액>=200000 AND 잔액 <= 400000
묘사력이 떨어짐. 더 직관적인 연산자 사용해지면 더 선명해진다!
SQL SELECT 계좌번호, 잔액, 학생번호 FROM 계좌 WHERE 잔액 BETWEEN 200000 AND 400000
SQL SELECT 교수이름, 직위, 소속학과 FROM 교수
WHERE 소속학과 ='컴퓨터과학과' OR 소속학과 ='행정학과' OR 소속학과 ='법학과'
=>너무 중복되는 부분이 많고, 직관적으로 와닿지 않음.
SQL SELECT 교수이름, 직위, 소속학과 FROM 교수
WEHRE 소속학과 IN('컴퓨터과학과', '행정학과', '법학과')
WHERE 과목코드 = 'COM' 하면 될까?
=> 아무것도 출력하지 않음. COM만 포함하면 되, 라는 의미가 아니라 COM과 완전히 일치하는 데이터만 출력함.
부분일치 => "LIKE + %"를 이용해 표현!
%
: 0개의상의 모든 문자를 의미.
COM%
: COM뒤에 어떤 문자가 오든 상관없어.
%COM
: 앞에는 뭐가 오든 상관없어, 근데 반드시 COM으로 끝나야해.
%COM%
: COM만 들어있으면 다 해당되는 거야.
구글검색, 카페 검색 등에 모두 LIKE검색을 사용합니다!
SQL SELECT 과목코드, 과목명, 이수구분 FORM 과목
WHERE 과목코드 LIKE'COM%'
이 함수들을 다 일일이 외울 필요 없음.숫자함수들이 있다. 숫자 조작 하고 싶으면, 숫자함수를 찾아보면 된다. 정도만 알면 됨.
질의문 Q1. 학생의 학생번호, 학생이름, 성별을 출려하시오. 단 학생번호는 앞 6자리만 출력하고 성별 뒤에는 '성'을 붙이시오.