20201014王杉

学习内容:

MySQL:

  • 数据库:数据库是按照一定的形式来组织、存储数据,目的是为了操作数据的增删改查

  • 数据库历史:网状数据库、层次型数据库、关系型数据库、非关系型数据库

  • 数据库存储:内存/特定文件/第三方服务器/数据库服务器

  • 关系型数据库逻辑结构:Server(数据库服务器)/Database(数据库)/Table(数据表)/Row(行)/Column(列)

  • 常见的关系型数据库:①SQLit②MySQL③SQL Server④Oracle

  • 计算机存储字符:

    1. 存储英文字符:ASCII、Latin-1

    2. 存储中文字符:GB2312、GBK、BIG5、Unicode

    3. 中文乱码:中文乱码产生的原因:mysql默认使用Latin-1编码

      解决:①SQL脚本文件另存为的编码为utf8②客户端连接服务器端使用的编码(set names utf8)③服务器端创建数据库使用的编码(charset=utf8)

  • MySQL数据库使用:

    1. 服务器:mysql目录下的bin文件mysql.exe(负责存储和维护数据,启动文件确保3306端口不被占用)

    2. 客户端:mysql目录下的bin文件mysql.exe(负责向数据库发起增删改查)

    3. 客户端连接服务器端:mysql.exe -h127.0.0.1 -P3306 -uroot -p (简写:mysql -uroot -proot)

      -h:host 主机(ip地址/域名)

      -P:port 端口

      -u:user 用户名

      -p:password 密码

    4. 常用命令:show databases;查看数据库名 use 数据库名;进入数据库 show tables;查看数据表 desc 表名;查看表结构 quit;退出

  • SQL:

    1. SQL是结构化查询语言,对关系型数据库进行增删改查。

    2. 执行方:①式交互模式(客户端输入执行,临时性操作数据)②脚本模式(脚本文件批量操作数据)

    3. SQL规范:①每一条命令必须以英文分隔符结束,一条命令可以跨多行

      ②一条出错后,这条以及后面命令不会再执行

      ③不分大小写,关键字大写非关键字小写

      ④注释单行# 多行/**/

    4. SQL命令:①DDL(定义数据):

      create:创建 drop:删除 alter:修改数据库

      ②DML(操作数据):

      insert:插入数据 update:更新数据 delete:删除数据

      ③DQL(查询数据):

      select:查询数据

      ④DCL(控制用户权限):

      grant:授权 revoke:收回权限

    5. SQL语句使用实例:

      set names utf8;设置客户端连接服务器端编码为(utf8)

      frop database if exists lfsql;如果存在同名的数据库,丢弃数据库

      create database lfsql charset=utf8;创建数据库,设置存储的编码

      use lfsql; 进入数据库

  • 列类型:数值型:整形、浮点型、布尔型

    日期时间型

    字符串类型

  • 列约束:

    1. 主键约束:primary key auto_increment
    2. 唯一约束:unique
    3. 非空约束:not null
    4. 检查约束:check
    5. 默认约束:default
    6. 外键约束:foreign key(列)references 表(主键列)
  • 查询数据:

    1.简单查询:

    查询特定的列 select eid,ename from lfemp;

    查询所有的列 select * from lfemp;

    给列起别名 select eid as ''编号'',ename ''姓名'' from lfemp;

    合并相同的项 select distinct sex from lfemp;

    查询时执行计算 select ename,salary*12 from lfemp;

    结果集的排序 select * from lfemp order by salary asc/desc;

    条件查询 select * from lfemp where salary >=5000;

    模糊查询 select * from lfemp where ename like '%e_';

    分页查询 select * from lfemp limit m,n;

    2.复杂查询:

    复杂查询
    聚合查询/分组查询
    聚合函数
    1.获取数量

    select count(*) from lfemp;
    

    ​ 2.求总和

    select sum(salary) from lfemp;
    

    ​ 3.求平均数

    select avg(salary) from lfemp where sex=1;
    

    ​ 4.求最大、最小值

    select max(salary) as '最高工资',min(salary) as '最低工资' from lfemp where sex=0;
    

    ​ 5.获取当前数据中的年份数值

    select year(birthday) from emp;
    

    ​ 6.获取当前数据中的月份数值

    select month(birthday) from emp;
    

    ​ 分组查询
    ​ group by
    ​ 实例

    select avg(salary),max(salary),min(salary),sex from lfemp group by sex;
    

    ​ 注意:分组查询只能查询聚合函数和分组条件
    ​ 子查询
    ​ 子查询就是把一个sql语句的查询结果作为另一个sql语句的查询条件
    ​ 实例

    select * from lfemp where salary>(select salary from lfemp where ename='tom');
    

    ​ 多表查询(跨表查询)
    ​ 内连接
    ​ inner join…on…
    ​ 实例

    select ename,dname from lfemp inner join lfdept on deptId=did;
    

    ​ 问题:无法查询出没有部门的员工,也无法查询出没有员工的部门
    ​ 其他写法问题
    ​ 1.

    select ename as '姓名',dname as '部门名称' from lfemp,lfdept;
    

    ​ 问题:发生错误,笛卡尔积
    ​ 2.

    select ename as '姓名',dname as '部门名称' from lfemp,lfdept where deptId=did;
    

    ​ 问题:多表查询避免产生笛卡尔积,给查询添加条件(外键),但是无法查询出没有部门的员工,也无法查询出没有员工的部门
    ​ 左外连接
    ​ left outer join …..on….
    ​ 查询左侧表中的所有数据
    ​ 实例

    select ename,dname from lfemp left outer join lfdept on deptId=did;
    

    ​ 右外连接
    ​ right outer join…on
    ​ 查询右侧表中的所有数据
    ​ 实例

    select ename,dname from lfemp right outer join lfdept on deptId=did;
    

    ​ 全连接
    ​ union 合并相同的项

    (select ename,dname from lfemp left outer join lfdept on deptId=did)  union
    (select ename,dname from lfemp right join lfdept on deptId=did);
    

    ​ union all 不合并相同的项

    (select ename,dname from lfemp left outer join lfdept on deptId=did)
    union all
    (select ename,dname from lfemp right join lfdept on deptId=did);

    ​ 注意:mysql不支持 full join ..on..

学习心得:

今天把数据库又看了一遍,然后就是今天下午开始了网上招聘,今天下午听了许多,为以后面试做准备吧,多面试几下才能总结出经验,知道自己的不足,现在还是应该需要以学习为主,多学些以后面试才会有准备。

标签

评论