数据库
什么是数据库?
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:
-
1.数据以表格的形式出现
-
2.每行为各种记录名称
-
3.每列为记录名称所对应的数据域
-
4.许多的行和列组成一张表单
-
5.若干的表单组成database
操作数据库
创建数据库
create database <数据库名>
显示数据库
show databases (注意:最后有个s)
删除数据库
drop database <数据库名>
查看当前库中的表
show tables
查看其他库中的表
show tables from <database name>;
操作表
创建表
create table student( id int PRIMARY KEY auto_increment, name varchar(32) not null );
删除表
DROP TABLE 表名
数据表的结构的修改
三、数据表的结构的修改: 1、在上面员工表的基本上增加一个image列。 alter table emplyee add image varchar(32); 2、修改job列,使其长度为60。 alter table emplyee modify job varchar(60); 3、删除gender列。 alter table emplyee drop gender; 4、表名改为user。 rename table emplyee to user; rename table user to emplyee; 5、修改表的字符集为utf8 alter table emplyee character set utf8; 6、列名name修改为username alter table emplyee change name username varchar(32);
操作表数据
###
添加数据 INSERT INTO employee VALUES(1,'zs',NULL,NULL,'信息',1000,NULL); 查看数据 select * from exam; 删除数据 DELETE FROM user WHERE username='zs'; 修改数据 UPDATE user SET salary=5000;
条件查询
条件查询需要用到where语句,where必须放到from语句表的后面 支持如下运算符
运算符 | 说明 |
---|---|
= | 等于 |
<>或!= | 不等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
between … and … | 两个值之间 |
is null | 为null |
and | 并且 |
or | 或者 |
in | 包含,相当于多个or |
not | not可以取非,主要用在is 或in中 |
like | like称为模糊查询,支持%或下划线匹配%匹配任意个字符下划线,一个下划线只匹配一个字符 |
约束
DEFAULT 默认约束
UNIQUE 唯一约束
CHECK 检查约束
PRIMARY KEY 主键
FOREIGN KEY 外键约束
PRIMARY KEY auto_increment 主键自增
排序
order by
排序采用order by子句,order by后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,order by默认采用升序,如果存在where子句那么order by必须放到where语句的后面
select * from hzuser order by usersal; -- 从小到大 select * from hzuser order by usersal asc; -- 从大到小 select * from hzuser order by usersal desc;
聚合函数
count
计数 会忽略null 一般有null 的时候 这个是个考点 要把null 转换成0
-- 取得所有的会员数 select count(*) from hzuser;
avg
取得某一列的平均值
-- 取得平均薪水 select avg(usersal) from hzuser;
min
取得某个一列的最小值
-- 取得最低薪水 select min(usersal) from hzuser;
max
-- 取得最高薪水 select max(usersal) from hzuser;
分组查询
分组查询主要涉及到两个子句,分别是:group by和having
having 类似 where , 和当前语句的 聚合函数有关
-- 取得每个工作岗位的工资合计,要求显示岗位名称和工资合计 select job, sum(usersal) from hzuser group by job; -- 如果使用了order by,order by必须放到group by后面 排序时候注意 select job, sum(usersal) from hzuser group by job order by sum(usersal) ; -- 取得每个岗位的平均工资大于2000 select job, avg(usersal) from hzuser group by job having avg(usersal) >2000;
查询总结
以上语句的执行顺序 1.首先执行where语句过滤原始数据 2.执行group by进行分组 3.执行having对分组数据进行操作 4.执行select选出数据 5.执行order by排序
select 字段 from 表名 where ……. group by ……..having …….(就是为了过滤分组后的数据而存在的—不可以单独的出现) order by ……..
连接查询
连接查询:也可以叫跨表查询,需要关联多个表进行查询
select hz.name, j.jname from hzuser hz , jieji j where hz.jiejinum=j.jiejinum;
内连接
-- 显示 工资 大于2000的 用户 信息,并显示所属的 阶级 名称 -- 使用 join on 或where select hz.hname, hz.usersal, j.jname from hzuser hz, jieji j where hz.jiejinum=j.jiejinum and hz.usersal > 2000; select hz.hname, hz.usersal, j.jname from hzuser hz join jieji j on hz.jiejinum=j.jiejinum where hz.usersal>2000;
外连接(重点)
(外连接)显示 用户信息,并显示所属的 阶级 名称,如果某一个阶级没有会员,那么该阶级也必须显示出来 看到这些字 就要想到 外连接
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 ; right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录; inner join(等值连接) 只返回两个表中联结字段相等的行;
-- 右连接: select hz.hname, hz.usersal, j.jname from hzuser hz right join jieji j on hz.jiejinum=j.jiejinum; -- 左连接: select hz.hname, hz.usersal, j.jname from jieji j left join hzuser hz on hz.jiejinum=j.jiejinum;
子查询
子查询就是嵌套的select语句,可以理解为子查询是一张表
-- 查询哪些人的薪水高于会员的平均薪水,需要显示会员编号,会员姓名,薪水 -- 1、取得平均薪水 select avg(usersal) from hzuser; -- 2、取得大于平均薪水的会员 select hzusernum, name, usersal from hzuser where usersal > (select avg(usersal) from hzuser);
limit 的使用(重点)-分页
MySql提供了limit ,主要用于提取前几条或者中间某几行数据 ,m,n其中m是指记录开始的index,从0开始,表示第一条记录。n是指从第m+1条开始,取n条。
select * from table limit
select * from tablename limit 2,4
即取出第3条至第6条,4条记录
-- 取得前5条数据 select * from hzuser limit 5; -- 从第二条开始取两条数据 select * from hzuser limit 1,2; -- 取得薪水最高的前5名 select * from hzuser hz order by hz.usersal desc limit 5;