澳门新葡亰官网app 3

MySQL基本操作,详解MySQL中的分组查询与连接查询语句

By admin in 澳门新葡亰官网app on 2019年5月21日

分组查询 group by group by 属性名 [having 条件表达式][ with rollup]
“属性名 ”指按照该字段值进行分组;“having 条件表达式
”用来限制分组后的显示,满足条件的结果将被显示;with rollup
将会在所有记录的最后加上一条记录,该记录是上面所有记录的总和。

详解MySQL中的分组查询与连接查询语句,详解mysql

分组查询 group by group by 属性名 [having 条件表达式][ with rollup]
“属性名 ”指按照该字段值进行分组;“having 条件表达式
”用来限制分组后的显示,满足条件的结果将被显示;with rollup
将会在所有记录的最后加上一条记录,该记录是上面所有记录的总和。

1)单独使用
group by 单独使用,查询结果只显示一个分组的一条记录。
实例:

select * from employee group by sex;

将只显示男女两条记录。

2)与group_concat()函数一起使用
每个分组中指定字段值都显示出来
实例:

select sex,group_concat(name) from employee group by sex;

显示结果中“女”会显示所有sex为“女”的名字name

sex | group_concat(name)
女 | 小红,小兰
男 | 张三,王五,王六

3)与集合函数一起使用
实例:

select sex,count(sex) from employee group by sex;

结果:

sex | count(num)
女 | 1
男 | 3

count()为计算个数的方法。

4)与having一起使用
“having条件表达式”,可以限制输出结果。只有满足条件表达式的结果才显示。
实例:

select sex,count(sex) from employee group by sex having count(sex) >= 3;

结果:

sex | count(sex)
男 | 3

“having条件表达式”作用于分组后的记录。

5)按多字段进行分组

select * from employee group by d_id,sex;

查询结果先按d_id分组,再按sex进行分组

6) 与with rollup一起使用
使用with
rollup将会在所有记录的最后加上一条记录,这条记录是上面所有记录的总和
实例:

select sex,count(sex) from employee group by sex with rollup;

结果:

sex | count(sex)
女 | 1
男 | 5
null | 6

如果是字符串的话,比如姓名就会生成“张三,李四,王五”这种类型的结果,即name总和。

连接查询 将两个及两个以上的表连接起来选取所需数据。

1)内连接查询:
当两个表中具有相同意义的字段值相等时,就查询出该条记录。
实例:

复制代码 代码如下:

select num,name,employee.d_id,age,d_name from employee,department
where employee.d_id = department.d_id

因字段名相同,所以取d_id字段值时最好指定哪张表的字段。

2)外连接查询
select 属性名列表 from 表名1 left|right join 表名2 on
表名1.属性名1=表名2.属性名2;
左连接查询:
进行左连接查询时,可以查出表名1中所指的表中所有记录。而表名2所指表中,只能查询出匹配的记录。
实例:

复制代码 代码如下:
select num,name,employee.d_id,age,d_name from employee left join
department on employee.d_id = department.d_id;

右连接查询:
与左连接相反,可以查询出表名2中的的所有记录,而表名1中所指的表中,只查询出匹配的记录。

PS:使用集合函数查询 集合函数包括count(),sum(),avg(),max()和min()。
1)count()函数
统计记录条数
实例:

select count(*) from employee;

与group by一起使用

select d_id,count(*) from employee group by d_id;

上述语句会先分组后统计。

2) sum()函数
sum()函数是求和函数
实例:

select num,sum(score) from grade where num= 1001;

select num,sum(score) from grade group by num;

sum()只能计算数值类型字段。
3)avg()函数
avg()函数是求平均值函数。
实例:

select avg(age) from employee;

select course,avg(score) from group by course;

4)max(),min()函数
求最大值和最小值。
实例:
select max(age) from employee;
select num,course,max(score) from grade group by course;
对于字符串的最大值问题,max()函数是使用字符对应的ascii码进行计算的。

MySQL的结构

一共分四层,分别是:

1.
连接层:
主要是一些客户端和链接服务,包含本地sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信.
主要完成一些类似于链接处理.授权认证.及相关的安全方案.

2.
服务层(可优化):
第二层架构主要完成大的核心服务功能,如SQL缓存的查询,SQL的分析和优化和内置函数的执行.

3.
引擎层(可优化):
它真正的负责了Mysql中数据的存储和提取,服务器通过API与存储引擎进行通信,不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取.

4.
存储层:
它主要是将数据存储再运行于设备的文件系统之上,并完成于存储引擎的交互.


1)单独使用
group by 单独使用,查询结果只显示一个分组的一条记录。
实例:

您可能感兴趣的文章:

  • MySQL中对表连接查询的简单优化教程
  • MySQL中基本的多表连接查询教程
  • 经典mysql连接查询例题
  • 详解MySql基本查询、连接查询、子查询、正则表达查询
  • MySQL笔记之连接查询详解
  • MySQL查询优化:连接查询排序limit(join、order by、limit语句)介绍
  • MySQL查询优化:用子查询代替非主键连接查询实例介绍
  • MySQL查询优化:连接查询排序浅谈
  • MySQL中distinct与group by语句的一些比较及用法讲解
  • MySQL中Distinct和Group By语句的基本使用教程

分组查询 group by group by 属性名 [having 条件表达式][ with rollup]
“属性名 ”指按照该字段值…

MySQL的常用数据库引擎

共有十多个,但常用的有两个: MyISAM和InnoDB

MyISAM: 偏读,侧重点是性能

InnoDB: 偏事务       下面这张图是两者的

两者的对比

澳门新葡亰官网app 1

两者的对比


select * from employee group by sex;

MySQL的特点

  1. MySQL把数据存储在表格中,使用标准的结构化查询语言-SQL访问数据库

2.
MySQL是完全免费的,在网上可以任意下载,并且可以查看到它的源文件,进行必要的修改

  1. MySQL服务器的功能齐全,运行速度很快,十分可靠,有很好的安全感

4.
MySQL服务器在客户机,服务器嵌入系统中使用,是一个客户机/服务器系统,能够支持多线程,支持多个不同的客户程序和管理工具


将只显示男女两条记录。

MySQL的对象

表(table)  /  视图(view)  /  索引(index)  /  序列(squence)  / 
存储函数(function)  /  存储过程(procedure)  /  触发器(trigger)


2)与group_concat()函数一起使用
每个分组中指定字段值都显示出来
实例:

#{} 与 ${}的区别

在MyBatis中:

#{}:#{}使用的是,会有类型转换,比较安全,也是官网推荐使用的

${}:使用字符串拼接,会有sql注入,不安全,不推荐使用


select sex,group_concat(name) from employee group by sex;

MySQL对库表的操作

linux中进入到MySQL的安装目录下,  mysql -uroot -p   再输入密码 
OK,已经进入

select database(): 查看当前使用的数据库      show
databases:查看所有的数据库

use database_name:切换数据库        create database 数据库名:创建数据库

drop database database-name:删除数据库       show
tables:查看数据库中所有的表   

drop table table_name:删除表      create table 表名: 创建表

显示结果中“女”会显示所有sex为“女”的名字name

MySQL的增(insert)

insert into user values (NULL,’x’,’h’);    //不能省略可空字段

inser into user values (NULL,’x’,’h’),(NULL,’x’,’h’);   
//多插入,逗号隔开

sex | group_concat(name)
女 | 小红,小兰
男 | 张三,王五,王六

MySQL的删(delete)

delete from user where id=1;    记得价格过滤条件,不然会删除所有..

3)与集合函数一起使用
实例:

MySQL的改(update)

updata employees set 要更改的列

select sex,count(sex) from employee group by sex;

MySQL的查(select)

MySQL的查询大致可以分为5个部分: 基本的select语句  / 
过滤和排序数据 
/  多表查询  /  单行函数 分组函数

基本的selcet语句: select id , name from employees 

过滤和排序数据: select id , name from employees where id != 2   
=(等于)  >(大于)  >=(大于/等于)  <(小于)  <=(小于等于) 
!=(不等于)  

select id from employees where id > 5 and id < 7    and为并且 
为字符串的话,就是字典顺序来查询

select id from employees where id in (5,6,7)      … 

like为模糊查询: “%a%”  “_a%”    and为并且    in(集合)   
\为转义字符   or或者   not否 

order by排序 数值型/字符型/日期型都可以排序
,asc为升序,desc为降序,可以多级嵌套排序

select * from employees order by id asc;       //升序排序 
一定要写在where后面!!!

**多表查询
**

多表查询,第一步,你得多各张表的字段及联系足够熟悉,本质就是一张表放不下这么多字段.把原本同一张表的字段放到其他的表里面,两张表之间一定又相同的唯一字段作为桥接,联系

select id , name from employees departments where  employees.’id’ =
departments.’id’   
//就是from的时候写多张表就OK了,然后过滤条件,也就是连接的条件,
可以优化
, 在select那里,直接写上每一个字段是来自哪里 
如employees.name

等值连接和非等值连接:
前者就是上面演示的那种,两者的关系是相等的,后者就是在一个区间,通常用and来表示

自连接和非自连接:
前者连接的是本身的这张表,比如查自己的上司是谁,后者连接的是其他的表

内链接和外连接:前者是只查询两者相匹配的行,比如之上的例子就是查询相等的

外连接:使用join和on,意思就是除了两表中向同的数据外,还把左表中或右表中的数据也查询出来,于是就有了左外连接,右外连接.,不支持满连接.
使用的outer join和on函数

select e.id,d.name from emp e left outer join dep d on e.’id’ =
d.’id’;   这是左外连接,因为是left outer join on ,改成右外连接就是right
outer join on

单行函数

单行函数就是一个个的函数,具体的函数有:  concat(“11″,”22”) 
//它将两个字符串连接起来    sunstr(“hello”,1,2)
//截取1到2的字符串,得到he    length(“111111”) //得到这个字符串的长度  
instr(“hello”,”e”) //返回这个字符的索引   trim(“h” from “hello”)
//返回除去h之外的所有字符串     replace(“abcd”,”b”,”m”)
将字符串中的b转换成m,再输出字符串

分组函数

avg(salary) //表示平均        sum(salary) //表示总共         max(salary)
//最高的       min(salary) //最低的   count(salary) //计数

子查询

子查询的本质就是查询的嵌套,可以嵌套很多层,也是属于查询也因为子查询而变得千变万化


结果:

MySQL的运行顺序

运行顺序基本如下:

  1. from     2. on     3. join     4. where     5. group by

  2. avg,sum     7. select     8. distinct     9. order by     10. limit


sex | count(num)
女 | 1
男 | 3

MySQL中的join查询

澳门新葡亰官网app 2

上图中分别是: 左外链接,右外链接,内连接

  1. 左外连接: select * from tablea a left join table b on a.key = b.key

  2. 右外连接: select * from tablea a right join table b on a.key = b.key

  3. 内连接: select * from tablea a inner join tableb b on a.key = b.key

澳门新葡亰官网app 3

上图中分别是: 左链接,右链接,全连接,外连接

左连接: select * from tablea a left join tableb b on a.key = b.key
where b.key is null

右连接: select * from tablea a right join tableb b on a.key = b.key
where a.key is  null

全链接:

select * from tablea a left join tableb b on a.key = b.key union select

* from tablea a right join tableb b on a.key = b.key

外连接: select * from tablea a full outeb join tableb b on a.key =
b.key where a.key is null or b.key is nul

count()为计算个数的方法。

4)与having一起使用
“having条件表达式”,可以限制输出结果。只有满足条件表达式的结果才显示。
实例:

select sex,count(sex) from employee group by sex having count(sex) >= 3;

结果:

sex | count(sex)
男 | 3

“having条件表达式”作用于分组后的记录。

5)按多字段进行分组

select * from employee group by d_id,sex;

查询结果先按d_id分组,再按sex进行分组

6) 与with rollup一起使用
使用with
rollup将会在所有记录的最后加上一条记录,这条记录是上面所有记录的总和
实例:

select sex,count(sex) from employee group by sex with rollup;

结果:

sex | count(sex)
女 | 1
男 | 5
null | 6

如果是字符串的话,比如姓名就会生成“张三,李四,王五”这种类型的结果,即name总和。

澳门新葡亰官网app,连接查询 将两个及两个以上的表连接起来选取所需数据。

1)内连接查询:
当两个表中具有相同意义的字段值相等时,就查询出该条记录。
实例:

复制代码 代码如下:

select num,name,employee.d_id,age,d_name from employee,department
where employee.d_id = department.d_id

因字段名相同,所以取d_id字段值时最好指定哪张表的字段。

2)外连接查询
select 属性名列表 from 表名1 left|right join 表名2 on
表名1.属性名1=表名2.属性名2;
左连接查询:
进行左连接查询时,可以查出表名1中所指的表中所有记录。而表名2所指表中,只能查询出匹配的记录。
实例:

复制代码 代码如下:

select num,name,employee.d_id,age,d_name from employee left join
department on employee.d_id = department.d_id;

右连接查询:
与左连接相反,可以查询出表名2中的的所有记录,而表名1中所指的表中,只查询出匹配的记录。

PS:使用集合函数查询 集合函数包括count(),sum(),avg(),max()和min()。
1)count()函数
统计记录条数
实例:

select count(*) from employee;

与group by一起使用

select d_id,count(*) from employee group by d_id;

上述语句会先分组后统计。

2) sum()函数
sum()函数是求和函数
实例:

select num,sum(score) from grade where num= 1001;

select num,sum(score) from grade group by num;

sum()只能计算数值类型字段。
3)avg()函数
avg()函数是求平均值函数。
实例:

select avg(age) from employee;

select course,avg(score) from group by course;

4)max(),min()函数
求最大值和最小值。
实例:
select max(age) from employee;
select num,course,max(score) from grade group by course;
对于字符串的最大值问题,max()函数是使用字符对应的ascii码进行计算的。

您可能感兴趣的文章:

  • 超详细mysql left join,right join,inner
    join用法分析
  • 深入理解mysql之left join
    使用详解
  • MySQL Left
    JOIN时指定NULL列返回特定值详解
  • MySQL表LEFT JOIN左连接与RIGHT
    JOIN右连接的实例教程
  • MySQL在右表数据不唯一的情况下使用left
    join的方法
  • 解析mysql left( right )
    join使用on与where筛选的差异
  • MySQL的LEFT
    JOIN表连接的进阶学习教程
  • MySQL利用profile分析慢sql详解(group left
    join效率高于子查询)
  • MySQL中基本的多表连接查询教程
  • mysql连接查询(左连接,右连接,内连接)
  • mysql多个left
    join连接查询用法分析

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 澳门新葡亰官网app 版权所有