SQL 기본
Select 열이름
FROM 테이블이름
WHERE 조건
USE 구문
use 데이터베이스_이름
SELECT Name, height
FROM userTBl
WHERE height >= 180 AND height <= 183;
SELECT Name, height
FROM userTBl
WHERE height BETWEEN 180 AND 183;
연속적인 데이터는 between
SELECT Name, addr
FROM userTBl;
WHERE add IN (‘경남’,‘전남’,‘경북’,‘전북’);
이산적인 데이터는 IN을 사용한다.
SELECT Name, addr
FROM userTBl
WHERE addr = ‘경남 OR addr= ’전남‘ OR addr = ’경북‘ OR addr = ’전북‘;
경남 혹은 전남 혹은 경북 혹은 전북인 애들 이름 주소 나오게해라
like문
select name, height
from userTbl
where name LIKE ‘김%’; -- where name LIKE ‘_종신’;
select Name, height
from userTBL
where height > (select height from userTBL where name = ‘김경호’);
select Name, height
from userTBL
where height > any (select height from userTBL where addr = ‘강남’);
경남이라는 지역에 사는 사람보다 키가 큰사람. any 안쓰면 > ,=,<을 썻을 때 뒤에 질의문에 대한 결과가 1개만 나와야하는데 테이블 안썻지만 select height from userTBL where addr = ‘강남’ 라는 질의문에 2개의 사람의 키의 값이 나오기 때문에 any를 써줘야한다.
where height =any (select ~~ ) 는 in 과 같다.
ORDER BY문
select Name, mDate FROM user Tbl ORDER BY mDate;
select Name, mDate FROM user Tbl ORDER BY height;
SELECT Name, height FROM user Tbl ORDER BY height desc, name asc;
order by는 쓰지 않는 것이 권장사항임
키로 내림차순하다가 같으면 이름으로 오름차순.
중복제거하는 distinct문
SELECT DISTINCT addr from userTbl;
select emp_np, hire_date FROM emplyees
ORDER BY hire_date ASC
-> 이렇게 하면 3만건을 다조회해야함
LIMIT를 사용 ! -> 많이쓰임
select emp_np, hire_date FROM emplyees
ORDER BY hire_date ASC
LIMIT 0, 5; -- 0번째에서 5번째 까지
100, 5 — 100번째에서 5번째 까지
테이블 복사하기
CREATE TABlE buyTbl2 (SELECT * FROM buyTbl);
6-3
GROUP BY 절
형식:
SELECT select_expr
[ FROM table_references]
WHERE where_condition
GROUP BY col_name | expr | position
HAVING where_condition
ORDER BY {col_name | expr | position}
다 생략이 가능하지만 순서가 바뀌면 안된다.
select userID AS `사용자 아이디`, SUM(amount) AS `총 구매 개수`
from butTbl GROUP BY userID;
아이디 별 구입한 양
SUM, AVG, MAX, MIN,COUNT
가장 키가 큰 친구와 가장 키가 작은 친구을 출력
select Name, height
FROM userTbl
WHERE height = (SELECT MAX(height)FROM userTbl)
OR height = (SELECT MIN(height)FROM userTbl);
select count(*) from userTbl;
select count(mobile1) AS `휴대폰이 있는 사용자` from userTbl;
select count(*) from employees.employees;
-> db에게 부담이 안가게!
총구매액의 합계가 천이상인사람
select userID AS `사용자`, SUM(price*amount) AS `총구매액`
from butTbl
-- WHERE SUM(price*amout) > 1000
-- where절은 group by절에서 사용안하고 having을쓴다.
GROUP BY userID;
HAVING SUM(price*amout) > 1000
ORDER BY SUM(price*amount) DESC;
ROLLUP 문
각각 분류별로 소합계를 내주고 마지막에 총합계를 내주는 함수
SELECT num, groupName, SUM(price * amount) AS `비용`
FROM buyTbl
GROUP BY groupName, num
WITH ROLLUP;
-> 1,2,3,4,5 숫자매기면서 각각 합을 내줌 그리고 마지막에 소합계 맨 마지막엔 총합계
SELECT groupName, SUM(price * amount) AS ‘비용’
FROM buyTbl
GROUP BY groupName, num
WITH ROLLUP;
각 물건?에 소합계만 출력하고 마지막에 총합계
총합계를 낼 때 유용함
SQL의 분류
DML, DDL, DCL
DML
select, delete, insert, update
DDL
CREATE, DROP, ALTER
DDL은 되돌림(rollback)이나 완적적용(commit)을 시킬수가 없다.
DCL
GRANT,REVOKE,DENY
INSERT문의 기본
CREATE TABLE testTbl1 (id, int, userName char(3), age int);
INSERT INTO testTbl1 VALUES (1, ‘홍길동’, 25)
INSERT INTO testTbl1(id, userName) VALUES(2,‘설현’)
INSERT INTO testTbl1(userName, age, id) VALUES (‘조아’,26,3)
CREATE TABLE testTbl2
( id int AUTO_INCREMENT PRIMARY KEY,
userName char(3),
age int );
INSERT INTO testTbl2 VALUES (NULL, ‘지민’, 25);
INSERT INTO testTbl2 VALUES (NULL, ‘유나’, 22);
INSERT INTO testTbl2 VALUES (NULL, ‘유경’, 21);
null값을 넣었지만 AUTO_INCREMENT PRIMARY KEY로 인해서 1씩증가해 차레대로 숫자값이 들어가게 된다.
select LAST_INSERT_ID(); 몇 번까지 들어갔는지 알아봄 위에 sql문에서는 3번인 3이 나옴
alter table testTBl2 AUTO_increment=100;
INSERT INTO testTbl2 VALUES (NULL, ‘찬미’, 23);
하면 100번부터 들어가게됨.
새로운 테이블 생성
CREATE TABLE testTbl3
( id int AUTO_INCREMENT PRIMARY KEY,
userName char(3),
age int );
ALTER TABLE testTbl3 AUTO_INCREMENT=1000;
SET @@auto_increment_increment=3;
1000번부터 시작하고 3씩 증가 시키겠다.
INSERT INTO testTbl2 VALUES (NULL, ‘나연’, 20);
INSERT INTO testTbl2 VALUES (NULL, ‘정연’, 18);
INSERT INTO testTbl2 VALUES (NULL, ‘모모’, 19);
다른 테이블에 있는 내용 insert 하기(대량의 테이블 넣기)
create talbe testTbl4 (id int, Fname varchar(50), Lname varchar(50));
insert into testTbl4;
SELECT emp_no, first_name, last_name
FROM employees.employees;
CREATE TABLE testTbls
(SELECT emp_no, first_name, last_name FROM employees.employees);
데이터의 수정 : UPDATE
UPATE 테이블
SET 열1 = 값1, 열2=값2...
WHERE 조건;
WHERE 조건을 안써줫을 때 모두 수정 될 수 있으므로 왠만하면 써주는 것으로한다.
UPDATE testTbl4
SET Lname = ‘없음’
WHERE Fname = ‘Kyochi’;
where 문을 안써줬을 경우 모두 Lname이 없음으로 바뀌고 되돌리기 힘들게 된다.
delete from testTbl4 WHERE Fname = ‘Amer’ LIMIT 5;
LIMIT를 안써줬다면 200건정도 썻다면 5건 지워짐
DELETE FROM bigTbl1; -- 시간이 오래걸림 drop이나 truncate를 사용
DROP TABLE bigTbl2; --테이블을 모두 지우겟다. 테이블구조까지 지우겟다.
TRUNCATE TABLE bigTbl3; --테이블의 내용은 다 지우지만 구조는 남기고싶다.
insert ignore into memberTBL VALUES(‘BBK’,‘비비코‘,’미국‘);
insert ignore into memberTBL VALUES(‘SJH’,‘서장훈‘,’서울‘);
-> BBK는 이미 테이블에 있고 기본키가 아이디이기 때문에 안들어감
위에서 실패하면 서장훈도 같이 안들어가기에 중복된게 잇다면 무시하고 다음 것을 실행하라는 의미인 IGNORE을 써줌
insert ignore into memberTBL VALUES(‘BBK’,‘비비코‘,’미국‘);
ON DUPLICATE KEY UPDATE name = ‘비비코’, addr =’미국‘;
-> bbk가 있다면 중복이된다면 이것으로 바꿔줘라 잘쓰이지는 않음
'2019백업' 카테고리의 다른 글
Chapter3_1정리(Day 7일차) (0) | 2018.05.23 |
---|---|
mysql고급문법 (0) | 2018.05.15 |
데이터분석 4장 핵심 (0) | 2018.05.12 |
4장 데이터 모델링 (0) | 2018.05.11 |
3장 (0) | 2018.05.10 |