假設我們今天要幫一家貓保母公司建立資料庫,並開兩張表分別紀錄客戶與貓咪
參考資料1:[SQL語法查詢入門.Anthony DeBarros著]
參考資料2:PostgreSQL正體中文使用手冊
環境:Macbook pro, PostgreSQL, TablePlus
psql
,我們可以輸入psql --version
來查詢本機現行版本createdb 資料庫名稱
來件建立資料庫,根據今天的故事我們將資料庫命名為:cats,並在終端機輸入createdb cats
psql 資料庫名稱
,也就是上一步的createdb cats
來進入這個資料庫,此外當然也可以使用圖形化介面,像我個人就慣用UI相當良好的TablePlus來查看與操作資料庫(ubuntu使用者可以使用可愛DBeaver)在終端機中輸入
psql 資料庫名稱
後,就可以進入該資料庫
TablePlus畫面
欄位 | 資料類型 | 約束條件 |
---|---|---|
id | serial | primary key |
name | text | not null |
gender | gender | not null |
其中gender需要自定義(男, 女, 非二元性別),所以開資料表前多做一個動作:create type gender as enum('male', 'female', 'non_binary');
建好自定義資料類型後,就可以建立表格拉,輸入: create table clients ( id serial primary key, name text not null, gender gender not null );
透過TablePlus看資料表是否建立成功
也可以在終端機輸入\d+ clients
來檢查
欄位 | 資料類型 | 約束條件 |
---|---|---|
id | serial | primary key |
name | text | not null |
species | text | not null |
owner_id | int | not null |
create table cats (
id serial primary key, //主鍵
name text not null, //寵物名
species text not null, //品種
owner_id int not null, //主人id
constraint fk_owner //設定clients表中的id為cats表中的外部鍵:owner_id
foreign key (owner_id)
references clients (id) );
create index pets_owner_id_idx on pets (owner_id);
insert into clients (name, gender)
values
('John Doe', 'male'),
('Jane Smith', 'female'),
('Marion Green', 'non_binary');
insert into cats (name, species, owner_id)
values
('Rex', 'American Bobtail', 1),
('Caesar', 'Birman', 1),
('Simba', 'British Shorthair', 2);
select * from clients;
select * from cats;
那麼要是我們不知道Jane Smith的ID,只知道她的名字。這時候使用INNER JOIN的時機就來囉。
join
而不用寫inner join
select * from cats
join clients on clients.id = cats.owner_id
where clients.name = 'Jane Smith';
select * from cats
join clients as c on c.id = cats.owner_id //AS 可以省略
where c.name = 'Jane Smith';
ALTER
來修改ALTER TABLE cats RENAME COLUMN species TO breeds;
文過飾非大成功!
ps. 美國鮑伯尾?XD
英短好可愛:3