MySQL回顾笔记

MySQL 

  1. 简介

      MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好      的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

               MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
   MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一     特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
 

2.Centos7 安装linux远程调用访问修改

   

1.修改配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf;

然后注释(#)掉 “bind 127.0.0.1”这一行

2.授权root用户远程登录权限
进入MySQL再输入如下命令:

grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;

3.刷新权限
继续在MySQL中输入如下命令:

flush privileges;

4.重启MySQL服务
sudo systemctl restart mysql

3.MySQL常见语言

  • 数据查询语言DQL:用来查询数据库中表的记录。关键字: select ,from , where 等
  • 数据查询语言DML:数据操纵语句,用于添加、删除、更新,关键字包括insert、delete、update等
  • 数据定义语言DDL :数据定义语句,是对数据库内部对象进行创建、删除、修改等操作的语言。关键字包括create、drop、alter
  • 数据控制语言DCL: 用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等
 

4.常见总结

  •   去重: distinct     select  distinct name from user;
  •   +号作用    select '123'+100  ==》 223    select "abc"+100 ==> 100
  •  条件表达式 :> < = != <>  >= <= 
  • 逻辑表达式筛选:  &&  :and    ||  :or    ! :not 
  • 模糊查询  like  between  and  in   is null
  • 安全等于 <=>
  • 排序 : order by    asc /desc
  • 分组  : group by       
  • 常见函数:  
  • 单行函数 concat,length,ifnull
    • 字符函数
      • length (字节个数)
      • concat(拼接字符串),
      • supper(转大写),
      • lower(转小写)
      • substr(’a...‘,n)(从1开始截取n个,返回剩下的字符穿或字符),substr(’a...‘,1,n)截取1到n个字符
      • inster(’abcdc‘,’c‘) 返回第一个c的索引位置 从左往右 找不到返回0
      • trim   (截取)
      • lpad ('abc',n,'*') 从左往右补全n-length(abc)个*   如果n小于length(abc) 那么截取第n个往后的
      • rpad ('abc',n,'*') 从右往左补全n-length(abc)个*  如果n小于length(abc) 那么截取第n个往后的
      • repace(替换)  repace(’aabbc‘,’b‘,’c‘) 把所有b换成c
      • substring(返回字段)    substring('abcdef',5); 截取第5个索引开始到最后的字段
    • 数字函数
      • round (四舍五入)
      • ceil(向上取整)
      • floor(向下取整)
      • truncate(截断)
      • mod(取余) 
    • 日期函数
      • now() 返回系统日期加时间
      • curdate() 返回当前系统日期,不包含时间
      • curtime() 返回当前时间,不包含日期
      • year(now()) 返回系统时间的年份 
      • month(now()) 返回月份
      • monthname(now()) 返回月份名称(英文)
      • day()
      • hour()
      • minute()
      • datediff()  日期之间的差
      • str_to_date:当日期格式的字符转换成指定格式的日期
        • 实例 
          str_to_date('4-12-2021','%d-%m-%y')  ==》 2020-12-04
      • date_format:将日期转换成字符
        • 实例
          date_format('2021/3/12','%Yn-%my-%dr') ==》2021n-03y-12r
    • 其他函数
      • version()版本
      • database() 数据库
      • user() 用户
    • 流程控制函数
      • if (如果)
      • case(switch case 效果)  
        •   
          select id,age,
          CASE age
          when 2 then age*2
          when 3 then age*3
          else age
          end as xx
          from db01.tab;
 分组函数:
  • 一般用于处理数值的函数 
    • sum求和   
    • avg 平均值
    • max最大值
    • min最小值
    • count计算个数 
   以上分组函数都忽略null值
   可以和distanct搭配去重
  •  count函数的详细介绍
    • 统计个数就用select count(*) from db;
    • 效率:count去判断个数的时候回判断字段里面的值是否为null,不为null就加1
    • MYISAM存储引擎下,count(*) 效率高
    • INNODB存储引擎下,count(*)和count(1)差不多
  • 连接查询:
    •   select  name1,name2 from a ,b  ;    添加规则,where条件查询,否则会出现笛卡尔乘积现象,第一个表的行数*第二张表的行数
    • 年代 :sql92(等值连接,
    • 仅支持内连接),sql99(推荐)支持所有内连,左外连接+右外连接
    • 功能 :内连接   1.等值连接2.非等值连接,自连接, 外连接,交叉连接
  •  sql99 语法  实现连接条件和筛选条件的分离,可读性较高  
    • select 查询列表
    • from  表1 别名 连接类型
    • join   表2  别名 
    • on     连接条件
    • where 筛选条件
    • group by 分组
    • having 筛选条件
    • order by 排序列表
   内连接 inner
  外连接 
    左外  left outer
    右外 right outer
    全外
  交叉连接
 
  • 非等值自连接 
    • 特点
      • 1.添加排序,分组,筛选
      • 2.inner可以省略
      • 筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读
      • inner join 连接和sql92里面的等值连接实现效果是一样的,都是查询多表的交集
  • 外连接
    • 应用场景,用于查询一个表中有,另一个表中没有的记录
      • 特点:
          • 1.如外连接的查询结果为主表中的所有记录
            • 如果从表中有和它匹配的,则显示匹配的值
            • 如果没有,就显示null
            • 外连接查询结果=内连接结果+主表中有而从表中没有的记录
          • 2.左外连接:left左边的是主表
          • 3.右外连接:right右边的是主表
          • 4.左外和右外交换两个表的顺序,可以实现同样的效果                     
 
  •  交叉连接 相当于笛卡尔乘积
    • select b.*,bo.*
    • from beauty b
    • cross join boys bo;
  •  子查询
    • 含义:出现在其他语句中的select语句,称为子查询或内查询
      • 按子查询出现的位置:
        • select 后面
          • 仅仅支持标量子查询
        • from后面
          • 支持表子查询
        • where或having后面
          • 标量子查询
        • exists后面(相关子查询)
        • 按结果集的行列数不同
          • 标量子查询
          • 列子查询
          • 行子查询
          • 表子查询
    • 外部的查询,称为外查寻
  •  where或having后面
    • 标量子查询 单行
    • 列子查询 多行  in ,ang,all
    • 行子查询 多列多行
    1. 谁的工资比abel高 ?
    • select *
      from employees
      where salary>(select salary
      from employees
      where last_name='abel');
    • 查询job_id与141号员工相同,salary比143号员工多的员工信息
    • select last_name,job_id,salary
      from employees
      where job_id = (select job_id
      from employees
      where employee_id = 141)
      and salary >(select salary
      from employees
      where employee_id = 143);
    • in not in   any|some all
    • 行子查询结果集一行多列或多行多列 (查询员工编号最小并且工资最高的员工信息)  
    • select *
      from employees
      where (employee_id,salary) = (
      select min(employee_id),max(salary)
      from employees);
    • select 后面 (查询每个部门的员工个数)
    • select 
      d.department_id,
      (select count(*) from employees e where e.department_id = d.department_id) count
      from
      departments d;
    • 查询员工号=102的部门名
    • select (
      select department_name
      from departments d
      inner join employees e
      on d.department_id = e.department_id
      where e.employee_id=102
      )
    • from后面
    • 查询每个部门平均工资的工资等级
    • select
      • department_id,level
      from
      • (select avg(salary),department_id from employees ) e,
      • inner join salaryer s 
      on e.avg(salary) between (s.min,s.max);

 

    • exists 后面 相关子查询
    • select exists(select employee_id from employees) 
    • 查询有部门有员工的部门名
    • select department_name
      from departments d
      where exists(select * from employees e where d.department_id = e.department_id)
    • 分页查询  limit 起始索引,条数   limit offset,size      limit(page-1)*size,size
    • select * from employees limit 1,5;
    • 查询第11条到第25条
    • select * from employees limit 11,15;
    • union 联合查询  当我们搜索的时候字段名不一样条件不一样在多个表中时,但是属性一样,需要把他归纳为一个表的时候,用union
    • 特点(1.要求多条查询语句的查询列数一致,2.要求多条查询语句每一列类型一样,3。union可以去重 ,加union all 可以包含重复项)
    •  
      select * from employees where email like '%a%' or department_id>90; 拆分如下

      select * from employees where email like '%a%'
      union
      select * from employees where department_id>90;
     
     
 
 
 
 
 
 
 
 
 
posted @ 2021-08-17 16:18  一只小白菜。  阅读(80)  评论(0)    收藏  举报