mysql 完整性概念_mysql基础知识

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 主表名称(主表列名称也就是主键名称)

级联更新操作alter table userinfo add constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称也就是主键名称) ON update CASCADE ON DELETE CASCADE; -- ON UPDATE CASCADE 级联更新操作 ON DELETE CASCADE 级联删除操作

多表查询

内连接

隐式内连接查询:select * from emp,dept where emp.id=dept.rid -- emp.id 为外键 dept.rid 为主键

select

t1.name,

t1.gender,

t2.name

from

emp t1,

dept t2

where

t1.id=t2.rid;

显示内连接select * from emp inner join dept on emp.id=dept.rid;

select * from emp join dept on emp.id=dept.rid; -- inner 是可选的

内连接查询:1. 从哪些表中查询数据

2. 条件是什么?

3. 查询哪些字段

外连接查询左外连接:select * from emp left [outer] join dept on emp.id=dept.rid; -- [outer] 是可选的

-- 左外连接查询的是左表以及其交集部分右外连接select * from emp right [[outer]] join dept on emp.id=dept.rid;

-- 右外连接查询的是右表以及其交集部分子查询:嵌套查询-- 获取最大年龄的那一条信息

select Max(age) from userinfo; -- 查出结果集 例如:56

select * from userinfo where age=56;

select * from userinfo where age=( select Max(age) from userinfo );子查询的结果是单行单列的。子查询是可以作为条件,使用运算符判断-- 查询员工 工资小于平均工资的人

select * from userinfo where salary < ( select avg(salary) from userinfo )子查询的结果是单行多列的-- 查询某两个部门的全部员工信息

select * from userinfo where rid in (select id from userinfo where name="某个部门名称" or name="另一个部门名称";);子查询的结果是多行多列的-- 把子查询当作一个虚拟表

select * from dept t1 ,(select * from emp where join_date>"2011-11-11") t2 where t1.id=t2.rid;

更新完毕

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值