共计 2451 个字符,预计需要花费 7 分钟才能阅读完成。
mysql 表 查问语句
DQL:查问语句
排序查问
- 语法:order by 子句
-
排序形式:
- ASC : 升序,默认的
- DESC : 降序。
-
留神:
-
如果有多个排序条件,则以后边得条件值一样时,才会判断第二条件
SELECT * from userinfo ORDER BY age ASC,id DESC;
-
聚合函数:
将一列数据作为一个整体,进行纵向计算
-
count:计算个数
select count(age) from userinfo; -- 返回个数 这种形式是不会把 null 计算在内得 select count(ifnull(age,0)) from userinfo; -- 判断是否是 null 是的话 按 0 来计算 select count(8) from userinfo;-- 查问记录(不举荐)
-
max:计算最大值
select Max(age) from userinfo; -- 计算表中年龄最大得
-
min:计算最小值
select Min(age) from userinfo; -- 计算表中年龄最小的
-
sum:计算和
select sum(age) from userinfo; -- 计算表中所有年龄之和
-
avg:计算平均值
select avg(age) from userinfo; -- 计算表中平均年龄
分组查问:
- 语法:group by 分组字段;
-
留神:
- 分组之后查问的字段:分组字段,聚合函数
-
where 和 having 的区别?
- where 在分组之前进行限定,如不符合条件,则不参加分组。having 在分组之后进行限定,如果不满足后果,则不会被查问进去;
- where 条件前面是不能够跟着聚合函数的,having 能够进行聚合函数的判断
-
实现语句
-- 依据性别来进行分组,并且查出每个组的平均年龄 select sex,avg(age) from userinfo group by sex; -- 依据性别来进行分组,查出每个组的平均年龄,并且查出参加平均年龄的人数 select sex,avg(age),count(age) from userinfo group by sex; -- 依据性别来进行分组,查出每个组的平均年龄,并且查出参加平均年龄的人数 并且过滤掉大于 20 岁的人 select sex,avg(age),count(age) from userinfo where age>20 group by sex; -- 同上 并且过滤参加人数小于 2 的组 select sex,avg(age),count(age) from userinfo where age>20 group by sex having count(age)<2;
分页查问:
- 语法:limit 开始的索引,每页查问条数
-
公式:(开始的索引 -1)* 每页查问条数
select * from userinfo limit 0,3; -- 第一页 select * from userinfo limit 3,3; -- 第二页 select * from userinfo limit 6,3; -- 第三页
- limit 只实用于 MySql; 每个数据库都有自有的分页形式
束缚:
-
概念:对表中的数据进行限定,保障表中数据的正确性,有效性和完整性;
-
分类:
- 主键束缚:primary key
- 非空束缚:not null
- 惟一束缚:unique
- 外键束缚
-
非空束缚
-
创立表时增加束缚
CREATE TABLE userinfo( id:INT, name:VARCHAR(20) not null -- name 为非空字段 )
-
创立表实现后在给表中字段增加非空字段
ALTER TABLE userinfo MODIFY NAME VARCHAR(20) NOT NULL;
-
删除非空字段
ALTER TABLE userinfo MODIFY NAME VARCHAR(20);
-
-
惟一束缚:unique,值不能反复
-
创立表时,增加惟一束缚
CREATE TABLE userinfo( id INT, name:VARCHAR(20) UNIQUE )
-
创立实现后增加惟一束缚 (留神:惟一束缚字段能够有多个 null)
ALTER TABLE userinfo MODIFY NAME VARCHAR(20) UNIQUE;
-
删除惟一束缚
ALTER TABLE userinfo MODIFY NAME VARCHAR(20) -- 这种写法时谬误的 ALTER TABLE userinfo DROP INDEX name -- 这个是正确的
-
-
主键束缚 primary key
-
留神
- 含意:非空且惟一
- 一张表只能有一个主键
- 主键就是表中记录的惟一标识
-
在创立表时增加主键束缚
CREATE TABLE userinfo( id INT PRIMARY KEY, -- 增加主键 name VARCHAR(20) )
-
创立表实现后增加主键
ALTER TABLE userinfo MODIFY id INT PRIMARY KEY;
-
删除主键
ALTER TABLE userinfo MODIFY id int; -- 这种写法时谬误的 ALTER TABLE userinfo DROP primary key; -- 这个是正确的
-
主动增长
-
概念:如果某一列是 int 类型的,应用 auto_increment 能够实现主动增长
CREATE TABLE userinfo( id INT PRIMARY KEY AUTO_INCREMENT, -- 增加主动增长 name VARCHAR(20) ) -- 留神:主动增长只跟上一条有关系 例如 上一条是 100 下一条就是 101 -- 删除主动增长 ALTER TABLE userinfo MODIFY id int; ALTER TABLE userinfo MODIFY id int auto_increment;
-
-
-
外键束缚 foreign key, 让表与表产生关系,从而保证数据的正确性
-
语法
create table userinfo ( .... 外键列,constraint 外键名称 foreign key (外键列名称) references 主表名称 (主表列名称也就是主键名称) )
-
删除外键
alter table userinfo drop foreign key 外键列名称
-
创立表之后增加外键
alter table userinfo add constraint 外键名称 foreign key (外键列名称) references 主表名称 (主表列名称也就是主键名称)
- 级联操作
-
正文完