SQL 정리 2022.07.13

sofia·2022년 7월 12일
0

SQL

목록 보기
1/13
post-thumbnail

오늘의 단축키
ctrl + enter : 실행
-- : 주석
ctrl + shift + N / alt + F10 : 새 페이지 열기
ctrl + shift +D : 한 줄 복사
shift + del : 삭제


📗DBMS(Database Management System, 데이터베이스 관리 시스템)

:데이터베이스를 운영하고 관리하는 소프트웨어

  • Oracle
  • My-SQL
  • MS-SQL

오라클과 My-sql이 가장 많이 사용됨.

📗SQL(Structured Query Language ,구조적질의언어)

:DBMS에서 자료를 관리 및 처리하기 위해 사용하는 언어

📗Database

:데이터의 저장소(집합)


📗SQL Developer(cmd)

[setting]

  1. CMD 창을 열기
  2. sqlplus 입력
  3. user name , password 입력(여기서 password는 눈에 보이지 않음)
    (여기서 id를 system라고 하고 pw을 1234로 표기함)
  4. show user 입력 (user확인)
  5. @ scott.sql파일 드래그(cmd창. 활성화)
  6. alter user scott identified by tiger; 입력
    id는 scoot pw는 tiger.
  7. conn scott/tiger입력
  8. show user; 입력 : 계정이 tiger으로 바뀐거 확인
  9. select * from tab;입력시 테이블 확인가능

📖desc name; 입력


Number: 숫자열
ex) NUMBER(2) :10의 자리(두자리수)까지 입력 가능
⠀⠀ NUMBER(3) :100의 자리(세자리수)까지 입력 가능
varchar : 문자열.

📖만약에 ' '만 사용할 시 칼럼명은 대문자. 데이터는 소문자로 입력됨

📖근데 ' ', " " 사용시 아래와 같이 입력됨.


'' : 데이터
"" : 칼럼명

📖select * from tab; :모든 표에서 모든 데이터 확인

📖select (칼럼명) from (table명) : table명이라는 파일 안에서 입력된 (칼럼명) 데이터 확인

SQL> select * from emp;

     EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 80/12/17        800                    20
      7499 ALLEN                SALESMAN                 7698 81/02/20       1600        300         30
      7521 WARD                 SALESMAN                 7698 81/02/22       1250        500         30
      7566 JONES                MANAGER                  7839 81/04/02       2975                    20
      7654 MARTIN               SALESMAN                 7698 81/09/28       1250       1400         30
      7698 BLAKE                MANAGER                  7839 81/05/01       2850                    30
      7782 CLARK                MANAGER                  7839 81/06/09       2450                    10
      7839 KING                 PRESIDENT                     81/11/17       5000                    10
      7844 TURNER               SALESMAN                 7698 81/09/08       1500          0         30
      7900 JAMES                CLERK                    7698 81/12/03        950                    30
      7902 FORD                 ANALYST                  7566 81/12/03       3000                    20

     EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7934 MILLER               CLERK                    7782 82/01/23       1300                    10

이런식으로. 확인 가능( tab의 경우 너무 많은 데이터가 있어서 입력하지 못하고 넘어가겠음)

📖distinct : 중복 데이터 제외 처리

SQL> select distinct deptno from emp;

    DEPTNO
----------
        30
        20
        10

중복 데이터 제외한 경우

여기선 중복 데이터 제외가 안되었는데, 보면 job이라는 항목이 같아도 ename이라는 항목이 동일하지 않기에 제외안됨(입력 값에 따라 인식)
또한 distinct의 위치도 중요함. (안그러면 오류가 나기 때문)

📖연결 연산자 ||

📖특정 조건에서 찾는 경우 where 입력.

보면 'smith' 라는 데이터를 찾는 경우 (문자, 날짜는 ''안에 입력, 안하면 오류 발생.)

근데 숫자는 굳이 '' 사용 하지 않아도 괜찮음.

또한 찾고자 하는 데이터의 명칭은 대소문자도 고려해서 작성해야함.
(혹시 추후에 헷갈릴까봐 작성함.
select~~ 이건 SELECT~~ 로 작성해도 괜찮음. )

📖연산 가능, 연산자 종류

연산 가능함. 연산자의 종류는 아래의 표와 같음
S≤
: 알파벳순서상 S이상인것

% 사용 하는거는 위의 사진 참고

📖order asc/ desc : 정렬


ename. sal, hiredate. 중에서 2번째인 sal기준으로 정렬

만일 처음 지정한 데이터의 값이 동일 할 경우, 다른 데이터를 기준으로 정렬
사진에서 2는 sal을 뜻하고 1은 ename을 뜻하니 ename 기준으로 정렬한다고 보면 됨.

📗sql developer 22.2 (oracle)

[setting]
먼저 좌측의 + 입력하여 새로 만들기/데이터베이스 접속 선택 입력
이름. 사용자 이름(id), 비밀번호(pw) 입력 후 테스트 클릭.
그러면 상태: 성공이 뜨면 접속 클릭(원본 사진은 카톡에 백업함)

📖집합 연산자

📖집합 연산자의 조건

  1. 칼럼의 개수가 다르면 안됨
  2. 데이터형(문자. 숫자 등) 다르면 안됨
  3. 칼럼명은 달라도 상관 없음

🍎문제

1.사진과 같이 출력하시오
답)

SQL> select ename||'('||job||'), '||ename||''''||job||'''' "NAME AND JOB" from emp;

NAME AND JOB
----------------------------------------------------------------------------------------
SMITH(CLERK), SMITH'CLERK'
ALLEN(SALESMAN), ALLEN'SALESMAN'
WARD(SALESMAN), WARD'SALESMAN'
JONES(MANAGER), JONES'MANAGER'
MARTIN(SALESMAN), MARTIN'SALESMAN'
BLAKE(MANAGER), BLAKE'MANAGER'
CLARK(MANAGER), CLARK'MANAGER'
KING(PRESIDENT), KING'PRESIDENT'
TURNER(SALESMAN), TURNER'SALESMAN'
JAMES(CLERK), JAMES'CLERK'
FORD(ANALYST), FORD'ANALYST'

NAME AND JOB
----------------------------------------------------------------------------------------
MILLER(CLERK), MILLER'CLERK'

12 rows selected.
  1. 사진과 같이 출력하시오.
SQL> select ename||'''s sal is $'|| sal "Name and Sal" from emp;

Name and Sal
--------------------------------------------------------------------------------------------------------------------------
SMITH's sal is $800
ALLEN's sal is $1600
WARD's sal is $1250
JONES's sal is $2975
MARTIN's sal is $1250
BLAKE's sal is $2850
CLARK's sal is $2450
KING's sal is $5000
TURNER's sal is $1500
JAMES's sal is $950
FORD's sal is $3000

Name and Sal
--------------------------------------------------------------------------------------------------------------------------
MILLER's sal is $1300

12 rows selected.
  1. emp 테이블 구조 확인을 위한 sql*plus 명령문 작성
SQL> desc emp;
 Name
                                                               Null?    Type
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------- --------------------------------------------------------------------------------------------------------------------
 EMPNO
                                                               NOT NULL NUMBER(4)
 ENAME
                                                                        VARCHAR2(10)
 JOB
                                                                        VARCHAR2(9)
 MGR
                                                                        NUMBER(4)
 HIREDATE
                                                                        DATE
 SAL
                                                                        NUMBER(7,2)
 COMM
                                                                        NUMBER(7,2)
 DEPTNO
                                                                        NUMBER(2)
  1. emp 테이블 출력
SQL> select * from emp;

     EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 80/12/17        800                    20
      7499 ALLEN                SALESMAN                 7698 81/02/20       1600        300         30
      7521 WARD                 SALESMAN                 7698 81/02/22       1250        500         30
      7566 JONES                MANAGER                  7839 81/04/02       2975                    20
      7654 MARTIN               SALESMAN                 7698 81/09/28       1250       1400         30
      7698 BLAKE                MANAGER                  7839 81/05/01       2850                    30
      7782 CLARK                MANAGER                  7839 81/06/09       2450                    10
      7839 KING                 PRESIDENT                     81/11/17       5000                    10
      7844 TURNER               SALESMAN                 7698 81/09/08       1500          0         30
      7900 JAMES                CLERK                    7698 81/12/03        950                    30
      7902 FORD                 ANALYST                  7566 81/12/03       3000                    20

     EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7934 MILLER               CLERK                    7782 82/01/23       1300                    10

12 rows selected.
  1. emp 테이블에서 사번, 이름, 직업 출력
SQL> select empno, ename, job from emp;

     EMPNO ENAME                JOB
---------- -------------------- ------------------
      7369 SMITH                CLERK
      7499 ALLEN                SALESMAN
      7521 WARD                 SALESMAN
      7566 JONES                MANAGER
      7654 MARTIN               SALESMAN
      7698 BLAKE                MANAGER
      7782 CLARK                MANAGER
      7839 KING                 PRESIDENT
      7844 TURNER               SALESMAN
      7900 JAMES                CLERK
      7902 FORD                 ANALYST

     EMPNO ENAME                JOB
---------- -------------------- ------------------
      7934 MILLER               CLERK

12 rows selected.
  1. 사원이 소속된 부서 번호를 중복되는 행 제외 하고 출력
SQL>  select distinct deptno from emp;

    DEPTNO
----------
        30
        20
        10
  1. emp 테이블에서 사원 이름, 직업, 월급, 연봉 출력(연봉 = 월급 * 12)
SQL> select ename, job, sal,sal*12
  2  from emp
  3  ;

ENAME                JOB                       SAL     SAL*12
-------------------- ------------------ ---------- ----------
SMITH                CLERK                     800       9600
ALLEN                SALESMAN                 1600      19200
WARD                 SALESMAN                 1250      15000
JONES                MANAGER                  2975      35700
MARTIN               SALESMAN                 1250      15000
BLAKE                MANAGER                  2850      34200
CLARK                MANAGER                  2450      29400
KING                 PRESIDENT                5000      60000
TURNER               SALESMAN                 1500      18000
JAMES                CLERK                     950      11400
FORD                 ANALYST                  3000      36000

ENAME                JOB                       SAL     SAL*12
-------------------- ------------------ ---------- ----------
MILLER               CLERK                    1300      15600

12 rows selected.
  1. emp테이블에서 enpno,enamen job,deptno출력
    단, enpno은 '사번',enamen은 '사원명', job은 '직업', deptno은 '부서번호'로 칼럼 별명 부여
SQL> select empno "사번", ename"사원명", job"직업", deptno"부서번호" from emp;

      사번 사원명               직업                 부서번호
---------- -------------------- ------------------ ----------
      7369 SMITH                CLERK                      20
      7499 ALLEN                SALESMAN                   30
      7521 WARD                 SALESMAN                   30
      7566 JONES                MANAGER                    20
      7654 MARTIN               SALESMAN                   30
      7698 BLAKE                MANAGER                    30
      7782 CLARK                MANAGER                    10
      7839 KING                 PRESIDENT                  10
      7844 TURNER               SALESMAN                   30
      7900 JAMES                CLERK                      30
      7902 FORD                 ANALYST                    20

      사번 사원명               직업                 부서번호
---------- -------------------- ------------------ ----------
      7934 MILLER               CLERK                      10

12 rows selected.
  1. 키가 170이상인 학생의 이름, 학년 , 키 출력하되 키가 큰 순으로 출력하시오.

  2. 101 학과 1 학생 중 3학년 이상인 학생의 이름, ID, 학년 출력하시오.

  1. 비교연산자를 이용해서 키가 165이상 175 이하의 학생의 이름, 학년, 키 출력하시오.
select name, grade, heigth from student where height >=165 and height <= 175;

근데 between 을 사용해도 계산 가능

  1. 학생중 성이 'Bi'로 시작하는 학생의 이름, ID, 학과 번호 출력하시오.

13.소속 교수는 있으나 소속 학생이 없는 학과 번호를 출력하여라.
(학생테이블은 학과 1 기준)

0개의 댓글