diff --git a/psql-utils.cabal b/psql-utils.cabal
--- a/psql-utils.cabal
+++ b/psql-utils.cabal
@@ -1,5 +1,5 @@
 name:                psql-utils
-version:             0.2.0.0
+version:             0.2.0.1
 synopsis:            PostgreSQL Simple util tools.
 description:         An easy way to use postgresql-simple library.
 homepage:            https://github.com/Lupino/yuntan-common/tree/master/psql-utils#readme
diff --git a/src/Database/PSQL/Types.hs b/src/Database/PSQL/Types.hs
--- a/src/Database/PSQL/Types.hs
+++ b/src/Database/PSQL/Types.hs
@@ -1,10 +1,11 @@
-{-# LANGUAGE DeriveGeneric         #-}
-{-# LANGUAGE FlexibleContexts      #-}
-{-# LANGUAGE FlexibleInstances     #-}
-{-# LANGUAGE GADTs                 #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE OverloadedStrings     #-}
-{-# LANGUAGE TypeFamilies          #-}
+{-# LANGUAGE DeriveGeneric              #-}
+{-# LANGUAGE FlexibleContexts           #-}
+{-# LANGUAGE FlexibleInstances          #-}
+{-# LANGUAGE GADTs                      #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE MultiParamTypeClasses      #-}
+{-# LANGUAGE OverloadedStrings          #-}
+{-# LANGUAGE TypeFamilies               #-}
 
 module Database.PSQL.Types
   ( TablePrefix
@@ -26,6 +27,8 @@
   , otherEnv
 
   , TableName
+  , as
+  , join
   , getTableName
   , Columns
   , createTable
@@ -62,6 +65,8 @@
   , Only (..)
   , SqlError (..)
 
+  , From (..)
+  , Size (..)
   , OrderBy
   , asc
   , desc
@@ -84,16 +89,31 @@
 import           Database.PostgreSQL.Simple.FromRow (FromRow (..), field)
 import           GHC.Generics                       (Generic)
 
-type From = Int64
-type Size = Int64
+newtype From = From { unFrom :: Int64 }
+  deriving (Generic, Eq, Num, Integral, Real, Ord, Enum)
+instance Show From where
+  show = show . unFrom
 
+instance Hashable From
 
+newtype Size = Size {unSize :: Int64}
+  deriving (Generic, Eq, Num, Integral, Real, Ord, Enum)
+
+instance Show Size where
+  show = show . unSize
+
+instance Hashable Size
+
 newtype TablePrefix = TablePrefix String
   deriving (Show)
 
 instance IsString TablePrefix where
   fromString = TablePrefix
 
+getPrefix :: TablePrefix -> String
+getPrefix (TablePrefix "") = ""
+getPrefix (TablePrefix x)  = x ++ "_"
+
 type PSQLPool = Pool Connection
 
 newtype PSQL a = PSQL {unPSQL :: TablePrefix -> Connection -> IO a}
@@ -159,17 +179,28 @@
 simpleEnv :: Pool Connection -> TablePrefix -> u -> SimpleEnv u
 simpleEnv pool prefix env0 = SimpleEnv{pc=pool, pf = prefix, pu = env0}
 
-newtype TableName = TableName String
+data TableName =
+  TableName String
+  | TableNameAs TableName String
+  | TableNameJoin TableName TableName
   deriving (Show)
 
 instance IsString TableName where
   fromString = TableName
 
+as :: TableName -> String -> TableName
+tn `as` asName = TableNameAs tn asName
+
+join :: TableName -> TableName -> TableName
+name1 `join` name2 = TableNameJoin name1 name2
+
 getTableName :: TablePrefix -> TableName -> String
-getTableName (TablePrefix "") (TableName name) =
-  concat ["\"", name, "\"" ]
-getTableName (TablePrefix prefix) (TableName name) =
-  concat ["\"", prefix, "_", name, "\"" ]
+getTableName prefix (TableName name) =
+  concat ["\"", getPrefix prefix, name, "\"" ]
+getTableName prefix (TableNameAs name asName) =
+  concat [ getTableName prefix name, " AS ", asName ]
+getTableName prefix (TableNameJoin name1 name2) =
+  concat [ getTableName prefix name1, ", ", getTableName prefix name2 ]
 
 newtype Column = Column { unColumn :: String }
   deriving (Show)
@@ -204,10 +235,9 @@
   fromString = IndexName
 
 getIndexName :: TablePrefix -> TableName -> IndexName -> String
-getIndexName (TablePrefix "") (TableName tn) (IndexName name) =
-  concat [ "\"", tn, "_", name, "\"" ]
-getIndexName (TablePrefix prefix) (TableName tn) (IndexName name) =
-  concat [ "\"", prefix, "_", tn , "_", name, "\"" ]
+getIndexName prefix (TableName tn) (IndexName name) =
+  concat [ "\"", getPrefix prefix, tn , "_", name, "\"" ]
+getIndexName _ _ _ = error "no implement"
 
 
 createIndex :: Bool -> TableName -> IndexName -> Columns -> PSQL Int64
