mysql学习笔记3(排序分页以及多表查询)

mysql学习笔记3

本文总结

一共有两个知识点
1.排序(OEDER BY )与分页(LIMIT )关键字的使用
2.多表查询:多表查询实则是在笛卡尔积上进行筛选,使用关键字(JION ON 与 WHERE )

排序与分页

未使用排序操作时,查询时系统默认的排序为添加的先后顺序

排序(ORDER BY ASC/DESC)

在现实操作中经常需要进行排序操作,使用sql语句可以实现数据有序或按指定条件进行输出排序

SELECT 字段 FROM 表名;(此时排序按照添加的先后顺序进行排序)
SELECT 字段 FROM 表名
ORDER BY 字段 DESC ;(为降序排序)
SELECT 字段 FROM 表名
ORDER BY 字段 ASC ;(标记ASC或不标记为升序排序)
SELECT 字段 FROM 表名
ORDER BY 字段 DESC  字段2 ASC ;(多级排序)最前的优先级最高

ORDER BY 可以使用别名进行查询
查询时SELECT后的字段为查询结果,但WHERE、ODER BY 等条件语句并不需要一定为所查询的语句,可以使用表中任意一个字段作为条件查询

分页(LIMIT)

分页需要将大量数据进行分页处理,便于用户查看

LIMIT
SELECT 字段 FROM 表名
LIMIT 0,20;(表示数据输出从偏移量为0开始的20条数据)
SELECT 字段 FROM 表名

LIMIT 起始值,数据条数
WHERE,OEDER BY ,LIMIT的声明顺序

SELICT 字段  FROM 表名 
WHERE 条件
OEDER BY 字段 ASC/DESC 
LIMIT 偏移量,数据条数;(查询该表中该字段在满足某条件下的经过排序的固定数量数据)

但是因为WHERE的条件中可以部位该查询的字段信息故执行顺序为WHERE在SELCET前置条件
例如:

SELCET id name FROM employee
WHERE age>30	
OEDER BY age ASC 
LIMIT 0,10;
该语句的含义为查询出员工表中年龄超过30的年龄最小的10个员工的名字和id;
LIMIT OFFSET

LIMIT 条目数 OFFSET 起始值

LIMIT 0,20;等同于
LIMIT 20 OFFSET 0;

多表查询

在实际操作中需要锁存在多个数据表之间的关联关系,比如员工表(id,name,age。。。)部门表(部门id,简介,职责。。。),当我们需要查询员工的信息是也需要输出其对应的部门信息,类似于这种情况下需要使用多表查询。

查询操作语句

SELECT 字段1,字段2 FROM 表1,表2(若锁需要查询的字段两个数据表中的共同字段,需要标明  表名.字段)
WHERE 连接条件;
等值连接与非等值连接

等值连接:当两张表之间某值相等时作为条件,查询所对应的数据进行匹配
非等值连接:当一表中某值满足他表中的某一数据构成的查询条件,查询对应数据

例1.
SELECT id,department_name 
FROM employee,department
WHERE employee.department_id=department.department_id;(等值连接)
(以员工表中的部门id与部门表中的部门id相等时作为连接条件,查询其对应的数据)
例2
查询员工的职级(按工资水平确定)
SELECT e.name,e.salary,j.level
FROM employee e,job_level j
WHERE e.salary BETWEEN j.lowest AND j.highest;(非等值连接)
(取员工表中的工资与等级表中的某等级的范围进行对比当满足时,连接成功禅熏出对应的等级)
自连接

自连接为对同一张表中的字段进行自我引用

SELECT e.id,e.lastname,g.id,g.lastname
FROM employee e,empolyee g
WHERE e.manager_id=g.id;
(理解为手动将员工表虚拟成员工表和管理者表,连接条件是员工的管理者id等于管理者的id时,查询出对应的数据)
内连接与外连接

99语法实现多表查询使用JION ON 语句

SELECT 字段1,字段2 FORM 表1 JOIN 表二 ON  条件1 JOIN 表三 ON 条件2;

内连接;理解为两个条件的交集产生的数据集
左外连接:不仅包含叫条件产生的交集,还包括左边表中为产生交集的数据
右外连接:包含右边表中为产生交集的数据
满外连接:相当于包含左边右边表中所有为产生交集的数据

SELECT  字段1,字段2 FROM 表1 LEFT JOIN 表2 ON 条件
表示左外连接
SELECT  字段1,字段2 FROM 表1 RIGHT JOIN 表2 ON 条件
表示右外连接
SELECT  字段1,字段2 FROM 表1 FULL JOIN 表2 ON 条件
表示满外连接(mysql不支持)

mysql实现如下:
上图为sql join的7种组合用来满足查询需求

左1
  SELECT  字段1,字段2 FROM 表1 LEFT JION 表2 ON 条件;
左2 
  SELECT 字段1,字段2 FROM 表1 LEFT JION 表2 ON 条件 WHERE 字段1 IS NULL ;
右1 
  SELECT 字段1,字段2 FROM 表1 RIGHT JION  表2 ON 条件;
右2 
  SELECT 字段1,字段2 FROM 表1 RIGHT JION  表2 ON 条件 WHERE 字段2 IS NULL;
中
  SELECT 字段1,字段2 FROM 表1 JION 表2 ON 条件;
左3
实现1:(左1加右2)
  SELECT  字段1,字段2 FROM 表1 LEFT JION 表2 ON 条件 UNION ALL SELECT 字段1,字段2 FROM 表1 RIGHT JION  表2 ON 条件 WHERE 字段2 IS NULL;
实现2:(左1加右1去重)
  SELECT  字段1,字段2 FROM 表1 LEFT JION 表2 ON 条件 UNION SELECT 字段1,字段2 FROM 表1 RIGHT JION  表2 ON 条件;
实现3: (左2加右1)
  SELECT 字段1,字段2 FROM 表1 LEFT JION 表2 ON 条件 WHERE 字段1 IS NULL UNION ALL SELECT 字段1,字段2 FROM 表1 RIGHT JION  表2 ON 条件
右3(左2加右2 )
   SELECT 字段1,字段2 FROM 表1 LEFT JION 表2 ON 条件 WHERE 字段1 IS NULL UNION ALL SELECT 字段1,字段2 FROM 表1 RIGHT JION  表2 ON 条件 WHERE 字段2 IS NULL;
UNION /UNION ALL

UNION 表示求并集,需要保证两个数据集所查询的数据字段相同,名称相同,字段数相同
UNION 表示求交集,有去重复操作在UNION ALL 的基础上, UNION ALL:表示包含两个集合的所有数据。

自然连接

NATUAL:自动查询两张表中所有相同的字段然后进行等值连接
USING:需要指定同名的字段进行等值连接

SELECT 字段1,字段2 FROM 表1 NATUAL JION 表2 ;
相当于自动识别其中的相同字段进行匹配等值连接
SELECT 字段1,字段2 FROM 表1,表2 	USING (字段名);
识别USING 标记的字段进行等值连接
剑谱最终页,无爱即是神
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值