数据库查询总结

数据基本查询小总结

查询语句编写顺序:
SELECT 列名 FROM 表名 WHERE 条件 GROUP BY 分组 HAVING 过滤条件 ORDER BY 排序列(asc|desc)LIMIT 起始⾏,总条数

select执行顺序:
1.FROM :指定数据来源表 
2.WHERE : 对查询数据做第⼀次过滤 
3.GROUP BY : 分组 
4.HAVING : 对分组后的数据第⼆次过滤 
5.SELECT : 查询各字段的值 
6.ORDER BY : 排序 
7.LIMIT : 限定查询结果

链接查询(子查询,合并查询,内连接,左外连接,右外连接,多表连接)

子查询做条件:
	SELECT 列名 FROM 表名  WHERE 条件 (⼦查询结果)
	#2.查询⼯资⼤于 Bruce 的员⼯信息 
	SELECT * FROM t_employees WHERE SALARY > (SELECT SALARY 	FROM t_employees WHERE FIRST_NAME = 'Bruce')
	注意:将⼦查询 ”⼀⾏⼀列“的结果作为外部查询的条件,做第⼆次查询 ⼦查询		  得到⼀⾏⼀列的结果才能作为外部查询的等值判断条件或不等值条件判
子查询做枚举条件:
	SELECT 列名 FROM 表名 Where 列名 in(⼦查询结果)
	#查询与名为'King'同⼀部⻔的员⼯信息 
	SELECT employee_id , first_name , salary , department_id 	 FROM t_employees WHERE department_id in (SELECT 	           department_id cfrom t_employees WHERE last_name = 'King')
	将⼦查询 ”多⾏⼀列“的结果作为外部查询的枚举查询条件,做第⼆次查询
 	#查询⾼于 60 部⻔的⼯资的员⼯信息(any⾼于部分,all高于所有) 		select * from t_employees where SALARY > ANY(select  		SALARY from t_employees WHERE DEPARTMENT_ID=60);
 	当⼦查询结果集形式为多⾏单列时可以使⽤ ANY 或 ALL 关键字
子查询作为一张表:
	SELECT 列名 FROM(⼦查询的结果集)WHERE 条件
	#查询员⼯表中⼯资排名前 5 名的员⼯信息
	select employee_id , first_name , salary from (select 		employee_id , first_name , salary from t_employees order 	 by salary desc) as temp limit 0,5;
	将⼦查询 ”多⾏多列“的结果作为外部查询的⼀张表,做第⼆次查询。 注意:⼦	 查询作为临时表,为其赋予⼀个临时表名
合并查询
	SELECT * FROM 表名 1 UNION SELECT * FROM 表名 2 
	SELECT * FROM 表名 1 UNION ALL SELECT * FROM 表名 2
	#合并两张表的结果(去除重复记录)
	SELECT * FROM t1 UNION SELECT * FROM t2
	注意:合并结果的两张表,列数必须相同,列的数据类型可以不同
	#合并两张表的结果(保留重复记录)
	SELECT * FROM t1 UNION ALL SELECT * FROM t2
	经验:使⽤ UNION 合并结果集,会去除掉两张表中重复的数据

SELECT 列名 FROM 表 1 连接⽅式 表 2 ON 连接条件
内连接查询(INNER JOIN ON)
	#1.查询所有有部⻔的员⼯信息(不包括没有部⻔的员⼯) SQL 标准 
	SELECT * FROM t_employees INNER JOIN t_jobs ON 				t_employees.JOB_ID = t_jobs.JOB_ID
	#2.查询所有有部⻔的员⼯信息(不包括没有部⻔的员⼯) MYSQL 
	SELECT * FROM t_employees,t_jobs WHERE t_employees.JOB_ID 	  = t_jobs.JOB_ID
	经验:在 MySql 中,第⼆种⽅式也可以作为内连接查询,但是不符合 SQL 标	准 ⽽第⼀种属于 SQL 标准,与其他关系型数据库通用
三表连接查询
	#查询所有员⼯⼯号、名字、部⻔名称、部⻔所在国家ID 
	SELECT * FROM t_employees e INNER JOIN t_departments d on 	  e.department_id = d.department_id INNER JOIN t_locations     l ON d.location_id = l.location_id
左外连接(LEFT JOIN ON)
 	#查询所有员⼯信息,以及所对应的部⻔名称(没有部⻔的员⼯,也在查询结果		中,部⻔名称以NULL 填充)
    SELECT e.employee_id , e.first_name , e.salary , 			d.department_name FROM t_employees e LEFT JOIN 				t_departments d ON e.department_id = d.department_id;
	注意:左外连接,是以左表为主表,依次向右匹配,匹配到,返回结果 
	右外连接,是以右表为主表,依次向左匹配,匹配到,返回结果 
	匹配不到,则返回 NULL 值填充
右外连接(RIGHT JOIN ON)
	#查询所有部⻔信息,以及此部⻔中的所有员⼯信息(没有员⼯的部⻔,也在查		询结果中,员⼯信息以NULL 填充) 
	SELECT e.employee_id , e.first_name , e.salary , 			d.department_name FROM t_employees e RIGHT JOIN 			t_departments d ON e.department_id = d.department_id

收藏加关注,再来不迷路!!!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值