目录
数据库概念
存储数据的仓库,用于存储和管理数据
关系型数据库
由行和列组成的这种二维表,而且表和表之间有对应关系。
MySQL就是关系型数据库的一种。
MySQL使用
1.登录
cmd-->mysql -uroot -p密码
2.退出
exit
SQL语言
结构化查询语言
通过sql语言可以操作所有的关系型数据库。每种数据库之间会存在差异,称为 "方言"。
sql分类
DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(增、删、改)
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
DQL(Data Query Language):数据查询语言,用来查询记录(数据)。
DDL:操作数据库和表
操作数据库
创建:create database 数据库名称;
删除:drop database 数据库名称;
修改字符集:alter database 数据库名称 character set gbk;
查询:show databases; 查询所有数据库名称
show create database 数据库名称; 查看建库语句,可以看到编码
切换库:use 库名
操作表
就是创建表头(列,字段)
常见字段的数据类型:
创建:
create table 表名(
列名1 类型1,
列名2 类型2,
...
列名n 类型n
);
删除表: drop table 表名;
查看库中所有表:show tables;
查看表结构:desc 表名;
增加一个表头:alter table student add(phone char(11));
删除一个表头:alter table student drop phone;
修改表头名称:alter table student change id sid int;
修改表头数据类型:alter table student modify sal int ;
或:alter table student change sal sal double(5,2);
修改表名:alter table student rename to stu;
DML:数据操作语言,用来增删改数据库记录
1.插入数据
插入所有:
insert into student(id,name,age) values (1,'zhangsan',23);
简写:
insert into student values (1,'zhangsan',23);
个别字段插入:
insert into student(id,name) values(2,'lisi');
2.删除数据
1.全部删除:
delete from student;
2.where 条件删除
=、!=、<、<=、>、>=、and (&&) 、or (||)
delete from student where id=1;
3.修改数据
1.没有条件修改
update student set sname='wangwu',age=30;
2.有条件修改
update student set sname='zhangsan',age=20 where id=1;
DQL:查询
1.查询表中所有数据
select * from student;
建议全写,而不是写个*
select id,sname,age,sal,birthday from student;
2.查询个别字段
select sname,id from student;
条件查询
1.等值查询
select * from emp where empno=7566;
2.between....and
select * from emp where sal between 2000 and 5000;
3.in
select * from emp where empno in(7499,7788,7934,55555);
4.null值(is null / is not null)
select * from emp where comm is null;
5.as 字段别名 as可不写
select empno as 员工工号,ename as 员工姓名,sal 工资 from emp;
select empno 员工工号,ename 员工姓名,sal 工资 from emp;
6.表别名
select empno 员工工号,ename 员工姓名,sal 工资 from emp e where e.empno=7499;
模糊查询
% 通配多个任意字符
_ 通配单个任意字符
1.姓名包含M
select * from emp as e where ename like '%M%';
2.以S开头
select * from emp as e where ename like 'S%';
3.以S结尾
select * from emp as e where ename like '%S';
4.第二个字母是A
select * from emp as e where ename like '_A%';
5.五个字母组成
select * from emp as e where ename like '_____';
字段的运算和去重
排序 order by
升序 asc
降序 desc
聚合函数
对列做运算
分组 group by
和聚合函数配合使用
-- 比如我按部分编号分组 比如有三个部门 然后我求每个部门的平均工资 那展示出来的数据应该有三条
SELECT deptno '部门编号',AVG(sal) '部门的平均工资' FROM emp GROUP BY deptno;
-- 按照岗位分组,统计每种岗位多少人
SELECT job '岗位',COUNT(job) '岗位人数' FROM emp GROUP BY job;
-- 1.例如查询 每个部门的部门编号 以及每个部门工资大于1500的人数,分组之前要进行筛选
-- where 在分组之前进行条件的筛选,符合条件的参与分组,不符合条件的不参与分组。
SELECT deptno '部门编号',COUNT(empno) '部门人数' FROM emp WHERE sal>1500 GROUP BY deptno;
-- 2.例如 我要查询 各个部门平均工资 大于2000 的部门
-- having:在分组之后,对结果集的筛选
SELECT deptno '部门编号',AVG(sal) '部门的平均工资' FROM emp GROUP BY deptno HAVING AVG(sal)>2000;
SELECT deptno '部门编号',AVG(sal) '部门的平均工资' FROM emp GROUP BY deptno HAVING 部门的平均工资>2000;
-- 3. 例如我要查询 各个部门 员工工资大于1500 的平均工资 并且平均工资 大于2000的部门
SELECT deptno '部门编号',AVG(sal) '部门的平均工资' FROM emp WHERE sal>1500 GROUP BY deptno HAVING 部门的平均工资>2000;
-- having 和where的区别?
-- * where和having
-- * where:在分组之前对条件进行限定。不满足条件,就不会参与分组
-- * having:在分组之后,对结果集的筛选
-- 4. 例如我要查询 各个部门 员工工资大于1500 的平均工资 并且平均工资 大于2000的部门,升序排列
SELECT deptno '部门编号',AVG(sal) '部门的平均工资'
FROM emp WHERE sal>1500
GROUP BY deptno HAVING 部门的平均工资>2000
ORDER BY 部门的平均工资 ASC;
分页 limit
limit 起始索引,每页的条数
-- 第一页
SELECT * FROM emp LIMIT 0,3;
-- 第二页
SELECT * FROM emp LIMIT 3,3;
-- 第三页
SELECT * FROM emp LIMIT 6,3;
-- 第四页
SELECT * FROM emp LIMIT 9,3;
-- 第五页
SELECT * FROM emp LIMIT 12,3;
-- 起始索引=(页码-1)*每页条数