• 기초, 자료형
    • >>> a = 4.24E10 >>> a = 4.24e-10
    • 4.24 x 10^10

 

  • x의 y제곱을 나타내는 ** 연산자 
    • >>> a = 3
    • >>> b = 4
    • >>> a ** b 81
  • 나눗셈 후 몫을 반환하는 // 연산자
    • >>> 7 / 4 = 1.75
    • >>> 7 // 4 = 1
  • 문자열 슬라이딩
    • >>> a = "Life is too short, You need Python" >>> a[0:4] 'Life'
    • a[시작번호:몇개]
    • a[ : 몇개] : 처음부터 몇개
    • a[시작번호 : ] : 시작번호부터 끝까지
>>> a = [1, 2, 3, 4, 5]
>>> b = a[:2]
>>> c = a[2:]
>>> b
[1, 2]
>>> c
[3, 4, 5]

//리스트 길이 구하기
a=[1,2,3]
len(a)
3

//리스트 수정
a=[1,2,3]
a[2]=4
a=[1,2,4]

//del 함수 리스트삭제
a=[1,2,3]
del a[1]
a=[1,3]

a=[1,2,3,4,5]
del[2:0] //2부터끝까지삭제한다.
a=[1,2]

//리스트 요소 추가
a=[1,2,3]
a.append(4)
a=[1,2,3,4]

a=[1,2,3]
a.append([5,6])
a=[1,2,3,[5,6]]

//리스트 정렬
a=[1,4,3,2]
a.sort()
a
a=[1,2,3,4]

a=[1,2,3]
a.reverse()
a=[3,2,1]

//리스트 find=index
a=[1,2,3]
a.index(3)
2

//리스트 요소삽입(insert)
a=[1,2,3]
a.insert(0,4)
a=a=[4,1,2,3]

a=[1,2,3]
a.insert(3,5) //배열a[3]=5이다.
a=[1,2,3,5]

//리스트 요소 삭제(remove)
a.remove(x) : 처음나오는 x를 삭제한다. 
a=[1,2,3,1,2,3]
a.remove()
a=[1,2,1,2,3]

//리스트 요소 끄집어내기(pop)
pop_back()
a=[1,2,3]
a.pop()
a=[1,2]

//리스트의 포함된 x의 개수 새기 count(x)
a=[1,2,3,1]
a.count(1)
2

//리스트 확장
//extend(x)에서 x는 리스트만 올 수 이쓰며 원래의 a리스트이 x리스트를 더하게 된다.
a=[1,2,3]
a.extend([4,5])
a
a=[1,2,3,4,5]

  • 문자열 포맷팅
    • 숫자 바로 대입
      • >>> "I eat %d apples." % 3
      • 'I eat 3 apples.'
      • number = 3
      • >>> "I eat %d apples." % number
      • 결과 : 'I eat 3 apples.'
  • 문자열 바로 대입
    • >>> "I eat %s apples." % "five" '
    • 결과 : I eat five apples.
    • >>> number = 10 >>> day = "three"
    • >>> "I ate %d apples. so I was sick for %s days." % (number, day)
    • 결과 : 'I ate 10 apples. so I was sick for three days.'
  • format 함수를 사용한 포매팅
    • >>> "I eat {0} apples".format(3)
    • 결과 : 'I eat 3 apples'
    • >>> number = 3
    • >>> "I eat {0} apples".format(number)
    • 결과 : 'I eat 3 apples'
    • >>> number = 10 >>> day = "three"
    • >>> "I ate {0} apples. so I was sick for {1} days.".format(number, day)
    • 결과 : 'I ate 10 apples. so I was sick for three days.'

=================================================================================================================리스트 ==================================

============================================================================

  • 리스트 자료형
    • 형식 -> odd = [1, 3, 5, 7, 9] 
      • 예제) 
      • >>> a = [1, 2, 3, ['a', 'b', 'c']]
      • >>> a[0] 1
      • >>> a[-1] ['a', 'b', 'c'] //뒤로 가기 가능 
      • >>> a[3] ['a', 'b', 'c']
  • 리스트에 요소 추가(append)
    • >>> a = [1, 2, 3]
    • >>> a.append(4)
    • 결과 : >>> a [1, 2, 3, 4]
  • 리스트 정렬(sort) 
    • >>> a = [1, 4, 3, 2]
    • >>> a.sort()
    • 결과 : >>> a [1, 2, 3, 4]
  • 위치 반환(index)
    • >>> a = [1,2,3]
    • >>> a.index(3) 2
    • 결과 : >>> a.index(1) 0
  • 리스트에 요소 삽입(insert)
    • >>> a = [1, 2, 3]
    • >>> a.insert(0, 4)
    • 결과 : >>> a [4, 1, 2, 3]
  • 리스트 요소 제거(remove)
    • >>> a = [1, 2, 3, 1, 2, 3]
    • >>> a.remove(3)
    • 결괴 : >>> a [1, 2, 1, 2, 3] //첫번째 3만 없어진 것을 알 수있다
  • 리스트 요소 끄집어내기(pop)
    • >>> a = [1,2,3]
    • >>> a.pop() //맨 뒤 3을 꺼낸다. ==pop_back() = vector랑 같은 후입선출...
    • >>> a [1, 2]

 

=================================================================================================================튜플 ===================================

============================================================================

  • 튜플(tuple)은 몇 가지 점을 제외하곤 리스트와 거의 비슷하며 리스트와 다른 점은 다음과 같다.
    • 리스트는 [ ]으로 둘러싸지만 튜플은 ( )으로 둘러싼다.
    • 리스트는 그 값의 생성, 삭제, 수정이 가능하지만 튜플은 그 값을 바꿀 수 없다.
  • 형식
    • >>> t1 = ()
    • >>> t2 = (1,)
    • >>> t3 = (1, 2, 3)
    • >>> t4 = 1, 2, 3
    • >>> t5 = ('a', 'b', ('ab', 'cd'))

===============================================================================================================딕셔너리 ===================================

============================================================================

a={key1:value1,key2:velue2,...}
b={1:'a','b':[1,2,3]}


//딕셔너리 요소 삭제하기
del a[1]
del a[key] 처럼 입력하면 지정한 key에 해당하는 {key, value} 쌍이 삭제된다.

//key 리스트 만들기
a={'name':'pey','phone':'0123123'}
a.keys()
dict_keys(['name',phone'}
a.keys()는 딕셔너리 a의 key만 모아서 dict_keys객체를 돌려준다.

//value 리스트 만들기 (values)
a.values()
dict_values(['pey','0123123'}

//key,value 쌍 얻기(items
a.tiems()
dict_items(...)

//key:value 쌍으로 지우기
a.clear()
a
{}

//key로 value 얻기
a.get('name')
'pey'
a.get('phone')
'001010203'

//key가 딕셔너리안에 존재하는지 조사하기(in)
a={'name':'pey','phone':'0123123'}
'name' in a //a안에name이있나
True
'email' in a
False


  • 딕셔너리
    • key,value형식 이며 {}로 둘러싸여 있다. 
    • key값은 중복을 허용하지 않는다. =map
    • 형식
    • {Key1:Value1, Key2:Value2, Key3:Value3, ...}
    • >>> dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
  • 딕셔너리 쌍 추가하기
    • >>> a = {1: 'a'}
    • >>> a[2] = 'b'
    • 결과 : >>> a {1: 'a', 2: 'b'}
  • 딕셔너리 요소 삭제
    • >>> del a[1]
    • 결과 : >>> a {2: 'b', 'name': 'pey', 3: [1, 2, 3]}
    • del 함수를 사용해서 del a[key] 처럼 입력하면 지정한 Key에 해당하는 {key:value}쌍이 삭제된다.
  • key값이용하여 value값 얻기.
    • >>> grade = {'pey': 10, 'julliet': 99}
    • >>> grade['pey'] 결과 : 10
    • >>> grade['julliet'] 결과 : 99
    • (get)이용
    • >>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
    • >>> a.get('name') 결과 : 'pey'
    • >>> a.get('phone') 결과 : '0119993323'
  • key가 딕셔너리에 존재 하는지 조사 하기(in)
    • >>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
    • >>> 'name' in a True
    • >>> 'email' in a False

===============================================================================================================IF조건문===================================

============================================================================

money = True
if money :
	print("택시")
else:
	print("걸어가라")
    
    
pocket =['paper','cellphone','money']
if 'money' in pocket:
	print("택시")
else
	print("걸어가라")
    
>>> pocket = ['paper', 'cellphone']
>>> card = True
>>> if 'money' in pocket:
...      print("택시를 타고가라")
... elif card: 
...      print("택시를 타고가라")
... else:
...      print("걸어가라")
...

===================================================================================================================while==================================

============================================================================

treeHit=0
while treeHit<10:
	treeHit = treeHit +1
    print("나무를%d번 찍었습니다" %treeHit)
    iftreeHit==10:
    	print("나무넘어갑니다")
coffee = 10
while True:
    money = int(input("돈을 넣어 주세요: "))
    if money == 300:
        print("커피를 줍니다.")
        coffee = coffee -1
    elif money > 300:
        print("거스름돈 %d를 주고 커피를 줍니다." % (money -300))
        coffee = coffee -1
    else:
        print("돈을 다시 돌려주고 커피를 주지 않습니다.")
        print("남은 커피의 양은 %d개 입니다." % coffee)
    if coffee == 0:
        print("커피가 다 떨어졌습니다. 판매를 중지 합니다.")
        break

===================================================================================================================for문==================================

============================================================================

//기본구조
for 변수 in 리스트(또는 튜플, 문자열):
    수행할 문장1
    수행할 문장2
    ...

//1) 예제
test_list = ['one', 'two', 'three']
for i in test_list;
	print(i)
결과 : 
one 
two 
three

//2) 예제
>>> a = [(1,2), (3,4), (5,6)]
>>> for (first, last) in a:
...     print(first + last)
...
3
7
11

//3) 예제
marks = [90,25,67,45,80]
number=0
for mark in marks:
	number =number +1
    if mark >=60:
    	print("%d번 학생은 합격입니다" %number)
    else:
    	print("%d번 학생은 불합격입니다"%number)
        
        
//4) 예제 range 함수
a= range(10)
-->결과 : range(0,10) // 0부터 10미만의 숫자를 포함하는 range 객체를 만들어 줍니다.

add=0
for i in range(1,11)
	add = add+i
print(add)

//5) 예제 range함수 활요
marks =[90,24,23,1,32]
for number in range(len(marks)):
	if marks[number] < 60:
    	continue
        
     print("%d 학생 축하합니다. 합격입니다" %(number+1))
     
     
     
     
 >>> for i in range(2,10):        # ①번 for문
...     for j in range(1, 10):   # ②번 for문
...         print(i*j, end=" ") 
...     print('') 
... 
2 4 6 8 10 12 14 16 18 
3 6 9 12 15 18 21 24 27 
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54 
7 14 21 28 35 42 49 56 63 
8 16 24 32 40 48 56 64 72 
9 18 27 36 45 54 63 72 81

==================================================================================================================함수==================================

============================================================================

def 함수이름(매개변수):
    <수행할 문장>
    ...
    return 결과값
 
 def add(a, b): 
    result = a + b 
    return result
//일반적인 함수
def add(a,b)
result = a+b
return result;

//입력값이 없는 함수
def say()
	return 'HI' 
// 입력값이 몇 개가 될지 모를 때는 어떻게 해야 할까?

def add_many(*args)
	result = 0
    for i in args:
    	result = result + i
    return result

result = add_many(1,2,3)
print(result)
결과 : 6

result = add_many(1,2,3,4,5,6,7,8,9,10)
print(result)
결과 : 10

//다른 예시
>>> def add_mul(choice, *args): 
...     if choice == "add": 
...         result = 0 
...         for i in args: 
...             result = result + i 
...     elif choice == "mul": 
...         result = 1 
...         for i in args: 
...             result = result * i 
...     return result 
... 
>>>


>>> result = add_mul('add', 1,2,3,4,5)
>>> print(result)
15
>>> result = add_mul('mul', 1,2,3,4,5)
>>> print(result)
120

//함수의 결괏값은 언제나 하나이다

>>> def add_and_mul(a,b): 
...     return a+b, a*b

>>> result = add_and_mul(3,4)

결과 : result = (7, 12)
>>> result1, result2 = add_and_mul(3, 4)
결과 : result=7, result2=12

==================================================================================================================내장함수================================

===================================================

abs

abs(x)는 어떤 숫자를 입력받았을 때, 그 숫자의 절댓값을 돌려주는 함수이다.

>>> abs(3) 3 >>> abs(-3) 3 >>> abs(-1.2) 1.2=========================

chr

chr(i)는 아스키(ASCII) 코드 값을 입력받아 그 코드에 해당하는 문자를 출력하는 함수이다.

※ 아스키 코드란 0에서 127 사이의 숫자를 각각 하나의 문자 또는 기호에 대응시켜 놓은 것이다.

>>> chr(97) 'a' >>> chr(48) '0'

divmod

divmod(a, b)는 2개의 숫자를 입력으로 받는다. 그리고 a를 b로 나눈 몫과 나머지를 튜플 형태로 돌려주는 함수이다.

>>> divmod(7, 3) (2, 1)

몫을 구하는 연산자 //와 나머지를 구하는 연산자 %를 각각 사용한 결과와 비교해 보자.

>>> 7 // 3 2 >>> 7 % 3 1

enumerate

enumerate는 "열거하다"라는 뜻이다. 이 함수는 순서가 있는 자료형(리스트, 튜플, 문자열)을 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 돌려준다.

※ 보통 enumerate 함수는 다음 예제처럼 for문과 함께 자주 사용한다.

잘 이해되지 않으면 다음 예를 보자.

>>> for i, name in enumerate(['body', 'foo', 'bar']): ... print(i, name) ... 0 body 1 foo 2 bar

순서 값과 함께 body, foo, bar가 순서대로 출력되었다. 즉 위 예제와 같이 enumerate를 for문과 함께 사용하면 자료형의 현재 순서(index)와 그 값을 쉽게 알 수 있다.

for문처럼 반복되는 구간에서 객체가 현재 어느 위치에 있는지 알려 주는 인덱스 값이 필요할때 enumerate 함수를 사용하면 매우 유용하다.

filter

filter란 무엇인가를 걸러낸다는 뜻으로 filter 함수도 동일한 의미를 가진다.

filter 함수는 첫 번째 인수로 함수 이름을, 두 번째 인수로 그 함수에 차례로 들어갈 반복 가능한 자료형을 받는다. 그리고 두 번째 인수인 반복 가능한 자료형 요소가 첫 번째 인수인 함수에 입력되었을 때 반환 값이 참인 것만 묶어서(걸러 내서) 돌려준다.

다음 예를 보자.

#positive.py def positive(l): result = [] for i in l: if i > 0: result.append(i) return result print(positive([1,-3,2,0,-5,6]))

결과값: [1, 2, 6]

즉 위에서 만든 positive 함수는 리스트를 입력값으로 받아 각각의 요소를 판별해서 양수 값만 돌려주는 함수이다.

filter 함수를 사용하면 위 내용을 다음과 같이 간단하게 작성할 수 있다.

#filter1.py def positive(x): return x > 0 print(list(filter(positive, [1, -3, 2, 0, -5, 6])))

결과값: [1, 2, 6]

여기에서는 두 번째 인수인 리스트의 요소들이 첫 번째 인수인 positive 함수에 입력되었을때 반환 값이 참인 것만 묶어서 돌려준다. 앞의 예에서는 1, 2, 6만 양수여서 x > 0 문장이 참이되므로 [1, 2, 6]이라는 결괏값을 돌려주게 된 것이다.

앞의 함수는 lambda를 사용하면 더욱 간편하게 코드를 작성할 수 있다.

>>> list(filter(lambda x: x > 0, [1, -3, 2, 0, -5, 6])) [1, 2, 6]

람다(lambda)

lambda 인자 : 표현식

다음은 두 수를 더하는 함수입니다.

>>> def hap(x, y): ... return x + y ... >>> hap(10, 20) 30

이것을 람다 형식으로는 어떻게 표현할까요?

>>> (lambda x,y: x + y)(10, 20)

30

너무나 간단하죠? 함수가 이름조차도 없습니다. '그냥 10 + 20이라고 하면 되지'라고 말씀하시면 미워잉~.

몇 가지 함수를 더 배워보면서 람다가 어떻게 이용되는지 알아보도록 하죠.

hex

hex(x)는 정수 값을 입력받아 16진수(hexadecimal)로 변환하여 돌려주는 함수이다.

>>> hex(234) '0xea' >>> hex(3) '0x3'

id

id(object)는 객체를 입력받아 객체의 고유 주소 값(레퍼런스)을 돌려주는 함수이다.

>>> a = 3 >>> id(3) 135072304 >>> id(a) 135072304 >>> b = a >>> id(b) 135072304

input

input([prompt])은 사용자 입력을 받는 함수이다. 매개변수로 문자열을 주면 다음 세 번째 예에서 볼 수 있듯이 그 문자열은 프롬프트가 된다.

※ [ ] 기호는 괄호 안의 내용을 생략할 수 있다는 관례 표기법임을 기억하자.

>>> a = input() hi >>> a

'hi'

>>> b = input("Enter: ")

Enter: hi

 

int

int(x)는 문자열 형태의 숫자나 소수점이 있는 숫자 등을 정수 형태로 돌려주는 함수로, 정수를 입력으로 받으면 그대로 돌려준다.

>>> int('3') 3

>>> int(3.4) 3

int(x, radix)는 radix 진수로 표현된 문자열 x를 10진수로 변환하여 돌려준다.

2진수로 표현된 11의 10진수 값은 다음과 같이 구한다.

>>> int('11', 2) 3

16진수로 표현된 1A의 10진수 값은 다음과 같이 구한다.

>>> int('1A', 16) 26

 

isinstance

isinstance(object, class )는 첫 번째 인수로 인스턴스, 두 번째 인수로 클래스 이름을 받는다. 입력으로 받은 인스턴스가 그 클래스의 인스턴스인지를 판단하여 참이면 True, 거짓이면 False를 돌려준다.

>>> class Person: pass ... >>> a = Person() >>> isinstance(a, Person) True

위 예는 a가 Person 클래스가 만든 인스턴스임을 확인시켜 준다.

>>> b = 3 >>> isinstance(b, Person) False

b는 Person 클래스가 만든 인스턴스가 아니므로 False를 돌려준다.

len

len(s)은 입력값 s의 길이(요소의 전체 개수)를 돌려주는 함수이다.

>>> len("python") 6 >>> len([1,2,3]) 3 >>> len((1, 'a')) 2

 

list

list(s)는 반복 가능한 자료형 s를 입력받아 리스트로 만들어 돌려주는 함수이다.

>>> list("python") ['p', 'y', 't', 'h', 'o', 'n']

>>> list((1,2,3)) [1, 2, 3]

list 함수에 리스트를 입력으로 주면 똑같은 리스트를 복사하여 돌려준다.

>>> a = [1, 2, 3]

>>> b = list(a)

>>> b [1, 2, 3]

 

map

map(f, iterable)은 함수(f)와 반복 가능한(iterable) 자료형을 입력으로 받는다. map은 입력받은 자료형의 각 요소를 함수 f가 수행한 결과를 묶어서 돌려주는 함수이다.

다음 예를 보자.

# two_times.py

def two_times(numberList):

result = [ ]

for number in numberList:

result.append(number*2)

return result

result = two_times([1, 2, 3, 4])

print(result)

two_times 함수는 리스트 요소를 입력받아 각 요소에 2를 곱한 결괏값을 돌려준다. 실행 결과는 다음과 같다.

결과값: [2, 4, 6, 8]

위 예제는 map 함수를 사용하면 다음처럼 바꿀 수 있다.

>>> def two_times(x): ... return x*2 ...

>>> list(map(two_times, [1, 2, 3, 4]))

[2, 4, 6, 8]

이제 앞 예제를 해석해 보자. 먼저 리스트의 첫 번째 요소인 1이 two_times 함수의 입력값으로 들어가고 1 * 2의 과정을 거쳐서 2가 된다. 다음으로 리스트의 두 번째 요소인 2가 2 * 2 의 과정을 거쳐 4가 된다. 따라서 결괏값 리스트는 이제 [2, 4]가 된다. 총 4개의 요솟값이 모두 수행되면 마지막으로 [2, 4, 6, 8]을 돌려준다. 이것이 map 함수가 하는 일이다.

※ 위 예에서 map의 결과를 리스트로 보여 주기위해 list 함수를 사용하여 출력하였다.

앞의 예는 lambda를 사용하면 다음처럼 간략하게 만들 수 있다.

>>> list(map(lambda a: a*2, [1, 2, 3, 4]))

[2, 4, 6, 8]

 

max

max(iterable)는 인수로 반복 가능한 자료형을 입력받아 그 최댓값을 돌려주는 함수이다.

>>> max([1, 2, 3]) 3 >>> max("python") 'y'

min

min(iterable)은 max 함수와 반대로, 인수로 반복 가능한 자료형을 입력받아 그 최솟값을 돌려주는 함수이다.

>>> min([1, 2, 3]) 1 >>> min("python") 'h'

oct

oct(x)는 정수 형태의 숫자를 8진수 문자열로 바꾸어 돌려주는 함수이다.

>>> oct(34) '0o42' >>> oct(12345) '0o30071'

 

ord

ord(c)는 문자의 아스키 코드 값을 돌려주는 함수이다.

※ ord 함수는 chr 함수와 반대이다.

>>> ord('a') 97

>>> ord('0') 48

 

pow

pow(x, y)는 x의 y 제곱한 결괏값을 돌려주는 함수이다.

>>> pow(2, 4) 16

>>> pow(3, 3) 27

 

range

range([start,] stop [,step] )는 for문과 함께 자주 사용하는 함수이다. 이 함수는 입력받은 숫자에 해당하는 범위 값을 반복 가능한 객체로 만들어 돌려준다.

인수가 하나일 경우

시작 숫자를 지정해 주지 않으면 range 함수는 0부터 시작한다.

>>> list(range(5)) [0, 1, 2, 3, 4]

인수가 2개일 경우

입력으로 주어지는 2개의 인수는 시작 숫자와 끝 숫자를 나타낸다. 단 끝 숫자는 해당 범위에 포함되지 않는다는 것에 주의하자.

>>> list(range(5, 10)) [5, 6, 7, 8, 9]

 

인수가 3개일 경우

세 번째 인수는 숫자 사이의 거리를 말한다.

>>> list(range(1, 10, 2))  // 1~9까지 +2씩 for(int i = 0 ; i < 10 ; i=i+2)

[1, 3, 5, 7, 9]

>>> list(range(0, -10, -1))

[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

 

round

round(number[, ndigits]) 함수는 숫자를 입력받아 반올림해 주는 함수이다.

※ [, ndigits]는 ndigits가 있을 수도 있고 없을 수도 있다는 의미이다.

>>> round(4.6) 5 >>> round(4.2) 4

다음과 같이 실수 5.678을 소수점 2자리까지만 반올림하여 표시할 수 있다.

>>> round(5.678, 2) 5.68

round 함수의 두 번째 매개변수는 반올림하여 표시하고 싶은 소수점의 자릿수

 

str

str(object)은 문자열 형태로 객체를 변환하여 돌려주는 함수이다.

>>> str(3) '3'

>>> str('hi') 'hi'

>>> str('hi'.upper()) 'HI'

 

sum

sum(iterable) 은 입력받은 리스트나 튜플의 모든 요소의 합을 돌려주는 함수이다.

>>> sum([1,2,3]) 6

>>> sum((4,5,6)) 15

 

type

type(object)은 입력값의 자료형이 무엇인지 알려 주는 함수이다.

>>> type("abc") <class 'str'>

>>> type([ ]) <class 'list'>

>>> type(open("test", 'w')) <class '_io.TextIOWrapper'>

 

zip

zip(*iterable)은 동일한 개수로 이루어진 자료형을 묶어 주는 역할을 하는 함수이다.

※ 여기서 사용한 *iterable은 반복 가능(iterable)한 자료형 여러 개를 입력할 수 있다는 의미이다.

잘 이해되지 않는다면 다음 예제를 살펴보자.

>>> list(zip([1, 2, 3], [4, 5, 6]))

[(1, 4), (2, 5), (3, 6)]

>>> list(zip([1, 2, 3], [4, 5, 6], [7, 8, 9]))

[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

>>> list(zip("abc", "def"))

[('a', 'd'), ('b', 'e'), ('c', 'f')]

  • Cloud
    • IaaS (Infra_structure as a Sevice)
      • 서버를 운영하기 위해서는 서버자원, IP, NW, Storage, 전력 등의 인프라가 필요함.
      • Iaas는 이러한 것들을 가상의 환경에서 쉽고 편하게 이용할 수 있게 서비스 형태로 제공
      • Iaas를 서비스로 제공하는 위해 기존 서버 호스팅보다 H/W 확장성이 좋고 탄력적이며 빠른 제공을 핤 ㅜ 있는 가상화 기술을 이용 Paas 및 Saas의 기반이 되는 기술
    • PaaS(Platform as a Service)
      • 서비스를 개발 할 수있는 안정적인 환경(Patform)과 그 환경을 이용하는 응용 프로그램을 개발 할 수 있는 API 까지 제공하는 형태
    • SaaS(Software as a Service)
      • Cloud환경에서 동작하는 응용프로그램을 서비스 형태로 제공하는 것
      • ex) 메일 서비스
        • 이 시스템이 무엇으로 이루어져 있고 어떻게 동작하는 알 필요가 없음.
        • 그저 서비스 형태로 원하는 단말기(PC, Tablet, SmartPhone)에서 메일을 주고 받으며, 필요하면 언제든지 공간도 늘려서 서비스를 받을 수 있기 때문임.

 

'개인공부 > ICT상식' 카테고리의 다른 글

[ICT 상식] 데이터 통신  (0) 2020.11.05
[ICT 상식]소프트웨어 공학  (0) 2020.11.05
컴파일(compile) / 인터프리터 / 오브젝트(obj) / 고레벨, 저레벨 언어  (0) 2020.11.05
[ICT 상식]  (0) 2020.11.03
ICT 상식  (0) 2020.11.02
  • 소프트웨어 생명주기
    • 폭포수 모형(WaterfallModel)
      • SW 개발 과정의 각 단계가 순차적으로 진행되는 모형
      • 단계적 정의가 분명하고, 전체 공조의 이해가 용이하다.
      • 제품의 일부가 될 메뉴얼 작성
      • 각 단계가 끝난 후 결과물이 명확하게 나와야한다.
      • 성공 사례가 많다.
    • 프로토 타입 모형(Prototype Model)
      • 실제 개발될 시스템의 견본(Prototype)을 미리 만들어 최종 결과물을 예측하는 모형
      • 개발이 완료되고 나서 문제점을 알수 있는 폭포수 모형의 단점을 극복
      • 프로토타입과 실제 SW와의 차이로 인해 사용자의 혼란이 야기됨.
    • 나선형 모형(Spiral Model)
      • 점증적 모형, 집중적 모형
      • SW개발 중 발생할 수있는 위험을 관리
      • 나선을 따라서 돌아가면서 각 개발 순서를 반복 수행(=점진적 방식)
      • 비용이나 시간이 많이 소요되는 대규모 프로젝트나 큰 시스템 구축 시 유리
    • 자료 흐름도 DFD(Data Flow Diagram)
      • 시스템 내의 모든 자료 흐름을 4가지의 기본 기호로 기술 하는 방법
      • 처리공정(Process)
      • 자료흐름(Data Flow)
      • 자료 저장소(Data Store)
      • 단말(Terminator)
    • HIPO 기법
      • 입력, 처리 출력으로 구성되는 시스템 분석 및 설계와 시스템 문서화용 기법
      • 하향식 소프트웨어 개발을 위한 문서화 도구
    • 모듈화와 구현
      • 모듈화
        • 하나의 프로그램을 몇 개의 작은 부분으로 분할
        • 모듈의 독립성은 결합도응집도에 의해 측정 된다.
      • 결합도(낮을수록good)
        • 두 모율 간의 상호 의존도를 말한다.
        • 결합도가 낮으면 시스템을 구현하고 유지보수하는 작업이 쉽다.
      • 응집도(높을수록good)
        • 모듈 안의 서로 관련되어 있는 정도
      • 결론
        • 효과적인 모듈화 설계 방안
          • 응집도는 강하게 하고 결합도는 약하게 하고 복잡도와 중복을 피한다.
    • PasS-Ta
      • 특정 인프라에 종속되지 않는 개방형 클라우드 플랫폼, 한국 정부가 개발한 클라우드
  • 인공지능이 인간지능을 넘어서는 기점
    • 싱귤래리티 
  • 섭테크
    • 금융감독(Supervision)과 기술(Tech)의 합성어로, 최신 기술을 활용하여 금융감독 업무
  • 레그테크
    • 레귤레이션 + 테크 =섭테크
  • 뱅크런
    • 경제상황이 악화로 은행이 지급 불능 상태를 우려한 고객들이 대규모로 예금을 인출하는 사태
  • 검사와 유지보수
    • 화이트 박스 테스트(원시느낌)
      • 프로그램의 제어 구조에 따라 선택, 반복 등의 부분들을 수행함으로써 논리적 경로를 점검
      • 원시 코드의 모든 문장을 한 번 이상 수행함으로써 진행
      • 기초 경로 검사
      • 조건 검사
      • 데이터 흐름 검사
      • 루프 검사
    • 블랙 박스 테스트(완제품느낌)
      • 각 기능이 완전히 작동되는 것을 입증
      • 기능 검사, 성능 오류, 부정확한 기능, 자료 구조 오류. 인터페이스 오류
      • 동치 분할 검사
      • 경계값 분석
      • 원인 효과 그래프
      • 비교 검사

'개인공부 > ICT상식' 카테고리의 다른 글

[ICT 상식] 데이터 통신  (0) 2020.11.05
[ICT 상식]소프트웨어 공학  (0) 2020.11.05
컴파일(compile) / 인터프리터 / 오브젝트(obj) / 고레벨, 저레벨 언어  (0) 2020.11.05
[ICT 상식]  (0) 2020.11.04
ICT 상식  (0) 2020.11.02
  • 블루레이 디스크(Blue-ray Disc)
    • 비디오 포맷은 DVD와 동일한 MPEG-2기반 코덱
    • 12cm 직경의 25GB 정도의 데이터 저장 가능
    • BD-ROM(읽기 전용), BD-R(기록 가능) ,BD-RE(재기록 가능)
    • 푸른색 레이저(405nm)를 사용해서 Blu-ray Disc이다.
  • 마이크로 연산(Micro Operator)
    • CPU에서 발생시키는 한 개의 클럭 펄스(Clock Pulse) 동안 실행되는 기본 동작.
    • 한 개의 명령어는 여러 개의 마이크로 연산이 동작되어 실행
    • CPU에서 발생시키는 제어 신호에 따라 마이크로 연산이 순서적으로 일어남.
  • LAN방식 (10BASE-T)
    • 10Mbps로 전송하는 BASE 베이스 밴드 전송, T 케이블에 꼬인 상선 사용
  • 시스템 소프트웨어
    • 프로그램을 메모리에 적재
    • 인터럽트 관리
    • 기억 장치 관리
  • 응용 소프트웨어
    • 복잡한 수학 계산을 처리
  • 분산 처리 시스템
    • 여러 대의 컴퓨터에 작업을 나누어 처리하여 그 내용이나 결과가 통신망을 통해 상호 교환하도록 하는 시스템
    • 클라이언트/서버 시스템
    • 점진적 확장의 용이성
    • 신뢰성 가용성 증진
    • 시스템 자원을 여러 사용자가 공유
    • 중앙집중형 시스템에 비해 SW 개발이 어렵고 보안 문제가 발생할 우려가 있다.
  • 자료(Data)와 정보(Information)
    • 자료(Data) : 현실 세계에서 어떤 측정을 통해 얻은 단순한 값 (= 가공되지 않은 데이터)
    • 정보(Information) : 자료(Data)를 가공처리하여 어떤 의사결정에 필요한 지식을 추출.
  • 데이터 베이스 설계 단계
    • 개념적 설계 단계 : 요구사항 분석을 토대로 결과물 개념적 모델을 통해 표현
    • 논리적 설계 단계 : 개발에 사용할 DBMS를 적합한 논리적 데이터 모델을 이용하여 개념적 설계 단계 기반으로 설계하는 과정 
    • 물리적 설계 단계 : 논리적 설계 단계에서 생성된 논리적 구조를 실제로 구축할 컴퓨토 시스템의 저장 장치와 운영체제의 특성을 고려하여 처리 능력을 향상 시킬 수 있도록 설계하는 과정
      • 응답시간, 저장공간의 효율화, 트랜잭선 처리도
  • 개체(Entity)
    • DB에서 표현하려는 것으로 사람이 생각하는 개념이가 정보 단위 같은 현실세계 대상체
    • 하나의 개체는 여러개의 속성을 갖는다.
    • 단독으로 존재 불가능.
  • 속성(Atrribute)
    • 개체를 구성하는 항목으로 Db를 구성하는 최초의 논리적 단위
  • SQL
    • 데이터 정의어 DDL : CREATE, DROP, ALTER, RENAME, TRUNCATE
    • 데이터 조작어 DML : UDDATE, DELETE, SELECT, INSERT
    • 데이터 제어어 DCL : GRANT, REVOKE, CASCADE, RESTRICTED
  • RSA
    • 암호 키해독 키가 서로 다른 방법으로 암호 키는 공개하고 해독 키는 비공개하여 데이터 송수신 시 보안을 유지한다. 

 

  • 로킹의 단위가 작을 수록 구현이 복잡한 반면 강력한 동시성(병행성 ,공유도 증가) 

 

  • 데이터 통신의 3요소
    • 정보원(Data Source)
    • 전송 매체 (Medium)
    • 정보 처리원(Destination, 수신자)
  • 비동기식 전송
    • 문자(구성 : Start bit, 전송문자, 패리티 비트, Stop Bit)
    • 휴지 시간 불규칙 (기다렸다가 한꺼번에 보내는 개념)
    • 전송속도 1200bps 이하, 저속, 단거리 전송
    • 동기화가 단순, 저비용
    • 문자마다 시작과 정지를 알리기 위해 비트가 2-3씩 추가되므로 전송 효율이 떨어짐
  • 동기식 전송
    • 프레임(미리 정해진 수만큼의 문자여을 한 블록(프레임)으로 만들어 일시에 전송)
    • 휴지 시간 없음. (지속적으로 계속보내는 개념)
    • 2400bps 이하, 고속, 원거리에 사용
    • 휴지시간이 없으므로 전송효율이 좋음
    • 비트 동기 방식, 블록 동기 방식(문자 동기 방식, 비트 동기 방식)

========================================================================================================================================================

  • 교착상태의 발생 필수조건
    • 상호 배제
    • 점유와 대기
    • 비선점(선점아님)
    • 환형 대기
  • 데이터베이싀의 특성
    • 실시간 접근성
    • 내용에 의한 참조
    • 동시 공유
    • 계속적 변화
  • 후보 키
    • 릴레이션 튜플(Tuple)들을 구별할 수 있는 최소환의 속성 집합으로 모든 릴레이션은 최소한 하나의 후보 키를 갖는다.
    • 후보키의 조건
      • 유일성
        • (=속성에는 중복 값이 없어야 한다 ex) 주민등록번호)
      • 최소성
        • 유일한 식별을 하기 위해 꼭 필요한 속성으로만 구성한다.
  • 스마트 계약
    • 블록체인 기반으로 프로그래밍된 조건이 모두 충족되면 자동으로 계약을 이행하는 자동화 계약 시스템
      • 금융거래, 부동산 계약 등 다양한 형태의 계약이 가능

 

 

 

 

List 초기 값 셋팅

CRect rt;
	m_DbfFileListCtrl.GetWindowRect(&rt);
	m_DbfFileListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);
	m_DbfFileListCtrl.InsertColumn(0, TEXT("순번"), LVCFMT_LEFT, rt.Width() *0.05);
	m_DbfFileListCtrl.InsertColumn(1, TEXT("파일이름"), LVCFMT_CENTER, rt.Width() *0.3);
	m_DbfFileListCtrl.InsertColumn(2, TEXT("파일갯수"), LVCFMT_CENTER, rt.Width() *0.3);
	m_DbfFileListCtrl.InsertColumn(3, TEXT("완료여부"), LVCFMT_CENTER, rt.Width() *0.3);

List 값 셋팅

	while (!ListQue.empty())
	{
		
		Listnum = m_DbfFileListCtrl.GetItemCount();
		
		CString strr;
		strr.Format(_T("%d"), Listnum);
		CString tempStrList;
		tempStrList.Format(_T("%d"), ListQue.front().second);
		
		m_DbfFileListCtrl.InsertItem(Listnum, strr); //숫자,dbf파일이름
		m_DbfFileListCtrl.SetItem(Listnum, 1, LVIF_TEXT, ListQue.front().first, NULL, NULL, NULL, NULL);
		//int -> CString
	 
		tempStrList.Format(_T("%d"), ListQue.front().second);
		m_DbfFileListCtrl.SetItem(Listnum, 2, LVIF_TEXT, tempStrList, NULL, NULL, NULL, NULL);


		ListQue.pop();
	}

ListControl 초기화 및 형식지정

m_ctrlLIST1.DeleteAllItems();


LVS_EX_FULLROWSELECT // 아이템을 선택할 때 줄 한줄 전체 반전효과 준다.
LVS_EX_GRIDLINES //각 아이템에 경계선을 그려준다.
LVS_EX_CHECKBOXES //각 아이템을 Check box를 표시해준다.
LVS_EX_HEADERDRAGDROP //컴럼 헤더를 드래그 함으로써 컬럼의 순서를  바꾼다.
listen.SetExtenedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT)

int<->String

  • int-> string
    • string str = to_string(num;
  • string -> int
    • int num = stoi(str)

String<->char 

  • char ->string
    • string str(ch)
  • string ->char
    • strcpy(ch, str.c_str()); //쓸일딱히없음.

 

char<->int

  • char -> int
    • int num = ch-'0';
  • int ->char

 

	//string -> int
	string s1="123";
	int n1 = stoi(s1);
	//int - >string
	int n2=100;
	string s2 = to_string(n2);


	//char->string
	char ch1[] = { "jiji" };
	char *ch2 = "123";
	string s3(ch1);
	string s4(ch2);

	//string ->char
	char ch[100];
	string a = "I wanna go to bed";
	strcpy_s(ch, a.c_str());
 

	//char -> int
	char ch3='100';
	int num = ch3 - '0';

 

www.w3schools.com/sql/trysql.asp?filename=trysql_select_all

 

SQL Tryit Editor v1.6

WebSQL stores a Database locally, on the user's computer. Each user gets their own Database object. WebSQL is supported in Chrome, Safari, Opera, and Edge(79). If you use another browser you will still be able to use our Try SQL Editor, but a different ver

www.w3schools.com

[case문 학습]

devbox.tistory.com/entry/DBMS-CASEWHENTHEN

SUM, MAX, MIN

최대 값 구하기
SELECT MAX(DATETIME) 시간
FROM ANIMAL_INS
최소 값 구하기
SELECT MIN(DATETIME)
FROM ANIMAL_INS
동물 수 구하기
SELECT COUNT(ANIMAL_ID)
FROM ANIMAL_INS
중복 제거하기
SELECT COUNT(DISTINCT NAME) COUNT 
FROM ANIMAL_INS 
WHERE NAME IS NOT NULL

 

GROUP BY

SELECT ANIMAL_TYPE , COUNT(ANIMAL_TYPE) COUNT  
FROM  ANIMAL_INS  
GROUP BY ANIMAL_TYPE 
ORDER BY ANIMAL_TYPE ASC 

SELECT *
FROM (SELECT NAME,COUNT(NAME) COUNT FROM ANIMAL_INS WHERE NAME IS NOT NULL GROUP BY NAME)
WHERE COUNT >=2 
ORDER BY NAME

SELECT  HOUR(DATETIME ) ,COUNT(HOUR (DATETIME ))
FROM ANIMAL_OUTS 
WHERE  HOUR (DATETIME )>=9 AND  HOUR (DATETIME ) <=19
GROUP BY HOUR (DATETIME )

JOIN

SELECT B.animal_id, b.name
FROM ANIMAL_INS A full OUTER JOIN ANIMAL_OUTS B
on A.animal_id = b.animal_id
where A.name is null
and b.name is not null
order by B.animal_id , b.name asc

SELECT A.animal_id ,A.name
FROM ANIMAL_INS A INNER JOIN ANIMAL_OUTS B
ON A.ANIMAL_ID =B.ANIMAL_ID
WHERE A.DATETIME > B.DATETIME
ORDER BY A.DATETIME  ASC

SELECT * 
FROM(
SELECT  A.NAME, A.DATETIME
FROM ANIMAL_INS A LEFT JOIN ANIMAL_OUTS B
ON A.ANIMAL_ID = B.ANIMAL_ID 
WHERE B.ANIMAL_ID IS NULL 
ORDER BY A.DATETIME)
WHERE ROWNUM<=3

 

String Data

SELECT ANIMAL_ID,NAME,SEX_UPON_INTAKE
FROM ANIMAL_INS 
WHERE NAME= 'Lucy' OR NAME= 'Ella'OR NAME= 'Pickle'OR NAME= 'Sabrina'OR NAME= 'Mitty'OR NAME= 'Rogan'
ORDER BY ANIMAL_ID ASC

SELECT ANIMAL_ID ,NAME
FROM ANIMAL_INS 
WHERE  ANIMAL_TYPE ='Dog' AND (NAME LIKE  '%el%' or name like '%El%' )
ORDER BY NAME

SELECT ANIMAL_ID, NAME,  CASE WHEN SEX_UPON_INTAKE LIKE '%Neutered%' OR   SEX_UPON_INTAKE LIKE '%Spayed %' THEN 'O'
ELSE 'X' END AS 중성화
from ANIMAL_INS 
ORDER BY ANIMAL_ID ASC

SELECT *
FROM (SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_INS A, ANIMAL_OUTS B
WHERE A.ANIMAL_ID = B.ANIMAL_ID
ORDER BY B.DATETIME-A.DATETIME DESC)
WHERE ROWNUM <=2

SELECT ANIMAL_ID,NAME,DATE_FORMAT (DATETIME,'%Y-%m-%d') AS 날짜
FROM ANIMAL_INS 
ORDER BY ANIMAL_ID

서브쿼리

  • 중첩 서브쿼리 : 선택과목 B 테이블에서 'MATH'를 선택한 학생들의 이름을 찾아, 학생 A 테이블에서 모든 정보를 조회 (where절 안에)
  • 인라인 뷰 (from절) : 각각의 공급자가 공급한 물품(item_name)과 총수량(total_amt)을 알고 싶은데, 두 정보가 서로 다른 테이블에 들어있는 경우, 공급자(suppliers)와 주문(oreders) 두 테이블로부터 각각 원하는 데이터를 불러와 출력하는 쿼리
  • 스칼라서브쿼리 (select절) : 테이블에는 존재하지 않는 데이터(가격 평균/합 등)를 조회하고 싶을 때 사용하는 쿼리
SELECT * 
FROM student A
WHERE A.student_name IN (SELECT B.student_name
                          FROM subject B
                          WHERE B.subject_name = 'MATH');


SELECT A.item_name, subquery1.total_amt
FROM suppliers A,
     (SELECT supplier_id, SUM(B.amount) AS total_amt
      FROM orders B
      GROUP BY supplier_id) subquery1
WHERE subquery1.supplier_id = A.supplier_id;



SELECT product_name, list_price,
       ROUND(
         (SELECT  AVG( list_price )
          FROM    products p1
          WHERE   p1. category_id = p2.category_id
         ), 2 ) avg_list_price
FROM  products p2
ORDER BY  product_name; 

 

연습문제

두번 이상 쓰여진 이름과 그 갯수를 출력하기

인라인뷰 사용
select *
from 
 (SELECT NAME,COUNT(NAME) COUNT FROM ANIMAL_INS 
WHERE NAME IS NOT NULL GROUP BY NAME)
where count >=2
order by name asc

HAVING 사용
SELECT NAME, COUNT(NAME)
FROM ANIMAL_INS
GROUP BY NAME
HAVING COUNT(NAME)>1
ORDER BY NAME 

 

 

 

연습문제

기존의 시간

2015-09-16 13:07:00 --> 13 변경 시 HOUR(DATETIME) 이용
WHERE 이용시 HOUR(DATETIME)>=9 AND HOUR(DATETIME)<=19
HAVING 이용시 HAING HOUR >=9 AND HOUR <=19
SELECT  HOUR (DATETIME ) , COUNT (DATETIME)
FROM ANIMAL_OUTS 
WHERE  HOUR (DATETIME )>=9 AND  HOUR (DATETIME ) <=19
GROUP BY HOUR (DATETIME )
ORDER BY HOUR(DATETIME)


SELECT HOUR(DATETIME) HOUR, COUNT(DATETIME) COUNT
FROM ANIMAL_OUTS
GROUP BY HOUR(DATETIME)
HAVING HOUR >= 9 and HOUR <= 19

 

연습문제

MySQL

SELECT B.ANIMAL_ID , B.NAME
FROM ANIMAL_INS AS A 
RIGHT OUTER JOIN ANIMAL_OUTS AS B
ON A.ANIMAL_ID = B.ANIMAL_ID 
WHERE A.ANIMAL_ID IS NULL
ORDER BY ANIMAL_ID ASC

Oracle

SELECT B.animal_id, b.name
FROM ANIMAL_INS A full OUTER JOIN ANIMAL_OUTS B
on A.animal_id = b.animal_id
where A.name is null
and b.name is not null
order by B.animal_id , b.name asc

MySQL

 

-- 코드를 입력하세요
SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_INS A INNER JOIN ANIMAL_OUTS B
ON A.ANIMAL_ID  = B.ANIMAL_ID
WHERE A.DATETIME >= B.DATETIME
ORDER BY A.DATETIME ASC

Oracle

SELECT A.ANIMAL_ID, A.NAME
FROM ANIMAL_INS A INNER JOIN ANIMAL_OUTS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.DATETIME>B.DATETIME
ORDER BY A.DATETIME ASC

 

MySQL

-- 코드를 입력하세요
SELECT A.ANIMAL_ID, A.ANIMAL_TYPE, A.NAME
FROM ANIMAL_INS A INNER JOIN ANIMAL_OUTS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.ANIMAL_ID= B.ANIMAL_ID AND A.SEX_UPON_INTAKE!= B.SEX_UPON_OUTCOME
ORDER BY B.ANIMAL_ID ASC

Orcle, MySQL

select ANIMAL_ID, NAME,SEX_UPON_INTAKE
from ANIMAL_INS a
where a.name = 'Lucy' or name= 'Ella' or name= 'Pickle' or name ='Rogan'or name=  'Sabrina'or name= 'Mitty'
order by ANIMAL_ID asc

 

Oracle, MySQL

select ANIMAL_ID,NAME
from ANIMAL_INS 
where ANIMAL_TYPE = 'Dog'and (name like '%el%' or name like '%EL%' or name like '%eL%' or name like '%El%')
order by name asc

CASE문 연습

CASE WHEN 컬럼명 = 'aaa' THEN 'bbb' WHEN 컬럼명2 = 'aa' THEN 'bb'

Oracle, MySQL

select ANIMAL_ID,NAME,  case when SEX_UPON_INTAKE  like '%Neutered%' then 'O'
when SEX_UPON_INTAKE like '%Spayed%' then 'O' else 'X' end 중성화
from ANIMAL_INS 
order by ANIMAL_ID asc


select ANIMAL_ID,case when ANIMAL_ID = 'A355753' then '하이하이'
when ANIMAL_ID = 'A373219' then '하이' else '기타' end as 중성화
from ANIMAL_INS
 

MySQL : 상위 두개 출력

마지막 LIMIT 2 

SELECT SUB.ANIMAL_ID, SUB.NAME
FROM
(
SELECT A.ANIMAL_ID, A.NAME 
FROM ANIMAL_INS A INNER JOIN ANIMAL_OUTS B 
ON A.ANIMAL_ID = B.ANIMAL_ID 
ORDER BY B.DATETIME- A.DATETIME DESC
) SUB
LIMIT 2



//이게 정답
SELECT B.ANIMAL_ID, B.NAME
FROM ANIMAL_INS A RIGHT OUTER JOIN ANIMAL_OUTS B
ON A.ANIMAL_ID = B.ANIMAL_ID 
ORDER BY B.DATETIME - A.DATETIME DESC
LIMIT 2

Oracle : 상위 N개 출력

WHERE ROWNUM <=2

/*
select sub.ANIMAL_ID, b.NAME
from 
(
select b.DATETIME-a.DATETIME 순위 , a.ANIMAL_ID 
from ANIMAL_INS a inner join ANIMAL_OUTS b 
on a.ANIMAL_ID = b.ANIMAL_ID
order by 순위 desc 
) sub 
inner join ANIMAL_OUTS b
on sub.ANIMAL_ID = b.ANIMAL_ID
WHERE ROWNUM <= 2
order by 순위 desc 
*/

select sub.ANIMAL_ID, b.NAME
from (
select  a.ANIMAL_ID 
from ANIMAL_INS a inner join ANIMAL_OUTS b 
on a.ANIMAL_ID = b.ANIMAL_ID
order by b.DATETIME-a.DATETIME desc 
) sub 
inner join ANIMAL_OUTS b
on sub.ANIMAL_ID = b.ANIMAL_ID
WHERE ROWNUM <= 2

MySQL

시간 포맷 바꿔주는 함수 : DATE_FORMAT(칼럼,'%y')

  • 종류 : %Y,%y,%M,%m,%d,%D 시간 : %h : 다다름

 

GROUP BY + DATE_FORMAT + HAVING

문제

쿼리

-- 코드를 입력하세요
SELECT DATE_FORMAT(DATETIME,'%H') AS HOUR, COUNT(DATE_FORMAT(DATETIME,'%H')) AS COUNT
FROM ANIMAL_OUTS A
GROUP BY DATE_FORMAT(DATETIME,'%H')
HAVING HOUR >= 9 AND HOUR<20
ORDER BY DATE_FORMAT(DATETIME,'%H') ASC

문제

쿼리

-- 코드를 입력하세요
SELECT NAME, COUNT(NAME) AS COUNT
FROM ANIMAL_INS A
GROUP BY NAME
HAVING COUNT>=2 AND NAME IS NOT NULL
ORDER BY NAME ASC

2중 조인

테이블구조

테이블 명 필드
[OrderDetails] OrderDetailID OrderID ProductID Quantity
[Orders] OrderID CustomerID EmployeeID OrderDate ShipperID
[Customers] CustomerID CustomerName ContactName Address City PostalCode Country
SELECT * 
FROM [Customers] A INNER JOIN [Orders] B
ON A.CustomerID =B.CustomerID 
INNER JOIN [OrderDetails] C 
ON B.OrderID=C.OrderID

Pair

bool cmp 함수가 가장 중요하다.

bool cmp(pair<int, int> a, pair<int, int> b)
{
	if (a.first < b.first)
		return true;

	else if (a.first == b.first)
	{
		if (a.second < b.second)
		{
			return true;
		}
	}
	return false;
}
  • true이면 조건문그대로 정렬 하는 것
  • false이면 swap 해주는 것 
  • 위의 조건문은 first기준 오름차순이며 같을 경우 second 값을 오름차순으로 결정한다..
	v.push_back({ 1,3 });
	v.push_back({ 1,4 });
	v.push_back({ 10,3 });
	v.push_back({ 12,3 });
	v.push_back({ 14,3 });
	v.push_back({ 14,2 });

	sort(v.begin(), v.end(), cmp);

Struct

if(a.z>b.z) 면 true라는 것은 내림차순 정렬이다.! a.z>b.z가 큰 것이 맞다!

using namespace std;
struct abc
{
	int x;
	int y;
	int z;
};
 
bool cmp(abc a, abc b)
{
	if (a.z > b.z)
		return true;
	else
		return false;
}
int main()
{
 
	vector<abc> v;
	v.push_back({ 1,2,1 });
	v.push_back({ 1,2,2 });
	v.push_back({ 1,2,3 });
	v.push_back({ 1,2,4 });

	//1,2,4->1,2,3->1,2,2->1,2,1로 정렬해라
	sort(v.begin(), v.end(), cmp); 
	

	return 0;
}

 

+ Recent posts