디비에서 중복 값을 가지고 있는 필드를 조회하기위해 아래의 쿼리를 입력합니다.
SELECT * FROM `테이블명` GROUP BY 필드 HAVING COUNT(필드) > 1
이 값은 같은 필드가 2개 이상인 값을 보여줍니다.
예) SELECT * FROM `Coupon` GROUP BY Code HAVING COUNT(Code) > 1
디비에서 중복 값을 가지고 있는 필드를 조회하기위해 아래의 쿼리를 입력합니다.
SELECT * FROM `테이블명` GROUP BY 필드 HAVING COUNT(필드) > 1
이 값은 같은 필드가 2개 이상인 값을 보여줍니다.
예) SELECT * FROM `Coupon` GROUP BY Code HAVING COUNT(Code) > 1
최근 csv 데이터를 디비로 옮겼는데
이상한 공백값이 함께 저장되는 문제가 발생하였다.
SELECT * FROM Coupon WHERE Code LIKE '% %';
이런식으로 공백을 조회 후
UPDATE Coupon SET Code = REPLACE(Code, ' ', '')
해당 공백 값을 없애준다.
예를 들어 A라는 테이블에 있는 값들중
한 아이디를 랜덤으로 불러와야 되는데
만약 데이터를 5개 이상가지고 있지 않은 아이디를 불러올 경우 에러가 나게 되는 경우라면
아래의 쿼리로 요청하면 됩니다.
SELECT ID FROM A GROUP BY ID HAVING 5 < COUNT(ID) order by rand() limit 1
A 테이블에서 ID로 된 데이터가 5개 이상 가지고 있는 ID를 랜덤으로 1개 불러오는 것이죠.
특정 컬럼의 중복값 제외는 매우 쉽습니다.
SELECT Distinct A컬럼 from 테이블 |
이렇게만 해주면 중복된 값이 제거된 A컬럼의 열값만 나오죠.
그런데 날짜의 중복을 제거하고 싶다고 칩시다.
yyyyMMdd라면 괜찮습니다.
그런데 yyyyMMddHHmmss 라면?!
그럼 중복이 될 수가 없겠죠.
그럴 땐 substr을 씁니다. substring의 약자죠.
substr(컬럼값, 시작자리, 끝자리) 이런식으로 세팅합니다.
그런데 sqlite는 독특하게도 첫글자를 불러오려면 0이 아니라 1을 넣어야 합니다. 신기하죠? ^^
그럼 날짜를 불러오는데 시분초를 제외한 날짜중, 겹치는 날짜만 제거하여 쿼리를 날리면..
SELECT Distinct substr(date,1,8) FROM report order by date desc |
이렇게 하면 됩니다. ^^ order by는 보너스~
검색해보는데 이런 포스팅이 잘 없더라구요. 도움 되시길 바랍니다. ^^
저번 글에선 Sqlite에서 NULL값을 걸러내는 방법을 알아보았는데요~
이번엔 NULL값을 제외한 값들을 추려내는 방법을 알아봅시다.
B테이블의 A컬럼의 값이 NULL이 아닌 것만 SELECT 하려면 아래와 같은 쿼리를 날립니다.
SELECT A컬럼 FROM B테이블 WHERE NOT A컬럼 is NULL; |
이것도 참~ 쉽죠? :)
Sqlite에서 NULL값을 SELECT 해보는 방법을 알아봅시다.
B테이블의 A컬럼의 값이 NULL인 것만 SELECT 하려면 아래와 같은 쿼리를 날립니다.
SELECT A컬럼 FROM B테이블 WHERE A컬럼 is NULL; |
참~ 쉽죠? :)
예문) SELECT DISTINCT A FROM tableName WHERE B > 80;
String[] a = ["xxx", "yyy", "ttt"];
insert();
.
.
.
public void insert(){
for(int i=0; i<a.length(); i++){
String sql ="INSERT INTO tableName (a, b) VALUES("+a[i]+")";
db.setTransactionSuccessfull();
db.endTransaction();
}
}
UPDATE 테이블명 SET 열이름1=값1, 열이름2=값2... WHERE 조건
예제)
UPDATE tableName SET _id=1000 WHERE _id=7
//tableName 테이블의 _id 컬럼값 7번을 1000으로 바꿉니다.
SELECT * FROM tableName WHERE _id BETWEEN 10 AND 30
//tableName 테이블에서 _id 컬럼의 값이 10 이상, 30 이하인 레코드를 검색합니다. (~와~사이)
SELECT * FROM tableName WHERE a IN(10,30)
//tableName 테이블에서 _id 컬럼의 값이 10, 30인 레코드만 검색합니다. (안에)
SELECT * FROM tableName WHERE a LIKE '%hi%'
//tableName 테이블에서 a 컬럼의 값이 hi 인 레코드만 검색합니다. (같은)
PS :
세번째 LIKE '%hi%' 에서 %는 무엇일까요? 그것은 hi 좌우의 임의 문자에 상관없이 어디에든 hi만 들어가면 검색한다는 소리입니다.
예를 들면, a 컬럼의 값이 'high' 인데 위와 같이 '%hi%' 로 검색했을 때 a 컬럼이 출력되는 모습을 확인할 수 있을겁니다.
하지만 '%hi' 로 검색한다면 a 컬럼의 값은 검색되지 않을 것입니다. hi와 high는 다른 단어로 인식하기 때문입니다. 그것을 풀어주는 것이 %입니다. 마찬가지로 a 컬럼의 값이 'ahi' 인데 'hi%' 로 검색하면 hi 뒤에 있는 %가 뒤의 단어들은 무시해줄진 몰라도 앞에는 없기 때문에 hi와 ahi를 다른 단어로 인식하는 것입니다.
// tableName 테이블에서 _id 컬럼의 데이터 합을 구합니다. (_id는 숫자)
SELECT AVG(_id) FROM tableName;
// tableName 테이블에서 _id 컬럼의 데이터의 평균을 구합니다.
SELECT COUNT(*) FROM tableName;
//tableName 테이블의 개수를 셉니다. 즉, 행을 카운트합니다.
SELECT MAX(_id) FROM tableName;
//tableName 테이블에서 _id 컬럼의 데이터 중 최대값을 구합니다.
SELECT MIN(_id) FROM tableName;
//tableName 테이블에서 _id 컬럼의 데이터 중 최소값을 구합니다.
일단 예제를 들어 테이블 명이 tableName, 컬럼값이 _id 하나로 4개가 있다고 쳤을 때
SELECT * FROM tableName;
_id |
|||
1 |
|||
2 |
|||
3 |
|||
4 |
여기서
SELECT SUM(_id) FROM tableName;
하면 1+2+3+4 가 되서
_id |
10 |
이라는 결과가 나오겠지요. 나머지로 이런 맥락으로 생각하시면 됩니다. ^^
SELECT * FROM 테이블명 WHERE 컬럼명 !='데이터값'
//테이블명에서 특정 컬럼의 데이터 값을 조건연산자 != 로 추려낸 후 나머지 데이터들만 검색하는 쿼리입니다.
//데이터값이 숫자면 싱글쿼트 ''가 없어도 됩니다.
SELECT * FROM 테이블명 WHERE NOT 컬럼명 ='데이터값'
//테이블명에서 특정 컬럼의 데이터 값을 논리연산자 NOT 으로 추려낸 후 나머지 데이터들만 검색하는 쿼리입니다.
SELECT * FROM 테이블명 WHERE 컬럼명 <>'데이터값'
//테이블명에서 특정 컬럼의 데이터 값을 비교연산자 <>로 추려낸 후 나머지 데이터들만 검색하는 쿼리입니다.
예제)
INSERT INTO tableName (a, b) VALUES ('how are you', 'fine thanks')
INSERT INTO tableName (a, b) VALUES ('and you?', '한국어로 해라')
//테이블명 tableName에 text 컬럼값인 'a'와 'b' 가 있을 때, 두 컬럼에 값을 집어넣고
SELECT * FROM tableName WHERE a != 'how are you'
//위와 같은 구문을 통해 검색하면 'how are you' 가 들어간 곳만 빼고 검색되는 것을 알 수 있습니다. 결과는 두번째 데이터만 검색될 것 입니다,
tableName 테이블의 컬럼값_id 4번을 지운다.
http://www.sqliteexpert.com/download.html
SQLLite Expert 유틸.
이클립스 - DDMS - File Explorer - data - data - 패키지명 - database 에서
지정한 테이블명.db 를 오른쪽 상단의 pull a file from the device 버튼을 눌러 내보낸 후
SQLLite Expert 로 불러오면 보기가 편합니다.