基本命令
- 新建数据库:
create database 数据库名
- 使用哪个数据库:
use 数据库名称
- 创建表
create table 表名
(
Id int ,
Name varchar(50), --varchar可变长度
sex char(2) --char固定长度
)
- primary key(不能重复,必须有值,可以修改):
int primary key
- 引用外键(外键只能指向主键,外键和主键的数据类型要一致):
foreign key references 表名(字段名)
- 根据条件限制数据录入:
check
- 简单限制:
default(默认), not null(非空), unique(唯一)
- 删除表:
drop table 表名
- 删除指定数据:
delete from 表名 where 字段名='值' and(or) 字段名='值'
- 添加数据:
insert into 表名 values(1, 'xx', 'cc')
- 插入部分字段:
insert into 表名(字段1,字段2) values(字段值1,字段值2)
- 查询数据:
select * from 表名 where 条件
- 查询指定列:
select 字段1, 字段2 from 表名 where 条件
- 取消重复行(完全一样的行):
select distinct 字段 from 表名 where 条件
- 创建(唯一)索引:
create (unique) index index_name on table_name (column_name)
高级命令
- like模糊查询(在where子句中, %:多个字符,_:单个字符):
SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
- in多个查询(在where子句中规定多个值):
SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...)
- order by根据指定的列对结果集进行排序(默认升序asc,降序desc):
SELECT * FROM tables ORDER BY column_name
- max,min,avg,sum,count统计函数:
select count(字段) as 别名 from 表名
- count 统计记录(不为null)数量:
count(*), count(column_name)
- date 时间函数
- group by(结合合计函数,根据一个或多个列对结果集进行分组), having(相当于where,它在聚合之后再过滤)字句用于限制分组显示结果
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
- update 修改字段:
update 表名 set 字段名='新值' where 字段='值'(如果是空值null =换成is)
- delete 删除数据:
delete from 表名 where 条件
- datetime时间函数:
insert into 表名 values(GETDATE())
- as 别名:
SELECT a.title AS atitle,u.title AS utitle FROM article AS a, user AS u where a.uid=u.uid
- alter table已有的表中添加、修改或删除列:
ALTER TABLE table_name ADD(DROP,ALTER COLUMN) column_name datatype
- limit 分页(偏移量是0,-1是最后):
limit 0, -1
- join 连接多个表:
JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
- row_number() 返回排序后数据所在行号(mysql不支持):
select row_number() over(partition by xx order by xx) cc
- where,on,using条件过滤,表关联条件: 表关联条件尽量使用on, 当两个表关联字段名一样时可以使用using
- in, exists, any, all, union常用where子查询条件:
select * from table_name where d_id!=ANY(select d_id from other_table_name);
- 转换时区:
CAST(column_name::timestamp AT TIME ZONE 'PST' as Date) as date
子查询, 别名, 临时表
def self.get_clubs_photo_walls
PhotoWall.select("photo_walls.*, (case when tmp_club_users.members is null then 0 else tmp_club_users.members end) members")
.joins("inner join clubs on photo_walls.photo_wall_able_id = clubs.id and photo_walls.photo_wall_able_type='Club' ")
.joins("left join (select count(*) members,club_id from club_users group by club_id ) tmp_club_users on tmp_club_users.club_id = photo_walls.photo_wall_able_id")
.order("photo_walls.pos asc, members desc")
end