select *
// sql
select * from customer;
// slick
customer.result
where
// sql
select * from customer where age > 18
// slick
customer.filter(_.age > 18).result
order by
// sql
select * from customer order by age asc;
// slick
customer.sortBy(_.age).result;
max
// sql
select max(age) from customer;
// slick
customer.max(_.age).max.result;
group by
// sql
select address, name from customer group by addresss;
// slick
customer.groupBy(c => c.address)
.map( case (address, group) => (address, group))
.result
having
// sql
select address from customer group by address having avg(age) > 20
// slick
customer.groupBy(c => c.address)
.map{ case(address, group) => (address, group.map(_.age).avg)}
.filter{ case(address, avgAge) => avgAge > 50}
.map(_._1)
.result
等值连接
// sql
select c.address, a.city from customer c , address a where a.address = c.id;
// slick
for{
c <- tables.customer
a <- tables.address if c.address === a.id
} yield(c.address, a.city)
inner join
// sql
select c.name. a.city from customer c join address a on c.address = a.id;
// slick
(customer join address on (_.address === _.id))
.map{case(c, a) => (c.name, a.city)}
.result;
left/right/full join
// sql
select c.name, a.city from address a left join customer c on c.address = a.id
// slick
(address joinLeft customer on (_.id === _.address))
.map{ case(a, c) => (a.map(_.name),a.city)}
.result;