(MariaDB)데이터베이스 명령어 실습 - 기본 Query문
[카카오 클라우드 스쿨] 기본적인 DB Query언어를 알아 보자
MariaDB (2) - 데이터베이스 기본 쿼리문
SELECT 명령어
1 . 데이터 조회, 조건조회
- SELECT
- 대충 이런 순서
- SELECT [컬럼명] FROM [테이블명] WHERE [조건] GROUP BY [그룹으로묶기] HAVING [조건부여] ORDER BY [DESC, ASC];
# SELECT * FROM userTbl WHERE addr='경남');
#SELECT * FROM userTbl WHERE height BETWEEN 180 AND 183;
# SELECT * FROM userTbl WHERE addr IN ('전남', '서울');
# SELECT * FROM userTbl WHERE NAME LIKE '김%';
SELECT * FROM userTbl WHERE NAME LIKE '_범%';
2 . 서브쿼리, 정렬
- 서브쿼리는 쿼리 내에 또 다른 쿼리를 추가하여 사용하는 방법을 의미함
- 김범수보다 키가 큰 사람들의 목록을 출력하라
- 김범수의 키를 구한다
- 조건에 김범수의 키를 두고 이를 비교하여 큰 사람을 출력한다
- ANY, ALL 조건과 같이 사용 가능
SELECT name, height from userTbl
WHERE height > (SELECT height FROM userTbl WHERE NAME='김범수');
- Quiz1. 성시경과 살고 있는 지역이 같은 사람들의 이름, 키, 지역을 출력하는데 키가 큰 사람부터 출력하세요
- 정렬: 내림차순 DESC, 오름차순 ASC
SELECT name, height, addr FROM userTbl
WHERE addr = (SELECT addr FROM userTbl WHERE NAME='성시경')
ORDER BY height DESC, NAME ASC;
- Quiz2. 지역이 경남인 사람의 키보다 크거나 같은 사람?
- 서브쿼리가 둘 이상의 값을 반환하기 때문에 오류가 발생한다
- any를 사용하면 170보다 커도 되고, 173보다 커도 된다 -> 170이상
- all을 사용하면 170보다 커야 하고, 173보다도 커야 한다 -> 173이상
/*오류가 발생하는 쿼리문*/
SELECT name, height FROM userTbl
WHERE height >= (SELECT height FROM userTbl WHERE addr='경남');
/*any 사용*/
SELECT name, height FROM userTbl
WHERE height >= ANY (SELECT height FROM userTbl WHERE addr='경남');
/*all 사용*/
SELECT name, height FROM userTbl
WHERE height >= ALL (SELECT height FROM userTbl WHERE addr='경남');
3 . 중복 제거하기
- DISTINCT를 사용한다
SELECT DISTINCT addr FROM userTbl;
4 . TOP 5 출력하기
- LIMIT을 사용한다
- Quiz. 회원들의 정보를 출력하되, 이름, 키를 키 순서대로 출력하세요
- 단, 동일한 키가 나오면 오름차순으로 정렬하고 TOP3만 뽑이세요
SELECT name, height
FROM userTbl
ORDER BY height DESC
LIMIT 3 ;
5 . 그룹으로 묶기, 집계 함수 사용
- group by를 사용한다
- 여러 개 표기된 것을 하나의 그룹으로 묶어서 표현
- (주로 sum, max, min, avg..와 같이 사용한다)
SELECT userid, amount FROM buyTbl ORDER BY userid;
SELECT userid, SUM(price*amount) AS '총구매액'
FROM buyTbl GROUP BY userID ORDER BY 총구매액 desc;
- Quiz. 사용자들의 정보를 아래와 같이 출력되도록 하세요
지역 | 인원 |
---|---|
서울 | 4 |
경남 | 2 |
전남 | 1 |
경북 | 1 |
SELECT addr AS '지역', COUNT(addr) AS '인원'
FROM userTbl
GROUP BY addr
ORDER BY 인원 desc ;
- 집계 함수를 count를 사용했다
6 . 조건 부여하기
- HAVING 절
- 조건을 부여하는 방법으로 집계함수와 함께 사용한다
- Group by 뒤에 사용한다
7 . 총합 또는 합계가 필요한 경우
- ROLLUP을 사용한다
SELECT groupName, SUM(price*amount)
FROM buyTbl
GROUP BY groupName
WITH ROLLUP;
- Null의 경우 그룹 네임에 포함되지 않은 경우임
update 명령어
- INSERT
- INSERT INTO 테이블 values (값1, 값2)
- INSERT INTO 테이블[(열1, 열2, 열3)] values (값1, 값2, 값3)
view 만들기
CREATE VIEW v_usertbl
AS
SELECT username AS '이름', email AS '이메일'
FROM usertbl
Join
- 두개 이상의 테이블을 연결하여 두 테이블에서 동시에 필요한 열 정보를 한번에 출력할 수 있도록 해주는 방법
- inner join (보편적인 방법)
- outer join
- cross join
- self join
- 형식은 다음과 같다
SELECT [열 이름]
FROM [조인할 첫 번째 테이블 이름]
INNER JOIN [조인할 두 번쨰 테이블 이름]
ON [조인될 조건]
WHERE [검색조건]
- 예제1
MariaDB [sqlDB]> SELECT buyTbl.userID, buyTbl.prodName, userTbl.name, userTbl.addr, CONCAT(mobile1,mobile2) AS '휴대폰번호'
-> FROM buyTbl
-> INNER JOIN userTbl
-> ON buyTbl.userID = userTbl.userID
-> WHERE buyTbl.userID = 'JYP';
+--------+-----------+-----------+--------+-----------------+
| userID | prodName | name | addr | 휴대폰번호 |
+--------+-----------+-----------+--------+-----------------+
| JYP | 모니터 | 조용필 | 경기 | 01144444444 |
+--------+-----------+-----------+--------+-----------------+
1 row in set (0.008 sec)
- 예제2
MariaDB [sqlDB]> SELECT B.userID, B.prodName, U.name, U.addr, CONCAT(mobile1,mobile2) AS '휴대폰번호'
-> FROM buyTbl B
-> INNER JOIN userTbl U
-> ON B.userID = U.userID
-> WHERE B.userID = 'KBS';
+--------+-----------+-----------+--------+-----------------+
| userID | prodName | name | addr | 휴대폰번호 |
+--------+-----------+-----------+--------+-----------------+
| KBS | 운동화 | 김범수 | 경남 | 01122222222 |
| KBS | 노트북 | 김범수 | 경남 | 01122222222 |
| KBS | 청바지 | 김범수 | 경남 | 01122222222 |
+--------+-----------+-----------+--------+-----------------+
3 rows in set (0.001 sec)