SELECT 문
select 칼럼_이름 from 테이블이름 [where 조건]; // where 조건은 생략 가능하다.
select 칼럼_이름은 세로방향에서 찾고 where 조건은 가로방향에서 찾는다.
select member_name, member_addr from member;
from member : member 테이블에서
select member_name, member_addr : member_name과 member_addr 칼럼 선택
칼럼은 1개를 쓸수도 있고 2개 이상을 쓸수도 있다.
데이터베이스 개체
테이블, 인덱스, 뷰, 스토어드 프로시저, 트리거, 함수, 커서 등이 이에 해당한다.
인덱스와 트리거는 테이블 안에 포함된다.
인덱스
select 할때 좀 더 빨리 검색해서 결과를 반환할 수 있게 도와주는 개체이다.
사용방법
1. 기본키를 사용할때 자동으로 생성되므로 기본키인 칼럼을 선택한다.
select member_name from member where member_id = 'abc123'; // member_id가 기본키 이므로 인덱스 적용
2. 인덱스를 따로 생성한다.
create index idx_member_name on member(member_name);
// member 테이블의 member_name 칼럼에 인덱스 idx_member_name 추가
삭제
drop index idx_member_name on member;
// member 테이블에 있는 idx_member_name 인덱스 삭제
뷰
가상의 테이블로서 DB가 직접적으로 데이터를 주고 받는게 아닌 뷰를 거쳐서 사용자와 데이터를 주고 받을수 있게 해주는 개체이다.
일반 사용자는 뷰인지 DB인지 알지 못하고, 뷰와 DB는 내부적으로 연결되어 민감한 데이터는 빼고 주게끔 필터링도 가능하다.
뷰의 주요 사용목적은 보안에 있다.
create view member_view as select * from member; // member_view 생성
select * from member_view; // 뷰를 통해 조회하기
스토어드 프로시저
sql 안에서 일반 프로그래밍 언어처럼 코딩을 하기 위해서 필요한것이다.
주요 사용목적은 하나의 데이터베이스에 여러명의 개발자로부터 데이터를 받아서 데이터베이스 내에서 데이터를 조합한 후 데이터베이스에 저장하기 위해서이다.
delimiter //
create procedure myProc()
begin
select * from member where member_name = '철수';
select * from product where product_name = '자전거';
end //
delimiter ;
call myProc();
위 코드는 스토러드 프로시저를 이용해서 2개의 코드를 한번에 실행시키는 함수이다.
함수의 호출은 call문을 통해 실행시킨다.
SELECT 문2
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 select_expr 만 있어도 실행이 가능한가 싶지만
따옴표가 없는 문자열은 이름으로 취급하기 때문에 'hi'와 같은 문자열을 이용해서
select 'hi'; 는 실행이 가능하다.
SELECT 열_이름
FROM 테이블_이름
WHERE 조건식
GROUP BY 열_이름
HAVING 조건식
ORDER BY 열_이름
LIMIT 숫자
여기서 WHERE과 GROUP BY, HAVING은 함께 쓰지 못한다.
또한 WHERE과 GROUP BY, HAVING은 사용해도 되고, 안해도 된다.
별칭
select member_name 이름 from member;
칼럼 이름 뒤에 한칸 띄우고 텍스트를 넣으면 별칭으로 취급되어 입력한 텍스트로 칼럼 이름이 바뀌어서 출력된다.
따옴표를 붙여도 되고, 안붙여도 되지만 구분을 위해서는 별칭에는 따옴표를 넣는것이 좋다.
WHERE 절
select 칼럼 from 테이블 where 조건식;
이 조건식에는 관계연산자 또는 논리연산자를 사용할수 있다.
관계연산자
숫자의 범위를 지정하는 연산자로, 종류에는 >, <, >=, <=, =이 있다.
select id, name from member where height > 160;
// 멤버 테이블에서 키가 160 초과인 사람의 아이디와 이름 조회
select id, name from member where height = 170;
// 멤버 테이블에서 키가 170인 사람의 아이디와 이름 조회
2가지 이상의 조건도 적용할수 있다.
select id, name from member where height > 160 and height < 170;
// 멤버 테이블에서 키가 160초과 170미만인 사람의 아이디와 이름 조회
2가지 조건을 항상 저렇게 쓰면 길고 불편하기 때문에 between and를 사용한다.
select id, name from member where height between 160 and 170;
// 멤버 테이블에서 키가 160이상 170이하인 사람의 아이디와 이름 조회
in()
관계연산에서 or을 여러번 쓸 경우 불편하기 때문에 in()을 사용할수 있다.
select id, name, addr from member where addr = '경남' or addr = '서울' or addr = '경기';
// 멤버 테이블에서 주소가 경남 또는 서울 또는 경기인 사람의 아이디, 이름, 주소를 조회
select id, name, addr from member where addr in('경남','서울','경기');
// 멤버 테이블에서 주소가 경남 또는 서울 또는 경기인 사람의 아이디, 이름, 주소를 조회
단, 완전히 일치해야 한다.
'경기'인데 '경기도' 라고 되있으면 조회되지 않는다.
like
문자열의 글자를 검색하기 위한 것이다.
%는 이 자리에 아무문자가 와도 되고 안와도 됨을 의미한다.
_은 이 자리를 반드시 문자가 들어가야 함을 의미한다.
따라서 %가% 는 문자의 앞뒤는 상관없이 문자에 '가'만 들어가면 됨을 의미하고
____는 문자는 뭐가 들어가던 상관없이 4자리이기만 하면 된다는 의미이다.
이를 조합하면 가%___ 의 형식으로 '가'로 시작하는 4글자 이상의 단어를 조회할수 있다.
select * from member where name like '김%';
// 멤버 테이블에서 이름이 김씨인 사람 조회
select * from member where name like '이__';
// 멤버 테이블에서 이름이 이로 시작하는 세글자 인 사람 조회
서브쿼리
select 문 안에 select 문이 하나 더 들어간 구조로, 괄호안의 내용을 해석한 값을 where 조건식에 집어넣는다.
where 조건식을 동적으로 만드는 방법이다.
select height from member where name = '철수'; // 이 값이 170 이라 가정
select id, name, height form member where height > (select height from member where name = '철수');
// 철수의 키 170보다 큰 키를 가진 사람의 아이디, 이름, 키를 멤버 테이블에서 조회
이와같이 서브쿼리는 170으로 적으면 정적인 조건식을 쿼리문으로 적음으로써 조건식이 동적이게 만들어준다.
order by
어떤 칼럼을 기준으로 오름차순으로 정렬할것인지 내림차순으로 정렬할것인지 정할때 사용한다.
데이터에서의 순서는 반드시 위에서 아래로 이동하며
asc는 점점 값이 커지는 오름차순
desc는 점점 값이 작아지는 내림차순을 의미한다.
select * from member order by age desc;
// 멤버 테이블에서 나이가 많은 순으로 내림차순 정렬
select * from member order by height asc;
// 멤버 테이블에서 키가 큰 순으로 오름차순 정렬
order by에 정렬 기준을 2개를 줄 수도 있는데 이는 첫번째 정렬에서 같은 값에 대한 순서를 정하는 과정에서 두번째 값을 기준으로 정렬할때 사용한다.
따로 2번째 기준이 없으면 기본키(PK)를 기준으로 정렬한다.
limit
출력하는 갯수를 제한한다.
select * from member limit 3;
// 멤버 객체에서 3명만 조회
여기서 order by를 이용하면 원하는 값을 기준으로 정렬된 데이터 중에서 위에서 3명을 조회하게 할수도 있다
또는 limit 뒤에 숫자를 2개 줄수도 있는데
... limit(3, 2); 이는 3번째 항목 부터 2개를 의미한다.
즉 3,4번째 튜플이 조회된다.
distinct
중복된 값을 제거하는 용도로 첫번째 값을 제외한 중복되는 값을 무시한다.
select distinct addr from member;
// 멤버 객체에서 지역을 조회하는데 중복되는 지역은 하나만 남기고 조회하지 않음
distinct는 중복을 허용하지 않을 칼럼 앞에 붙여서 사용한다.
예문에서는 addr 칼럼에 대해서 중복을 허용하지 않는다는 의미이다.
'프로그래밍 공부' 카테고리의 다른 글
2025.03.07 스프링 공부 (0) | 2025.03.07 |
---|---|
2025.03.04 SQL 공부 (0) | 2025.03.04 |
2025.02.27 SQL 공부 (0) | 2025.02.27 |
2025.02.26 MVC패턴 공부 (0) | 2025.02.26 |
2025.02.25 MVC패턴 공부 (0) | 2025.02.25 |