mysql 连接

内连接
关键字:inner join
含义:内连接需要区分左表和右表,出现在join关键字左边的就是左表,反之就是右表!
数据在左表中存在,同时在右表中又有对应的匹配的结果才会被保存!如果没有匹配上,我们就认为数据没有意义,也就不会保存
语法规则:
select *|字段列表 from 左表 inner join 右表 on 左表.字段=右表.字段;
注意:1.内连接的本质还是在做交叉连接,只不过是在交叉连接的基础之上加上一定的连接条件!符合连接条件的才会被显示,不符合的就不显示
2.内连接中的inner join可以写成join,inner可以省略,默认的就是内连接
3.当左表和右表进行匹配的字段名相同的时候,字段名的前面必须加上表名
4.表名一般都很长,可以用别名来代替
5.on是指定条件的关键字,所以也可以使用where代替,但是使用on的效率更高

外连接
外连接又可以分成左外连接和右外连接!

左外连接
关键字:left outer join
跟内连接一样,也是拿左表的每一条记录按照on后面的条件去匹配右表,如果匹配成功,那么就保留两张表的所有的记录,如果匹配失败(也就是左表的一条记录无法匹配右表的所有的记录),此时,只保留左表的记录,右表的记录全部用null代替,此时左表也叫作主表!

右外连接
关键字:right outer join
跟内连接一样,也是拿左表的每一条记录按照on后面的条件去匹配右表,如果匹配成功,那么就保留两张表的所有的记录,如果匹配失败(也就是右表的一条记录无法匹配左表的所有的记录),此时,只保留右表的记录,左表的记录全部用null代替,此时右表也叫作主表!
注意:
1,left outer join和right outer join中的outer是可以省略的!所以左外连接也叫作左连接,右外连接也叫作右连接!
2,这里的关键字on就不能用where来代替了!

自然连接
关键字:natural join
含义:所谓的自然连接,其实就是“自动连接”,指的是两个或多个表之间在进行连接查询的时候,系统会自动的去匹配连接条件,而不需要人为的指定,从形式上看,也是没有on关键字了!

自动匹配的规则如下:
只要两张表中具有相同的字段名,系统就认为是一个连接条件,就会主动的去匹配这两个相同的字段名的值是否相同,如果两个表的相同的字段名的值相同,就认为匹配成功;如果两张表中有多个字段名相同,则所有相同的字段名的值都要相同才算是匹配成功!

所以,自然连接的本质跟前面的内连接和外连接没有太大区别,只是这里的连接条件不是由用户来指定,而是由系统来指定罢了!

既然连接查询可以分成内连接和外连接,所以,自然连接也可以分成自然内连接和自然外连接!

自然内连接
语法:
左表 natural inner join 右表
自然内连接其实就是内连接,只是这里的条件是由系统自动指定的

查询的记录其实是一样的,因为此时,内连接中用户指定的匹配条件跟自然内连接中由系统指定的条件刚好一样,只是自然内连接会主动的删除重复的那一列而且将重复的那一列放在最前面!

自然外连接
语法形式:
左表 natural left|right join 右表
自然外连接其实就是外连接,只是这里匹配条件也是由系统自动指定罢了!

子查询(标量子查询)
方法1:
select * from 表名 order by 字段列表 desc limit 值
方法2:
select * from 表名 where 字段列表= (select max(分数字段列表) as 别名 from 表名)

分类:
单一值:也就是返回单行单列的子查询,也叫作标量子查询!

一列:也就是返回单列的子查询,也叫作列子查询!

一行:返回一行的子查询就叫作行子查询!

多行多列:其实也叫作表子查询!

列子查询
方法1:
select 字段列表 from 表名 where 字段列表 is not null;
方法2:
select * from 表名 where 字段列表 in (select 字段列表 from 表名 where 字段列表 is not null);

行子查询
语法形式:
select * |字段列表 from 表名 where (字段1,字段2....)=(行子查询结果)

表子查询
语法形式:
select *|字段列表 from 子查询结果 as 别名 where 字句.....

exists子查询
exists主要是用来做判断的,返回的结果是一个布尔值!
判断依据:
如果子查询可以返回数据,那么exists的结果就是true,否则就是false!
exists的主要作用就是判断后面的select语句有没有查询到数据!

时间: 2024-10-06 16:54:21

mysql 连接的相关文章

查看mysql连接状态各类参数

命令: show processlist; 如果是root帐号,你能看到所有用户的当前连接.如果是其它普通帐号,只能看到自己占用的连接. show processlist;只列出前100条,如果想全列出请使用show full processlist; mysql> show processlist; 命令: show status; 命令:show status like '%下面变量%'; Aborted_clients 由于客户没有正确关闭连接已经死掉,已经放弃的连接数量. Aborted

redis mysql 连接池 之 golang 实现

分享一下 golang 实现的 redis 和 mysql 连接池,可以在项目中直接引用连接池句柄,调用对应的方法. 举个栗子: 1 mysql 连接池的使用 (1) 在项目子目录放置 mysql.go (2)在需要调用的地方导入连接池句柄 DB (3)调用 DB.Query() 2 redis 连接池的使用 (1)在项目子目录放置 redis.go (2)在需要调用的地方导入连接池句柄 Cache (3)调用 Cache.SetString ("test_key", "te

虚拟机中MySQL连接问题:Lost connection to MySQL server at 'reading initial communication packet, system error: 0 以及 host is not allowed to connect mysql

环境:在VirtualBox中安装了Ubuntu虚拟机,网络使用了NAT模式,开启了端口转发. 局域网内其他计算机访问虚拟机中的MySQL Server出现两个问题: Lost connection to MySQL server at 'reading initial communication packet, system error: 0 以及 host is not allowed to connect mysql 1.解决Lost connection to MySQL server

mysql连接错误导致用户blocked

1.每过一段时间线上业务就会出现如下错误: kHost 'XXXXX' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'Connection closed by foreign host 2.需要使用mysqladmin flush-hosts解锁用户 3.查看错误日志 4.查看官方文档对max_connect_errors的解释如下     当某用户连续的错误连接达到max_c

node.js中mysql连接池的使用

https://cnodejs.org/topic/58378543bde2b59e06141f5a 起初的做法是创建一个连接然后使用,后来发现一段时间后会出现卡死不响应的情况,只有重启nodejs服务,搜索一番后想到了用连接池,经测试,不再出现卡死不响应情况. 参考链接: https://www.npmjs.com/package/mysql http://blog.csdn.net/lovingshu/article/details/41721233 Node.js mysql连接池模块 1

2.MySQL 连接与管理

mysql连接 mysql_connect() 函数用于开启一个到 MySQL 数据库的连接. 语法: mysql_connect( servername, username, password ) 返回资源型或FALSE 在 PHP 程序执行完之后,会自动关闭对数据库的连接.如果想在执行完之前就关闭数据库连接,可以使用 mysql_close() 函数: mysql_close( $conn );其参数是一个资源型变量 返回布尔值

shell命令批量杀死MySQL连接进程

(1)将所有的MySQL连接进程杀掉 for i in `mysql -uroot -pzhangyun -Bse "show processlist" | grep -v "show processlist" | awk '{print $1}'` do mysql -uroot -pzhangyun -e "kill $i" done 注:这里将自身命令的show processlist进程过滤掉 (2)删除指定用户的连接进程 for i i

mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案 详细出处参考:http://www.jb51.net/article/32284.htm

MySQL 的默认设置下,当一个连接的空闲时间超过8小时后,MySQL 就会断开该连接,而 c3p0 连接池则以为该被断开的连接依然有效.在这种情况下,如果客户端代码向 c3p0 连接池请求连接的话,连接池就会把已经失效的连接返回给客户端,客户端在使用该失效连接的时候即抛出异常 解决这个问题的办法有三种: 1. 增加 MySQL 的 wait_timeout 属性的值. 修改 /etc/mysql/my.cnf文件,在 [mysqld] 节中设置: # Set a connection to w

Adobe Dreamweaver CC MySQL连接 报404错误的解决方法

Adobe Dreamweaver CC MySQL连接时总报404报错,并给以下两个提示: 1) 在该服务器机器上没有测试服务器运行. 2) 为该站点指定的测试服务器没有映射到http://localhost/_mmServerScripts/MMHTTPDB.phpURL.请确认url前缀映射到了你站点的根上. 网上翻了一堆网站,折腾了两三天,发现可以按如下方法解决: 1)首先要在http://localhost/security/index.php配置mysql的访问密码(我用的是XAMP

CentOS下安装MySQL,Windows下使用Navicat for MySql连接

安装 查看有没有安装过:          yum list installed mysql*          rpm -qa | grep mysql* 查看有没有安装包:          yum list mysql* 安装mysqlclient:          yum install mysql 安装mysql server端:          yum install mysql-server          yum install mysql-devel 启动&&停止