본문 바로가기
IT/MYSQL

[6일차] DB . MYSQL 설치. 쿼리 작성

by GWLEE 2022. 6. 27.

외래키

  • 기본키를 참조하는 애트리뷰트
  • 다른 릴레이션의 튜플을 대표

 

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

댓글