MySQL回顾笔记
MySQL
-
简介
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
- 外连接查询结果=内连接结果+主表中有而从表中没有的记录
- 1.如外连接的查询结果为主表中的所有记录
-
- 特点:
- 应用场景,用于查询一个表中有,另一个表中没有的记录
-
-
-
-
- 2.左外连接:left左边的是主表
- 3.右外连接:right右边的是主表
- 4.左外和右外交换两个表的顺序,可以实现同样的效果
-
-
-
- 交叉连接 相当于笛卡尔乘积
- select b.*,bo.*
- from beauty b
- cross join boys bo;
- 子查询
- 含义:出现在其他语句中的select语句,称为子查询或内查询
- 按子查询出现的位置:
- select 后面
- 仅仅支持标量子查询
- from后面
- 支持表子查询
- where或having后面
- 标量子查询
- 列
- 行
- exists后面(相关子查询)
- 表
- 按结果集的行列数不同
- 标量子查询
- 列子查询
- 行子查询
- 表子查询
- select 后面
- 按子查询出现的位置:
- 外部的查询,称为外查寻
- 含义:出现在其他语句中的select语句,称为子查询或内查询
- where或having后面
- 标量子查询 单行
- 列子查询 多行 in ,ang,all
- 行子查询 多列多行
- 谁的工资比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
- (select avg(salary),department_id from employees ) e,
- inner join salaryer s
-
- 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;

浙公网安备 33010602011771号