MySQL 코테를 보기 위해 MySQL select 구문을 연습했다.
--
/* */
AS 별칭
형식으로 붙이면 된다. 하지만 별칭의 중간에 공백이 있다면 꼭 작은 따옴표 ‘ ‘로 별칭을 감싸줘야 한다. 또한 AS는 붙여도 되고 생략해도 된다.SELECT first_name AS 이름, gender AS 성별, hire_date AS '회사 입사일'
FROM employees;
SELECT select_expr
[FROM table_references]
[WHERE where_condition]
[GROUP BY {col_name | expr | position}]
[HAVING where_condition]
[ORDER BY {col_name | expr | position}]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
SELECT 열 이름
FROM 테이블 이름
WHERE 조건
USE 데이터베이스_이름;
SELECT 필드 이름 FROM 테이블 이름 WHERE 조건식;
=, <, >, <=, >=, <>, != 등
)와 관계 연산자(NOT, AND, OR
)를 잘 조합하여 다양한 조건의 쿼리를 생성할 수 있다. SELECT name, height FROM usertbl WHERE height BETWEEN 180 AND 183;
// 키가 180이상 183이하인 사람을 조회
SELECT name, addr FROM usertbl WHERE addr IN ('경남', '전남', '경북');
// 주소가 경남 또는 전남 또는 경북인 사람을 조회
아무 글자와 매치: %
한 글자와 매치: _
SELECT name, height FROM usertbl WHERE name LIKE '김%';
// '김'으로 시작하는 이름을 가진 사람을 조회
SELECT name, height FROM usertbl WHERE name LIKE '_종신';
// 맨 앞 글자가 한 글자이고 그 다음 이름이 '종신'인 사람을 조회
SELECT name, height FROM usertbl
WHERE height > (SELECT height FROM usertbl WHERE Name = '김경호');
ANY는 서브쿼리의 여러 개의 결과 중 한 가지만 만족해도 된다.
ALL은 서브쿼리의 여러 개의 결과를 모두 만족시켜야 한다.
SOME은 ANY와 동일한 의미로 사용된다.
SELECT name, height FROM usertbl
WHERE height >= ANY (SELECT height FROM usertbl WHERE addr = '경남');
// ANY 다음의 서브쿼리 결과인 173, 170보다 크거나 같은 사람이 모두 출력된다.
// 결국 키가 170보다 크거나 같은 사람이 해당된다.
SELECT name, height FROM usertbl
WHERE height >= ALL (SELECT height FROM usertbl WHERE addr = '경남');
// ALL 다음의 서브쿼리 결과인 173보다 크거나 같아야할 뿐만 아니라, 170보다 크거나 같은 사람이 모두 출력된다.
// 결국 키가 173보다 크거나 같은 사람이 해당된다.
SELECT name, height FROM usertbl
WHERE height = ANY (SELECT height FROM usertbl WHERE addr = '경남');
// ANY 다음의 서브쿼리 결과와 동일한 값인 173, 170에 해당되는 사람만 출력된다.
SELECT name, height FROM usertbl
WHERE height IN (SELECT height FROM usertbl WHERE addr = '경남');
// 이는 위의 구문과 동일한 구문이다.
// 즉 '=ANY(서브쿼리)'는 'IN(서브쿼리)'와 동일한 의미이다.
SELECT name, height FROM usertbl ORDER BY height DESC, name ASC;
SELECT userID FROM usertbl ORDER BY height;
SELECT DISTINCT addr FROM usertbl;
SELECT emp_no, hire_date FROM employees
ORDER BY hire_date ASC
LIMIT 5;
LIMIT 시작, 개수
또는 LIMIT 개수 OFFSET 시작
형식으로도 사용할 수 있다. 시작을 생략하면 0부터 시작한다.SELECT emp_no, hire_date FROM employees
ORDER BY hire_date ASC
LIMIT 5; -- `LIMIT 0,5` , `LIMIT 5 OFFSET 0`와 동일
테이블을 복사하는 CREATE TABLE…SELECT
USE sqldb;
CREATE TABLE buytbl2 (SELECT * FROM buytbl);
// buytbl을 buytbl2로 복사하는 구문이다.
USE sqldb;
CREATE TABLE buytbl3 (SELECT userID, prodName FROM buytbl);
// 필요하다면 일부 열만 복사할 수 있다.
GROUP BY 및 HAVING 그리고 집계 함수
[참고자료]
이것이 MySQL이다 MySQL 설치부터 PHP, 파이썬 연동까지 한번에(저자: 우재남, 출판사: 한빛미디어)
sql 코테를 보다보면 서브쿼리를 사용해야하는 일이 종종 있는데, 헷갈리지 않게 잘 작성해주신거같아요! 서브쿼리는 주로 where이나 from에서 쓰이는 경우가 있는데, from과 where 편도 만들어주시나용?