인프런 강좌 - 실습 UI 개발로 배워보는 순수JS 와 VueJs 개발

https://www.inflearn.com/course/%EC%88%9C%EC%88%98js-vuejs-%EA%B0%9C%EB%B0%9C-%EA%B0%95%EC%A2%8C/




강좌 교육과정


준비
강의 소개미리보기00:02:00
개발환경 구성미리보기00:03:00
요구사항 분석미리보기00:04:00
순수JS (MVC)
MVC 패턴 설명미리보기00:02:00
폴더 구조00:11:00
- 검색폼
검색폼 구현 1미리보기00:07:00
검색폼 구현 200:03:00
검색폼 구현 300:04:00
검색폼 구현 4 (실습)00:02:00
검색폼 구현 4 (구현)00:04:00
- 검색결과
검색결과 구현 1미리보기00:10:00
검색결과 구현 200:03:00
검색결과 구현 3 (실습)00:01:00
검색결과 구현 3 (구현)00:02:00
- 탭
탭 구현 1미리보기00:02:00
탭 구현 200:06:00
탭 구현 3 (실습)00:01:00
탭 구현 3 (구현)00:04:00
- 추천 검색어
추천 검색어 구현 1미리보기00:09:00
추천 검색어 구현 200:07:00
추천 검색어 구현 3 (실습)00:01:00
추천 검색어 구현 3 (구현)00:04:00
- 최근 검색어
최근 검색어 구현 1, 2미리보기00:06:00
최근 검색어 구현 300:03:00
최근 검색어 구현 4 (실습)00:01:00
최근 검색어 구현 4 (구현)00:06:00
최근 검색어 구현 checkout00:02:00
최근 검색어 구현 5 (실습)00:01:00
최근 검생어 구현 5 (구현)00:02:00
Vue.js (MVVM)
MVVM 구조설명미리보기00:04:00
vue.js 설치00:06:00
- 검색폼
검색폼미리보기00:08:00
검색폼 (실습)00:01:00
검색폼 (구현)00:03:00
- 검색결과
검색결과미리보기00:08:00
검색결과 (실습)00:01:00
검색결과 (구현)00:01:00
- 탭
미리보기00:05:00
탭 (실습)00:01:00
탭 (구현)00:03:00
- 추천 검색어
추천 검색어 구현00:07:00
- 최근 검색어
최근 검색어미리보기00:06:00
최근 검색어 (실습)00:01:00
최근 검색어 (구현)00:03:00
- 개선된 점
개선된 점미리보기00:02:00
컴포넌트
Vue Component 소개미리보기00:03:00
FormComponent 구현 100:07:00
FormComponent 구현 200:10:00
ResultComponent 구현00:04:00
List Component 구현 100:09:00
List Component 구현 200:05:00
Tab Component 100:02:00
Tab Component 200:04:00
단일 파일 컴포넌트 구현
단일 파일 컴포넌트 100:04:00
단일 파일 컴포넌트 200:03:00
단일 파일 컴포넌트 300:05:00
단일 파일 컴포넌트 (실습)00:01:00
단일 파일 컴포넌트 (구현)00:05:00
정리
정리


'공부메모' 카테고리의 다른 글

2018.05.26 - 순수JS 와 VueJs  (0) 2018.05.26
2018.05.23 - 순수JS 와 VueJs  (0) 2018.05.23
2018.05.19 - 순수JS 와 VueJS  (0) 2018.05.19
2018.05.18 - java 기초  (0) 2018.05.19
2018.05.05 - Vue.js 시작  (0) 2018.05.05

인프런 강좌 - 실습 UI 개발로 배워보는 순수JS 와 VueJs 개발

https://www.inflearn.com/course/%EC%88%9C%EC%88%98js-vuejs-%EA%B0%9C%EB%B0%9C-%EA%B0%95%EC%A2%8C/




강좌 교육과정


준비
강의 소개미리보기00:02:00
개발환경 구성미리보기00:03:00
요구사항 분석미리보기00:04:00
순수JS (MVC)
MVC 패턴 설명미리보기00:02:00
폴더 구조00:11:00
- 검색폼
검색폼 구현 1미리보기00:07:00
검색폼 구현 200:03:00
검색폼 구현 300:04:00
검색폼 구현 4 (실습)00:02:00
검색폼 구현 4 (구현)00:04:00
- 검색결과
검색결과 구현 1미리보기00:10:00
검색결과 구현 200:03:00
검색결과 구현 3 (실습)00:01:00
검색결과 구현 3 (구현)00:02:00
- 탭
탭 구현 1미리보기00:02:00
탭 구현 200:06:00
탭 구현 3 (실습)00:01:00
탭 구현 3 (구현)00:04:00
- 추천 검색어
추천 검색어 구현 1미리보기00:09:00
추천 검색어 구현 200:07:00
추천 검색어 구현 3 (실습)00:01:00
추천 검색어 구현 3 (구현)00:04:00
- 최근 검색어
최근 검색어 구현 1, 2미리보기00:06:00
최근 검색어 구현 300:03:00
최근 검색어 구현 4 (실습)00:01:00
최근 검색어 구현 4 (구현)00:06:00
최근 검색어 구현 checkout00:02:00
최근 검색어 구현 5 (실습)00:01:00
최근 검생어 구현 5 (구현)00:02:00
Vue.js (MVVM)
MVVM 구조설명미리보기00:04:00
vue.js 설치00:06:00
- 검색폼
검색폼미리보기00:08:00
검색폼 (실습)00:01:00
검색폼 (구현)00:03:00
- 검색결과
검색결과미리보기00:08:00
검색결과 (실습)00:01:00
검색결과 (구현)00:01:00
- 탭
미리보기00:05:00
탭 (실습)00:01:00
탭 (구현)00:03:00
- 추천 검색어
추천 검색어 구현00:07:00
- 최근 검색어
최근 검색어미리보기00:06:00
최근 검색어 (실습)00:01:00
최근 검색어 (구현)00:03:00
- 개선된 점
개선된 점미리보기00:02:00
컴포넌트
Vue Component 소개미리보기00:03:00
FormComponent 구현 100:07:00
FormComponent 구현 200:10:00
ResultComponent 구현00:04:00
List Component 구현 100:09:00
List Component 구현 200:05:00
Tab Component 100:02:00
Tab Component 200:04:00
단일 파일 컴포넌트 구현
단일 파일 컴포넌트 100:04:00
단일 파일 컴포넌트 200:03:00
단일 파일 컴포넌트 300:05:00
단일 파일 컴포넌트 (실습)00:01:00
단일 파일 컴포넌트 (구현)00:05:00
정리
정리


'공부메모' 카테고리의 다른 글

2018.05.23 - 순수JS 와 VueJs  (0) 2018.05.23
2018.05.22 - 순수JS 와 VueJs  (0) 2018.05.22
2018.05.18 - java 기초  (0) 2018.05.19
2018.05.05 - Vue.js 시작  (0) 2018.05.05
2018.04.28 - java 입문 클래스와 객체  (0) 2018.04.28

프로그래머스 자바 입문


1~5 챕터 완료

'공부메모' 카테고리의 다른 글

2018.05.22 - 순수JS 와 VueJs  (0) 2018.05.22
2018.05.19 - 순수JS 와 VueJS  (0) 2018.05.19
2018.05.05 - Vue.js 시작  (0) 2018.05.05
2018.04.28 - java 입문 클래스와 객체  (0) 2018.04.28
2018.04.27 - java 배열  (0) 2018.04.28

Vue.js 공식가이드

https://kr.vuejs.org/v2/guide/index.html



1. 시작하기

2. Vue 인스턴스

3. 템플릿 문법






VueJs 빠른시작 - Todo 만들기

https://blog.storyg.co/vue-js-posts/todos-tutorial



Todo 리스트 만들기


'공부메모' 카테고리의 다른 글

2018.05.19 - 순수JS 와 VueJS  (0) 2018.05.19
2018.05.18 - java 기초  (0) 2018.05.19
2018.04.28 - java 입문 클래스와 객체  (0) 2018.04.28
2018.04.27 - java 배열  (0) 2018.04.28
2018.04.27 - java 조건식, 반복문  (0) 2018.04.28





1. 클래스

자바는 객체를 만들기 위해 반드시 클래스를 먼저 만들어야 한다. 클래스는 객체를 만들기 위한 일종의 틀이다.

  • 붕어빵이 객체라면, 붕어빵 틀은 클래스
  • 자동차 클래스 생성
    public class Car{

    }
  • Car.java란 파일을 만든다.
  • 저장을 하면 이클립스는 컴파일하여 디스크에 Car라는 클래스를 생성한다.
  • 자동차 클래스가 생성되었다고 해서 자동차가 만들어 진것은 아니다.

Car객체 생성하기 (자동차 만들기)

    public class CarExam{
        public static void main(String args[]){
            Car c1 = new Car();
            Car c2 = new Car();
        }
    }
  • new 연산자는 new연산자 뒤에 나오는 생성자를 이용하여 메모리에 객체를 만들라는 명령.
  • 메모리에 만들어진 객체를 인스턴스(instance)라고도 한다.
  • 이렇게 만들어진 객체를 참조하는 변수가 c1 , c2 이다.
  • 위의 코드가 실행되면 Car라는 객체가 2개가 만들어지고 각각의 객체를 참조하는 c1과 c2변수가 선언됩니다.







2. 참조타입


참조형 타입은 기본형 타입을 제외한 모든 타입입니다.  배열도 참조형이고, 클래스도 모두 참조 타입이다

  • 참조형 변수
    • String str = new String(hello);
      • str 변수 앞에 기본형 타입이 아닌 String클래스가 적혀있다.
      • 이퀄(=)뒤에는 new 다음에 생성자라는 것이 있다.
      • new 라는 키워드는 클래스를 메모리에 올려준다. 이렇게 메모리에 올라간 클래스를 인스턴스라고 말한다.
  • 메모리에 올라간 인스턴스를 가리키는 변수, 참조하는 변수, 레퍼런스 하는 변수가 str 이다. 참조한다. 레퍼런스 한다라는 것은 변수가 인스턴스를 가지고 있는게 아니라 말그대로 가리킨다는 의미이다.
  • str이라는 변수에는 메모리의 위치 값이 저장되는 것이다. 메모리의 위치값이 저장된다고 하더라도, 어떤 메모리에 저장되는지 그 정보를 알 수 있는 방법은 없다. 그렇기 때문에 str변수는 String 인스턴스를 참조한다라고만 아시면 된다.
  • 클래스들은 모두 참조형이다







3. String 클래스

문자열을 표현하는 자바에서 가장 많이 사용하는 클래스

자바 인스턴스 생성 방법

  1. new연산자를 이용하지 않고 인스턴스를 만드는 경우
    String str1 = "hello";
    String str2 = "hello";
  • hello라는 문자열이 메모리 중에서 상수가 저장되는 영역에 저장된다. 상수는 변하지 않는 값을 의미.
  • String str2 = hello; 이 문장이 실행될 때에 hello 라는 문자열 상수는 이미 만들어져 있으므로 str1이 참조하는 인스턴스를 str2도 참조한다.

2.new연산자를 이용해서 인스턴스를 만드는 경우

    String str3 = new String("hello");
    String str4 = new String("hello");
  • new연산자를 이용하여 인스턴스를 만들면 인스턴스는 무조건 새롭게 만들어진다.
  • String str4 = new String(hello); 이 문장이 실행될때도 새롭게 만들게 되므로, str3 과 str4는 서로 다른 인스턴스를 참조한다.
    if(str1 == str2){  // 같은 인스턴스를 참조하므로 결과는 true 
        System.out.println("str1과 str2는 같은 레퍼런스입니다.");
    }

    if(str1 == str3){  // str1과 str3은 서로 다른 인스턴스를 참조하므로 결과는 false 
        System.out.println("str1과 str3는 같은 레퍼런스입니다.");
    }

    if(str3 == str4){  // str3과 str4는 서로 다른 인스턴스를 참조하므로 결과는 false 
        System.out.println("str3과 str4는 같은 레퍼런스입니다.");
    }
  • 참조변수끼리 == 로 비교하면 서로 같은 것을 참조하는지 비교한다.
  • String은 다른 클래스와 다르게 new를 사용하지 않고 사용할 수 있다. 메모리를 아끼려면 String은 new를 사용하지 않고 사용하는 것이 좋다.
  • String은 불변 클래스이다. 불변이란 String이 인스턴스가 될때 가지고 있던 값을 나중에 수정할 수 없다.
  • String은 문자열과 관련된 다양한 메소드를 가지고 있다. 메소드를 호출한다 하더라도 String은 내부의 값이 변하지 않는다.
  • String이 가지고 있는 메소드중 String을 반환하는 메소드는 모두 새로운 String을 생성해서 반환한다.
    String str5 = "hello world";
    String str6 = str5.substring(3);
  • substring은 문자열을 자른 결과를 반환하는 메소드이다. 해당 코드가 실행되어도 str5는 변하지 않는다.
  • str6은 str5가 가지고 있는 문자열 중 3번째 위치부터 자른 결과 즉 새로운 String을 참조하게 된다.







4. 필드선언



자동차는 자동차 이름, 자동차 번호를 가지고 있고, 자동차는 달리고 멈추는 기능이 있다. 여기에서 가지고 있는 것을 속성이라고 한다. 자바에서는 이러한 속성을 필드(Field)라는 용어로 사용한다.

  • 이름과 번호를 필드로 가지고 있는 Car클래스 선언
    public class Car{
        String name;    
        int number;
    }
  • Car 클래스를 인스턴스화 하기
    Car c1 = new Car();
    Car c2 = new Car();
    //Car라는 인스턴스가 메모리에 2개 만들어 진다. 객체별로 name과 number라는 속성을 가진다.
  • 속성 이용하기
    • 참조 변수 다음에 나오는 점(dot)은 참조변수가 참조하는 객체가 가지고 있는 것을 사용할 때 사용
    //c1.name은  c1이 참조하는 객체의 name 을 의미.

    c1.name = "소방차";  //c1이 참조하는 객체의 name을 소방차로 설정 
    c1.number = 1234;   // c1.number = 1234란 c1이 참조하는 객체의 number를 1234 로 설정 

    c2.name = "구급차"  //c2가 가리키는 객체의name을 구급차로 설정
    c2.number = 1004;  //c2가 가리키는 객체의 number를 1004로 설정


    System.out.println(c1.name);  //콘솔에 c1이 참조하는 객체의 name 을 출력합니다. 
    System.out.println(c1.number); //콘솔에 c1이 참조하는 객체의 number 를 출력합니다. 

    String name = c2.name;   //c2가 참조하는 객체의 name 을 String 타입 변수 name 도 참조하게 합니다.










5. 메소드

필드가 물체의 상태라면, 물체의 행동에 해당하는게 메소드다. car에 이름과 번호가 있기도 하지만, car는 앞으로 전진할수도 있고 후진하는 행동도 할 수 있다.

  • 메소드는 입력값이 있고, 그 입력값을 받아서 무언가 한 다음 결과를 도출해 내는 수학의 함수와 비슷한 개념이다.
  • 이때 입력값을 매개변수라고 하고,결과값을 리턴값이라고 합니다.
    • 인자( Argument ) 는 어떤 함수를 호출시에 전달되는 값을 의미한다.
    • 매개 변수( Parameter ) 는 그 전달된 인자를 받아들이는 변수를 의미한다.
  • 메소드란 클래스가 가지고 있는 기능이다. 클래스 안에 선언됩니다.







6. 메소드 선언

다양한 형태의 메소드


public class MyClass{
    public void method(){
        System.out.println("method1이 실행됩니다.");
    }

    public void method2(int x){
        System.out.println(x + " 를 이용하는 method2입니다.");
    }

    public int method3(){
        System.out.println("method3이 실행됩니다.");

        return 10;
    }

    public void method4(int x, int y){
        System.out.println(x + "," + y + " 를 이용하는 method4입니다.");
    }

    public int method5(int y){
        System.out.println(y + " 를 이용하는 method5입니다.");
        return 5;
    }
}

7. 메소드 사용


  • 메소드를 사용하기 위해서는 메소드가 정의된 클래스인 MyClass 가 생성되어야 한다
  • 객체를 생성할 때는 new 연산자를 이용한다.
  • 메소드 사용할때는 생성된 클래스를 참조하는 레퍼런스변수.메소드명() 으로 사용할 수 있다.
    public class MyClassExam{
        public static void main(String args[]){
            MyClass my1 = new MyClass(); //메소드가 정의된 클래스 생성 

            my1.method1();   //MyClass에서 정의해 놓은 메소드 method1() 를 호출한다.       

            my1.method2(10);

            int x = my1.method3();

            System.out.println("method3 이 리턴한 " + x + " 입니다.");

            my1.method4(10,100);

            int x2 = my1.method5(50);

            System.out.println("method5 가 리턴한 " + x2 + " 입니다.");

        }
    }








8. String class method

  • 문자열 길이 구하기
    • str.length()는 str이 참조하는 문자열의 길이를 구해서 int 타입으로 리턴해주는 메소드 이다.
    System.out.println(str.length());  //str
  • 문자열 붙히기 (concat)
    • str.concat(world) 메소드는 str 이 참조하는 문자열 hello 에다가 메소드의 인자로 들어온 문자열 world 를 붙혀서 String 타입으로 리턴하는 메소드다.
    • String Class는 불변 클래스로, 메소드가 수행되면, 새로운 문자열을 만든다. 그러므로, 원래 클래스는 변하지 않는다.
    String str = new String("hello");

    System.out.println(str.concat(" world"));  //출력결과는 hello world 
    System.out.println(str);  //출력결과는 hello 
  • 문자열 자르기 (subString)
    • str.subString(1,3) 은 str이 참조하는 문자열을 인덱스 1번부터 3번까지 자른 결과이다.
    • str.subString(2) 은 str이 참조하는 문자열을 2번 인덱스부터 마지막까지 자른 결과를 의미한다.
    • 문자열의 인덱스는 0번 부터 시작한다.
    System.out.println(str.substring(1, 3)); //출력결과  el
    System.out.println(str.substring(2));   //출력결과 llo world








9. 변수 scope와 static


변수의 스코프

프로그램상에서 사용되는 변수들은 사용 가능한 범위를 가진다. 그 범위를 변수의 스코프라고 한다.

변수가 선언된 블럭이 그 변수의 사용범위이다.

    public class ValableScopeExam{

        int globalScope = 10;   //클래스 변수 

        public void scopeTest(int value){   
            int localScope = 10;
            System.out.println(globalScope);
            System.out.println(localScpe);
            System.out.println(value);
        }
    }
  • 클래스의 속성으로 선언된 변수 globalScope 의 사용 범위는 클래스 전체 이다.
  • 매개변수로 선언된 int value 는 블럭 바깥에 존재하기는 하지만, 메서드 선언부에 존재하므로 사용범위는 해당 메소드 블럭내이다.
  • 메소드 블럭내에서 선언된 localScope 변수의 사용범위는 메소드 블럭내이다.
main메소드에서 사용하기
  • 같은 클래스 안에 있는데 globalScope 변수를 사용 할 수 없다.
  • main은 static한 메소드이다. static한 메서드에서는 static 하지 않은 필드를 사용 할 수 없다.
    public class VariableScopeExam {
        int globalScope = 10; 

        public void scopeTest(int value){
            int localScope = 20;            
            System.out.println(globalScope);
            System.out.println(localScope);
            System.out.println(value);
        }   
        public static void main(String[] args) {
            System.out.println(globalScope);  //오류
            System.out.println(localScope);   //오류
            System.out.println(value);        //오류  
        }   
    }
static
  • 같은 클래스 내에 있음에도 해당 변수들을 사용할 수 없다.
  • main 메소드는 static 이라는 키워드로 메소드가 정의되어 있다. 이런 메서드를 static 한 메소드 라고 한다.
  • static한 필드(필드 앞에 static 키워드를 붙힘)나, static한 메소드는 Class가 인스턴스화 되지 않아도 사용할 수 있다.
    public class VariableScopeExam {
        int globalScope = 10; 
        static int staticVal = 7;

        public void scopeTest(int value){
            int localScope = 20;        
        }

        public static void main(String[] args) {
            System.out.println(staticVal);      //사용가능 
        }

    }
static한 변수는 공유된다.
  • static하게 선언된 변수는 값을 저장할 수 있는 공간이 하나만 생성된다. 그러므로, 인스턴스가 여러개 생성되도 static한 변수는 하나다.
    ValableScopeExam v1 = new ValableScopeExam();
    ValableScopeExam v2 = new ValableScopeExam();
    v1.golbalScope = 20;
    v2.golbalScope = 30; 

    System.out.println(v1.golbalScope);  //20 이 출력된다. 
    System.out.println(v2.golbalScope);  //30이 출력된다. 

    v1.staticVal = 10;
    v2.staticVal = 20; 

    System.out.println(v1.statVal);  //20 이 출력된다. 
    System.out.println(v2.statVal);  //20 이 출력된다. 
  • golbalScope같은 변수(필드)는 인스턴스가 생성될때 생성되기때문에 인스턴스 변수라고 한다.
  • staticVal같은 static한 필드를 클래스 변수라고 한다.
  • 클래스 변수는 레퍼런스.변수명 하고 사용하기 보다는 클래스명.변수명 으로 사용하는것이 더 바람직하다고 하다.
    • VariableScopeExam.staticVal








10. enum 열거형


자바는 열거타입을 이용하여 변수를 선언할 때 변수타입으로 사용할 수 있다.

  • 열거형은 JDK5에서 추가되었다.
  • JDK5 이전에는 상수를 열거형 대신 사용

    • 상수를 이용하는 방법

    public class EnumExam {
        public static final String MALE = "MALE";
        public static final String FEMALE = "FEMALE";

        public static void main(String[] args) {
            String gender1;

            gender1 = EnumExam.MALE;
            gender1 = EnumExam.FEMALE;                  
        }
    }

상수를 사용했때의 문제점

  • String으로 선언된 gender1 에는 MALE,FEMALE 둘 중 한가지 값을 갖기 원하는데, gender1의 type이 String 이기 때문에 gender1 = 소년; 이렇게 수행 되어도 전혀 문제가 되지 않는다.

  • 실행할때 원했던 값인 MALE,FEMALE 이 아닌 다른 값이 들어오게 되므로 문제를 발생시킬 수 있다.

해결 방법

  • 이런 문제를 발생시키지 않게 하기 위해서 열거형을 사용하시면 됩니다.

  • 열거형 정의 방법


    enum Gender{
        MALE, FEMALE;
    }
  • 열거형 사용 방법
    Gender gender2;

    gender2 = Gender.MALE;
    gender2 = Gender.FEMALE;

    //Gender타입의 변수에는 MALE이나 FEMALE만 대입이 가능. 다른 값은 저장할 수가 없다.  

특정 값만 가져야 한다면 열거형을 사용하는 것이 좋다.







프로그래머스 자바 입문

https://programmers.co.kr/learn/courses/5/lessons/137




'공부메모' 카테고리의 다른 글

2018.05.18 - java 기초  (0) 2018.05.19
2018.05.05 - Vue.js 시작  (0) 2018.05.05
2018.04.27 - java 배열  (0) 2018.04.28
2018.04.27 - java 조건식, 반복문  (0) 2018.04.28
2018.04.22 - JS프레임워크 입문 세미나 (React)  (0) 2018.04.22

배열


1 배열(array) ?


-같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

-많은 양의 값을 다룰 때 유용하다

-단지 여러 개의 값을 저장하는 공간이다.



 

2 배열의 선언과 생성


-타입[] 변수이름:

-타입 변수이름[]:

-int[] aa; //배열 선언   aa = new int[10];  //배열 생성

-int[] aa = new int[10];

-Aa[0] aa[1] aa[2] aa[3] aa[index] 배열은 0부터



 

3 배열의 초기화


-생성된 배열에 처음으로 값을 저장하는 것

-int[] aa = [1,2,3,4,5]

-for(int i=0; I < aa.length; i++){

           System.out.println(a[i]);

}




5 다차원 배열의 선언과 생성


-int[][] aa;

-int aa[][];

-int[] a[];

-int[][] aa={

           {10,20,50}, {40,50,10}, {20,60,50}, {20,50,80}

}

Aa[0]  aa[0][0] aa[0][1] aa[0][2]

Aa[1]  aa[1][0] aa[1][1] aa[1][2]

Aa[2] 




6 가변배열


Int[][] aa = new int[5][];

Aa[0] = new int[4];

Aa[1] = new int[2];



 

7 배열의 복사


-for문을 이용한 복사

Int[] num = {1,2,3,4,5}

Int[] newnum = new int[10]

For(int i=0; i<num.length;i++){

  Newnum[i] = num[1]

}

-system.arraycopy() 를 이용한 배열의 복사

System.arraycopy(arr1, 0, arr2, 0, arr1.length);

//arr1[0] 에서 arr2[0]으로 arr1.length만큼 데이터 복사




조건문


If(조건식){문장들}


1. if

 If, if-else, if-else if

 If(조건식 true or false){ 조건식이 true일 경우 문장 수행 }

 Else{ 모든 조건식의 결과가 false 일 경우 수행 }


2. 중첩 if


 If문 안에 또 다른 if문을 중첩해서 넣을 수 있다.

 If(조건식1){

   If(조건식2){

}

}

 


3. switch조건이 많을경우 switch


조건식의 계산 결과가 int범위 이하의 정수만 가능 (byte, short, char, int)

조건식 계산 후 그 결과와 같은 case문으로 이동 후 break문을 만날 때까지 문장들을 수행.

break문이 없으면 switch문의 끝까지 실행


switch(조건식){

case 1: … break;

case 2: … break;

default: 조건식의 결과와 일치하는 case문이 없을 때 실행

}

 



 

반복문


문장을 반복해서 수행할 때 사용

조건식과 수행할 블록{} 또는 문장으로 구성

반복회수가 중요한 경우레 for문 그 외에는 while문 사용


1. for


For(1초기화;2조건식;4증감식){

  3조건식 true일 때 수행 될 문장

}

2. 중첩 for

For(){

For(){

}

}


 

3. while


While(조건식){

 조건식의 결과가 true일 때 수행 될 문장

}


 

5. do-while


최소 한 번 은 실행 하고 조건식으로 넘어간다.


Do{

}while(조건식)




6. break


조건문, 반복문을 빠져나갈 때 Break.

Break 다음 문장이 있어도 실행하지 않고 조건,반복문을 끝냄.




7. continue 


자신이 포함된 반복문의 끝으로 이동하고 다음 반복으로 넘어감.

Continue 이후의 문장은 수행되지 않는다.



 

8. 이름 붙은 반복문과 break


Break는 자신이 포함된 반복,조건문을 빠져나가지만

이름을 붙인 반복문을 break 하면 그 반복문을 빠져나간다.

둘 이상의 반복문을 건너뛰는 것이 가능.


Aaa : for(){

           For(){

           If(){

                     Break Aaa;  

                     System.out.println(1);

}

}

}

 



  명령어  약어  설명
 help \help Display this help
 ? \?  Synonym for `help'
 clear \c Clear commandc
 connect \r Reconnect to the server. Optional arguments are db and host
 ego \G Send command to mysql server, display result vertically
 exit \q Exit mysql. Same as quit
 go \g Send command to mysql server
 notee \t Don't write into outfile
 print \p Print current command
 quit \q Quit mysql
 rehash \# Rebuild completion hash
 source \. Execute a SQL script file. Takes a file name as an argument
 status \s Get status information from the server
 tee \T Set outfile [to_outfile]. Append everything into given outfile
 use \u Use another database. Takes database name as argument


1. 숫자관련 함수
 ABS(숫자)
  절대값 출력.
 CEILING(숫자)
  값보다 큰 정수 중 가장 작은 수.
 FLOOR(숫자)
  값보다 작은 정수 중 가장 큰 수[실수를 무조건 버림(음수일 경우는 제외)].
 ROUND(숫자,자릿수)
  숫자를 소수점 이하 자릿수에서 반올림.(자릿수는 양수,0,음수를 갖을 수 있다.)
 TRUNCATE(숫자,자릿수)
  숫자를 소수점 이하 자릿수에서 버림.
 POW(X,Y) or POWER(X,Y)
  X의 Y승
 MOD (분자, 분모)
  분자를 분모로 나눈 나머지를 구한다.(연산자 %와 같음)
 GREATEST(숫자1,숫자2,숫자3...)
  주어진 수 중 제일 큰 수 리턴.
 LEAST(숫자1,숫자2,숫자3...)
  주어진 수 중 제일 작은 수 리턴.
 INTERVAL(a,b,c,d.....)
  a(숫자)의 위치 반환

2. 문자관련 함수
 ASCII(문자)
  문자의 아스키 코드값 리턴.
 CONCAT('문자열1','문자열2','문자열3'...)
  문자열들을 이어준다.
 INSERT('문자열','시작위치','길이','새로운문자열')
  문자열의 시작위치부터 길이만큼 새로운 문자열로 대치
 REPLACE('문자열','기존문자열','바뀔문자열')
  문자열 중 기존문자열을 바뀔 문자열로 바꾼다.
 INSTR('문자열','찾는문자열')
  문자열 중 찾는 문자열의 위치값을 출력.
 LEFT('문자열',개수)
  문자열 중 왼쪽에서 개수만큼을 추출.
 RIGHT('문자열',개수)
  문자열 중 오른쪽에서 개수만큼을 추출.
 MID('문자열',시작위치,개수)
  문자열 중 시작위치부터 개수만큼 출력.
 SUBSTRING('문자열',시작위치,개수)
  문자열 중 시작위치부터 개수만큼 출력.
 LTRIM('문자열')
  문자열 중 왼쪽의 공백을 없앤다.
 RTRIM('문자열')
  문자열 중 오른쪽의 공백을 없앤다.
 TRIM('문자열')
  양쪽 모두의 공백을 없앤다.
 LCASE('문자열') or LOWER('문자열')
  소문자로 바꾼다.
 UCASE('문자열') or UPPER('문자열')
  대문자로 바꾼다.
 REVERSE('문자열')
  문자열을 반대로 나열한다.

3. 논리관련 함수
  IF(논리식,참일 때 값,거짓일 때 값)
  논리식이 참이면 참일 때 값을 출력하고 논리식이 거짓이면 거짓일 때 출력한다.
 IFNULL(값1,값2)
  값1이 NULL 이면 값2로 대치하고 그렇지 않으면 값1을 출력

4. 집계 합수
 COUNT(필드명)
  NULL 값이 아닌 레코드 수를 구한다.
 SUM(필드명)
  필드명의 합계를 구한다.
 AVG(필드명)
  각각의 그룹 안에서 필드명의 평균값을 구한다.
 MAX(필드명)
  최대값을 구한다.
 MIN(필드명)
  최소값을 구한다.

5. 날짜관련 함수
 NOW() or SYSDATE() or CURRENT_TIMESTAMP()
  현재 날짜와 시간 출력
 CURDATE() or CURRENT_DATE()
  현재 날짜 출력
 CURTIME() or CURRENT_TIME()
  현재 시간 출력
 DATE_ADD(날짜,INTERVAL 기준값)
  날짜에서 기준값 만큼 더한다.
※ 기준값 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
 DATE_SUB(날짜,INTERVAL 기준값)
  날짜에서 기준값 만큼 뺸다.
※ 기준값 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND
 YEAR(날짜)
  날짜의 연도 출력.
 MONTH(날짜)
  날짜의 월 출력.
 MONTHNAME(날짜)
  날짜의 월을 영어로 출력.
 DAYNAME(날짜)
  날짜의 요일일 영어로 출력.
 DAYOFMONTH(날짜)
  날짜의 월별 일자 출력.
 DAYOFWEEK(날짜)
  날짜의 주별 일자 출력(월요일(0),화요일(1)...일요일(6))
 WEEKDAY(날짜)
  날짜의 주별 일자 출력(월요일(0),화요일(1)...일요일(6))
 DAYOFYEAR(날짜)
  일년을 기준으로 한 날짜까지의 날 수.
 WEEK(날짜)
  일년 중 몇 번쨰 주.
 FROM_DAYS(날 수)
  00년 00월 00일부터 날 수 만큼 경과한 날의 날짜 출력.
 TO_DAYS(날짜)
  00 년 00 월 00일 부터 날짜까지의 일자 수 출력.
 DATE_FORMAT(날짜,'형식') : 날짜를 형식에 맞게 출력
 
 타입 기호 설명 기호 설명
 년도 %Y 4자리 연도 %y 2자리 년도
 월

 %M
 %b

 긴 월 이름 (January, ...) 
 짧은 월 이름(Jan, ...)
%m 
%c
 숫자의 월 (01...12) 
 숫자의 월 (1...12)
 요일%W 긴 요일 이름 (Sunday, ...)%a  짧은 요일 이름 (Sun, ...) 
 일%D
%w
 월 내에서 서수 형식의 일(1th, ...) 
 숫자의 요일 (0=Sunday, ...) 
%d 
%e 
%j 
 월 내의 일자 (01...31) 
 월 내의 일자 (1...31) 
 일년 중의 날수 (001...366) 
 시%l
%h
%I
 12시간제의 시 (1...12) 
 12시간제의 시 (01...12) 
 12시간제의 시 (01...12) 
%k 
%H 
 12시간제의 시 (0...23) 
 12시간제의 시 (00...23) 
 분%i 숫자의 분 (00...59)   
 초%S 숫자의 초 (00...59) %s  숫자의 초 (00...59) 
 시간%r 12시간제의 시간 (hh:mm:ss AM 또는 PM) %T  24시간제의 시간 (hh:mm:ss) 
 주%U 일요일을 기준으로 한 주 (0...52) %u  월요일을 기준으로 한 주 (0...52) 
 기타%% 문자 '%' %p  AM 또는 PM 

6. 기타함수
 DATABASE()
  현재의 데이터베이스 이름을 출력한다.
 PASSWORD('문자열')
  문자열을 암호화한다.
 FORMAT(숫자,소수이하자리수)
  숫자를 #,###,###.## 형식으로 출력



출처: http://gyrfalcon.tistory.com/entry/MySQL-함수-정리 [Minsub's Blog]

'DB' 카테고리의 다른 글

[MySQL] 테이블 데이터 복사(컬럼값 변경 복사)  (0) 2021.01.11
2018.07.17 - SQL JOIN 조인  (0) 2018.07.17
mysql 샘플 테이블 + 쿼리 연습 문제  (7) 2018.04.26
쿼리연습문제2  (0) 2018.04.26
쿼리연습문제1  (0) 2018.04.26

 

 

http://java-school.net/jdbc/SQL-SELECT-Statement

 

 

 

 

CREATE TABLE DEPT (     DEPTNO DECIMAL(2),     DNAME VARCHAR(14),     LOC VARCHAR(13),     CONSTRAINT PK_DEPT PRIMARY KEY (DEPTNO)  ); CREATE TABLE EMP (     EMPNO DECIMAL(4),     ENAME VARCHAR(10),     JOB VARCHAR(9),     MGR DECIMAL(4),     HIREDATE DATE,     SAL DECIMAL(7,2),     COMM DECIMAL(7,2),     DEPTNO DECIMAL(2),     CONSTRAINT PK_EMP PRIMARY KEY (EMPNO),     CONSTRAINT FK_DEPTNO FOREIGN KEY (DEPTNO) REFERENCES DEPT(DEPTNO) ); CREATE TABLE SALGRADE (      GRADE TINYINT,     LOSAL SMALLINT,     HISAL SMALLINT  ); INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK'); INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS'); INSERT INTO DEPT VALUES (30,'SALES','CHICAGO'); INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON'); INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,STR_TO_DATE('17-12-1980','%d-%m-%Y'),800,NULL,20); INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN',7698,STR_TO_DATE('20-2-1981','%d-%m-%Y'),1600,300,30); INSERT INTO EMP VALUES (7521,'WARD','SALESMAN',7698,STR_TO_DATE('22-2-1981','%d-%m-%Y'),1250,500,30); INSERT INTO EMP VALUES (7566,'JONES','MANAGER',7839,STR_TO_DATE('2-4-1981','%d-%m-%Y'),2975,NULL,20); INSERT INTO EMP VALUES (7654,'MARTIN','SALESMAN',7698,STR_TO_DATE('28-9-1981','%d-%m-%Y'),1250,1400,30); INSERT INTO EMP VALUES (7698,'BLAKE','MANAGER',7839,STR_TO_DATE('1-5-1981','%d-%m-%Y'),2850,NULL,30); INSERT INTO EMP VALUES (7782,'CLARK','MANAGER',7839,STR_TO_DATE('9-6-1981','%d-%m-%Y'),2450,NULL,10); INSERT INTO EMP VALUES (7788,'SCOTT','ANALYST',7566,STR_TO_DATE('13-7-1987','%d-%m-%Y')-85,3000,NULL,20); INSERT INTO EMP VALUES (7839,'KING','PRESIDENT',NULL,STR_TO_DATE('17-11-1981','%d-%m-%Y'),5000,NULL,10); INSERT INTO EMP VALUES (7844,'TURNER','SALESMAN',7698,STR_TO_DATE('8-9-1981','%d-%m-%Y'),1500,0,30); INSERT INTO EMP VALUES (7876,'ADAMS','CLERK',7788,STR_TO_DATE('13-7-1987', '%d-%m-%Y'),1100,NULL,20); INSERT INTO EMP VALUES (7900,'JAMES','CLERK',7698,STR_TO_DATE('3-12-1981','%d-%m-%Y'),950,NULL,30); INSERT INTO EMP VALUES (7902,'FORD','ANALYST',7566,STR_TO_DATE('3-12-1981','%d-%m-%Y'),3000,NULL,20); INSERT INTO EMP VALUES (7934,'MILLER','CLERK',7782,STR_TO_DATE('23-1-1982','%d-%m-%Y'),1300,NULL,10); INSERT INTO SALGRADE VALUES (1,700,1200); INSERT INTO SALGRADE VALUES (2,1201,1400); INSERT INTO SALGRADE VALUES (3,1401,2000); INSERT INTO SALGRADE VALUES (4,2001,3000); INSERT INTO SALGRADE VALUES (5,3001,9999); COMMIT;

 

 

SELECT

 

사원 테이블의 모든 레코드를 조회하시오.

SELECT *  FROM EMP
SELECT EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO  FROM EMP

위 두 쿼리문은 같은 레코드를 가져온다. select 다음에 * 사용하면 테이블을 구성하는 순서대로 컬럼 모두를 의미한다.

사원명과 입사일을 조회하시오.

SELECT ENAME,HIREDATE FROM EMP;

사원번호와 이름을 조회하시오.

SELECT DEPTNO,ENAME  FROM EMP

컬럼을 선택하여 조회할 수 있고 컬럼의 순서를 바꾸어 조회할 수 있다.

사원테이블에 있는 직책의 목록을 조회하시오.

SELECT DISTINCT JOB FROM EMP

DISTINCT는 검색 결과에서 중복된 레코드는 한 번만 보여주어야 할 때 사용한다.

총 사원수를 구하시오.

SELECT COUNT(EMPNO) FROM EMP

COUNT는 그룹함수로 검색된 레코드의 수를 반환한다. COUNT(컬럼명)은 NULL이 아닌 레코드의 수를, COUNT(*)은 NULL을 포함한 레코드의 수를 반환한다.

 

 

 

WHERE 조건

부서번호가 10인 사원을 조회하시오.

SELECT *  FROM EMP WHERE DEPTNO = 10;

월급여가 2500이상 되는 사원을 조회하시오.

SELECT * FROM EMP WHERE SAL >= 2500;

WHERE 절이 추가되었다. 이제 WHERE 다음에 나오는 조건에 부합하는 레코드는 배제된다. 위 쿼리문은 WHERE 조건에 =,>,>=,<=,< 비교 연산자를 사용한 예이다.

이름이 'KING'인 사원을 조회하시오.

SELECT * FROM EMP WHERE ENAME = 'KING';

쿼리문은 대소문자를 가리지 않는다. 하지만 컬럼에 들어가는 데이터는 당연히 대소문자를 가린다. KING라고 저장되어 있는데 king로는 검색되지 않는다.

MySQL은 대소문자를 구별한다.
오라클과 달리, MySQL의 테이블과 컬럼 이름은 대소문자를 구별한다.

사원들 중 이름이 S로 시작하는 사원의 사원번호와 이름을 조회하시오.

SELECT EMPNO,ENAME FROM EMP WHERE ENAME LIKE 'S%';

사원 이름에 T가 포함된 사원의 사원번호와 이름을 조회하시오.

SELECT EMPNO,ENAME FROM EMP WHERE ENAME LIKE '%T%';

LIKE는 % 와 _문자와 함께 검색할 때 사용된다.

SQL*PLUS 사용법
명령 버퍼에 있는 SQL문을 편집하는 방법을 소개한다. SQL문을 잘못 입력했을 때 유용하다.edSQL*PLUS 에서 ed 명령어를 실행하면 버퍼에 있는 내용을 시스템의 디폴트 편집기가 실행되면서 보여준다. 윈도우의 경우 메모장이 실행되면서 버퍼에 저장된 SQL문를 보여주게 된다. 메모장에 있는 내용을 수정하고 닫은 다음에 / 명령으로 버퍼의 SQL문을 실행할 수 있다./

커미션이 300, 500, 1400 인 사원의 사번,이름,커미션을 조회하시오.

SELECT EMPNO,ENAME,COMM FROM EMP WHERE COMM = 300 OR COMM = 500 OR COMM = 1400;
SELECT EMPNO,ENAME,COMM FROM EMP WHERE COMM IN (300,500,1400);

둘 다 같은 결과를 보여준다. 첫번째 쿼리문은 논리 연산자 OR를 사용했고 두번째는 IN을 사용했다.

월급여가 1200 에서 3500 사이의 사원의 사번,이름,월급여를 조회하시오.

SELECT EMPNO,ENAME,SAL FROM EMP WHERE SAL BETWEEN 1200 AND 3500;

위 쿼리는 BETWEEN ~ AND ~ 사용법을 보여준다. SAL BETWEEN 1200 AND 3500은 수학적으로 1200 <= SAL <= 3500이다.

직급이 매니저이고 부서번호가 30번인 사원의 이름,사번,직급,부서번호를 조회하시오.

SELECT ENAME,EMPNO,JOB,DEPTNO FROM EMP WHERE DEPTNO = 30 AND JOB = 'MANAGER';

부서번호가 30인 아닌 사원의 사번,이름,부서번호를 조회하시오.

SELECT EMPNO,ENAME,DEPTNO FROM EMP WHERE NOT DEPTNO = 30;

커미션이 300, 500, 1400 이 모두 아닌 사원의 사번,이름,커미션을 조회하시오.

SELECT EMPNO,ENAME,COMM FROM EMP WHERE COMM NOT IN (300,500,1400);

이름에 S가 포함되지 않는 사원의 사번,이름을 조회하시오.

SELECT EMPNO,ENAME FROM EMP WHERE ENAME NOT LIKE '%S%';

급여가 1200보다 미만이거나 3700 초과하는 사원의 사번,이름,월급여를 조회하시오.

SELECT EMPNO,ENAME,SAL FROM EMP WHERE SAL NOT BETWEEN 1200 AND 3700;

직속상사가 NULL 인 사원의 이름과 직급을 조회하시오.

SELECT ENAME,JOB FROM EMP WHERE MGR IS NULL;

컬럼이 NULL인지 판단하기 위해선, IS NULL, IS NOT NULL 문장을 사용한다.

 

 

GROUP BY 구문

SELECT DEPTNO,AVG(SAL) FROM EMP

부서별 평균 급여가 위 쿼리문의 의도다. 이때 그룹화의 기준이 되는 컬럼은 DEPTNO다. 그룹함수와 그룹화의 기준이 되는 컬럼이 함께 쓰일 때는 이 컬럼을 GROUP BY로 명시해 주어야 에러를 피할 수 있다.

부서별 평균월급여를 구하는 쿼리

SELECT DEPTNO,AVG(SAL) FROM EMP GROUP BY DEPTNO;

부서별 전체 사원수와 커미션을 받는 사원들의 수를 구하는 쿼리

SELECT DEPTNO,COUNT(*),COUNT(COMM) FROM EMP GROUP BY DEPTNO;

부서별 최대 급여와 최소 급여를 구하는 쿼리

SELECT DEPTNO,MAX(SAL),MIN(SAL) FROM EMP GROUP BY DEPTNO;

HAVING은 GROUP BY 절에서 생성된 결과 값 중 원하는 조건에 부합하는 자료만 추출하기 위해 사용한다.

부서별로 급여 평균 (단, 부서별 급여 평균이 2000 이상만)

SELECT DEPTNO,AVG(SAL) FROM EMP WHERE AVG(SAL) >= 2000; GROUP BY DEPTNO;

GROUP BY 구문을 사용하면서 이 결과에 조건을 줄 때 WHERE 조건문을 사용할 수 없다. 따라서 위 쿼리는 에러를 발생한다. GROUP BY 구문을 사용하면서 조건을 주기 위해서는 대신 HAVING 구문을 사용한다. HAVING 구문에서는 그룹화의 기준이 되는 컬럼과 그룹함수만이 사용 할 수 있다는 점에 주의한다. 위 쿼리문에서 그룹화의 기준이 되는 컬럼이 DEPTNO이므로, DEPTNO는 HAVING 구문에 사용할 수 있다.

SELECT DEPTNO,AVG(SAL) FROM EMP GROUP BY DEPTNO HAVING AVG(SAL) >= 2000;

월급여가 1000 이상인 사원만을 대상으로 부서별로 월급여 평균을 구하라. 단, 평균값이 2000 이상인 레코드만 구하라.

SELECT DEPTNO,AVG(SAL) FROM EMP WHERE SAL >= 1000 GROUP BY DEPTNO HAVING AVG(SAL) >= 2000;

WHERE 절은 테이블에서 데이터를 가져올 때 그 테이블에서 특정 조건에 부합하는 레코드만을 가져올 때 사용하고, HAVING 절은 GROUP BY 구문을 사용하여 구한 레코드 중에서 원하는 조건에 맞는 레코드만을 가져올 때 사용한다.

ORDER BY 구문

SELECT 문장을 사용하여 레코드를 검색할 때 임의의 컬럼을 기준으로 정렬을 해야 할 필요가 발생한다. 이런 경우 사용하는 구문이 ORDER BY 이다. 사용형식은 아래와 같다.ORDER BY 정렬의 기준이 되는 컬럼 ASC 또는 DESC;여기서 ASC는 오름차순을 의미한다. ASC는 생략할 수 있다. DESC는 내림차순을 의미한다.

급여가 높은 순으로 조회하되 급여가 같을 경우 이름의 철자가 빠른 사원순으로 사번,이름,월급여를 조회하시오.

SELECT EMPNO,ENAME,SAL FROM EMP ORDER BY SAL DESC,ENAME ASC;

 

 

 

조인

 

조인은 2개 이상의 테이블에서 데이터를 조회할 때 사용한다. 조인조건은 테이블 N개를 조인할 때 N-1 개의 조인 조건이 필요하다. 사용형식은 다음과 같다.SELECT 테이블1.컬럼,테이블2.컬럼,....FROM 테이블1,테이블2,...

카테시안 곱

SELECT EMP.ENAME,DEPT.DNAME FROM EMP,DEPT;

조인의 조건이 없는 단순 조인이다. 앞으로 나오는 조인 예제는 이러한 단순 조인 결과를 머리속에 그리면서 실습해야 한다. 총 56개의 행은 EMP 테이블에 존재하는 14개의 레코드와 DEPT 테이블에 존재하는 4개의 레코드의 곱으로 생성된다. 조회 대상이 되는 각 테이블의 컬럼이 명백히 어느 테이블의 컬럼인지가 확실하다면 EMP.ENAME을 ENAME처럼 테이블명을 생략 할 수 있다.

사원명과 부서명을 조회하시오.

SELECT ENAME,DNAME FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO;

테이블에 별칭을 사용할 수 있다. 이로써 복잡한 조인문이 간단해 질 수 있다.

SELECT E.ENAME,D.DNAME FROM EMP E,DEPT D WHERE E.DEPTNO = D.DEPTNO;

아래 쿼리를 사용할 수 있다.

SELECT E.ENAME, M.ENAME  FROM EMP E INNER JOIN EMP M ON E.MGR = M.EMPNO;

이름,월급여,월급여등급을 조회하시오.

SELECT E.ENAME,E.SAL,S.GRADE FROM EMP E,SALGRADE S WHERE E.SAL >= S.LOSAL AND E.SAL <= S.HISAL;

WHERE 조건에 조인조건을 = 이외의 비교 연산자를 사용한 조인문이다. 이 SQL문을 BETWEEN ~ AND 문으로 변경하면 아래와 같다.

SELECT E.ENAME,E.SAL,S.GRADE FROM EMP E,SALGRADE S WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;

이름,부서명,월급여등급을 조회하시오.

SELECT E.ENAME,D.DNAME,S.GRADE FROM EMP E,DEPT D,SALGRADE S WHERE E.DEPTNO = D.DEPTNO AND E.SAL BETWEEN S.LOSAL AND S.HISAL;

이름,직속상사이름을 조회하시오.

SELECT E.ENAME,M.ENAME FROM EMP E,EMP M WHERE E.MGR = M.EMPNO;

위 결과에 회장(PRESIDENT)에 대한 레코드가 배제됐다. 회장은 직속상사가 없으므로 MGR 컬럼이 NULL이고 사원번호가 NULL인 사원은 없기 때문에 조인조건에 만족하지 않는다. 그럼에도 불구하고 결과에 회장 레코드를 보여야 한다면 아래처럼 질의해야 한다.

SELECT E.ENAME,M.ENAME FROM EMP E LEFT JOIN EMP M ON E.MGR = M.EMPNO;

위와 같은 조인을 외부OUTER조인이라 한다. A LEFT JOIN B는 조인 조건에 만족하지 못하더라도 왼쪽 테이블 A의 행을 나타내고 싶을 때 사용한다.

이름,부서명을 조회하시오.단, 사원테이블에 부서번호가 40에 속한 사원이 없지만 부서번호 40인 부서명도 출력되도록 하시오.

SELECT E.ENAME,D.DNAME FROM DEPT D LEFT JOIN EMP E ON D.DEPTNO = E.DEPTNO;

이름,부서번호,부서이름을 조회하시오.

SELECT ENAME,E.DEPTNO,DNAME FROM EMP E,DEPT D WHERE E.DEPTNO = D.DEPTNO;
SELECT ENAME,E.DEPTNO,DNAME FROM EMP E INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO;

부서번호가 30번인 사원들의 이름, 직급, 부서번호, 부서위치를 조회하시오.

SELECT ENAME,JOB,E.DEPTNO,LOC FROM EMP E,DEPT D WHERE E.DEPTNO = D.DEPTNO AND D.DEPTNO = 30;
SELECT ENAME,JOB,E.DEPTNO,LOC FROM EMP E INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO WHERE D.DEPTNO = 30;

커미션을 받는 사원의 이름, 커미션, 부서이름,부서위치를 조회하시오.

SELECT ENAME,COMM,DNAME,LOC FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO  AND EMP.COMM IS NOT NULL AND EMP.COMM <> 0;
SELECT ENAME,COMM,DNAME,LOC FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO  AND EMP.COMM IS NOT NULL AND EMP.COMM != 0;
SELECT ENAME,COMM,DNAME,LOC FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO  AND EMP.COMM IS NOT NULL AND EMP.COMM NOT IN(0);
SELECT ENAME,COMM,DNAME,LOC FROM EMP INNER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO WHERE EMP.COMM IS NOT NULL AND EMP.COMM <> 0;

DALLAS에서 근무하는 사원의 이름,직급,부서번호,부서명을 조회하시오.

SELECT E.ENAME,E.JOB,D.DEPTNO,D.DNAME FROM EMP E,DEPT D WHERE E.DEPTNO = D.DEPTNO AND D.LOC = 'DALLAS';
SELECT E.ENAME,E.JOB,D.DEPTNO,D.DNAME FROM EMP E INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO WHERE D.LOC = 'DALLAS';

이름에 A 가 들어가는 사원의 이름,부서명을 조회하시오.

SELECT E.ENAME,D.DNAME FROM EMP E,DEPT D WHERE E.DEPTNO = D.DEPTNO AND E.ENAME LIKE '%A%';
SELECT E.ENAME,D.DNAME FROM EMP E INNER JOIN DEPT D ON E.DEPTNO = D.DEPTNO WHERE E.ENAME LIKE '%A%';

이름, 직급, 월급여, 월급여등급을 조회하시오.

SELECT E.ENAME,E.JOB,E.SAL,S.GRADE FROM EMP E,SALGRADE S WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;

ALLEN과 같은 부서에 근무하는 사원의 이름, 부서번호를 조회하시오.

SELECT C.ENAME,C.DEPTNO FROM EMP E,EMP C WHERE E.EMPNO <> C.EMPNO AND E.DEPTNO = C.DEPTNO AND E.ENAME = 'ALLEN' ORDER BY C.ENAME;
SELECT C.ENAME,C.DEPTNO FROM EMP E INNER JOIN EMP C ON E.DEPTNO = C.DEPTNO  WHERE E.EMPNO <> C.EMPNO AND E.ENAME = 'ALLEN' ORDER BY C.ENAME;

서브쿼리

서브 쿼리는 SELECT 문 안에서 ()로 둘러싸인 SELECT 문을 말하며 쿼리문의 결과를 메인 쿼리로 전달하기 위해 사용된다.

사원명 'JONES'가 속한 부서명을 조회하시오.

SELECT DNAME  FROM DEPT WHERE DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME = 'JONES');

부서번호를 알아내기 위한 쿼리가 서브 쿼리로 사용되고, 이 서브쿼리는 단 하나의 결과값을 얻기 때문에 단일 행 서브 쿼리라 한다.

10번 부서에서 근무하는 사원의 이름과 10번 부서의 부서명을 조회하시오.

SELECT E.ENAME,D.DNAME FROM EMP E,DEPT D WHERE E.DEPTNO = D.DEPTNO AND D.DEPTNO = 10;
SELECT E.ENAME,D.DNAME FROM EMP E, (     SELECT DEPTNO,DNAME     FROM DEPT     WHERE DEPTNO = 10 ) D WHERE E.DEPTNO = D.DEPTNO;

평균 월급여보다 더 많은 월급여를 받은 사원의 사원번호,이름,월급여 조회하시오.

SELECT EMPNO,ENAME,SAL FROM EMP WHERE SAL > (SELECT AVG(SAL)           FROM EMP) ORDER BY SAL DESC;

부서번호가 10인 사원중에서 최대급여를 받는 사원과 동일한 급여를 받는 사원의 사원번호, 이름을 조회하시오.

SELECT EMPNO,ENAME FROM EMP WHERE SAL = (SELECT MAX(SAL)           FROM EMP           WHERE DEPTNO = 10);

 

 

 

 

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

 

 

 

 

INSERT 문

사용형식

INSERT INTO 테이블명 [(컬럼1, 컬럼2, ...)] VALUES (값1, 값2, ...);

SQL*PLUS로 scott계정에 접속한 후 다음을 실행한다.

--EMP 테이블에 새로운 사원 정보 추가(홍길동) INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO)  VALUES (1562,'홍길동','SALESMAN',7698,SYSDATE,2000,1000,30);

새로운 사원 데이터를 인서트하고 있다.
테이블명 다음에 나오는 컬럼 리스트가 구조에 맞게 순서대로 모두 선택되야 하는 경우는 생략 가능하다.
NUMBER 형의 컬럼 값에는 ''를 생략할 수 있다.
SYSDATE 는 오라클에서 시스템이 저장하는 현재 날짜 데이터를 구할 때 사용한다.

--EMP 테이블에 새로운 사원 정보 추가(임꺽정) INSERT INTO EMP  VALUES (1500,'임꺽정','SALESMAN',7698,SYSDATE,1800,1200,30);

사원번호는 기본키로 설정되어 있다.
따라서 사원번호가 같은 사원은 테이블에 존재할 수 없다.

--EMP 테이블에 새로운 사원 정보 추가(장길산) INSERT INTO EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,DEPTNO) VALUES (1697,'장길산','MANAGER',7839,SYSDATE,3000,30);

컬럼리스트에 COMM 이 빠졌고 VALUES 에도 해당 컬럼에 대한 값이 없다.
이러면 COMM 컬럼값은 NULL이 된다.
위 인서튼 문은 컬럼에 NULL을 입력하는 방법 중 하나를 보여준다.

 

 

 

UPDATE 문

사용형식

UPDATE 테이블  SET 컬럼1='값1', 컬럼2='값2', ... [WHERE 조건]

SET : UPDATE 구문과 함께 사용되며, 해당 테이블의 특정 컬럼에 값을 변경시키고자 할 때 사용한다.
변경시키고자 하는 컬럼 다음에 = 으로 값을 대응시킨다.
컬럼1 : 변경될 컬럼명
값1 : 변경될 컬럼에 대응되는 실제 변경값이다.
이 때 사용되는 값으로는 숫자나 문자와 같은 실제값일 수도 있고, 연산 가능한 컬럼과 연산자가 결함된 형태일 수도 있다.
즉, 변경할 컬럼의 데이터 형식이 NUMBER 형인 경우에 덧셉 연산자와 같은 연산자가 결합된 산술식의 형태가 있을 수 있다.
[WHERE 조건]: 조건을 주어 원하는 컬럼의 값을 변경할 때 사용한다.
UPDATE 문에서 WhERE 조건을 생략하면 해당 테이블에 존재하는 모든 레코드가 지정된 값으로 변경된다.

사원테이블에서 임꺽정의 월급여를 2800 으로 변경

UPDATE EMP  SET SAL=2800 WHERE ENAME='임꺽정';

사원테이블에서 홍길동의 월급여를 300 만큼 인상하고 COMM은 500으로 변경

UPDATE EMP  SET SAL=SAL + 300,COMM=500 WHERE ENAME='홍길동';

지금까지의 INSERT 문과 UPDATE 문을 영구적인 데이터로 관리하기 위해서는 COMMIT;를 실행해야 한다.

COMMIT;

 

 

 

DELETE 문

사용형식

DELETE FROM 테이블명  [Where 조건]

DELETE 문에서 WHERE 조건을 주지 않으면 테이블에 있는 모든 레코드를 삭제된다.

사원테이블에서 홍길동,임꺽정,장길산을 삭제

DELETE FROM EMP  WHERE ENAME IN ('홍길동','임꺽정','장길산');

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'DB' 카테고리의 다른 글

[MySQL] 테이블 데이터 복사(컬럼값 변경 복사)  (0) 2021.01.11
2018.07.17 - SQL JOIN 조인  (0) 2018.07.17
MySql 내장함수 목록  (0) 2018.04.26
쿼리연습문제2  (0) 2018.04.26
쿼리연습문제1  (0) 2018.04.26


 1. 급여가 1000 이상인 사원들의 부서별 평균 급여를 출력해보세요 단, 부서별 평균 급여가 2000 이상인 부서만 출력하세요.



 2. 각 부서별 같은 업무(job)를 하는 사람의 인원수를 구해서 부서번호, 업무(job), 인원수를 부서번호에 대해서 오름차순 정렬해서 출력해 보세요.



 3. 사원번호,부서번호,부서명을 출력하세요 단, 사원이 근무하지 않는 부서명도 같이 출력해보세요.



4.  'DALLAS' 에서 근무하는 사원의 이름, 부서번호를 출력해보세요.



 5. 급여를 3000 이상받는 사원이 소속된 부서와 동일한 부서에서 근무하는 사원들의 이름과 급여, 부서번호를 출력해 보세요



6.   IN 연산자를 이용하여 부서별로 가장 급여를 많이 받는 사원의 사원번호, 급 여, 부서번호를 출력해보세요.



7.   30번 부서의 사원중에서 급여를 가장 많이 받는 사원보다 더 많은 급여를 받는 사원의 이름과 급여를 출력해보세요.



 8. 부서번호가 30번인 사원들의 급여중 최저 급여보다 높은 급여를 받는 사원의 이름, 급여를 출력해보세요.




출처: http://heekim0719.tistory.com/90 [히또리의 프로그래밍 이야기]

'DB' 카테고리의 다른 글

[MySQL] 테이블 데이터 복사(컬럼값 변경 복사)  (0) 2021.01.11
2018.07.17 - SQL JOIN 조인  (0) 2018.07.17
MySql 내장함수 목록  (0) 2018.04.26
mysql 샘플 테이블 + 쿼리 연습 문제  (7) 2018.04.26
쿼리연습문제1  (0) 2018.04.26

+ Recent posts