mysql基础(7)

回顾:

时间函数 (今天 昨天   本周  上周  本月上月   本季度  上季度  本年 去年)

1.年月日Date_format  提取  %d %m %y

2. 周 YEARWEEK    季度QUARTER

3.偏移   todays 计算两个日子之差

           +

                   DATE_SUB

4.写法不唯一

内容一:  系统函数(最后函数)

需求1: 电脑多个mysql  查看mysql安装位置以及数据位置     

show VARIABLES  like '%datadir%'; #模糊查询 %0或者多个字符

需求2: 安装版本

select version();

需求3: 当前连接用户的信息(运维)

show  Full  PROCESSLIST;

需求4: 当前数据库

select database();

需求5: 当前使用字符集

select collation("jw222test222_new");

 

恭喜:  Mysql所有函数结束-

以上单表查询

分类:  

  1. 表连接查询
  2. 子查询

概念:

1.横向连接 ----内连接 (取两张表之间交集)  

2.外连接(左右连接  保障左表或者右表中数据也能完全显示

全连接  两两相交 ---所有数据都显示)

   表合并(表连接):原则 字段相加 记录相乘操作

2 纵向连接---union

内容二:  多表连接查询----内连接(inner join...on ) 

内连接的语法:

方式1:   使用inner join

a表  inner join b表  inner join c表   on 等值过滤条件1  and or 条件2  

说明: inner 单词可以省略  join

方式2: 使用,逗号

a表 , b表 ,c表  where   等值过滤条件

等值连接查询====》表进行合并查询

需求:  例子查询jw_user 表jw_course (用户的选课信息),发现查询的条件涉及到了两张表连接查询

解决:内连接查询

例子1:

select * from jw_user INNER JOIN jw_course

on jw_user.user_id=jw_course.user_id;

select * from jw_user , jw_course

WHERE jw_user.user_id=jw_course.user_id ;

#对表名字 别名

select * from jw_user as j INNER JOIN jw_course  as w

on j.user_id=w.user_id;

例子2:

例子查询 用户 7天内和14天内订单数量  (内连接查询)

select   DISTINCT * from

 jw05_user12 as u

INNER JOIN  

 jw05_order12 as o

on u.userid=o.userid;

select   DISTINCT * from

 jw05_user12 as u

,

 jw05_order12 as o

where  u.userid=o.userid;

内容三:左(left join)右(right join)连接

需求:在表连接的时候 确保某张表的数据,要全部显示,而不是被过滤掉!

解决:左右连接

例子2 查询课程表中全部显示,不管学生是否选课

jw_course 右表# right  JOIN确保右表数据 全部存在

select * from jw_user right JOIN jw_course

on jw_user.user_id=jw_course.user_id;

 扩展---了解 左右自然连接

(不写过滤条件也能过滤 缺点  过滤表两个过滤字段 必须一致)

select * from jw_user   natural left JOIN jw_course;

select * from jw_user   natural right JOIN jw_course;

例子: 查询---用户 7天和14天订单数量(不管是否有订单 显示全部用户信息)

select   DISTINCT * from

 jw05_user12 as u

left JOIN  

 jw05_order12 as o

on u.userid=o.userid;

例子:保留所有的订单

select   DISTINCT * from

 jw05_user12 as u

Right  JOIN  

 jw05_order12 as o

on u.userid=o.userid;

内容四  全连接----full join(Mysql 不支持full join 使用union 来进行代替)

例子:   用户表+ 订单表都保留

select   DISTINCT * from

 jw05_user12 as u

left JOIN  

 jw05_order12 as o

on u.userid=o.userid

UNION

select   DISTINCT * from

 jw05_user12 as u

right  JOIN  

 jw05_order12 as o

on u.userid=o.userid;

注意:

1.Union (自带了合并后去重的效果)  和union all  (不会去重)

例子  jw_user 用户和jw_course 课程表  id号和姓名

 例子  jw_user 用户和jw_course 课程表  id号(所有人的id)

select user_id from jw_user     

UNION

select user_id from jw_course;

select user_id from jw_user     

UNION all

select user_id from jw_course;

  1. Union(两张表中列的数量是一致就可以合并) 和order by 在一起使用(注意点--面试点)
  2. 例子  第一条sql 用户表中姓名和年龄 按照年龄降序排序

合并

第二条 sql 查询课程 用户id和课程名字

-- 例子  第一条sql 用户表中姓名和年龄 按照年龄降序排序

-- 合并

-- sql 查询课程 用户id和课程名字

说明  union和order by一起  order by 会失效

 解决:  配合 limit

(select name,age from  jw_user order by  age desc limit 4 )

union

select user_id,cname  from  jw_course;

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vlepro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值