728x90
SQL 기초 정리
1. SELECT로 데이터 조회
SELECT 열 FROM 테이블;
SELECT first_name AS 이름 FROM employees;
2. WHERE 절
WHERE절은 조회하는 결과에 특정한 조건을 주어 원하는 데이터만 보고 싶을 때 사용
형식: `SELECT 필드이름 FROM 테이블 이름 WHERE 조건식;`
1) BETWEEN ... AND
-- 관계 연산자 & 조건 연산자
SELECT userid, name FROM usertbl
WHERE birthyear >= 1970 AND height >= 182;
-- BETWEEN ... AND 사용
SELECT name FROM usertbl WHERE height BETWEEN 180 AND 183;
2) IN
연속적인 값이 아닌, 이산적인 값인 `경남`, `전남`의 경우는 BETWEEN ... AND 구문을 사용할 수 없음
하지만, `IN()` 구문을 사용하여 동일한 결괏값을 도출할 수 있다.
SELECT name FROM usertbl WHERE addr IN ('경남', '전남');
3) LIKE
문자열의 내용을 검색하기 위해 사용
SELECT name FROM usertbl WHERE name LIKE '김%';
위 조건은 성이 '김'씨이고, 그 뒤는 무엇이든(%) 허용한다는 의미
한 글자와 매치하기 위해서는 `_` 사용
SELECT name FROM usertbl WHERE name LIKE '_김%';
맨 앞 글자가 한 글자이고, 두 번째 글자는 '김' 그리고 세 번째 이후는 아무거나 오는 값 추출
📌 `%` 나 `_` 가 검색할 문자열의 제일 앞에 들어가는 것은 MySQL 성능에 악영향을 끼칠 수 있음
예로 '%김' 이나 '_김' 등으로 검색 시 name 열에 인덱스가 있더라도 전체 데이터 검색
= 대용량 데이터를 사용할 경우 비효율적인 결과 도출
3. 서브쿼리 / ANY / ALL
SELECT name FROM usertbl
WHERE height > (SELECT height FROM usertbl WHERE name = '김경호');
SELECT name FROM usertbl
WHERE height >= ANY (SELECT height FROM usertbl WHERE addr = '경남');
SELECT name FROM usertbl
WHERE height > ALL (SELECT height FROM usertbl WHERE addr = '경남');
4. ORDER BY 정렬 / DISTINCT 중복 제거
SELECT name, mDate FROM usertbl ORDER BY mDate DESC;
SELECT DISTINCT addr FROM usertbl;
5. LIMIT로 출력 수 제한
SELECT * FROM employees ORDER BY hire_date ASC LIMIT 5;
6. CREATE TABLE … SELECT
CREATE TABLE buytbl2 AS SELECT * FROM buytbl;
CREATE TABLE buytbl3 AS SELECT userID, prodName FROM buytbl;
※ 제약조건(PK, FK)은 복사 안 됨
7. GROUP BY + HAVING + 집계 함수
SELECT userID, SUM(amount) FROM buytbl GROUP BY userID;
SELECT userID, SUM(price*amount) AS 총구매액
FROM buytbl
GROUP BY userID
HAVING SUM(price * amount) > 1000;
SELECT groupName, SUM(price * amount) AS 비용
FROM buytbl
GROUP BY groupName
WITH ROLLUP;
8. INSERT / UPDATE / DELETE
INSERT INTO testTbl1 VALUES(1, '홍길동', 25);
UPDATE testTbl4 SET Lname = '없음' WHERE Fname = 'Kyoichi';
DELETE FROM testTbl4 WHERE Fname = 'Aamer' LIMIT 5;
9. INSERT 예외 처리
INSERT IGNORE INTO 테이블 VALUES (...);
INSERT INTO 테이블 (...) VALUES (...)
ON DUPLICATE KEY UPDATE 컬럼 = 값;
10. WITH절 (CTE)
WITH regional_sales AS (
SELECT region, SUM(amount) AS total_sales
FROM orders
GROUP BY region
)
SELECT * FROM regional_sales WHERE total_sales > 100000;
뷰와 비슷하지만 쿼리 끝나면 사라짐. 재귀 CTE는 나중에 따로 다룸
728x90