mysql查询连接语法_(十)mysql语法-连接查询

#非等值连接查询

#案例1:查询员工的工资和工资级别

select a.salary,b.grade_level from employees a,job_grades b

where a.salary BETWEEN b.lowest_sal and b.highest_sal;

#自连接;简单的理解就是自己连接自己进行查询

#查询员工名和上级的名称 这种情况说明是这张表中有一些比较特殊的字段,一共查询了这张表两遍 一张表当做两张表来使用,有些情况下,甚至当作更多张表来使用,分别当作了员工表和领导表

SELECT a.employee_id,a.last_name,b.manager_id,b.last_name FROM employees a,employees b where a.employee_id=b.manager_id;

SELECT a.employee_id,a.last_name,b.employee_id,b.last_name FROM employees a,employees b where a.employee_id=b.manager_id;--这两种写法,查询出来的效果是一样的

#获取随机数

select RAND();--返回0-1之间的随机数

#password函数 将给定的字符进行加密

select PASSWORD('赵永强');--结果:*7B24462CC76FA0D6E59A26F942D0C8B46F31F533

#MD5函数,将给定的字符进行MD5加密

select MD5('赵永强');--结果:8983fb3e10bd6c6817f6e7d128c67276

#sql99语法标准

语法: select 查询列表

from 表1 别名 【连接类型】

join 表2 别名

on 连接条件

where 筛选条件

分类:

内连接:inner

外连接:

左外连接 left [OUTER]

右外连接 right [OUTER]

全外连接 full [OUTER]

交叉连接:cross

#等值连接

@案例一:查询员工名、部门名

select a.last_name,b.department_name

from employees a

INNER JOIN departments b

on a.department_id=b.department_id

SELECT a.last_name,b.department_name from employees a , departments b where a.department_id=b.department_id;--这两种写法的查询出来的效果是一样的

@案例二:查询名字中包含e的员工名和工种名

select a.last_name,b.job_title

from employees a

INNER JOIN jobs b

on a.job_id=b.job_id

where a.last_name like '%e%';

select a.last_name,b.job_title from employees a,jobs b where a.job_id=b.job_id AND a.last_name like '%e%';--这两种写法的查询出来的效果是一样的

#查询部门个数>3的城市名和部门个数(添加分组和筛选)

select b.city,count(*)

from departments a

INNER JOIN locations b

ON a.location_id=b.location_id

GROUP BY b.city

HAVING count(*)>3;

#案例4:查询哪个部门的盐工个数大于3的部门名和员工个数,并按照个数降序排列

select count(*) 个数,department_name

from employees a

JOIN departments b

on a.department_id=b.department_id

GROUP BY department_name

HAVING count(*)>3

ORDER BY count(*) desc;

#5.查询员工名,部门名、工种名,并按照部门名进行降序排列(添加三表连接)

select last_name,department_name,job_title

from employees a

INNER JOIN departments b on a.department_id=b.department_id

INNER JOIN jobs c on a.job_id=c.job_id

ORDER BY department_name desc;

------其实上面所有的inner都是可以省略的,筛选条件放在where 后面,连接条件放在on后面,便于阅读

#非等值连接

#查询员工的工资级别

select a.salary,b.grade_level from employees a INNER JOIN job_grades b on a.salary BETWEEN b.lowest_sal and b.highest_sal

#查询工资级别的个数》20的个数,并按照工资级别进行降序排列

select count(*),b.grade_level from employees a INNER JOIN job_grades b on a.salary BETWEEN b.lowest_sal and b.highest_sal

GROUP BY b.grade_level desc

HAVING count(*)>20

#自连接

#查询名字中包含字符k的员工姓名、上级的名字

select a.last_name,b.last_name from employees a INNER JOIN employees b on a.employee_id = b.manager_id

WHERE a.last_name like '%k%'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值