select field_name from table_name where 조건식;
select * from userTb1 where name = '김경호';
SELECT userID, Name FROM userTb1 WHERE birthYear >= 1970 AND height >= 182;
SELECT userID, Name FROM userTb1 WHERE birthYear >= 1970 OR height >= 182;
숫자로 구성됭어 있어 연속적인 값을 가지는 경우 BEETWEEN ~ AND를 사용할 수 있다.
SELECT Name, height FROM userTb1 WHERE height BETWEEN 180 AND 183;
연속적인 값이 아닌 이산적인 값인 경우 IN()을 사용할 수 있다.
SELECT Name, addr FROM userTb1 WHERE addr IN ('경남','전남','경북');
문자열의 내용을 검색하기 위해 LIKE 연산자를 사용할 수 있다.
SELECT Name, height FROM userTb1 WHERE name LIKE '김%';
SELECT Name, height FROM userTb1 WHERE name Like '_종신';
%나 _가 문자열의 제일 앞에 들어가는 것은 인덱스를 사용하지 않고 전체 데이터를 검색하게 되기 때문에 비효율적인 결과를 낳는다.
조건에 해당하는 row를 모두 (returns more than 1 row 같은 error가 출력 됐을 경우 사용)
SELECT Name, height FROM userTb1 WHERE height >= ANY (SELECT height FROM userTb1 WHERE addr = '경남');
ANY
는 서브쿼리의 여러 개의 결과 중 한가지만 만족해도 되며, ALL
은 서브쿼리의 여러 개의 결과를 모두 만족시켜야 된다. 참고로 SOME
은 ANY
와 동일한 의미로 사용된다. 또한 ANY
는 IN
과 동일한 의미이다.
ORDER_BY
절은 결과물에 대해 영향을 미치지는 않지만, 결과가 출력되는 순서
를 조절하는 구문
ASC
나 DESC
를 사용하여 오름차순, 내림차순으로 정렬할 수 있다.
또한, ORDER BY는 SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY 중에서 제일 뒤에 와야한다.
SELECT Name, mDate FROM userTb1 ORDER BY mDate;
SELECT DISTINCT addr FROM userTb1;
SELECT emp_no, hire_date FROM employees ORDER BY hire_date ASC LIMIT 5; -- 상위 5개만 출력
SELECT emp_no, hire_date FROM employees ORDER BY hire_date ASC LIMIT 0, 5; -- 0개부터 5개까지만 출력
--형식:
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, SUM(amount) FROM buyTb1 GROUP BY userID;
이렇게 할 경우 열에는 제목이 함수 이름 그대로(SUM(amount)) 나온다. alias를 사용하자.
SELECT userID AS '사용자 아이디', SUM(amount) AS '총 구매 개수'
FROM buyTb1 GROUP BY userID;
SUM()
외에 GROUP BY 와 함께 자주 사용되는 집계함수는 다음과 같다.
AVG()
- 평균
MIN()
- 최솟값
MAX()
- 최댓값
COUNT()
- 행의 갯수
COUNT(DISTINCT)
- 행의 갯수 ( 중복은 1개만 인정)
STDEV()
- 표준편차
VAR_SAMP()
- 분산
예를 들어, 총 구매액이 1,000 이상인 사용자에게만 사은품을 증정하고 싶다면 앞에서 배운 조건을 포함하는 WHERE 구문으로 작성 할 경우 다음과 같다.
SELECT userID AS '사용자', SUM(price*amount) AS '총구매액'
FROM buyTb1
WHERE SUM(price*amount) > 1000
GROUP BY userID;
하지만 위와 같이 작성 할 경우 Error Code: 1111. Invalid use of group function
이라는 에러를 마주치게 된다. 집계 함수는 WHERE 절에 나타날 수 없다는 뜻이다.
이럴 때 사용되는 것이 HAVING절이다
WHERE와 비슷한 개념으로 조건을 제한하는 것이지만, 집계 함수에 대해서 조건을 제한하는 것이라고 생각하면 된다. 그리고 순서는 꼭 GROUP BY 다음에 나와야 한다.
INSERT INTO 테이블(열1, 열2,...) VALUES (값1, 값2,...);
대량의 샘플 데이터 생성
--형식:
INSERT INTO 테이블이름(열이름1, 열이름2, ...)
SELECT문 ;
--ex)
CREATE TABLE testTbl5
(SELECT emp)no, first_name, last_name, FROM employees.employees);
UPDATE 테이블이름 SET 열1=값1, 열2=값2 WHERE 조건;
DELETE FROM 테이블이름 WHERE 조건;
상위 n 건만 삭제하기
DELETE FROM 테이블이름 WHERE 조건 LIMIT n;