Manuel Soriano ���ڿ��� �����ϱ� ����ù��° �ܰ��Լ����� Review��� |
SQL���� - PostgreSQL ��ġ���: �� ª�� �ڽ��� �� �κ����� �̷������. ù��° �κп����� PostgreSQL�̶�� ���� �����ͺ��̽� ������ �̿��Ͽ� SQL�� ���� �Ϲ����� ������ �����Ѵ�. �ι�° �κп����� SQL ���ɾ ���� ���� �ڼ��ϰ� ������ �� ���̴�. ���������� ����° �κп����� SQL ���ɾ��� ���� �ɼǵ�� �츮 ������Ʈ�� ���õɸ��� PostgreSQL���� �Լ����� �˾ƺ��� ���������� ��� �͵��� �ϳ��� ��� ���� C ���α��� ���캼 ���̴�. ���� �������� ������ ���п��� �츮�� �����ͺ��̽�(DB)�� ���ؼ��� ����ϰڴ�. �ٸ� ������ �ڷᱸ���� ������ �װ͵鿡 ���� ���� �� �ڽ��� ������ ��� ���̴�.�ֱٱ��� ������ �����ۿ� ������ �����ͺ��̽� ������ �� ���ǵ� ��ũ�� ���� ���������� ������ ��ü���� ���� �̷��������. �̷��� ������ ������ �ַ� ���� �ӵ��鿡�� ������ ���ϰ� �־����� Ŀ�ٶ� ������ �ִ�. ���� ��� ������ ���� ���� �����ϴ� ��ũ�� ���ؼ��� ������ ������ �� �ְ�, country -> states -> counties�Ʒ��� ���̴� �� ���� ����. country -> counties"->"�� ��ũ�� �ǹ��Ѵ�. ���� �ι�°�� ���� ���踦 ������� ������ �ٽ� �����ϰ� �ٽ� �������ؾ� �� ���̴�. ������, ������ DB������ �پ��� ��ü�� ������ ����� �����̸� DB ������ �����ϰ� �װ��� �ٽ� �������ؾ߸� ������ �� �ִ�. ������ �����ͺ��̽��� ���Ŀ� �ִ� �⺻���� ���̵��� ������ ��ũ�� �ʿ�� ���� �ʰ� ��ſ� �ϳ��� �������� �ٸ� �Ͱ� ������ �� �ֵ��� �����ڸ� �̿��Ͽ� ��Ȯ�ϰ� ���� ������ ������ �����Ű�� ���̴�. ���� ���� �������� �ƽ��Ǹ��̶� �Ծ�߰ڱ���. :) ������ �����ͺ��̽� �Ŵ����� ��ü���� ������ ���� �������� ���� ������ ��ũ�� �ʿ�� ���� �ʴ´�. ��ſ� ������ ����μ� �Ͻ����� ���踦 ����� ���ȿ� �̷��� ��ü�� �����ϰ� �Ǵ� ���� �ڵ带 ����Ѵ�. ���� ������ �ڵ��� ���̴�. ���� ��� �� ��ȭ��ȣ�� 1234567 �� �ƴ϶� 34 6 1234567 �̴�. ��Ȯ�ϰ� �� ��ȭ��ȣ�� country code(34), state code(6) ���� ������ device number (1234567)�� ���еȴ�.
��� ����� ���� �����ϴ� ù��° �⺻������ �����غ���.
��� county���� state�� country�� ���ϴ� �ڵ带 ���ϰ� �ִ�. state���� ��� county�� ã�� ���� country �ڵ�� county�ڵ带 ���� county�� state�� ������Ų��. country���� ��� county�� ã�� ���� country �ڵ忡 ���� county�� country�� ������Ų��. �̷��� ������� �Ͻ����̸� ���ǵǴ� ���ȿ��� �����Ѵ�. ���� ���̰����ϰ� �����ϱ� ��������� ó���� �� ������� �ڵ�� �Ҽӿ� ���� ������ ��Ȯ�����⸦ �ٶ���. DB �Ŵ����� ù��° ���Ǹ� ������ DB �Ŵ����� ��� ����� ������ �����۵��� �����Ѵ�. ������ � ������ ���� �ް� �ɱ�? �װ��� country�� county �������� �����̸� ��� county�� ���� ������ country �������� �ް� �� ���̴�. ù��° ���ǿ��� �̸��� ���� ���ο� ��ü�� ���ڱ� �����Ǹ� �װ��� country�� county�� ������ �����Ѵ�. �̷��� ���ο� ��ü�� �ٽ� ���ǰ� ������ ���� ������� �ȴ�. ���� �츮�� �������� ������ "����"�̶�� �ҷ���. ������ �������ͷ� �̷���� ������ ������ �������ʹ� "�ʵ�"�� ������ �ִ�. ������ �����ͺ��̽������� "����"�� ���̺��̸� ���̺��� ��(row)�� ������ �ǰ�, ������ ��� column�� �ִ�. �̰��� ���� �ణ�� ǥ������ ��ȭ�� ���̴�. ;-) ��� DB �Ŵ������� ���� ���μ� SQL�� ����Ѵٴ� ���� ���ϰ� �ʹ�. ������ �̰��� Ư���� ����� ���̴�. SQL���� ���� ������ �����ͺ��̽� �Ŵ����� ���������� ������ �ִ� Ư�� ���� �ϳ��̴�. SQL�� ������ �˾ƺ��� ���� �츮�� ������ �����ͺ��̽� �Ŵ����� PostgreSQL�� ����� ���̴�. SQL ��Ģ�� ������ ���յ����� ������ �츮�� �������� ����� �� �� �ְ�, ���� �����̵��� �۾����� �˸´� �ſ� ���� �����ͺ��̽� �Ŵ����̴�. �� ���� ������ SQL���� �����Ͽ� ��ġ ������ �����ϰԸ� ������ ���ڴ�. �켱 www.postgresql.org�κ��� �ʿ��� �ҽ��� �ٿ�ε� ���� ����. ���� ��� ������ ��ġ�鵵 �ٿ�ε� �´�. �ҽ����� ������ ���丮�� ������ Ǯ��(tar zxvf), cd postgresql-6.3 cd src ./configure --prefix=/the/desired/path make all >& make.log & tail -f make.log export PATH=$PATH:/the/desired/path/pgsql/bin export MANPATH=$MANPATH:/the/desired/path/pgsql/man export PGLIB=/the/desired/path/pgsql/lib export PGDATA=/the/desired/path/pgsql/data initdb createdb test psql test Welcome to the POSTGRESQL interactive sql monitor: Please read the file COPYRIGHT for copyright terms of POSTGRESQL type \? for help on slash commands type \q to quit type \g or terminate with semicolon to execute query You are currently connected to the database: postgres test=>�̰��� postgres�� ������Ʈ�̴�. ���� ���ɾ �����ų �� �ִ�. mytest=>create table mytest (field1 varchar(10)); CREATE mytest=>insert into mytest values ('hello'); INSERT number 1 mytest=>commit work; NOTICE:EndTransactionBlock and not inprogress/abort state END mytest=>select * from mytest; field1 ------ hello (1 row) mytest=>drop table mytest; DROP mytest=>Ctrl-d�̷��� �ϸ� SQL �ֿܼ��� ����������. Postgres95�� �����ϰ� ��ġ���� ������ ����ٸ� �������� ��Ʈ���丮�� �ִ� INSTALL ������ �����ϱ� �ٶ���. �� �ٸ� �鿡 ���� ����غ���. ������ �����ͺ��̽� ������ �Ϲ������� ������ ���� �κе�� �̷������.
ù��° �ܰ��������δ� ���ݱ��� ����� ������ ������ �Բ� �����ϰڴ�. �� ���� ���̺�(�Ǵ� ����)�� ������.
File: countries.sql create table countries (cod_country integer, name varchar(30)); insert into countries values (1, 'country 1'); insert into countries values (2, 'country 2'); insert into countries values (3, 'country 3'); commit work; File: states.sql create table states (cod_State int, cod_country int, nam_State varchar(30)); insert into states values (1, 1, 'State 1, Country 1'); insert into states values (2, 1, 'State 2, Country 1'); insert into states values (1, 2, 'State 1, Country 2'); insert into states values (2, 2, 'State 2, Country 2'); insert into states values (1, 3, 'State 1, Country 3'); insert into states values (2, 3, 'State 2, Country 3'); commit work; File: counties.sql create table counties (cod_country int, cod_state int, cod_county int, nam_county varchar(60)); insert into counties values (1, 1, 1, 'County 1, State 1, Country 1'); insert into counties values (2, 1, 1, 'County 2, State 1, Country 1'); insert into counties values (3, 1, 1, 'County 3, State 1, Country 1'); insert into counties values (1, 2, 1, 'County 1, State 2, Country 1'); insert into counties values (2, 2, 1, 'County 2, State 2, Country 1'); insert into counties values (3, 2, 1, 'County 3, State 2, Country 1'); insert into counties values (1, 3, 1, 'County 1, State 3, Country 1'); insert into counties values (2, 3, 1, 'County 2, State 3, Country 1'); insert into counties values (3, 3, 1, 'County 3, State 3, Country 1'); insert into counties values (1, 1, 2, 'County 1, State 1, Country 2'); insert into counties values (2, 1, 2, 'County 2, State 1, Country 2'); insert into counties values (3, 1, 2, 'County 3, State 1, Country 2'); insert into counties values (1, 2, 2, 'County 1, State 2, Country 2'); insert into counties values (2, 2, 2, 'County 2, State 2, Country 2'); insert into counties values (3, 2, 2, 'County 3, State 2, Country 2'); insert into counties values (1, 3, 2, 'County 1, State 3, Country 2'); insert into counties values (2, 3, 2, 'County 2, State 3, Country 2'); insert into counties values (3, 3, 2, 'County 3, State 3, Country 2'); insert into counties values (1, 1, 3, 'County 1, State 1, Country 3'); insert into counties values (2, 1, 3, 'County 2, State 1, Country 3'); insert into counties values (3, 1, 3, 'County 3, State 1, Country 3'); insert into counties values (1, 2, 3, 'County 1, State 2, Country 3'); insert into counties values (2, 2, 3, 'County 2, State 2, Country 3'); insert into counties values (3, 2, 3, 'County 3, State 2, Country 3'); insert into counties values (1, 3, 3, 'County 1, State 3, Country 3'); insert into counties values (2, 3, 3, 'County 2, State 3, Country 3'); insert into counties values (3, 3, 3, 'County 3, State 3, Country 3'); commit work; SQL ���ɾ�� ������� ������ pgsql���� ������ ���� ������� ����� �� �ִ�. \i file_name ���� �����ϰ� cut & paste����� �̿��Ͽ� ���ɾ ������� ���� �ִ�. ���� � county���� �ִ����� �˾ƺ���. manu=> select * from counties; cod_country|cod_state|cod_county|nam_county -----------+---------+----------+---------------------------- 1| 1| 1|County 1, State 1, Country 1 2| 1| 1|County 2, State 1, Country 1 3| 1| 1|County 3, State 1, Country 1 1| 2| 1|County 1, State 2, Country 1 2| 2| 1|County 2, State 2, Country 1 3| 2| 1|County 3, State 2, Country 1 1| 3| 1|County 1, State 3, Country 1 2| 3| 1|County 2, State 3, Country 1 3| 3| 1|County 3, State 3, Country 1 1| 1| 2|County 1, State 1, Country 2 2| 1| 2|County 2, State 1, Country 2 3| 1| 2|County 3, State 1, Country 2 1| 2| 2|County 1, State 2, Country 2 2| 2| 2|County 2, State 2, Country 2 3| 2| 2|County 3, State 2, Country 2 1| 3| 2|County 1, State 3, Country 2 2| 3| 2|County 2, State 3, Country 2 3| 3| 2|County 3, State 3, Country 2 1| 1| 3|County 1, State 1, Country 3 2| 1| 3|County 2, State 1, Country 3 3| 1| 3|County 3, State 1, Country 3 1| 2| 3|County 1, State 2, Country 3 2| 2| 3|County 2, State 2, Country 3 3| 2| 3|County 3, State 2, Country 3 1| 3| 3|County 1, State 3, Country 3 2| 3| 3|County 2, State 3, Country 3 3| 3| 3|County 3, State 3, Country 3 (27 rows) manu=>27���� ���� ��µǾ����� pgsql�� ���� ���ɾ ��ٸ��� �ȴ�. ������ ���� ������ ��������. manu=> select * from countries, states; cod_country|name |cod_state|cod_country|nam_state -----------+---------+---------+-----------+------------------ 1|country 1| 1| 1|State 1, Country 1 2|country 2| 1| 1|State 1, Country 1 3|country 3| 1| 1|State 1, Country 1 1|country 1| 2| 1|State 2, Country 1 2|country 2| 2| 1|State 2, Country 1 3|country 3| 2| 1|State 2, Country 1 1|country 1| 1| 2|State 1, Country 2 2|country 2| 1| 2|State 1, Country 2 3|country 3| 1| 2|State 1, Country 2 1|country 1| 2| 2|State 2, Country 2 2|country 2| 2| 2|State 2, Country 2 3|country 3| 2| 2|State 2, Country 2 1|country 1| 1| 3|State 1, Country 3 2|country 2| 1| 3|State 1, Country 3 3|country 3| 1| 3|State 1, Country 3 1|country 1| 2| 3|State 2, Country 3 2|country 2| 2| 3|State 2, Country 3 3|country 3| 2| 3|State 2, Country 3 (18 rows)18�� ??? �츮�� 3���� country�� 6���� state�� �Է��߰�, ��� �� ���� country�� �ǹ��Ѵ�. ��� 18���� ���� ���� �� ������? ������ ���ɾ�� �� ���̺� ������ ���Ͽ��� �����ߴ�. �츮�� country�� ���̺��� county�� ���̺��� �������״�. union exclusion rule�� ���� ���������� �ʾұ� ������ pgsql�� ��� state�� ���õ� ������ country�� ��� (���� ��� country�� 3 ���ϱ� state�� 6�� �ϸ� 18���� �ȴ�) �����ش�. �̷��� ����� �����ϰ� ��������̰� ������� ���̴�. ������ ���� �� �־��ٸ� �� ������ ���̴�. manu=> select * from countries, states manu-> where countries.cod_country = states.cod_country; cod_country|name |cod_state|cod_country|nam_state -----------+---------+---------+-----------+------------------ 1|country 1| 1| 1|State 1, Country 1 1|country 1| 2| 1|State 2, Country 1 2|country 2| 1| 2|State 1, Country 2 2|country 2| 2| 2|State 2, Country 2 3|country 3| 1| 3|State 1, Country 3 3|country 3| 2| 3|State 2, Country 3 (6 rows)���� ���� ���� ���δ�. 6���� ��, ���� ������? ����. 6���� county�� ������ ��� county���� country �ȿ� �ִ�. country�� county�� �ڰ��� �ֹǷ� county�� ������ �Ȱ��� ���� ���� ����� �� ���� �մ��ϴ�. �츮�� ��� country�� ���̺��� country �ڵ带 ���� county�� ���̺��� �������״�. country�� �ڵ带 ���ϸ�, county���� ���� ���� �ִ� ������ �ڵ带 ���Ѵٴ� ���� �������. �� countries.cod_country = states.cod_country �ΰ� ? country�� ���̺� ���� country �ڵ�� cod_country�̸� county�� ���̺������� ���������̴�. ���Ƿ� cod_country = cod_country�� ��������̴�. ���������ʹ� �� �߿� ��� ���� ������� �������� ���ϰ� ������ ������ ���̴�. select * from countries, states where cod_country = cod_country; ERROR: Column cod_country is ambiguous��������, �츮�� �÷��鿡 ���ؼ� aliasis�� ����� �� �ִ�. manu=> select * from countries a, states b manu-> where a.cod_country = b.cod_country; cod_country|name |cod_state|cod_country|nam_state -----------+---------+---------+-----------+------------------ 1|country 1| 1| 1|State 1, Country 1 1|country 1| 2| 1|State 2, Country 1 2|country 2| 1| 2|State 1, Country 2 2|country 2| 2| 2|State 2, Country 2 3|country 3| 1| 3|State 1, Country 3 3|country 3| 2| 3|State 2, Country 3 (6 rows)�Ŵ����� �����ϴ� ������?: cod_country, name, cod_state, cod_country y nam_state. "select * from countries, states"��� ���Ǹ� �ߴµ� ���ϵ�ī�� *�� ��� ���� �ǹ��ϹǷ� �츮�� countries�� �ش��ϴ� �� ���� �÷��� counties�� �ش��ϴ� �� ���� �÷��� ��� �ȴ�. ���� �� �� ü������ ������. manu=> select a.cod_country, cod_state, name, nam_state manu-> from countries a, states b manu-> where a.cod_country = b.cod_country; cod_country|cod_state|name |nam_state -----------+---------+---------+------------------ 1| 1|country 1|State 1, Country 1 1| 2|country 1|State 2, Country 1 2| 1|country 2|State 1, Country 2 2| 2|country 2|State 2, Country 2 3| 1|country 3|State 1, Country 3 3| 2|country 3|State 2, Country 3 (6 rows)������ ���ɾ�� country code, state code, country�� state �� �̸����� �����ϰ� �䱸�ߴ�. a.cod_country�� ���� � �÷� ���� ���̺��� �����߰�, nam_state�� ���� � �÷����� �������� �ʾҴµ�, �̴� nam_state�� states���� �����ϴ� �ݸ� cod_country�� �� ���̺� ��ο� �����ϱ� �����̴�. ������ �÷� �̸��� Ư���� ������(qualifier)�� �ʿ�� ���� �ʴ´�. ���� �� �����ϰ� ������: manu=> select a.cod_country, cod_state, name, nam_state manu-> from countries a, states b manu-> where a.cod_country = b.cod_country manu-> and a.cod_country = 3; cod_country|cod_state|name |nam_state -----------+---------+---------+------------------ 3| 1|country 3|State 1, Country 3 3| 2|country 3|State 2, Country 3 (2 rows)�̹����� country ��ȣ�� 3�� ���� �˻��ϵ��� �����ߴ�. �Լ��� ���� ���� �Լ��� count()�� ���� ����:select count(*) from states; count ----- 27 (1 row)���� ������ county�� ���̺��� ��� �ִ� ���� ���� �����Ѵ�: manu=> select cod_country, count(*) from states manu-> group by cod_country; cod_country|count -----------+----- 1| 2 2| 2 3| 2 (3 rows)���� ���� ���� country code�� ���� ���� ���� �����ش�. ���� �ϱ� ���ؼ� cod_country�� ����� ���̴�. ������ ���� �� ���� ���� �ִ�: manu=> select name, count(*) from countries a, states b manu-> where a.cod_country = b.cod_country manu-> group by name; name |count ---------+----- country 1| 2 country 2| 2 country 3| 2 (3 rows)�Ȱ��� �� ���� ���� ��µǾ����� �̹����� ���ϵ� ������ ���� ��Ȯ�ϴ�. ���ݱ����� ���и� �̾߱��ߴ�. ���־��̾��� ������ :-) ���� Review���ݱ��� SQL�� ��� �⺻���� ������� �˾ƺ��Ҵ�. ���� �ǹ��ִ� ���� SQL ��ü�� ���信 ���� ���̴�. �츮�� ���� �� �̻� ����ȭ�� ������ �ٷ�� ���� �ƴ϶� ������ ��ü�� �ٷ��. ������ ��ü�� �����ͺ��̽��� ������ �����̴�. �ܼ�ȭ��Ų�ٸ� "������ ��� �� �߿��� ���� ���ϵ� �κ�"�̶�� ������ �� ���� ���̴�.
�Ʒ��� ���� ���ɾ���� �˾ƺ��Ҵ�:
transaction�� ������ ������ ���� ��쿡 ������ ���·� �ǵ����شٴ� ������ �ſ� �߿��ϴ�. ������ ���� �۾��� �� ����. �켱 "rollback work" �������� ������ ��� transaction�� ����: manu=> select * from countries; cod_country|name -----------+--------- 1|country 1 2|country 2 3|country 3 (3 rows)�� ���� ���� �ִ�. begin work;transaction�� �����Ѵ�. insert into countries values (5, 'Country Not True');���� �ϳ� �����Ͽ���. ���� ��� ���� �ִٴ� ���� Ȯ���غ���. manu=> select * from countries; cod_country|name -----------+---------------- 1|country 1 2|country 2 3|country 3 5|Country Not True (4 rows)���ôٽ��� ��� ���� �����Ѵ�. ��������, rollback work;��� �ϸ� transaction�� ����ϰ� �ȴ�. manu=> select * from countries; cod_country|name -----------+--------- 1|country 1 2|country 2 3|country 3 (3 rows)���� ������ Ȯ���� ���� ������ 3���� ������ �ǵ��ư����� �� �� �ִ�.
������� �길�ϱ� ������, SQL�� ������ �����ͺ��̽��� ��ġ � ���� �˾ƺ��Ҵ�.SQL�� �츮�� �ڷ��� ����� ���� �����ϸ� �츮�� �ʿ信 ���� ������ �� �ְ� �� �ش�. ���ݱ��� ���캻 ���� ���� � ����� �̿� ���� ���� �� �ִ�: application �ȿ��� SQL�� ��� �� ���ΰ�? ������ ���� �� ���� �ϳ��� �˰� �� ���̴�. ����° �ۿ��� �츮�� SQL�� ����ϴ� ª�� C ���ø����̼��� ������ ���̴�. �ѱ� ����: ��ȯ�� |
�� ������Ʈ�� Miguel Angel Sepulveda���� ���� �����˴ϴ�. © Manuel Soriano 1998 LinuxFocus 1998 |