10.17

内容回顾:
		1.外键的变种
			表和表之间的关系
			一对多或多对一
			多对多
			一对一
			
			左表  右表
			
			多    一
			
			一     多
			
			多对多,使用第三张表 建立关系
			
		
		2.补充
			核心: 数据驱动视图
			
				json-server
			设计模式: 	MVC   ===> MTV
				Model - View -Controller
				
		3.单表查询
			关键字的优先级
				select * from user where id > 2 group by post having count(1) > 10 order by age desc limit 0,2;
					
				from
				where 
				group by 
				having
				select
				order by
				limit
				
			where 
				>,< >=,<=, !=
				between  xxx and ooo
				in(20,30,40)
				and or not
				
			sql_mode = ONLY_FULL_GROUP_BY
			
			分组之后只能获取分组的字段,如果想获取组内的信息,是通过聚合函数
			聚合函数:
					count(1) 计算总个数
					avg()
					sum()
					max()
					min()
					
	
今日内容:
		1、单表查询
			having
				二次筛选
				having后面的字段只能是分组(group by)之后字段
				
			1.查询各岗位内包含的员工个数小于2的岗位名、岗位内包含员工名字、个数
				select post,group_concat(name),count(1) from employee group by post having count(1) < 2;
			2. 查询各岗位平均薪资大于10000的岗位名、平均工资
				select * from employee where salary  not in (select avg(salary) as A from employee group by post having A > 10000);
				select post,avg(salary) as A from employee group by post having A > 10000
				
			3. 查询各岗位平均薪资大于10000且小于20000的岗位名、平均工资
				select post,avg(salary) from employee group by post having avg(salary) between 10000 and 20000;
			order by
				asc 升序
				desc 降序
				
			limit 0,5 第一个参数起始位置,第二个参数显示的个数
			
		2、多表查询
			select employee.name as a,department.name as b from employee,department where employee.dep_id = department.id and employee.name = 'egon';
		
			select * from (select employee.name as a,department.name as b from employee,department where employee.dep_id = department.id) as A where A.a ='egon';
				
					
			select * from employee,department where employee.dep_id = department.id
			外链接操作	
				
			 内连接: 符合条件查询 只连接匹配的行
				select * from employee inner join department on employee.dep_id = department.id;
			
				
			 左连接: 优先显示左表记录
				select * from employee left join department on employee.dep_id = department.id;
			 
			 右连接: 优先显示右边记录
				select * from employee right join department on employee.dep_id = department.id;
				
				
			 全外连接:
				 select * from employee left join department on employee.dep_id = department.id
					  union
				 select * from employee right join department on employee.dep_id = department.id
		3.符合条件查询
			以内连接的方式查询employee和department表,并且employee表中的age字段值必须大于25,
			即找出年龄大于25岁的员工以及员工所在的部门
			select department.name,employee.name from employee inner join department on employee.dep_id = department.id where age > 25
			
		4.子查询
			子查询是将一个查询语句嵌套在另一个查询语句中。
			
			一个查询语句查询的结果作为另一个查询语句的条件
			
			1、查询平均年龄在25岁以上的部门名
			
			select name from department where id in (select dep_id from employee group by dep_id having avg(age) > 25);
			2、查看不足1人的部门名
			
			select name from department where id not in (select dep_id from employee group by dep_id);
				
			3、查询大于所有人平均年龄的员工名与年龄
			select name,age from employee where age > (select avg(age) from employee);
			
			4、查询大于部门内平均年龄的员工名、年龄
		思路:
		  (1)先对员工表(employee)中的人员分组(group by),查询出dep_id以及平均年龄。
		   (2)将查出的结果作为临时表,再对根据临时表的dep_id和employee的dep_id作为筛选条件将employee表和临时表进行内连接。
		   (3)最后再将employee员工的年龄是大于平均年龄的员工名字和年龄筛选。
		   
		   select * from employee inner join (select dep_id,avg(age) as b from employee group by dep_id) as A on employee.dep_id = A.dep_id where employee.age > A.b;
		   
		   
		   
		   5.查询每个部门最新入职的那位员工
		   
		   select name from employee 
				inner join 
		   (select post,max(hire_date) as newTime from employee group by post) as A 
				on employee.post = A.post 
			where employee.hire_date = A.newTime;
			
		5.pymysql模块的使用
			(1)pip install pymysql
			
			
			import  pymysql

			username = input('请输入用户名:')
			pwd = input('请输入密码:')

			# 建立连接
			conn = pymysql.connect(
				host='localhost',
				user='root',
				password="",
				database='db13',
				port=3306,
				charset='utf8'
			)
			# 创建游标
			cur = conn.cursor()
			sql = 'select * from userinfo where name="%s" and pwd="%s"'%(username,pwd)
			print(sql)

			res = cur.execute(sql)
			print(res)

			# 游标关闭 连接关闭
			cur.close()
			conn.close()


			if res:
				print('登录成功')
			else :
				print('登录失败')




		 


		   

  

posted @ 2018-10-17 17:07  玩蛇少年7372  阅读(111)  评论(0编辑  收藏  举报