python学习笔记 day43 子语句查询+关键字

1. 子语句查询

子语句其实就是sql语句的嵌套,外层的sql语句成为父语句,内层的sql语句成为子语句,第一次查询的结果可以作为第二次查询的条件或者表名来使用;

1.1 首先来看子语句查询结果作为表名:

select * from (select * from person) as aaa;   # 括号中的sql语句就是子语句,将该子语句的查询结果作为父语句的表名;

这里需要注意:将子语句的查询结果作为外层sql语句的表名时需要起一个别名;

 

运行结果:

1.2 子语句的查询结果作为外层语句的查询条件:

select * from person where dept_id=(select did from dept where name="研发部");   # 子语句的查询结果作为外层sql语句的查询条件(就是筛选研发部的员工信息)

运行结果:


1.3 查询最大工资的那个人的名字和薪水:

select name,salary from person where salary=(select max(salary) from person);  # 子语句查询到最大工资,外层sql语句安公子匹配名字;

 

运行结果:

 

1.4  查询工资高于所有人员平均工资的人员

select * from person where salary>(select avg(salary) from person);

 

运行结果:

 

 1.5 查询平均年龄在20岁以上的部门名:

方法一(使用子语句作为查询条件)

select dept.name from dept where did in (select dept_id from person group by dept_id having avg(age)>25) 

 

运行结果:

方法二: 使用联合查询:

select dept.name,avg(age) from person,dept where dept.did=person.dept_id group by dept_id having avg(age)>25;  # 使用联合查询,关联条件是person的dept_id=dept的did,查找部门平均年龄大于25的,用到了分组

 

运行结果:

方法三: 使用内连接查询(其实很联合查询的效果是一样的,只是语法不太一样,联合查询关联条件用where,多张表之间用逗号隔开,  连接查询关联条件使用on 中间关键字 inner join):

select dept.name,avg(age) from person inner join dept on dept.did=person.dept_id group by dept_id having avg(age)>25;  # 使用内链接查询,使用了分组查询,带有条件(每一组平均年龄需要判别)

 

运行结果:

 

1.6 查询研发部下的所有人员信息:

方法一: 使用子语句查询:

select * from person where person.dept_id =(select did from dept where dept.name="研发部"); # 子语句的查询结果作为外层语句的判断条件

运行结果:

方法二: 使用联合查询(多个表之间采用逗号隔开,关联字段的条件采用where):

select * from person,dept where dept.did=person.dept_id and dept.name="研发部"; #使用联合查询,多个表之间采用逗号隔开,关联字段的条件是where

运行结果:

方法三: 使用内连接查询(多个表之间采用inner join,表之间的关联字段条件使用on)

 

select * from person inner join dept on dept.did=person.dept_id where dept.name="研发部";

运行结果:

 

 1.7 查询大于所有人平均工资的人员姓名和年龄:

select name,age from person where salary>(select avg(salary) from person);

 

运行结果:

 

2. 关键字---any all some exists

2.1 any ----如果any内部查询语句返回结果有三个,比如result1,result2,result3,,,等那么

select ...from ...where a >any(...) ==》 select ...from ...where a>result1 or a>result2 or a>result3;  (中间使用or连接)

 

2.2 all----中间使用and连接多个结果:

select ...from ...where a >all(...) ==》 select ...from ...where a>result1 and a>result2 and a>result3;  (中间使用and 连接)

 

2.3 some ---作用同any (多个结果之间使用or连接)

 

2.4 exists ----子语句查询有结果,返回Ture会执行外层sql语句; 反之不会执行外层sql语句;(not exists 刚好与之相反)

select ... from....where exists(subquery----子语句)   可以理解为主查询(外部查询)会根据子查询的验证结果 True or False 来决定主查询是否得以执行;

如果子查询语句可以查到结果,就会返回True 主查询就会执行,反之 主查询不会执行;

 

select * from person where exists (select * from person where id>14) # 子查询语句查询不到结果(因为person表只有13条数据),所以子查询返回False 主查询不会执行

运行结果:

如果not exists:

select * from person where not exists (select * from person where id>14) # 子查询语句查询不到结果(因为person表只有13条数据),所以子查询返回False 主查询不会执行

运行结果:

 

转载于:https://www.cnblogs.com/xuanxuanlove/p/9873699.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,异常处理是非常重要的一部分。当程序运行时如果出现错误,如果没有异常处理,程序就会崩溃。为了避免这种情况,Python提供了异常处理机制。 在Python中,异常处理语句使用 `try` 和 `except` 关键字来实现。`try` 语句块中包含可能会发生异常的代码,如果这段代码出现了异常,则会跳转到 `except` 语句块中执行异常处理代码。 下面是一个简单的例: ```python try: num = int(input("请输入一个整数:")) print(10/num) except ZeroDivisionError: print("除数不能为0") except ValueError: print("输入的不是整数") ``` 在上面的代码中,我们尝试将用户输入的字符串转换为整数,并将其用作除数计算 10/num。如果用户输入的是 0,则会触发 ZeroDivisionError 异常。如果用户输入的不是整数,则会触发 ValueError 异常。如果发生异常,则会跳转到对应的 except 语句块中执行处理代码。 除了可以指定具体的异常类型,也可以使用 `except Exception` 来捕获所有异常。例如: ```python try: num = int(input("请输入一个整数:")) print(10/num) except Exception as e: print("发生异常:", e) ``` 在上面的代码中,如果发生任何异常,都会跳转到 `except` 语句块中执行处理代码,并将异常信息打印出来。 除了 `try` 和 `except`,还有 `finally` 关键字,它指定的代码块无论是否发生异常都会执行。例如: ```python try: num = int(input("请输入一个整数:")) print(10/num) except Exception as e: print("发生异常:", e) finally: print("程序执行完毕") ``` 在上面的代码中,无论是否发生异常,都会执行 `finally` 中的代码,即输出“程序执行完毕”。 总之,在Python中,异常处理是非常重要的一部分,它可以有效避免程序崩溃,提高程序的健壮性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值