Sql & DB 2009.04.07
DataBase 사용하기 Access Delphi에서 Access사용하기 Sample mdb 복사 (C:\db.mdb) Table Field Delphi에서 Access사용하기 ADO
Access (sample mdb : db.mdb)
Access 디자인보기(t_div)
Access Table(t_div)
Access Table 구조 t_div 분류코드 div_no Long(일련번호) div_kind 텍스트(50) 분류 div_model 텍스트(50) 모델 div_maker 텍스트(50) 제조사 div_i_price Long 구매가 div_j_price Long 지도가 t_mk 오픈마켓 mk_no Byte 오픈마켓코드 mk_name 텍스트(50) 오픈마켓이름 t_fee 수수료 fee_no Long t_div(div_no)분류코드 fee_mk Byte t_mk(mk_no)오픈마켓코드 fee_value Single 수수료율
Access Table 구조 t_sp 상품 sp_no 텍스트(50) 오픈마켓 상품코드 sp_mk Byte t_mk(mk_no)오픈마켓 코드 sp_div long t_div(div_no)분류코드 일련번호 sp_name 텍스트 상품명 sp_price Long 판매가 sp_coupon Long 쿠폰가(할인가) sp_HTH 텍스트(50) 택배비관련 sp_st Byte 상태(판매중, 정지)
Access Table 관계 t_mk ------ mk_no mk_name t_sp ------ sp_no sp_mk sp_div sp_name sp_price sp_coupon sp_HTH sp_st t_fee ------ fee_no fee_mk fee_value t_div -------- div_no div_kind div_model div_maker div_i_price div_j_price
화면구성 컴포넌트 속성명 값 ADOConnection1 Name ADOConn ADOQuery1 Name ADOQuery 컴포넌트 속성명 값 ADOConnection1 Name ADOConn ADOQuery1 Name ADOQuery StringGrid1 Name SG1
DB연결1 컴포넌트 ADOConn
DB연결2 컴포넌트 ADOQuery
procedure TForm1.Button1Click(Sender: TObject); var Sqry : String; i,j : integer; begin Sqry := Trim(memo1.Text); ADOQuery.Close; ADOQuery.SQL.Clear; ADOQuery.SQL.Add(Sqry); ADOQuery.Open; ADOQuery.First; if ADOQuery.RecordCount = 0 then exit; SG1.RowCount := ADOQuery.RecordCount + 1; SG1.ColCount := AdoQuery.FieldCount + 1; i := 0; While not ADOQuery.Eof do begin inc(i); SG1.Cells[0, i] := intToStr(i) + ' '; SG1.Cells[1, i] := ADOQuery.Fields[0].AsString; SG1.Cells[2, i] := ADOQuery.Fields[1].AsString; SG1.Cells[3, i] := ADOQuery.Fields[2].AsString; SG1.Cells[4, i] := ADOQuery.Fields[3].AsString; SG1.Cells[5, i] := ADOQuery.Fields[4].AsString; SG1.Cells[6, i] := ADOQuery.Fields[5].AsString; ADOQuery.Next; end;
수정 While not ADOQuery.Eof do begin inc(i); SG1.Cells[0, i] := intToStr(i) + ' '; SG1.Cells[1, i] := ADOQuery.Fields[0].AsString; SG1.Cells[2, i] := ADOQuery.Fields[1].AsString; SG1.Cells[3, i] := ADOQuery.Fields[2].AsString; SG1.Cells[4, i] := ADOQuery.Fields[3].AsString; SG1.Cells[5, i] := ADOQuery.Fields[4].AsString; SG1.Cells[6, i] := ADOQuery.Fields[5].AsString; ADOQuery.Next; end; 수정 For j:= 1 to ADOQuery.FieldCount do SG1.Cells[j, i] := ADOQuery.Fields[j – 1].AsString;
SQL Select Where Order by Group by Having SELECT [DISTINCT | ALL ] { * | 필드명 [AS 별명] … } FROM 테이블명 [ WHERE 조건] [ GROUP BY 필드명 [HAVING 조건] ] [ ORDER BY 필드명 [ASC | DESC ] ]
SQL - Where Select * from t_div 모든행이 출력된다
SQL - Where Where의 사용은 조건에 만족되는 것만 추출 Select * from t_div where div_i_price > 10000
SQL – Order by 정렬 Select * from t_div where div_i_price > 10000 order by div_i_price order by div_i_price desc
SQL-Group by 집단함수 사용 (count, sum, avg, min, max) Select count(div_no) as 수량 from t_div Select count(div_no) as 수량, div_kind as 종류 from t_div group by div_kind
SQL - HAVING Select count(div_no) as 수량, div_kind as 종류 From t_div group by div_kind Having count(div_no) > 4
Joins (조인) 여러 개의 테이블에서 데이터를 모아 처리 외부 조인 수행 (outer join) 왼쪽 조인 수행 (left join) 오른쪽 조인 수행 (right join) 등가 조인 수행(equi-join) 비등가 조인 수행(non-equi-join) 테이블을 자체적으로 조인
조인 (등가 조인) Select * from t_sp Select * from t_mk Select * from t_div Select a.sp_no, b.div_maker, b.div_model, c.mk_name From t_sp a, t_div b, t_mk c Where a.sp_div = b.div_no and a.sp_mk = c.mk_no
조인 (left join) Select * from t_sp Select * from t_mk Select * from t_div Select a.sp_no, b.div_maker, b.div_model From t_sp a left outer join t_div b on(a.sp_div = b.div_no)
조인 (left join) Access에서 에러 Select * from t_sp Select * from t_mk Select * from t_div Select a.sp_no, b.div_maker, b.div_model, c.mk_name From t_sp a left outer join t_div b on(a.sp_div = b.div_no) ledt outer join t_mk c on(a.sp_mk = c.mk_no) Access에서는 Left outer Join을 한번만 사용 할 수 있음