외래키
- 기본키를 참조하는 애트리뷰트
- 다른 릴레이션의 튜플을 대표
MYSQL DB
=> Sun Micro Systems
2008년
2010년 join
Mysql => Oracle
MariaDB 현장에서도 많이 쓰임
네트워크
브라우저에 해당 사이트 변경
Domain name 돈내고 등록함
IP 주소를 가지고 있음
0에서 255 사이의 수 ㅇ.ㅇ.ㅇ.ㅇ
주소에 1:1 대응
하드웨어
하나의 목적지 안에 여러가지 서비스를 지원하기 위해선 포트
포트 넘버가 다 다르다. 정해진 OS별로 있다. 인터넷 상에 포트들은 포트넘버를 가지고 있다.
SQL의 개요
ANSI 표준 SQL
별도로 기능 붙인건 표준이 아니고 제품마다 다르다
Sys 는 기본 데이터베이스
create database scott_db default character set utf8mb4;
Ctrl + enter
visual c++ redistributable -> x64로 다운로드
Mysql default 3306이다. 기억해두자.
Execute 누르기
Root 비밀번호 1234
한 문장씩 쓰고 ctrl + enter…!
윈도우 - 서비스
내부 / 외부 권한 주기 grant
즉시 적용하면 밑에 처럼 뜬다..
use 데이터베이스 선택
스키마에 4개가 뜬다
gyuwon - 권한 주었으니 refresh하면 scott_db가 생성됨
실행하면 tables가 생긴다.
테이블의 구조를 볼 수 있다.
기본키는 null 없다.
create user 'gyuwon' 내부와 외부 유저 구분
동일한 유저에 대해서 내부와 외부가 다름
내부접속 - mysql 안에 있는 유저
내부 외부 사용자 만들기
SELECTION 문장
- 전체에서 scott_emp 를 보겠다.
- ename, job, sal 만 보겠다
- where 조건 : sal이 1200 이상인 ename, job, sal 만 보겠다.
- 대소문자구분하기!
where 조건 : job 'CLERK'이 아닌 직업들
ename, job, sal 만보겠다.
Job 을 중복제거해서 보여달라
그러면 중복제거 되어서 5개만 보인다.
MYSQL에서는 같다는 == 이 아니라 = 만 쓴다.
job이 'CLERK' 인 사람을 보여달라
!= 같지 않다 같은 뜻임 <> 이것도 사용가능
<> 이것도 사용가능 옛날 버전
job이 'CLERK' 이 아닌 사람을 보여달라
직업이 CLERK 이거나 SALESMAN인 경우
in : 여러 값을 OR 관계로 묶어 나열하는 조건을 WHERE 절에 사용할 때 쓸 수 있는 키워드
- 관계연산자로 표현 !
where job = 'CLERK' 이거나 job = 'SALESMAN' 같은 내용
- 입사일이 '1981-01-01 부터 2081-07-31' 사이에 있는 사람을 뽑아라.
- 위의 내용 더 간편하게 작성
- 이름이 S로 시작하는 사람들
- 이름이 R로 끝나는 사람들
- 이름이 R이 들어가는 사람들
- 이름에 딱 한글자 뒤에 A 오는 사람들
- 임금 1년치 계산
- 알리아스 Alias 사용
- as 연봉 이렇게
- 알리아스 별칭만 "" 더블
Null은 is null 이나 is not null 로 표현
Is null
- Order by 마지막에 온다.
- 이름순으로 정렬 (오름차순) -> asc 생략
- order by 마지막에 온다.
- 이름순으로 정렬 (내림차순) -> desc 써주기
- order by 동일한 이름으로 오는 경우 여러 컬럼으로 가능
- 2번째인 ename으로 정렬하라
- 추천하지 않음.. 쓰지말 것
- 사번 역순으로 정렬
- 내장함수 ifnull
- comm가 null이면 0으로 찍어라 as commintion
- sal의 합계를 찍어라
- Sal의 평균을 찍어라
- CASE문 자체가 하나의 덩어리
- Case문 as 생략 가능
- Job 'CLERK' 에 10% 곱하기, MANAGER에 15% 곱하기 PRESIDENT에 20% 곱하기 나머지는 그대로 출력
- CASE~END 지 케이스문
- END 뒤에 AS 생략
- REVISE_SALAR로
JOIN
둘 이상의 테이블을 합쳐서 하나의 큰 테이블로 만드는 방법
관계형 모델에서는 데이터의 일관성이나 효율을 위하여
데이터의 중복을 최소화 (정규화)
정규화된 테이블로부터 결합된 형태의 정보를 추출할 필요가 있음.
FK를 이용하여 참조
모든 데이터를 1:1로 연결하는 join 방법
- Cross join(catesian Product) : 모든 가능한 쌍이 나타남
- Inner join : join 조건을 만족하는 튜플만 나타남
- Outer join : join 조건을 만족하지 않는 튜플 (짝이 없는 튜플)도 null 과 함께 나타남
- Theta join : 조건(theta)에 의한 조인
- Equi-Join : Equi-join & 동일한 Column명 합쳐짐
- Self Join : 자기 자신과 조인
첫번째 테이블 첫로우
두번째 테이블 두번째로우
모든 조합으로 다 튀어나오는게 catesian Product = cross join
예시
두 테이블 join
Inner join 이면서 equi join
AS 생략 가능 EP와 DT로 줄이기
Join 시 on으로 제약 걸기
위에꺼가 더 표준이다.
옛날 방식
CROSS JOIN 모든 조합을 다 묶기
옛날 방식 cross join
Inner join 이면서 theta join
Innerjoin
Join 앞에 inner join 생략
40번 없음
Right outer join
Outer 생략가능
Right join 으로
셀프 조인
Mgr 이랑 empno랑 같음
사장제외 13개 mgr 번호 제외하고 나머지 출력
count(*) *는 전체 개수..
데이터가 많으면 개수 부터 확인
데이터 샘플보기 limit 10;
10개만 보기
Select * 해봤자 1000건 밖에 안나옴
최대 최소
평균 급여
그룹별로 평균 급여
부서별로 평균 급여
Sum(sal)이 내림차순
-> 높은 순으로 출력
그래서 having 으로 조건 달기 where을 쓸 수 없으니 having 으로 대신 쓴다.
서브쿼리 아무때나 들어가도 된다.
알파벳 순으로 해달라.. Min(ename) 1번째 A가 나오게
Orderby 사용하지 않고
JOIN 대신에 서브쿼리를 이용해 SALES 부서 deptno가 30인 사람
ename, deptno 알기
In으로 써서 조건에 있는 걸 보여달라
=을 쓰면 에러뜸… 1줄만 가능하다..
'IT > MYSQL' 카테고리의 다른 글
[8일차] MySQL3 (0) | 2022.06.29 |
---|---|
[8일차] MySQL 환경변수 설정. use sakila. (0) | 2022.06.29 |
[7일차] MySQL2 (0) | 2022.06.28 |
[6일차] MySQL (0) | 2022.06.27 |
[6일차] 쿼리 작성 (0) | 2022.06.27 |
댓글