mysql查询语句(mysql学习笔记七)
Sql语句
一般顺序GHOL : group by,having ,order by,limit
如果是分组,应该使用对分组字段进行排序的group by语法
Limit start ,length
去除重复记录默认为all
Select distinct 字段 from
Select distinct * from 没用(所有字段组合不相同才认为不相同,用在这里基本没用),记录值完全一样时取其一个
Union查询
把两个select 结果union起来
( select 语句1)union(select 语句2)

选出英语最高分和数学最高分的学生的id,name ,class


注意加括号
有重复记录时的合并
按english由高到低和由低到高的结果合并



在符合语句中 order by功能受影响,需加上limit


子语句的排序
1.将子语句包裹在子括号内
2.子语句的 order by
中有order by配合Limit使用时才生效。
原因是:union在做子语句时,会对没有limit的order by优化(忽略)
所有结果排序
只需要在最后一个select语句后增加相应排序即可。
子语句括号非必须最后一个排序默认针对所有结果。
Union检索的字段必须个数一样(否者出错),数据类型也一样(发生类型转换) 列名由第一个select检索列名来定
子查询
语句内部的查询语句
表中数据

查出英语成绩最高的学生的信息
不用子查询:

但有2个学生英语成绩最高且一致,这个时候在不知道表里数据的情况下就不能使用这种查询方法
思路:先找出英语成绩最大的那个值,再找出哪些学生的英语成绩与这个最大的值相等。这样一步一步进行查询。


只检索一个字段时可以作为一个值使用,必须只检索一个字段


子查询分类
不同的分类会有不同的使用方式
分类标准:
子查询出现的位置
子查询的返回值形式
返回值分类:
单一值,单列,多列,多行多列(表)

出现位置:
Where 型,where 后
From型 from后
Exists型


使用:
标量的:获得一个值后用关系运算符进行运算(> >=,< <= = <> )
列子查询(只是1列):获得一列通常是对个行的一列值(一个集合)
使用in,not in运算符

查出班级为php101中所有学生的信息


集合操作符还有
Any(集合) 集合中的任意一个
=any(集合) 等于集合中的任意一个即可
等同于in
=All(集合) 集合中的所有元素
!=all(集合) 不等于集合中的所有元素等同于Not in


!=any(集合) 不等于集合中的任意一个元素成立即可,即为只要不等于其中的一个元素即为成立的。

注意:这种语法不该出现在实际开发中
Some(集合) 集合中的一些
语法上与any一样
总结:
=any 等同于in
!=all 等同于 not in
Some 和any同义
All,any ,some可以使用除了=,!=之外运算符,比in强大
返回一行
在参与比较时,使用括号可以构建一行
(field1,field2,…)
表中数据

现在要查询出和贺8在同样的班级且与他math成绩一样的同学的信息

子查询


返回一个表
如果用在from子句内,要求要是一个表
现在是查询结果,必须给这个查询结果起别名
表中数据

查询php103班 english不及格的学生信息

必须有别名

Exists
如果子查询可以返回数据则返回真,否者返回假
有以下2表
A表

B表

在a中查询出id在 b中有的记录


先获取a表的第一行记录,在子查询中判断a表的id与b表的id比较
连接查询
Join

每个实体,一个表
一个业务逻辑,使用多个实体的数据
多张表应该在一起使用,将多个表的记录连接起来

Teacher表

Teacher_class1表

查出代课老师的代课信息





笛卡尔(交叉)连接


内连接处理
在连接时,是可以省略连接条件的。意味着,所有的左表数据,都要与右表的记录做一个连接
共存在m*n个连接
称之为交叉连接或笛卡尔集
此时可以使用 cross join代替inner join
Mysql中cross join与inner join相同
Inner join是默认的连接方式(inner 省略)

等效的
也可使用

表示笛卡尔积

结果虽然一样
On数据连接条件
Where数据过滤条件
但 where是先连接成笛卡尔积
然后做筛选,而on 是在连接时就判断


上表是连接条件2个
下表是
过滤条件2个

下表连接过滤各一个


Using:要求负责连接的两个实体之间字段名称一致。

查询条件与外连接通用 外连接不能用where作为连接条件。
注意:
无论是连接条件还是连接查询多字段列表,都没必要一定要写表名.字段语法,是否写取决于是否发生冲突。建议写上。
别名
表应该别名,保证简洁清晰。
列别名


外连接:
分类
左外连接
右外连接
全外连接(暂不支持)
左连接
在连接时,如果出现左边表,数据连接不到右边表的情况,则左表的数据在最终结果内保留。而如果出现右表的数据连接不到左标的情况,右表数据被丢弃。


由于内连接没有左右连接之分,left outer join中outer可以省略。
在外连接中不可以用where做连接条件可用on ,using
表别名可以用在连接条件里,但字段别名不可以。

表起别名后,在筛选或者连接条件里必须用别名,原名不能用了
左表teacher里的数据孙武连接不上也保留。


全外连接左外与右外 union(取并集)
内连接是左外右外交集
Using会去掉结果中重复字段,并放在列首
外连接不能使用没有条件的连接(不像内连接那样形成笛卡尔积)
自然连接
通过mysql自己判断完成连接过程。不需要指定连接条件,mysql会使用多表内相同的字段作为连接条件。
表one数据

Two表数据


自然连接也有内外之分
内:natural join
外:左外natural left join ,右外 natural right join


mysql查询语句(mysql学习笔记七)的更多相关文章
- MySQL基础语句【学习笔记】
放在这里,以备后查. 1. 数据库, 数据库服务器, 数据库语言 数据库,是持久性数据的集合,供给定企业的应用程序系统使用,并且由一个数据库管理系统来管理: 数据库服务器,又称数据库管理系统,用来管理 ...
- MySQL实战45讲学习笔记:第三十九讲
一.本节概况 MySQL实战45讲学习笔记:自增主键为什么不是连续的?(第39讲) 在第 4 篇文章中,我们提到过自增主键,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧 ...
- MYSQL查询语句大全集锦
MYSQL查询语句大全集锦 1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2.创建一个数据库MYSQLDATA mysql> C ...
- MySQL事务控制语句(学习笔记)
MySQL事务控制语句(学习笔记) MySQL事务控制语句 在mysql命令行的默认下,事务都是自动提交的,sql语句提交后马上会执行commit操作.因此开启一个事务必须使用begi ...
- 深挖计算机基础:MySQL实战45讲学习笔记
参考极客时间专栏<MySQL实战45讲>学习笔记 一.基础篇(8讲) MySQL实战45讲学习笔记:第一讲 MySQL实战45讲学习笔记:第二讲 MySQL实战45讲学习笔记:第三讲 My ...
- 多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客
多IDC数据分布--MySQL多机房部署 - 学习笔记 - 51CTO技术博客 多IDC数据分布--MySQL多机房部署
- MySQL查询语句执行过程及性能优化(JOIN/ORDER BY)-图
http://blog.csdn.net/iefreer/article/details/12622097 MySQL查询语句执行过程及性能优化-查询过程及优化方法(JOIN/ORDER BY) 标签 ...
- PHP之路——MySql查询语句
1,select查询的基本结构 select 字段 from 表 where 过滤条件 group by 分组条件 having 过滤的第二条件 order by 排序条件 limit 限定结果条件; ...
- mysql查询语句,通过limit来限制查询的行数。
mysql查询语句,通过limit来限制查询的行数. 例如: select name from usertb where age > 20 limit 0, 1; //限制从第一条开始,显示1条 ...
随机推荐
- Dubbo 源码安装与编译
源码地址: https://github.com/alibaba/dubbo 需要提前准备好 Maven 环境, 相关准备方法请看: http://www.cnblogs.com/ghj1976/p ...
- Ext.Form 自动填写表单内容
前台: 表单必须含有name属性 if (action == 'edit' || action == 'show') { MyForm1.getForm().load({ url: '/data/cu ...
- java 错误之:Exception in thread "main" java.lang.NoClassDefFoundError
Exception in thread "main" java.lang.NoClassDefFoundError: PointTest 环境变量的问题,把环境变量设置好了就可以了 ...
- android依赖工程,子工程覆盖父工程的相同属性
当业务复杂,开始拆分工程后,就会遇到如下问题: 工程A为lib父工程, 工程B为子工程. 两个工程中均有资源文件(比如strings.xml),且资源文件中有相同的key, 那么值到底使用谁的? 实 ...
- ubuntu关闭THP
所有linux系统详细设置参考: https://docs.mongodb.org/manual/tutorial/transparent-huge-pages/ vi /etc/init.d/dis ...
- MyEclipse 6.5 破解文件代码
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader; public cl ...
- Linux下串口ttyS2,ttyS3不能用的问题解决办法
PC104,Xlinux下,突然发现串口3,4不能用... 以为是硬件的问题,换成wince后,3,4工作正常,排除电路问题 在linux下查看dmesg: serial8250: ttyS0 at ...
- iOS 7.0获取iphone UDID 【转】
iOS 7.0 iOS 7中苹果再一次无情的封杀mac地址,使用之前的方法获取到的mac地址全部都变成了02:00:00:00:00:00.有问题总的解决啊,于是四处查资料,终于有了思路是否可以使用K ...
- 常用的mysql操作命令
1.[修改密码] 进入mysql中,使用命令:SET PASSWORD FOR 'root'@'localhost' = PASSWORD('新密码'); 2.[授权] GRANT SELECT, I ...
- 关于Windows平台下应用程序加载DLL模块的问题.
本文将讨论以下问题: (1)Windows可执行程序会从哪些目录下加载DLL. (2)如何将可执行使用的DLL放置到统一的目录下,而不是与EXE同一目录. (3)可执行程序加载了不该加载的DLL. ( ...