1.视图

视图中存放的是sql查询语句,使用试图时,会运行视图中的sql查询语句创建出一张临时表。



创建视图的sql语句
create view 视图名称(<试图列名1>,<视图列名2>,...) as <select 查询语句>;
举例说明:
表employees. 列名:employee_id,last_name,salary
表 job_grades. 列名:job_id,job_title,min(salary),max(salary),grade_level
#查询各部门的平均工资级别
#1.建立视图--查询各部门的平均工资
create view myv2 as  #myv2是视图名
select avg(salary) ag ,deoartment_id from employees group by employee_id;
#2.在1建立的视图上进行查找各部门的平均工资级别
 SELECT myv2.ag,g.grade_level FROM myv2 JOIN job_grades g ON myv2.ag
 BETWEEN g.`lowest_sal`AND g.`highest_sal` ;



2.子查询

2.1变量子查询--返回的子查询结果集只有一行一列



标量子查询可以放在where、having、select等后面,由于标量子查询返回的结果是单个值,因此可以使用运算符进行连接(<,>,<>,>=,<=).
案例1.:谁的工资比Abel高?
第一步:查询Abel的工资
SELECT salary FROM employees WHERE last_name = 'Abel';
第二步:查询员工的信息,满足salary>第一步的结果
SELECT * FROM employees WHERE salary>
	(SELECT salary FROM employees WHERE last_name = 'Abel');
案例2.查询大于学生平均成绩的那些学生信息
第一步:查询学生的平均成绩
select avg(成绩) from students;
第二步:查询学生信息,且这些学生的成绩大于平均成绩
select 学号,成绩 from students where 成绩>
                  (select avg(成绩) from students);



2.2非标量子查询



非标量子查询:返回的子查询的结果集是多行一列,因此经常与以下的操作符使用
(1)IN/NOT IN 含义是等于或不等于列表中的任意一个,类似于模糊查询,只不过常量换为查询语句,查询的结果是列表★
举例:返回location_id是1400或者1700的部门中的所有员工的姓名
第一步.先查出location_id是1400或者1700的部门编号
SELECT DISTINCT department_id FROM departments WHERE location_id IN(1400,1700);
第二步.查询员工姓名,要求部门号是第一步中的某一个
SELECT last_name FROM employees WHERE department_id 
	IN (SELECT DISTINCT department_id FROM departments WHERE location_id IN(1400,1700));
(2)ANY/SOME 含义是和子查询返回的某一个值比较 
举例:哪些学生的成绩比课程号为0002的全部成绩里的任一一个高呢?
Select 学号,成绩  from  student  where 成绩 >
             Any(select 成绩 from student where 课程号=’0002’);
(3)ALL含义是和子查询返回的所有值进行比较
举例:哪些学生的成绩比课程号为0002的全部成绩里的任一一个高呢?
Select 学号,成绩  from student where 成绩 >
             All(select 成绩 from student where 课程号=’0002’);



2.3连接查询



(1)等值连接查询.即等值连接的结果是多表的交集部分,并且n表连接,至少需要n-1个连接条件
案例:查询员工名、部门名
SELECT last_name,department_name FROM employees e INNER JOIN departments d ON e.`department_id`=d.`department_id`;
案例2:查询哪个部门的部门员工个数大于等于3的部门名和员工个数,并按照个数降序(排序)
SELECT COUNT(*)员工个数,department_name FROM departments d INNER JOIN employees e  ON d.`department_id`=e.`department_id`
GROUP BY department_name HAVING COUNT(*)>=3 ORDER BY COUNT(*)DESC;
具体字段、表如下 :





查询二班所有成绩mysql 数据库查询第二名成绩_sql查询


练习:


查询二班所有成绩mysql 数据库查询第二名成绩_查询二班所有成绩mysql_02


查询二班所有成绩mysql 数据库查询第二名成绩_sql查询_03


查询二班所有成绩mysql 数据库查询第二名成绩_标量_04


查询二班所有成绩mysql 数据库查询第二名成绩_查询二班所有成绩mysql_05


查询二班所有成绩mysql 数据库查询第二名成绩_标量_06


查询二班所有成绩mysql 数据库查询第二名成绩_标量_07


查询二班所有成绩mysql 数据库查询第二名成绩_子查询_08


查询二班所有成绩mysql 数据库查询第二名成绩_查询二班所有成绩mysql_09


查询二班所有成绩mysql 数据库查询第二名成绩_mrsql查询第二高的成绩_10