推广 热搜: 行业  机械  设备    教师  经纪  系统  参数    蒸汽 

MySQL数据库学习笔记

   日期:2024-11-13     移动:http://3jjewl.riyuangf.com/quote/967.html

  1. 整数: int(m) 和 bigint(m), bigint 相当于java中的long, m代表显示长度(m是用来补零的) 补零需要结合zerofifill关键字

MySQL数据库学习笔记

    create table t3(id int,age int(5) zerofifill);

    insert into t3 values(1,18);

    select * from t3;

  2. 浮点数: double(m,d) m代表总长度, d代表小数长度 23.234 m=5 d=3 , 超高精度浮点数decimal(m,d) 精度远高于double 只有涉及超高进度运算时使用

  3. 字符串:

    char(m): 固定长度, m代表最大字符长度, m=10存abc 占10 , 好处:执行效率略高,最大长度为255

    varchar(m):可变长度, m=10存abc 占3, 好处:节省存储空间 , 最大长度65535 但是建议保存255以内数据, 超过255使用text

    text(m):可变长度, 最大长度65535, 建议保存长度大于255的数据

  4. 日期

    date: 只能保存年月日

    time:只能保存时分秒

    datetime:保存年月日时分秒, 默认值为null, 最大值9999-12-31

    timestamp:保存年月日时分秒, 时间戳(距离1970年1月1日的毫秒数), 默认值为当前的系统时间, 最大值2038-1-19

  举例:

    create table t_date(t1 date,t2 time,t3 datetime,t4timestamp);

    insert into t_date values('2021-3-12',null,null,null);

    insert into t_date values(null,'10:50:20','2020-11-20 15:30:25',null);

    select * from t_date;

    * 语法:          * 备份: mysqldump -u用户名 -p密码 数据库名称 > 保存的路径          * 还原:              1. 登录数据库              2. 创建数据库              3. 使用数据库              4. 执行文件。

      通过执行以下指令导入:

      格式: source 路径  

      source e:/emp.sql;

      执行select * from emp; 如果显示乱码 执行 setnames gbk;

  如果查询某个字段的值为null 不能用= 使用is , 不等于null 则使用 is not null

  and 类似Java中的&& , 如果需要同时满足多个条件时使用and

  or 类似Java中的|| 如果需要满足多个条件中的某一个条件时使用or

  当查询某个字段的值等于多个值时使用

  1. 查询工资是3000,1500和5000的员工信息

    select * from emp where sal=3000 or sal=1500 or sal=5000;

    select * from emp where sal in(3000,1500,5000);

  2. 查询工作是销售 人事和程序员的员工信息

    select * from emp where job in('销售','人事','程序员');

  3. 查询1号和2号部门工资大于2000的员工信息

    select * from emp where sal>2000 and deptnoin(1,2);

  当查询的字段取值在两个数值之间时使用

  1. 查询工资在2000到3000之间的员工信息

    select * from emp where sal>=2000 and sal<=3000;

    select * from emp where sal between 2000 and3000;

    _ : 代表1个未知字符

    %: 代表0或多个未知字符

  举例:

    以x开头 x%

    以x结尾 %x

    包含x %x%

    以x开头以y结尾 x%y第二个字符是x _x%

    第三个字符是x倒数第二个字符是y _ _ x%y _

    1. 排序查询      * 语法:order by 子句          * order by 排序字段1 排序方式1 ,  排序字段2 排序方式2...      * 排序方式:          * ASC:升序,默认的。          * DESC:降序。    * 注意:        * 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。

    格式: limit 跳过的条数, 请求的条数,请求的条数就是每页的条数

    公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数

  举例: (请求页数-1)*条数,条数

    请求第一页的5条数据 limit 0,5

    请求第二页的5条数据 limit 5,5

    请求第8页的6条数据 limit (8-1)*6,6;

    请求第6页的7条数据 limit 35,7

  1. 按照员工工资升序排序 请求第一页的5条数据

    select * from emp order by sal limit 0,5;

  2. 查询员工表中工资降序排序 第二页的3条数据

    select * from emp order by sal desc limit 3,3;

  3. 查询1号部门工资前三的员工信息

    select * from emp where deptno=1 order by sal desc limit 0,3;

  4. 查询2号部门工资最高的员工姓名和工资

    select ename,sal from emp where deptno=2 order by sal desc limit 0,1;

  1. 查询每个员工的姓名,工资和年终奖(年终奖=月工资*3)

    select ename,sal,sal*3 from emp;

  2. 查询2号部门中,每个员工的姓名,工资和涨薪5块钱之后的工资

    select ename,sal,sal+5 from emp where deptno=2;

  3. 让3号部门的员工每人涨薪5块钱

    update emp set sal=sal+5 where deptno=3;

    给查询的字段起别名

    select ename from emp;select ename as '名字' from emp;

    select ename '名字' from emp;

    select ename 名字 from emp;

    使用聚合函数可以对查询的多条数据进行统计查询

    * 注意:聚合函数的计算,排除null值。          解决方案:              1. 选择不包含非空的列进行计算              2. IFNULL函数

    查询员工表中的平均工资

      select avg(sal) from emp;

    查询1号部门的平均工资

      select avg(sal) from emp where deptno=1;

    查询2号部门的最高工资

      select max(sal) from emp where deptno=2;

    查询2号部门的最低工资

      select min(sal) from emp where deptno=2;

    查询1号部门的工资总和

      select sum(sal) from emp where deptno=1;

    查询2号部门的员工人数

      select count(*) from emp where deptno=2;

    什么是分组查询: 分组查询可以将某个字段相同值的数据划分为一组,然后以组为单位进行统计查询

    格式: group by 字段名;

    注意:          1. 分组之后查询的字段:分组字段、聚合函数          2. where 和 having 的区别?              1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来              2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。

    1. 查询每个部门的平均工资

      select deptno,avg(sal) from emp group by deptno;

    2. 查询每种工作的平均工资

      select job,avg(sal) from emp group by job;

    3. 查询每种工作的人数

      select job,count(*) from emp group by job;

    4. 查询每个部门工资高于2000的员工人数

      select deptno,count(*) from emp where sal>2000 group by deptno;

    5. 查询平均工资最高的部门编号和平均工资

      select deptno,avg(sal) from emp group by deptno order by avg(sal) desc limit 0,1 ;

    where后面只能写普通字段条件, 不能写聚合函数条件

    聚合函数条件需要写在having关键字后面

    having关键字需要结合group by分组查询使用

  1. 查询每种工作的人数,只查询人数大于1的工作名称和人数.

    select job,count() from emp group by job having count()>1;

    select job,count(*) c from emp group by job having c>1;

  2. 查询每个部门的平均工资,只查询出平均工资高于2000的信息

    select deptno,avg(sal) a from emp group by deptno having a>2000;

    select deptno,max(sal) from emp group by deptno;

  3.查询每个部门的工资总和,只查询有领导的员工,并且要求工资总和高于5400

    select deptno,sum(sal) s from emp where mgr is not null group by deptno having s>5400;

  4. 查询每个部门的平均工资,只查询工资在1000到3000之间的,并且过滤掉平均工资低于2000的部门信息

    select deptno,avg(sal) a from emp where salbetween 1000 and 3000 group by deptno having a>=2000;

  5. 查询每种工作的人数要求人数大于1个,并且只查询1号部门和2号部门的员工, 按照人数降序排序

    select job,count(*) c from emp where deptno in(1,2) group by job having c>1 order by c desc;

  1. 查询工资高于1号部门平均工资的员工信息

    select avg(sal) from emp where deptno=1;

    select * from emp where sal>(select avg(sal) from emp where deptno=1);

  2. 查询工资最高的员工信息

    select max(sal) from emp;

    select * from emp where sal=(select max(sal)from emp);

  3. 查询工资高于2号部门最低工资的员工信息

    select min(sal) from emp where deptno=2;

    select * from emp where sal>(select min(sal) from emp where deptno=2);

  4. 查询和孙悟空相同工作的其它员工信息

    select job from emp where ename='孙悟空';

    select * from emp where job=(select job from emp where ename='孙悟空') and ename!='孙悟空';

  5.查询拿最低工资员工的同事们的信息(同事指相同部门)

    select min(sal) from emp; //得到最低工资

    //得到最低工资的部门编号

    select deptno from emp where sal=(select min(sal) from emp)

    //通过部门编号查询该部门的员工

    select * from emp where deptno=(select deptno from emp where sal=(select min(sal) from emp) ) and sal!=(select min(sal) from emp);

  6. 查询人数最多的部门信息(需要用到dept部门表)

    select deptno from emp group by deptno order by count(*) desc limit 0,1;

    select * from dept where deptno=(select deptno from emp group by deptno order by count(*) desc limit 0,1)

  7. 有的工作只有一个人, 那么查询有哪些人从事了这种只有一个人的工作

    select job from emp group by job having count(*)=1;

    select * from emp where job in(select job from emp group by job having count(*)=1);

    1. 分类:        1. 一对一(了解):            * 如:人和身份证            * 分析:一个人只有一个身份证,一个身份证只能对应一个人        2. 一对多(多对一):            * 如:部门和员工            * 分析:一个部门有多个员工,一个员工只能对应一个部门        3. 多对多:            * 如:学生和课程            * 分析:一个学生可以选择很多门课程,一个课程也可以被很多学生选择    2. 实现关系:        1. 一对多(多对一):            * 如:部门和员工            * 实现方式:在多的一方建立外键,指向一的一方的主键。        2. 多对多:            * 如:学生和课程            * 实现方式:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键        3. 一对一(了解):            * 如:人和身份证            * 实现方式:一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键。

* 概念:设计数据库时,需要遵循的一些规范。要遵循后边的范式要求,必须先遵循前边的所有范式要求        设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。        目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。    * 分类:        1. 第一范式(1NF):每一列都是不可分割的原子数据项        2. 第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于码(在1NF基础上消除非主属性对主码的部分函数依赖)            * 几个概念:                1. 函数依赖:A-->B,如果通过A属性(属性组)的值,可以确定唯一B属性的值。则称B依赖于A                    例如:学号-->姓名。  (学号,课程名称) --> 分数                2. 完全函数依赖:A-->B, 如果A是一个属性组,则B属性值得确定需要依赖于A属性组中所有的属性值。                    例如:(学号,课程名称) --> 分数                3. 部分函数依赖:A-->B, 如果A是一个属性组,则B属性值得确定只需要依赖于A属性组中某一些值即可。                    例如:(学号,课程名称) -- > 姓名                4. 传递函数依赖:A-->B, B -- >C . 如果通过A属性(属性组)的值,可以确定唯一B属性的值,在通过B属性(属性组)的值可以确定唯一C属性的值,则称 C 传递函数依赖于A                    例如:学号-->系名,系名-->系主任                5. 码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码                    例如:该表中码为:(学号,课程名称)                    * 主属性:码属性组中的所有属性                    * 非主属性:除过码属性组的属性                            3. 第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)

    同时查询多张表数据的查询方式称为关联查询

    有几种关联查询方式?

      等值连接

      内连接

      外连接

      格式: select * from A,B where A.x=B.x(关联关系) and A.age>30;

    1. 查询每个员工的姓名和对应的部门名

      select ename,dname from emp e,dept d where e.deptno=d.deptno;

      格式: select * from A join B on A.x=B.x(关联关系) where A.age>30;

      等值连接和内连接查询到的数据是一样的数据,都是两张表的交集数据

    1. 查询每个员工的姓名和对应的部门名

      select ename,dname from emp e join dept d on e.deptno=d.deptno;

    2. 查询1号部门工资高于2000块钱的员工姓名和对应的部门名,部门地址

      select ename,dname,loc from emp e join dept d on e.deptno=d.deptno where e.deptno=1 and sal>2000;

      外连接 查询到的是一张表的全部数据和另外一张表的交集数据

      格式: select * from A left/right join B on A.x=B.x(关联关系) where A.age>30;

    1. 查询所有部门名以及对应的员工名

      select dname,ename from emp e right join dept d on e.deptno=d.deptno;

    2. 往员工表插入一个Tom工资500, 查询所有员工信息以及所对应的部门名

      insert into emp(empno,ename,sal) values(100,'Tom',500);

      select e.*,dname from emp e left join dept d on e.deptno=d.deptno;

    如果查询的是两个表的交集数据,则使用等值连接或内连接(推荐)

    如果查询的数据是一张表的全部和另外一张表的交集则使用外连接

     select        列名列表   from     表名列表
本文地址:http://oml01z.riyuangf.com/quote/967.html    迅易网 http://oml01z.riyuangf.com/ , 查看更多

特别提示:本信息由相关企业自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关行业动态
推荐行业动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号