1.创建模式
一个数据库中可以有多个模式,在一个模式下可以有多个表
在某一模式下创建表时,使用如下语句:
create table schema_name.table_name();
创建表时,如果没有指定是那个模式下的表,那就采用默认的public
2. show search_path 显示当前所在的模式
set search_path='schema_name'; 修改所在的模式
起到一定的隔作用
3.增加索引
create index index_name on table_name(column_name);
修改索引的名字
alter index old_index_name rename to new_index_name;
4.shell 的搜索路径是基于不同的模式,指定不同的模式查看对应式下的数据库。
5.select语句
select *
from table 1,table2
where:第一步筛选条件
group :将得到的结果分组
having :对分组后每个组内的数据进行条件筛选
order by :最后执行
6.多表连接
inner join on:只保留需要的数据,左侧有右侧没有或是左侧没有右侧有的数据都不会保留,两个表需要有相同的列名
left join on:左表的数据全部保留,左外连接
right join on: 右表的数据全部保留,右外连接
full join on :全部保留,全连接
crosss join: 笛卡儿积,无条件连接
7。实例
create table a(
id integer,
name text);
CREATE TABLE
create table b(
name text,
height integer,
salary integer);
CREATE TABLE
insert into a values(1,'liuliu'),(2,'yolanda'),(3,'jack');
insert into b values('kate',166,8000),('liuliu',176,2000),('yolanda',178,3000);
笛卡儿连接:
pglearn=# select * from a cross join b;
id | name | name | height | salary
----+---------+---------+--------+--------
1 | liuliu | kate | 166 | 8000
1 | liuliu | liuliu | 176 | 2000
1 | liuliu | yolanda | 178 | 3000
2 | yolanda | kate | 166 | 8000
2 | yolanda | liuliu | 176 | 2000
2 | yolanda | yolanda | 178 | 3000
3 | jack | kate | 166 | 8000
3 | jack | liuliu | 176 | 2000
3 | jack | yolanda | 178 | 3000
(9 行记录)
全外连接:
pglearn=# select * from a full join b on a.name=b.name;
id | name | name | height | salary
----+---------+---------+--------+--------
3 | jack | | |
| | kate | 166 | 8000
1 | liuliu | liuliu | 176 | 2000
2 | yolanda | yolanda | 178 | 3000
(4 行记录)
pglearn=# select * from a full join b using(name); 也会去重复列
name | id | height | salary
---------+----+--------+--------
jack | 3 | |
kate | | 166 | 8000
liuliu | 1 | 176 | 2000
yolanda | 2 | 178 | 3000
(4 行记录)
自然连接:去重复列
pglearn=# select * from a natural join b;
name | id | height | salary
---------+----+--------+--------
liuliu | 1 | 176 | 2000
yolanda | 2 | 178 | 3000(2 行记录)
左外连接:
pglearn=# select * from a left join b on a.name=b.name;
id | name | name | height | salary
----+---------+---------+--------+--------
3 | jack | | |
1 | liuliu | liuliu | 176 | 2000
2 | yolanda | yolanda | 178 | 3000
(3 行记录)
右外连接:
pglearn=# select * from a right join b on a.name=b.name;
id | name | name | height | salary
----+---------+---------+--------+--------
| | kate | 166 | 8000
1 | liuliu | liuliu | 176 | 2000
2 | yolanda | yolanda | 178 | 3000
(3 行记录)
内连接:
pglearn=# select * from a inner join b on a.name=b.name;
id | name | name | height | salary
----+---------+---------+--------+--------
1 | liuliu | liuliu | 176 | 2000
2 | yolanda | yolanda | 178 | 3000
(2 行记录)
内连接不去重复列,等值连接会去掉重复的列