分页查询,mysql查询语句

一、 子查询的定义
出现在任何语句中的select语句,称为子查询或者内查询,外部的查询语句称为主查询或者外查询,子查询可以包罗普通select可以分包的其他语句。
表面查询:select、insert、update、delete、set等,首要就是在select的选取。
二、 子查询的归类
1.依据子查询出现的岗位
①select后边:仅仅协理标量子查询
②from后边:协理表子查询
③where或having前边:接济标量子查询、列子查询、行子查询
④exist后:表子查询
2.结出集的行列数
①标量子查询:结果集一行一列
②列子查询:结果一列多行
③行子查询:一行多列
④表子查询:多行多列
3.子查询的表征
①子查放在小括号内
②子查询一般位于规范左边
③标量子查询,一般搭配着单行操作符使用[> < >= <= =
<>]
④列子查询,一般搭配着多行操作符使用[in、any/some、all]
⑤子查询的实践优先于主查询执行,主查询的口径用到了子查询的结果
3.select后边,仅仅接济标量子查询
997755.com澳门葡京 1
4.from背后:匡助表子查询
其查询结果可以比作一张表,必须给表起别名
997755.com澳门葡京 2
5.where或having后面
①支撑标量子查询、行子查询、列子查询
②in、any、all的理解
in:等于列表中的任意一个,如:a
[10,30,60,80,100],a等于5个数中的任意一个,等价于=any
not in:列表中的任意一个都不等于,如a[10,20,30,40,50] a
不等于其中任何一个,等价于<>all
any/some:和子查询重回的某一个值进行比较,<any表示小于任意一个,等价于<max(字段名)
all:和子查询的所有值举办相比较,<all表示小于所有的,等价于<min(字段名)
③标量子查询
997755.com澳门葡京 3
④列子查询(一行多列)
997755.com澳门葡京 4
⑤行子查询(一行多列)
997755.com澳门葡京 5
6.exists后面
语法:exists(完整的查询语句),结果为0或者1
997755.com澳门葡京 6
三、 分页查询
出于数据量较大,一页展现不完全,须要分页查询。
1.为主语法:
Select 查询列表 from 表1
[连日来类型 join 表2
on 连接条件
where 筛选标准
group by 分组字段
having 分组后筛选
order by 排序字段
limit 分组条件]
2.limit特点
①坐落查询语句的最后面
②limit [index,] size
index起始的下标,size每页彰显的条条框框数,省略起初地方,默许为0
③公式:limit (page-1)*size,size;page是要来得的页数
997755.com澳门葡京 7
四、 联合查询(union)
union: 将多条查询语句的结果合并成一个结出
宗旨语法:查询语句1 union 查询语句2 union 查询语句3…
着力采纳:要询问的结果来自于三个表,且五个表没有一贯关系,查询的音讯内容一致
①多条查询语句字段数目一致
②渴求每一列的门类和一一尽量一致
③union关键之默认去重,union all可以分包重复项
997755.com澳门葡京 8

一.外键(foreign key)

外键用于记录表之间的关系
外面的键(键不在自己表中):即使有一张表中有一个字段(非主键)指向其它一张表的主键,那么将该字段称之为外键
(一张表能够有三个外键)

1.充实外键

  • 创建表时候增加外键:
    foreign key(外键字段) reference 外部表 (主键字段);
  • 在新增表之后扩展外键:
    alter table 表名 add [constraint 外键名字] foreign key(外键字段)
    reference 父表(主键字段);

997755.com澳门葡京 9

创造表时候增添外键

997755.com澳门葡京 10

在新增表之后增添外键

2.改动外键&&删除外键

外键无法修改,只好删除后新增

除去外键
alter table 表名 drop foreign key 外键名;

一张表中可以有三个外键,但名字不可能一如既往

997755.com澳门葡京 11

除去外键

外键删除无法因而查看表结构显示,应该经过查看表创制语句查看

3.外键效率

  • 1.对父表

对父表的羁绊:父表数据进行写操作(删和改:都不能够不涉及到主键本身),如果对应的主键在子表中早已被数据援引,那么分化意操作。

  • 2.对子表(外键字段所在的表)

封锁子表数据操作:子表数据开展写操作的时候,假设对应的外键字段在父表中找不到相应的匹配——操作失利

4.外键条件

(1)外键要设有:首先必须保障表的储存引擎innodb,如果不是innodb存储引擎,那么外键可以制造成功但是从未约束功用
(2)外键字段的字段类型(列类型)必须与父类的主键类型完全一致
(3)一张表中的外键名不可能重新
(4)增添外键的字段(数据已经存在),必须有限协理数据与父表主键要求对应

5.外键约束

本着父表的羁绊

  • district:严苛格局(默许的),父表不可以去除或者更新一个一度被子表数据援引的笔录
  • cascade:级联情势:对父表操作,子表关联的数量也跟着操作
  • 分页查询,mysql查询语句。set
    null:置空格局:父表的操作之后,子表对应的多少(外键字段)被置空。

封锁情势:删除的时候子表置空,更新的时候子表级联操作指定情势的语法

foreign key(外键字段) references 父表(主键字段) on delete set null on
update cascade;

除去置空的前提条件:外键字段允许为空(若是不满意条件,外键不可能制造)


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)

997755.com澳门葡京 12

选出保加萨拉热窝语最高分和数学最高分的学习者的id,name ,class

997755.com澳门葡京 13

997755.com澳门葡京 14

注意加括号

有重复记录时的合并

按english由高到低和由低到高的结果合并

997755.com澳门葡京 15

997755.com澳门葡京 16

997755.com澳门葡京 17

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

997755.com澳门葡京 18

997755.com澳门葡京 19

子语句的排序

1.将子语句包裹在子括号内

2.子语句的 order by

 中有order by同盟Limit使用时才生效。

案由是:union在做子语句时,会对尚未limit的order by优化(忽略)

持有结果排序

只须要在结尾一个select语句后扩充对应排序即可。

子语句括号非必须最终一个排序默许针对所有结果。

Union检索的字段必须个数一样(否者出错),数据类型也一律(发生类型转换) 列名由第三个select检索列名来定

子查询

说话内部的询问语句

表中多少

997755.com澳门葡京 20

摸清越南语成绩最高的学生的音信

不用子查询:

997755.com澳门葡京 21

 

但有2个学生塞尔维亚共和国(Republic of Serbia)语成绩最高且同样,这些时候在不精通表里数据的情形下就无法使用那种查询艺术

 
 思路:先找出印度语印尼语战表最大的不胜值,再找出什么学生的日语战绩与那一个最大的值相当。那样一步一步进行询问。

 997755.com澳门葡京 22

997755.com澳门葡京 23

只检索一个字段时得以当做一个值使用,必须只检索一个字段

997755.com澳门葡京 24

997755.com澳门葡京 25

子查询分类

今非昔比的分类会有不一样的运用方法

分类标准:

子查询出现的职位

子查询的再次回到值形式

  重返值分类:

   单一值,单列,多列,多行多列(表)

997755.com澳门葡京 26

出现岗位:

Where 型,where 后

From型  from后

Exists型

997755.com澳门葡京 27

997755.com澳门葡京 28

使用:

标量的:得到一个值后用关系运算符举办演算(> >=,< <= =
<> )

列子查询(只是1列):得到一列普通是对个行的一列值(一个聚众)

 使用in,not in运算符

997755.com澳门葡京 29

查获班级为php101中持有学员的音信

997755.com澳门葡京 30

997755.com澳门葡京 31

相会操作符还有

Any(集合)  集合中的任意一个

=any(集合) 等于集合中的任意一个即可

等同于in

=All(集合) 集合中的拥有因素

!=all(集合) 不等于集合中的所有因素等同于Not in

997755.com澳门葡京 32

997755.com澳门葡京 33

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

997755.com澳门葡京 34

在意:那种语法不应该出现在骨子里开发中

Some(集合) 集合中的片段

语法上与any一样

总结:

=any  等同于in

!=all 等同于 not  in

Some 和any同义

All,any ,some可以使用除了=,!=之外运算符,比in强大

回来一行

在参预相比时,使用括号可以创设一行

(field1,field2,…)

表中数据

997755.com澳门葡京 35

近期要询问出和贺8在同样的班级且与她math成绩同样的同校的音信

997755.com澳门葡京 36

子查询

997755.com澳门葡京 37

 

997755.com澳门葡京 38

归来一个表

倘若用在from子句内,需求倘诺一个表

当今是查询结果,必须给这么些查询结果起别名

 表中多少

997755.com澳门葡京 39

查询php103班 english不及格的学生新闻

997755.com澳门葡京 40

务必有别名

997755.com澳门葡京 41

Exists

如若子查询可以回到数据则赶回真,否者再次来到假

有以下2表

A表 

997755.com澳门葡京 42

B表

997755.com澳门葡京 43

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

997755.com澳门葡京 44

997755.com澳门葡京 45

先取得a表的首先行记录,在子查询中判断a表的id与b表的id比较

连日查询

Join

997755.com澳门葡京 46

每个实体,一个表

一个业务逻辑,使用七个实体的数码

多张表应该在协同行使,将三个表的记录连接起来

997755.com澳门葡京 47

Teacher表

997755.com澳门葡京 48

Teacher_class1表

997755.com澳门葡京 49

查获代课老师的代课信息

997755.com澳门葡京 50

997755.com澳门葡京 51

 

997755.com澳门葡京 52

997755.com澳门葡京 53

 

997755.com澳门葡京 54

 

笛卡尔(交叉)连接

997755.com澳门葡京 55

997755.com澳门葡京 56

内接连处理

在连接时,是足以概括连接条件的。意味着,所有的左表数据,都要与右表的笔录做一个总是

共存在m*n个连接

号称交叉连接或笛Carl集

那儿可以应用 cross join代替inner join

Mysql中cross join与inner join相同

Inner join是默许的连天方式(inner 省略)

997755.com澳门葡京 57

等效的

也可应用

997755.com澳门葡京 58

表示笛Carl积

997755.com澳门葡京 59

结果就算一样

On数据连接条件

Where数据过滤条件

但 where是先延续成笛Carl积

然后做筛选,而on 是在一连时就判断

997755.com澳门葡京 60

997755.com澳门葡京 61

上表是连连条件2个

下表是 

过滤条件2个

997755.com澳门葡京 62

 

 

 

下表连接过滤各一个

997755.com澳门葡京 63

997755.com澳门葡京 64

Using:必要承担连接的五个实体之间字段名称相同。

997755.com澳门葡京 65

查询条件与外接连通用 外连接不可能用where作为一连条件。

注意:

甭管连接条件依旧接二连三查询多字段列表,都没须求肯定要写表名.字段语法,是不是写取决于是或不是爆发争辩。提议写上。

别名

  表应该别名,保障简洁清晰。

列别名

997755.com澳门葡京 66

 

997755.com澳门葡京 67

外连接:

分类

左外连接

右外连接

全外连接(暂不协助)

左连接

在延续时,借使出现右侧表,数据连接不到左侧表的处境,则左表的数据在结尾结果内保存。而假诺出现右表的数量连接不到左标的情景,右表数据被丢掉。

997755.com澳门葡京 68

997755.com澳门葡京 69

由于内连接没有左右接二连三之分,left outer join中outer可以大致。

在外连接中不可以用where做连接条件可用on ,using

表别名可以用在连续条件里,但字段别名不得以。

997755.com澳门葡京 70

表起别名后,在筛选或者连续条件里必须用别名,原名不可能用了

左表teacher里的数码孙长卿连接不上也保留。

997755.com澳门葡京 71

997755.com澳门葡京 72

全外连接左外与右外 union(取并集)

内一连是左外右外交集

Using会去掉结果中再次字段,并放在列首

外连接不可能选拔没有原则的连日(不像内连接那样形成笛卡尔积)

当然连接

透过mysql自己看清完结连接进程。不需求指定连接条件,mysql会选拔多表内相同的字段作为连接条件。

表one数据

997755.com澳门葡京 73

Two表数据

997755.com澳门葡京 74

997755.com澳门葡京 75

 

本来连接也有上下之分

内:natural join

外:左外natural left join ,右外 natural right join

997755.com澳门葡京 76

997755.com澳门葡京 77

 

Sql 语句
一般顺序GHOL : group by,having ,order by,limit
即使是分组,应该选用对分组字段举办排序的 group by 语法…

二、联合查询

共同查询:将反复查询(多条select语句),在记录上次进行拼接(字段不会增加)

基本语法:多条select语句构成:每一条select语句获取的字段数必须严俊平等(然而字段类型毫无干系)

select 语句1 union [union选项] select 语句2……

union选项

  • all:保留所有
  • distinct:去重(默认的)

997755.com澳门葡京 78

默许去重

同台查询只要求字段数相同,跟数据类型无关

997755.com澳门葡京 79

协办查询

1.联袂查询的意思

(1)查询同一张表,不过需要不一
eg:查询学生音讯,男生身高升序,女子身高降序

(2)多表查询:多张表的社团是一点一滴等同的,保存的数据结构也是一样的。

2.一起查询order by的运用

在一道查询中order by无法平昔利用,须求对查询语句使用括号
若要order by生效必须搭配limit;用limit限制显示数量

997755.com澳门葡京 80

一道查询的采纳

正文内容:

三番五次查询

一头查询

子查询

  • from子查询
  • where子查询
  • exists子查询

 

头阵日期:2018-04-11


三、子查询(sub query)

子查询:就是一个select查询是另一个查询的直属(一条select语句内部含有了另一条select语句)

1.子查询分类

  • 按岗位分类:子查询(select语句)在外表查询(select语句)中出现的岗位
    • from子查询:子查询跟在from之后
    • where子查询:子查询出现where条件中
    • exists子查询:子查询出现在exists里面

认清某些条件是或不是满意(跨表),exists是接在where之后
exists再次回到结果唯有0和1。

997755.com澳门葡京 81

exists子查询

997755.com澳门葡京 82

exists子查询

  • 按结果查询:按照子查询获得的多少开展分类
    • 标量子查询:子查询得到的结果是一行一列

997755.com澳门葡京 83

标量子查询

  • 列子查询:子查询获得的结果是一列多行

列子查询再次回到的结果为一列多行,须要选取in作为规范合营
还有多少个近乎的规范:all,some,any

all:就是全方位 ,使用时索要在前边加”=”
any:就和in是如出一辙的,在采纳的时候必要在前方加”=”或者”!=”
any和some是同一的,即:any==some

997755.com澳门葡京 84

列子查询

997755.com澳门葡京 85

all,some,any

  • 行子查询:子查询获得的结果是多行多列(多列一行)

997755.com澳门葡京 86

行子查询

(以上多少个冒出岗位是在where将来)

  • 表子查询:子查询得到的结果是多行多列(出现岗位是在from之后)

997755.com澳门葡京 87

表子查询

连天查询:

 

连年查询就是将三个表联合起来查询,连接查询艺术有内连接、外接连、自然连接、交叉连接。连接查询使得可以同时查看多张表中数量。

  • 内接连:有原则连接,多少个表之间基于指定条件连接,匹配结果是保存符合匹配结果的笔录。
  • 外接连:与内接连不一样的是不管匹配符不切合都封存,根据外接连连接格局来控制封存哪张表,比如保留左表的话,那么左表不可以匹配右表时,保留左表数据,然前置右表字段数据为null.
  • 当然连接:有规则连接,自动按照“同名字段”连接(四个同名字段就都看作规范)。
  • 穿插连接cross
    join:无条件连接,将每一条记下与别的一个表的每一条记下连接(笛Carl积),结果是字段数等于原来字段数之和,记录数等于此前各样表记录数之乘积。

 

 

-- 实验表结构
create table student(
id int,
name varchar(15),
gender varchar(15),
cid int
);
create table class(
cid int,
cname varchar(15)
);
drop table student,class;
-- 实验表数据:
insert into student values(1,"lilei","male",1),(2,"hanmeimei","male",2),(3,"jack","male",1),(4,"alice","female",4); --这里特意创建了一个class中没有的4
insert into class values(1,"linux"),(2,"python"),(3,"java"),(5,"html5");--这里特意创建了一个student中没有的5
select * from student;
select * from class;

997755.com澳门葡京 88997755.com澳门葡京 89

 

 

内连接:

从左表中取出每一条记下,去右表中与有着的笔录举行匹配,保留至极成功的记录,并将两份记录拼接。

语法:select 字段列表 from 左表 [inner] join 右表 on 左表.字段 =
右表.字段;

  • 不选取on条件的时候,结果与接力连接相同

    — 内连接
    — select from student inner join class; –结果与接力连接相同
    select
    from student join class on student.cid = class.cid;
    select * from student inner join class on student.cid = class.cid;

997755.com澳门葡京 90

 

 

 

外连接:

与内连接差其他是主表记录不管匹配符不相符都保留,格局有左外连接、右外连接,左外连接是保存左表,右外连接是保留右表

语法:

  • 左外连接:select 字段列表 from 左表 left join 右表 on 左表.字段 =
    右表.字段;
  • 右外连接:select 字段列表 from 左表 right join 右表 on 左表.字段 =
    右表.字段;

    select * from student left join class on student.cid = class.cid;

997755.com澳门葡京 91

 

 

 

本来连接:

自行匹配连接条件,系统以字段名字作为匹配方式(同名字段就作为条件,两个同名字段就都当做条件)

  • 自然内连接:类似内连接,但不提供连接条件。
  • 当然外接连:类似外接连,但不提供连接条件。

语法:

  • 理所当然内接连:select 字段列表 from 表名 natural join 表名;
  • 自然外接连:select 字段列表 from 表名 natural left\right join 表名;

    select * from student natural join class;

997755.com澳门葡京 92

 

 

 

陆续连接:

将每一条记下与此外一个表的每一条记下连接

语法:

  • select 字段列表 from 表名 cross join 表名;
  • select 字段列表 from 表名 ,表名;

    select from student cross join class;
    select
    from student,class;

997755.com澳门葡京 93

 

 

 

补充:

在四个表中,为了差异每个表,以及便捷使用,可以应用表别名。

可以多重连接。

外接连可以效仿自然连接,只须求将连接条件on 左表.字段 =
右表.字段变成”using 字段名”即可。

 


联手查询:

 

  • 同台查询是将多个查询结果在记录上拓展拼接。(相当于将其它表的询问记录结果一连到首个表的前边)【因为是拼接,所以五个查询结果的字段数必须一律】【拼接不在意数据类型,比如首个表的率先个字段是int,但背后的表中的varchar还可以凑合到第一列中】
  • 语法:select语句 union select语句…;

 

 

补充:

union可以有取舍,加在union 后边,all选项是反常相同去重,distinct是去重。

一同查询一般用来拍卖同一表中以不一样格局突显分裂数额。(比如,想将学生各科成绩表中的两科(那里即使为python
跟linux)同时询问出来)

union和order by同时选择报错时

  • 假使您想针对联合查询中的某个查询结果排序,须求将那些select语句用括号括起来。【其余,由于共同查询的拼凑机制,须要在order
    by 前边加上limit子句才行,limit的数量得以是一个很大的值。】
  • 一经是针对性最后的一起查询结果,就在结尾一个select语句中应用order by
    【提议给最后一个字段加上括号,再加ordery by,使用情形是有同名字段】

 


子查询:

 

子查询是嵌套在查询语句中的查询。

子查询依照出现的职分能够分为三类:

from子查询:子查询跟在from之后的;一般用在“先摸清二维表,再处理”的场地。

  • 比如:
    -- 这是一个无意义的例子。仅为举例使用
    select cid,cname from (select * from class where cname="python") as c;
    

where子查询:子查询跟在where条件中;一般用在“先查询出指定条件再查询”的图景

  • 比如:
    select * from student where cid=(select cid from class where cname="python");
    

exist子查询:子查询在exist语句里面;一般作为“存在才做”的情事

  • 比如:
    -- 这是一个如果学生没有选择cid=1的课,那么不输出对应课程信息的例子
    select * from class where exists(select * from  student where cid=1) and cid=1;
    

事实上,有点人认为union之后接着的也是子查询,可是那里不把这么些当作子查询,只把下边多少个与“查询”相当连贯有关的当作子查询。

997755.com澳门葡京, 

 

补充:

实际,还足以依照结果来分类子查询:

  • 标量子查询,子查询得到的结果是一行一列,景况一般暴发于where子查询只询问出一行一列的景况。
  • 列子查询,子查询获得的结果是一列多行,情形相似爆发于where子查询查询出一列多行的意况。
  • 行子查询,子查询获得的结果是多列一行(或者多行多列)
    ,情形相似暴发在where子查询查询出多列一行的图景。
  • 表子查询,子查询获得的结果是多行多列 ,情状相似爆发在from子查询中

where子查询中有时还使用部分别样关键字,如any,all,some,但对=来说,=基本得以兑现他们的职能了。

 

 

 


相关文章

发表评论

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

*
*
Website