mysql数据库相关基础知识02

聚集函数

1.count     记数
2.sum       求和
3.avg
    * 语法:select avg(列名) from 表名;
4.max
    * 求最大值
5.min
    * 求最小值

练习
求一个班级数学平均分?
    select avg(ifnull(math,0)) from stu;
求一个班级总分平均分
    select avg(ifnull(math,0)+english+chinese) from stu;
求班级英语最高分和最低分
    select max(english) from stu;
    select min(english) from stu;

分组(重要)

1.使用group by 字段 进行分组的。

create database day16;
use day16;
create table orders(
    id int,
    product varchar(20),
    price float
);

insert into orders(id,product,price) values(1,‘电视‘,900);
insert into orders(id,product,price) values(2,‘洗衣机‘,100);
insert into orders(id,product,price) values(3,‘洗衣粉‘,90);
insert into orders(id,product,price) values(4,‘电视‘,900);
insert into orders(id,product,price) values(5,‘洗衣粉‘,90);
insert into orders(id,product,price) values(6,‘洗衣粉‘,90);

练习
对订单表中商品归类后,显示每一类商品的总价
    select product,sum(price),count(*) from orders group by product;  默认是一组 

查询购买了几类商品,并且每类总价大于100的商品
    select product from orders group by product having sum(price) > 100;

总结:Having和where均可实现过滤,但在having可以使用聚集函数,where不能使用聚集函数,having通常跟在group by后,它作用于分组

总结

select ... from ... where ... group by ... having ... order by ...
* 固定的顺序:如果没有上述的条件,把关键字去掉就ok。

修改密码

1.停止mysql服务:
    services.msc 进入到服务界面
2.在cmd>输入一个命令:
    mysqld --skip-grant-tables  (开启一个mysql服务,不需要进行认证.)
3.新打开一个cmd窗口
    mysql -u root -p  不需要输入密码.就可以进入.
4.输入命令 show databases;查看数据库,输入命令 use mysql;使用mysql数据库。
5.修改密码的语句:
    update user set password=password(‘root‘) WHERE user=‘root‘;
6.将两个窗口都关闭.
7.任务管理器中结束(mysqld)进程.
8.重启mysql服务

数据库的备份和恢复

MySQL数据库备份和恢复
1.备份数据库表中的数据
命令:mysqldump -u 用户名 -p 数据库名 > 文件名.sql 回车后 再输入密码

2.恢复数据库(前提创建空的数据库,并且use)
命令:mysql –u 用户名 p 数据库名 < 文件名.sql  回车后 再输入密码

* 注意1:不是在数据库的登陆状态下
* 注意2:该命令后没有分号结束
* 注意3:注意 > 符号的方向
* 注意4:恢复数据库使用的命令是mysql,而不是mysqldump

单表的约束

1.代表记录的唯一的标识。
2.声明某一列作为主键
    * 使用关键字 primary key
3.主键值的特点
    * 唯一
    * 非空
    * 被引用
4.创建一张表,声明主键列
    1 第一种
    create table person(
        id int primary key,
        name varchar(30)
    );
    insert into person values (1,‘聪聪‘);
    insert into person values (2,‘美美‘);
    insert into person values (3,‘小凤‘);

    2 第二种
    create table person(
        id int,
        name varchar(30),
        primary key (id)
    );

5.自增长
    * 可以去帮你维护主键的信息
    * 关键字:auto_increment

    create table person(
        id int primary key auto_increment,
        name varchar(30)
    );  

    insert into person values (null,‘聪聪‘);
    insert into person values (null,‘美美‘);
    insert into person values (null,‘小凤‘);

    delete from person where id = 1;

唯一和非空

1.唯一    :声明值是唯一的    使用关键字   unique
2.非空    :声明值是不为空的    not null   

多表外键的约束

create table dept(
    did int primary key auto_increment,
    dname varchar(30)
);

create table emp(
    eid int primary key auto_increment,
    ename varchar(30),
    sal double,
    dno int
);

insert into dept values (1,‘研发部‘);
insert into dept values (2,‘人事部‘);

insert into emp values (null,‘聪聪‘,15000,1);
insert into emp values (null,‘邦邦‘,5000,1);
insert into emp values (null,‘美美‘,6000,2);
insert into emp values (null,‘小凤‘,8000,2);
insert into emp values (null,‘如花‘,8000,null);

问题:
    * 直接把研发部删除掉。delete from dept where did = 1; 能删除成功。
    * 在现实生活中,不合理。如果你避免问题的发生,两个表之间设置关系。

1.引入外键的约束
2.添加外键
    * 正常的情况下(一个部门有多个员工,一个员工只能属于一个部门)
    * 设置员工标签的dno字段,作为外键,指向部门表的主键。
    * 修改员工的表,在员工添加外键。
        * alter table emp add foreign key emp (dno) references dept (did);

3.直接添加外键
    * 在创建表的时候,指定外键
    create table emp(
        eid int primary key auto_increment,
        ename varchar(30),
        sal double,
        dno int,
        foreign key emp(dno) references dept (did)
    );

3.直接删除部门,这回不行了。
    delete from dept where did = 1;

表的设计(一对多 多对多 一对一)

一对多(重要)

1.看图
2.例子:部门和员工的例子。
3.建表原则:分清除一方和多方。在多方的表中添加一个字段,作为该表的外键,指向一方表的主键。

多对多(重要)

1.看图
2.学生选课。
3.如果是多对多的关系,创建中间表。把表的关系拆成两个一对多。在中间表至少包含两个字段,作为该表的外键指向一方表的主键。

一对一(了解)

多表的查询(重要)

1.了解笛卡尔积(两个结果的乘积)

假如说是有两个表A和表B
A                       B
aid aname               bid bname aid
a1  a11                 b1  b11   a1
a2  a22                 b2  b22   a2
                        b3  b33   a1

select * from A,B;  查询的结果产生的结果就是笛卡尔积
结果:
a1  a11 b1  b11
a1  a11 b2  b22
a1  a11 b3  b33
a2  a22 b1  b11
a2  a22 b2  b22
a2  a22 b3  b33

使用部门和员工两个表演示笛卡尔积
select * from dept,emp;

多表查询之内链接

0.前提条件:两个表有联系,通过外键关联。
1.普通内链接
    * 语法:关键字 ... inner join ... on 条件;
    * 注意:
        * 在inner join关键字之前写表1
        * 在inner join关键字之后写表2
        * on的后面写条件:(表1是dept,表2是emp) dept.did = emp.dno

    * 语句:   select * from dept inner join emp on dept.did = emp.dno;

2.隐式内链接(用的最多的)
    * 语法:select ... from 表1,表2 where 表1.字段 = 表2.字段;
    * 语句:select * from dept,emp where dept.did = emp.dno;
    * 别名:select * from dept d,emp e where d.did = e.dno;
    * 指定字段: select d.dname,e.ename,e.sal from dept d,emp e where d.did = e.dno;

多表查询之外链接

1.左外链接(左链接)
    * 语法:... 表1 left outer join 表2 on 表1.字段 = 表2.字段
    * 语句:   select * from dept left outer join emp on dept.did = emp.dno;
    * 特点:看左表,默认把左表中的全部数据都查询出来,再查询出有关联的数据。

2.右外链接
    * 语法:... 表1 right outer join 表2 on 表1.字段 = 表2.字段
    * 语句:   select * from dept right outer join emp on dept.did = emp.dno;
    * 特点:看右表,默认把右表中的全部数据都查询出来,再查询出有关联的数据。

向dept和emp表中插入一些数据
insert into dept values (null,‘牛宝宝部‘);
insert into dept values (null,‘扯淡部‘);

insert into emp values (null,‘陈冠希‘,100,null);
insert into emp values (null,‘张柏芝‘,200,null);

* 测试
    * 内链接测试:select * from dept d,emp e where d.did = e.dno;
    * 左链接测试:select * from dept left join emp on dept.did = emp.dno;
    * 右链接测试:select * from dept right join emp on dept.did = emp.dno;

多表查询的总结

* 如果两张表中的数据没有多余的数据,下面这些个查询的结果都是一样的。

1.普通内链接查询
    * inner join .. on 条件;
2.隐式内链接查询
    * select * from A,B where 条件;
3.左外链接查询
    * left outer join ... on
4.右外链接查询
    * right outer join ... on 

* 如果两个表中有多余的数据,使用左链接,查询出的结果先把左表所有的数据全部都查询出来,再把两个表中有关联的数据查询出。
* 如果两个表中有多余的数据,使用右链接,查询出的结果先把右表所有的数据全部都查询出来,再把两个表中有关联的数据查询出。

子查询

1.你可能一个查询语句不能查出你想要的结果,你可以把多个查询结合到一起使用。
2.你编写的一个语句中包含多个select关键字。
3.问题:查询出英语的成绩大于英语的平均分的同学?
    1.查询英语的平均分  select avg(english) from stu;
    2.查询的学生的信息,条件,英语的成绩需要大于平均分。
        * select * from stu where english > (select avg(english) from stu);

4.子查询的特点
    * select * from 表 where 条件 > 子查询
    * select * from (子查询会先产出结果)

    select * from (select english from stu);

5.在where条件的后面使用运算符号
    < > <= >= <>

    all 所有      >all
        *  >all (5,6,7)
    any 任意      >any
        *  >any (5,6,7)

dept  emp   

想要查询什么?
几张表
条件

查看聪聪所属的部门名称和员工名称?
    * 查询什么?部门的名称 员工的名称
    * 表:部门表和员工表
    * 条件:聪聪所属的部门(去除笛卡尔积),只想查聪聪 name=‘聪聪‘
    select d.dname,e.ename from dept d,emp e where d.did = e.dno and e.ename = ‘聪聪‘;

统计每个部门的人数(按照部门名称统计)
    * 查询:部门的名称和人数
    * 表:部门和员工(人数)
    * 条件:where d.did = e.dno    分组(部门分组)
    select d.dname,count(*) from dept d,emp e where d.did = e.dno group by d.dname;

统计部门的平均工资(按部门名称统计)
    * 查询:平均工资
    * 表:部门 员工属性是工资
    * 条件:where d.did = e.dno 分组(部门分组)
    select d.dname,avg(e.sal) from dept d,emp e where d.did = e.dno group by d.dname;

统计部门的平均工资大于公司平均工资的部门
    * 查询:部门
    * 表:部门和员工
    * 条件:部门的平均工资 > 公司的平均工资  

    select d.dname,avg(e.sal) from dept d,emp e where d.did = e.dno group by d.dname having avg(e.sal) > (select avg(sal) from emp);

原文地址:https://www.cnblogs.com/chyxOne/p/10354585.html

时间: 2024-09-28 22:45:43

mysql数据库相关基础知识02的相关文章

mysql数据库相关基础知识01

数据库的简介 1.什么是数据库:数据仓库.访问必须只能用SQL语句来访问.数据库也是一个文件的系统. 2.数据库的作用:存储数据的作用.开发任何的应用,都有数据库. 3.关系型的数据库:数据库中保存的都是实体与实体之间的关系. 4.常见的数据库 * Java开发,必用的两个数据库Oracle和MySQL * Oracle数据库(甲骨文) 大型的数据库,收费的. * MySQL数据库 小型的数据库,免费开源的.被Oracle收购了(在6.x版本下开始收费了) * SQLServer 微软的数据库

[python] 专题九.Mysql数据库编程基础知识

在Python网络爬虫中,通常是通过TXT纯文本方式存储,其实也是可以存储在数据库中的:同时在WAMP(Windows.Apache.MySQL.PHP或Python)开发网站中,也可以通过Python构建网页的,所以这篇文章主要讲述Python调用MySQL数据库相关编程知识.从以下几个方面进行讲解: 1.配置MySLQ 2.SQL语句基础知识 3.Python操作MySQL基础知识 4.Python调用MySQL示例 一. 配置MySQL 首先下载mysql-5.0.96-winx64,安装

专题九.Mysql数据库编程基础知识

https://blog.csdn.net/Eastmount/article/details/52156383 这篇文章主要讲述Python调用MySQL数据库相关编程知识.从以下几个方面进行讲解: 1.配置MySLQ 2.SQL语句基础知识 3.Python操作MySQL基础知识 4.Python调用MySQL示例 一. 配置MySQL 原文地址:https://www.cnblogs.com/chenhuan123/p/12038446.html

mysql数据库的基础知识

数据库的登录 1.把mysql的bin目录添加到path环境变量中 2.打开cmd mysql -h localhost -u root -p 输入密码就可以进去 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: ? 网状型数据库 ? 层次型数据库 ? 关系型数据库 ? 面向对象数据库 上面4中数据库系统中,关系型数据库使用最为广泛.面向对象数据库则是由面向对象语言催生的新型数据库,目前的一些数据库系统,如:SQL Server 2005.Oracle10g等都

mysql数据库相关基础与数据库的相关操作

mysql是目前主流的数据库管理系统之一,目前还是免费的. 数据库的发展史,基本概念就不再赘述,总之数据库就是存储数据的仓库,而我们所见到的所有其实都可以归类成数据. 什么是sql? SQL:(Structured Query Language)是结构化查询语言缩写.是一门专门与数据库管理系统打交道的语言. SQL语言:是关系型数据库的标准语言, 其主要用于存取数据,查询数据,更新数据和管理数据库系统等操作. 具体可以把SQL分为4个部分: 数据控制语言 ( DCL): 主要用于控制用户的访问权

数据库相关基础知识总结

一.事务 所谓事务(Transcation),它是一个操作序列,这些操作要么全部执行,要么不执行,它是个不可分割的工作单位.事务的四大特性: 1 ACID四大特性 Atomicity(原子性) 原子性是指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生. Consistency(一致性) 一致性是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏.这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性. Isolation(隔离性) 多个事务并发访问时,事务

深入理解mysql之BDB系列(1)---BDB相关基础知识

    深入理解mysql之BDB系列(1) ---BDB相关基础知识 作者:杨万富 一:BDB体系结构 1.1.BDB体系结构 BDB总体的体系结构如图1.1所看到的,包括五个子系统(见图1.1中相关数).1)数据存取子系统,2)事务子系统,3)锁子系统,4)内存池管理子系统,5)日志子系统. 在一个应用程序中,并不一定须要全然具备这5大子系统. 假设程序仅仅使用了数据存取子系统,它的体系结构如图1.2.在图1.2中,我们仅仅使了两个子系统:数据存取以及内存池子系统.(备注:另外三个子系统在B

【RAC】RAC相关基础知识

[RAC]RAC相关基础知识 1.CRS简介    从Oracle 10G开始,oracle引进一套完整的集群管理解决方案—-Cluster-Ready Services,它包括集群连通性.消息和锁.负载管理等框架.从而使得RAC可以脱离第三方集群件,当然,CRS与第三方集群件可以共同使用. (1).CRS进程 CRS主要由三部分组成,三部分都作为守护进程出现 <1>CRSD:资源可用性维护的主要引擎.它用来执行高可用性恢复及管理操作,诸如维护OCR及管理应用资源,它保存着集群的信息状态和OC

基于C#的MongoDB数据库开发应用(1)--MongoDB数据库的基础知识和使用

在花了不少时间研究学习了MongoDB数据库的相关知识,以及利用C#对MongoDB数据库的封装.测试应用后,决定花一些时间来总结一下最近的研究心得,把这个数据库的应用单独作为一个系列来介绍,希望从各个方面来总结并记录一下这个新型.看似神秘的数据库使用过程.本文是这个系列的开篇,主要介绍一些MongoDB数据库的基础知识.安装过程.基础使用等方面. MongoDB是一款由C++编写的高性能.开源.无模式的常用非关系型数据库产品,是非关系数据库当中功能最丰富.最像关系数据库的数据库.它扩展了关系型