MySQL 문자열 함수
- concat : 복수의 문자열을 연결해 주는 함수
- left, right : 왼쪽 또는 오른쪽에서 길이만큼 문자열을 가져온다.
- substring : 문자열의 일부를 가져온다.
- char_length : 문자열의 길이를 반환한다.
- lpad, rpad : 왼쪽 또는 오른쪽에 해당 길이만큼 늘리고, 빈 공간을 채울 문자열을 반환
- ltrim, rtrim, trim : 왼쪽, 오른쪽, 모든 공백을 제거해 주는 함수
- replace : 문자열에서 특정 문자열을 변경하는 함수
유니온(Union)
- 합집합을 나타내는 연산자로, 서로 같은 종류의 테이블(column이 같은)에서 중복된 값을 제거한다.
- union은 중복 데이터를 제거해 주지만, onion all을 사용하면 중복 데이터를 모두 출력해 준다.
두 가지 테이블을 만들고(중복값이 없을 때) union을 사용하면 두 테이블의 모든 row의 값들이 합쳐진다.
한쪽 테이블에 "사람2"를 추가하고 다시 시도해 보았다. 결과값을 보면 중복값인 "사람2"가 한 번 나오는 것을 알 수 있다.
만약 column 중 하나만 다른 값이면 어떻게 되나, 위를 보면 "사람4"를 추가해서 주소만 바꿔보았다. 그랬더니 중복값으로 인식하지 않고 결과값으로 나왔다.
즉, 다른 값이 하나라도 있다면 중복 데이터가 출력이 된다.
서브쿼리(sub Query)
- 다른 쿼리 내부에 포함되어 있는 select 문으로, 서브쿼리를 포함하는 쿼리를 외부쿼리, 서브쿼리는 내부쿼리라고 부른다. 서브쿼리는 ()를 사용해서 표현한다. select, where, from, having 절 등에서 사용 가능하다.
사용법을 알아보기 위해 문제를 하나 풀어보자. 먼저 product라는 table을 만들고 안에 정보를 넣어줬다.
여기서 상품코드 "00001"인 상품보다 가격이 높거나 같 상품들의 정보를 출력하자.
위는 where 절에서 서브쿼리를 사용한 모습이다. ()를 사용하여 만들었고 우리가 어떤 특정 상품코드보다 가격이 높거나 같은 상품을 찾아내기 위해서 그 테이블에서 기준이 되는 특정 상품의 가격을 가져오는 부분을 서브쿼리를 사용해서 외부쿼리의 가격과 비교를 해주는 모습이다.
문제를 하나만 더 풀어보자.
product table에서 모든 상품의 code, name, price, 가장 비싼 가격을 모두 출력해 보자.
우리가 출력해야 할 것은 code, name, price, 가장 비싼 가격이다. 여기서 가장 비싼 가격은 테이블에 들어있지 않다. 그래서 price를 불러오는데 그중 가장 비싼 가격을 가져오겠다는 서브쿼리를 만들고 그 이름을 넣어준 것이다.
- auto_increment
- 지정한 필드에 identity 한 숫자를 자동으로 부여해 준다.
auto_incremet를 사용해 보기 위해서 테이블을 하나 만들어 줬다. 여기서 auto_increment에 primary key를 걸어줘야 에러가 나지 않는다고 한다. 이제 필드값을 넣어보겠다.
여기서 넘버(no)에 auto_increment를 걸어줬는데 1, 10이 나온 이유는 사용자가 직접 입력했을 때 그 숫자로 채워진다.
그럼 사용자가 직접 입력하지 않으면 어떻게 될까?
사용자가 직접 입력하지 않고 추가하게 되면 위 이미지처럼 자동으로 값이 하나씩 올라간다. 여기서 값의 증가는 맨 마지막에 입력된 숫자를 기준으로 하나씩 오르게 된다.
뷰(view)
- 뷰는 가상의 테이블로 실제 테이블처럼 행과 열을 가지고 있지만, 데이터를 직접 저장하고 있지 않는다.
- 뷰를 사용하면 SQL코드를 간결하게 작성할 수 있고, 내부 데이터를 일부만 공개하고 싶을 때 사용할 수 있다.
- 뷰는 삽입, 수정, 삭제 작업에 대한 제한 사항을 가지고 있다.
뷰를 하나 만들어보자. 위에서 사용했던 orders 테이블을 이용해서 만들어보자.
orders를 사용해서 뷰를 생성했다. 모든 정보를 확인해 보면 다음과 같다.
쿼리문으로 불러온 값들이 잘 들어있다. 여기서 쿼리문을 사용할 때 ()를 안 써줘도 됐다.
- 뷰 수정하기
뷰 수정을 해보기 위해 새로운 테이블을 하나 만들었다.
product_review column을 하나 생성하고 안에 값을 넣었다.
이제 생성했던 vw_orders 뷰를 수정해 보자. 수정은 덮어씌우기 같은 느낌으로 replace, join 등을 사용하면 된다. 여기서 나는 join을 사용해서 product_review를 추가해 보겠다.
inner join을 사용하여 review를 포함하여 수정했다.
이미지에서 보이는 것처럼 review column이 생겼다. 성공.
- 뷰 삭제하기
뷰 삭제는 형식을 따라 하면 끝이다. drop을 써서 삭제하거나 또는 커서로 삭제하고 싶은 뷰를 오른쪽 클릭해서 Drop View를 선택하면 삭제된다. 결국 drop으로 삭제한다.
MySQL 사용자
- 사용자 추가하기
- 사용자 목록 조회
- 할당 권한 상세 옵션
- 사용자 삭제하기
- 사용자 권한 조회하기
- 사용자 권한 제거하기
'MySQL' 카테고리의 다른 글
풋살장 예약 프로그램 (1) | 2024.04.02 |
---|---|
Python MySQL연동하기 (0) | 2024.04.01 |
풋살장 예약 관리 시스템 만들기 구상 (0) | 2024.03.28 |
Table 활용, SQL 연산자, 데이터의 정규화 (0) | 2024.03.26 |
DataBase (0) | 2024.03.26 |