文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Mysql基础04-查询

2019-10-28 13:05

关注

Mysql基础04-查询

关联查询

内连接:实现A∩B

select 字段列表
from A表 inner join B表
on 关联条件
where 等其他子句;

左外连接

#实现查询结果是A
select 字段列表
from A表 left join B表
on 关联条件
where 等其他子句;

#实现A - A∩B
select 字段列表
from A表 left join B表
on 关联条件
where 从表关联字段 is null and 等其他子句;

右外连接

#实现查询结果是B
select 字段列表
from A表 right join B表
on 关联条件
where 等其他子句;

#实现B -  A∩B
select 字段列表
from A表 right join B表
on 关联条件
where 从表关联字段 is null and 等其他子句;

用union代替全外连接

#实现查询结果是A∪B
#用左外的A,union 右外的B
select 字段列表
from A表 left join B表
on 关联条件
where 等其他子句

union 

select 字段列表
from A表 right join B表
on 关联条件
where 等其他子句;

#实现A∪B -  A∩B  或   (A -  A∩B) ∪ (B - A∩B)
#使用左外的 (A -  A∩B)  union 右外的(B - A∩B)
select 字段列表
from A表 left join B表
on 关联条件
where 从表关联字段 is null and 等其他子句

union

select 字段列表
from A表 right join B表
on 关联条件

UNION规则

UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过,各个列不需要以相同的次序列出)。

列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含转换的类型(例如,不同的数值类型或不同的日期类型)。

实际上,UNION在需要组合多个表的数据时也很有用,即使是有不匹配列名的表,在这种情况下,可以将UNION与别名组合,检索一个结果集。

自连接:同一张表,通过取别名的方式来虚拟成两张表

select 字段列表
from 表名 别名1 inner/left/right join 表名 别名2
on 别名1.关联字段 = 别名2的关联字段
where 其他条件

6大子句顺序

(1)from:从哪些表中筛选

(2)where:从表中筛选的条件

(3)group by:分组依据

(4)having:在统计结果中再次筛选

(5)order by:排序

降序:desc  升序:要么默认,要么加asc

虽然ORDER BY子句似乎只是最后一条SELECT语句的组成部分,但实际上DBMS将用它来排序所有SELECT语句返回的所有结果。

(6)limit:分页

limit m,n

m = (第几页 - 1)*每页的数量

n = 每页的数量

group by与分组函数

可以使用GROUP BY子句将表中的数据分成若干组

在SELECT列表中,所有未包含在分组函数中的列都应该包含在 GROUP BY子句中

包含在 GROUP BY 子句中的列不必包含在SELECT 列表中

having与where的区别

(1)where是从表中筛选的条件,而having是统计结果中再次筛选

(2)where后面不能加“分组/聚合函数”,而having后面可以跟分组函数

子查询

嵌套在另一个查询中的查询,作为子查询的SELECT语句只能查询单个列。企图检索多个列将返回错误。

根据位置不同,分为:

(1)where型

①子查询是单值结果,那么可以对其使用(=,>等比较运算符)

②子查询是多值结果,那么可对其使用(【not】in(子查询结果),或 >all(子查询结果),或>=all(子查询结果),any(子查询结果),或>=any(子查询结果),

(2)from型

必须给子查询取别名,即临时表名,表的别名不要加“”和空格

表别名不仅能用于WHERE子句,还可以用于SELECT的列表、ORDER BY子句以及其他语句部分。

表别名只在查询执行中使用。与列别名不一样,表别名不返回到客户端。

(3)exists型

注意:不管子查询在哪里,子查询必须使用()括起来

事务

保证所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),那么这些修改就永久地保存下来;要么数据库管理系统将放弃所作的所有修改,整个事务回滚(rollback)到最初状态

事务的ACID属性:

(1)原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

(2)一致性(Consistency) 事务必须使数据库从一个一致性状态变换到另外一个一致性状态。

(3)隔离性(Isolation) 事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

(4)持久性(Durability) 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响

mysql默认是自动提交,执行一句就提交一句。

我想要手动提交事务:

(1)set autocommit=false;

接下来所有语句都必须手动提交,

commit; 或 rollback; 或发生异常;

直到我set autocommit=true;或重新连接,

否则它之后的语句全部都需要手动提交

(2)start transaction;

在自动提交模式下,单独针对某一组sql开启事务

一组sql语句

commit; 或 rollback;

数据库的隔离级别

Oracle 支持的 2 种事务隔离级别:READ COMMITED, SERIALIZABLE。 Oracle 默认的事务隔离级别为: READ COMMITED 。

Mysql 支持 4 种事务隔离级别。 Mysql 默认的事务隔离级别为: REPEATABLE READ。在mysql中REPEATABLE READ的隔离级别也可以避免幻读了。

在MySql中设置隔离级别

set tx_isolation ="repeatable-read";
set global tx_isolation ="read-committed";

注意:这里的隔离级别中间是减号,不是下划线。

用户与权限

用户登录

(1)IP+用户名作为身份验证

(2)密码

给每个用户权限,4个权限级别:

(1)全局(2)数据库(3)表(4)字段

依次校验权限,如果前面通过了,后面就不校验了:

全局 > 数据库 > 表 > 字段

注意:root@localhost,这个用户始终保留所有的全局权限。

查看账户权限:

show grants for user@host;

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯