///////
Search

10/14일 멋쟁이사자 위키

삽입 정렬(Insertion Sort)

삽입 정렬이란 2번째 원소부터 n번째 원소까지 차례로 해당 원소가 위치할 인덱스에 원소를 삽입하는 방식을 사용하는 정렬 방식이다.
2번째 원소부터 n번째 원소부터 차례로 각 원소가 맞는 위치에 '삽입'하는 방식을 사용.
어떤 대상을 '오름차순'으로 정렬할 때 삽입 정렬은 2번째 원소부터 앞의 원소와 비교하는 과정을 통해 적절한 위치에 삽입하고, n번째 원소까지 이 방식을 반복함으로써 정렬을 진행할 수 있다. 예를 들어 [6, 2, 3, 4, 1]이라는 배열을 삽입 정렬을 이용하여 오름차순 정렬을 해보면 다음과 같다.
import java.util.Arrays; public class InsertionSort { static int[] nums; public static void main(String[] args) { nums = new int[10]; for (int i = 0; i < 10; i++) { nums[i] = (int) (Math.random() * 10); } System.out.println("<정렬 전>"); System.out.println(Arrays.toString(nums)); for(int i = 1; i < nums.length; i++) { // 현재 선택된 원소의 값을 임시 변수에 저장해준다. int temp = nums[i]; // 현재 원소를 기준으로 이전 원소를 탐색하기 위한 index 변수. int prev = i - 1; // 현재 선택된 원소가 이전 원소보다 작은 경우까지만 반복. 단, 0번째 원소까지만 비교한다. while(prev >= 0 && nums[prev] > temp) { nums[prev + 1] = nums[prev]; // 다음 대상 원소를 탐색한다. prev--; } // 탐색이 종료된 지점에 현재 선택되었던 변수의 값을 삽입해준다. nums[prev + 1] = temp; } System.out.println("<정렬 후>"); System.out.println(Arrays.toString(nums)); } }
Java
복사

BufferedWriter

File file = new File(filename); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "utf-8")); for (String str : lines) { writer.write(str);
Java
복사

BufferedWriter사용법

사용되는 메소드는 'write()', 'flush()', 'close()' 이다.
write()을 사용하여 출력할 내용을 담고, flush()을 통해서 버퍼를 비워내는 동시에 콘솔에 출력하면 된다.
주의할 점은 write()만 사용한다고 콘솔에 출력이 되는 것은 아니고, 반드시 flush()을 써 주어야 한다.
그리고 출력이 끝났으면, close()을 통해서 스트림을 닫는다.
마지막으로, BufferedWriter도 BufferedReader와 마찬가지로 IOException 예외 처리를 반드시 해 주어야 한다.

.sql파일 만들기

Truncate명령어

개념 : 테이블의 데이터를 전부 삭제하고 사용하고 있던 공간을 반납 설명 - 해당 테이블의 데이터가 모두 삭제되지만 테이블 자체가 지워지는 것은 아님 , 해당 테이블에 생성되어 있던 인덱스도 함께 truncate 됨 사용 : TRUNCATE TABLE lee_Table;
ABAP
복사

Drop 명령어

개념 : 테이블 자체를 삭제하는 명령어설명 - 테이블 자체가 모두 지워지며, 해당 테이블에 생성되어 있던 인덱스도 삭제됨 사용 : DROP TABLE lee_table;
ABAP
복사
Delete, Truncate, Drop 모두가 삭제하는 명령어 이다 .이때, 중요한 차이점이 있다. DELETE 후에는데이터만 지워지고 쓰고 있던 디스크 상의 공간은 그대로 가지고 있다. TRUNCATE 작업은 최초 테이블이 만들어졌던 상태, 즉데이터가 1건도 없는 상태로 모든데이터 삭제, 칼럼값만 남아 있다.인덱스 등도 모두 삭제 된다.→ DELETE는 원하는 데이터만 골라서 삭제가 가능하나 TRUNCATE는 그렇지 못한다.

Delete와 Truncate후 구조 차이

SELECT 명령어 (database에 질문을 해서 답을 얻는 것)

SELECT * FROM [table_name] // 전체 열 SELECT [column_name] FROM [table_name] // 특정 열 SELECT [column_name],[column_name] FROM [table_name] // 복수의 열
SQL
복사
SELECT명령어를 통해서 table에서 데이터를 가져올 수 있다. SELECT * FROM ...를 입력하면 from이하에 있는 table에서 해당하는 모든 데이터를 가져와서 볼 수 있다.

LIMIT 사용 (SELECT를 사용할때 성능상 사용 추천)

limit n :  n으로 지정된 숫자만큼 행이 출력된다.
//LIMIT을 사용해서 1000의 데이터를 가져오기 SELECT subdivision, count(subdivision) as cnt FROM seoul_hospital group by subdivision order by cnt desc limit 1000;
SQL
복사

WHERE 명령어

SELECT subdivision, name FROM seoul_hospital where subdivision = "" limit 1000;
SQL
복사
WHERE 명령어를 통해 조회하는 데이터 결과에 특정 조건식을 적용하여 필터링할 수 있다. 테이블에서 가져온 전체 데이터 중에 WHERE 이하의 조건에 맞는 데이터들만 결과로 가져와서 출력하기 때문에, WHERE 조건문의 범위가 아주 넓거나 조건문 자체가 없으면, 데이터의 크기가 크면 클 수록 데이터를 찾아오는 데에 더 큰 노력과 시간이 소요된다.
WHERE는 여러가지 연산자들을 조합하여 다양한 조건식들을 만들어낼 수 있다. 적용할 수 있는 연산자는 아래와 같다.
OR 연산자와 AND 연산자
조건연산자 (<,>,=, >=, <=, <> ,!= 등)
관계 연산자 (NOT, OR, AND, IN)

DISTINCT 명령어

SELECT DISTINCT CountryCode FROM City
SQL
복사
SELECT를 수행할 때 DISTINCT를 추가하면 결과에서 중복된 값들이 있다면 이들 중 1개만을 출력합니다. 결과로 받는 데이터가 중복되는 값이 많을 때나 데이터의 크기가 클 때에 유용합니다.

GROUP BY

Groub by는 데이터를 Grouping해서, 집계 함수를 사용하고 그 결과를 정렬해 가져오는 경우에 사용한다. 주로 집계 함수 사용을 위해 사용한다.Grouping한 Column의 데이터만 가져오기때문에 출력 결과는 DISTINCT와 비슷하다.
하지만 DISTINCT의 출력 결과는 정렬된 결과가 아니지만, Groub by는 정렬된 결과를 보내준다.
SELECT column1 FROM table GROUP BY column1;
SQL
복사
GROUP BY는 HAVING절을 통해 집계함수를 조건으로 사용 가능하다.

HAVING

WHERE절 에서는 집계함수를 조건으로 사용할 수 없다.
그래서 GROUP BY에서 HAVING절을 추가하여 집계함수를 조건으로 사용하여 결과를 출력한다.
// sal 평균이 1000 이상인 deptno와 sal 평균을 출력 SELECT deptno, AVG(sal) FROM emp GROUP BY deptno HAVING AVG(sal) >= 1000;
SQL
복사

COUNT 집계함수

count 특정 조건인 데이터 개수 세기

//SUBDIVISION이 없고 이비인후과인 병원을 1000개만 가져오는 SQL SELECT count(name) FROM seoul_hospital where subdivision = "" and name like "%이비인후과%" limit 1000;
SQL
복사