2020/8/2

------------恢复内容开始------------

#进阶8:分页查询

应用场景:当要显示的数据,一页显示不全,需要分页提交sql请求

语法:

select  查询列表

from  表

【join type join 表2

on  连接条件

where 筛选条件

group by  分组字段

having 分组后的筛选条件

order by 排序的字段】

limit [offset], size;

offset要显示条目的起始引索(默认从0开始)

size要显示的条目个数

 

#案例1:查询前五条员工信息

SELECT * FROM employees LIMIT 0,5;

或SELECT * FROM employees LIMIT 5;从0开始可以省略

#案例2:查询第11条-第25

SELECT * FROM employees LIMIT 10,15;

#案例3:有奖金的员工信息,并且工资较高的前10名显示出来

SELECT *

FROM employees 

WHERE commission_pct IS NOT NULL

ORDER BY  salary DESE

LIMIT 10;

总结特点:

  • limit 语句放在查询语句的最后
  • 公式:要显示的页数page,每页的条目数size

select 查询列表

from 表

limit (page-1)*size, size;

测试题

 

2020/8/2_第1张图片

一、查询所有学员的邮箱的用户名(@前的字符)

select substr(email,1,instr(email,'@')-1)

from stuinfo;

二、查询男生和女生的个数

select count(*) 个数, sex 

from stuinfo

order by sex;

三、查询年龄>18岁的所有学生的姓名和年级名称

select name, gradeName

from stuinfo s

inner join grade g on s.gradeid=g.id

where age>18;

四、查询哪个年纪的学生最小年龄>20

select min(age), gardeid

form stuinfo

group by gradeid

having min(age)>20;

五、试说出查询语句中涉及到的所有的关键字,以及执行先后顺序

select 查询列表                            7

from 表                                       1

连接类型 join 表2                          2

on 连接条件                                 3

where 筛选条件                            4

group by 分组列表                        5 

having 分组后的筛选                     6

order by 排序列表                        8

limit 偏移,条目数                        9

 

四、sql99语法

1、内连接

语法:

select 查询列表

from 表1 别名

【inner】join 表2 别名

on 连接条件

。。。

特点:

  • 表的顺序可以调换
  • 内连接的结果=多表的交集
  • n表连接至少需要n-1个连接条件

分类:等值连接、非等值连接、自连接

2、外连接

语法:

select 查询列表

from 表1 别名

left/right/full【outer】join 表2 别名

on 连接条件

。。。

特点:

  • 查询结果=主表中所有的行,如果从表和他匹配的将显示匹配行,如果从表没有匹配的则显示null
  • left join 左边是主表,right join 右边是主表,full join 两边都是主表
  • 一般用于查询除了交集部分的剩余的不匹配的行

3、交叉连接

语法:

select 查询列表

from 表1 别名

cross join 表2 别名;

特点:类似于笛卡尔成绩

一、含义

 嵌套在其他语句内部的select语句称为子查询或内查询,

外面的语句可以是insert、update、delete、select等,一般select作为外面语句较多

外面如果为select语句,则此语句成为外查询或主查询

二、分类

1、按出现的位置

select后面:仅仅支持标量子查询;from后面:表子查询;

where和having后面:标量子查询、列子查询、行子查询;exists后面:均可

2、按结果集的行列

标量子查询(单行子查询):结果集为一行一列

列子查询(多行子查询):结果集为多行一列

行子查询:结果集为多行多列

表子查询:结果集为多行多列

三、示例 

1、标量子查询

where或having后面

案例:查询最低工资的员工姓名和工资

select last_name, salary

from employees

where salary=(

select min(salary)

from employees

);

2、列子查询

案例:查询所有是领导的员工姓名

select last_name

from employees

where employee_id in(

select manager_id

from employees

);

经典案例:

1、查询平均工资最低的部门信息

求出最低平均工资的部门编号

SELECT department_id

FROM employees

GROUP BY department_id

ORDER BY AVG(salary) 

LIMIT 1;

查询部门信息

SELECT *

FROM departments

WHERE department_id=(

SELECT department_id

FROM employees

GROUP BY department_id

ORDER BY AVG(salary) 

LIMIT 1

);

 #进阶9:联合查询

 union联合 合并:将多条查询语句的结果合并成一个结果

语法:

查询语句1

union

查询语句2

union

。。。

 应用场景:要查询的结果来自于多个表,且多个表没有直接的连接关系,但查询的信息一致

 特点:

  • 要求多条查询语句的查询列数是一致的
  • 要求多条查询语句的查询的每一列的类型和顺序最好是一致
  • union关键字默认去重,如果使用union all 可以包含重复项

DML语言

数据操作语言

  • 插入insert
  • 修改update
  • 删除delete

#一、插入语句

方式一、

语法:

insert into 表名(列名,。。。)

values(值1,。。。)

#1、插入的值的类型要与列的类型一致或兼容

#2、不可以为null的列必须插入值,可以为null的列如何插入值?

#3、列的顺序是否可以调换

#4、列数和值的个数必须一致

#5、可以省略列名,默认所有列,而且列的顺序和表中列的顺序一致

 

方式二、

语法:

insert into 表名

set 列名=值,列名=值,。。。

两种方式PK

1、方式一支持插入多行,方式二不支持

2、方式一支持子查询,方式二不支持

二、修改语句

 1、修改单表的记录

语法;

update 表名                                     1

set 列=新值,列=新值,。。。           3

where 筛选条件;                             2

案例1:修改boys表id号为2的名称为张飞,魅力值10

UPDATE boys SET boyname='张飞‘,usercp=10

WHERE id=2;

2、修改多表的记录【补充】

语法:

sql92 语法:

update 表1 别名,表2 别名

set  列=值,。。。

where 连接条件

and 筛选条件

sql99语法:

update 表1 别名

inner | left | right join 表2 别名

on 连接条件

set 列=值,。。。

where 连接条件

and 筛选条件

案例1:修改张无忌的女朋友的手机号为114

UPDATE boys bo

INNER JOIN beauty b

ON bo.'id'=b.'boyfriend_id'

SET b.'phone'='114'

WHERR bo.boyName='张无忌‘;

 三、删除语句

方式一、delete

语法:

1、单表的删除

delete from 表名 where 筛选条件

案例1:删除手机号以9结尾的女神信息

DELETE FROM beauty WHERE phone LIKE '%9';

2、多表的删除

sql92语法:

delete 表1 别名,表2 别名

from 表1 别名,表2 别名

where 连接条件

and 筛选条件

sql99语法:

delete 表1 别名,表2 别名

from 表1 别名 表2 别名

inner | left | right join 表2 别名 on 连接条件

where 筛选条件

案例:删除张无忌女朋友的信息

DELETE b

FROM beauty b

INNER JOIN boys bo ON b.'boyfriend_id'=bo.'id'

WHERE bo.'boyName'='张无忌‘;

 

方式二:truncate

语法:truncate table 表名 

 

 

 

 

 

 

------------恢复内容结束------------

你可能感兴趣的:(2020/8/2)