补充自增:
Show create table t10 查看table是如何创建的
show session variables like'auto_inc%' 查看会话
设置自增步长以及起始值
set session auto_increment_increment=2; 设置自增步长(会话)
Set global auto_increment_increment ==20;设置全局步长
set session auto_increment_offset=10 设置会话起始值
外键:描述两张表之间的关系 可以节省空间 用于进行约束
create table useinfo(
Uid int auto_increment primary key,
name char(32),
department_id int,
constraint fk_user_depar foreign key(department_id) references department(id) ) engine = innodb default charset =utf8;
# useinfo的 department_id 与department表中的ID进行链接
主键用于保证数据的唯一性,一张表只能有一个主键,但是可以将两个列合起来做一个主键Primary key(nid,pid)
vs:唯一索引(不能重复但是可以为空)
Creat table t1 (
Id int,
Nun int ,
Xx int,
Unique uql (num,xx) # 联合唯一
)
外键的变种
一对一
一对多
多对多
排序 order by
select * from t1 order by id desc 从大到小排列
select* from t1 order by id asc 从小到大排列
select * from t1 order by grade desc limit 2 取前两名
select* from t1 order by age,grade desc 先按年龄排,年龄相同的按年级排
分组 group by
select max(id),part_id from useinfo group by part_id
通过groupby 进行分组 ,可以对结果用 max min count avg进行select
-- 想要找到人数之和大于1的部门
select count(id),part_id from userinfo5 group by part_id having count(id)>1
注:对于聚合函数进行二次筛选必须用having
# 给聚合函数列进行重新改名
select count(id) as sum ,part_id from userinfo5 group by part_id having count(id)>1
连表操作
left join:返回左表中的所有记录,以及右表中匹配的记录。如果左表中的行在右表中没有匹配,则结果中这些行在右表的部分将包含空值(NULL)
Left join student on score.student_id = student.sid
select* from course
-> left join class on class.cid=course.ccid
-> left join teacher on teacher.tid=course.teacher_id
right join 返回右表中的所有记录,以及左表中匹配的记录。这与 LEFT JOIN 相反,即如果右表中的行在左表中没有匹配,则结果中这些行在左表的部分将包含空值(NULL)
inner join:返回两个表中匹配的记录。如果在一个表中有行与另一个表中的行相匹配,则这些行会出现在结果集中。如果某行在左表中有匹配项但在右表中没有,或者反之,则这些行不会出现在结果集中。
nature join:它基于两个表中所有名称相同的列自动创建连接条件。它仅返回两个表中具有相同名称列且列值相等的行
临时表
(select * from score where num>60) as B 这就创建了一个临时表然后就可以在这个表中继续查询
select sid from (select * from score where num>60) as B 前提是临时表中必须要有sid这一列