4.单表-多表查询

标签:lang   限制   拼接   第一条   rtm   通配符   表单查询   err   一起   

表单查询

1.单表查询

# 多个查询条件共同出现时使用顺序
"""
select ... from ... where ... group by ... having ... order by ... limit ...  
查询的数据可以用 as 起别名
"""

# 一.where 条件的使用
	功能:对表中的数据进行筛选和过滤
	语法:
    # 1.判断的符号
        > < >= <= = !=( <>不等于 )
    # 2.拼接不同条件的关键字
        and or not
    # 3.查询区间值
        between 小值 and 大值 [小值,大值] 查询两者之间的范围
    # 4.查询区间值
        id in (1,2,3,4,5,6)
    #5.模糊查询 like %通配符 _通配符
        like "%b"  匹配以b结尾的任意长度字符串
        like "a%"  匹配以a开头的任意长度字符串
        like "%c%" 匹配字符串中含有c的任意长度字符串
        like "__d" 匹配总长度为3位,而且以d结尾的字符串
        like "e__" 匹配总长度为3位,而且以e开头的字符串
    # 6. 去重 查询字段内种类
        distinct(字段)  
        
# 二. group by 子句  分类,分组  各个部门
"""注意点: 针对于当前表,by谁搜谁"""
    select sex from employee group by sex
    select emp_name from employee group by sex  # error
    # 解决办法  group_concat 按照分组把对应的字段拼接在一起  
    select group_concat(emp_name) from employee group by sex;

# 聚合函数 只能用在group by 中
	# count 统计数量 * 号代表所有 
	select count(*) from employee
	# max 统计最大值
	select max(salary) from employee;
	# min 统计最大值
	select min(salary) from employee;
	# avg 统计平均值
	select avg(salary) from employee;
	# sum 统计总和
	select sum(salary) from employee;
    
# 三.having 对分类后的数据进行二次过滤[应用在group by这个场景里]

# 四.order by 排序
    """
    正序 升序 asc
    倒序 降序 desc
    """
#练习:order by
    select * from employee order by age; #(默认升序)
    select * from employee order by age asc; # 升序
    select * from employee order by age desc; # 降序

# 五.limit 限制查询的条数
"""
 limit m,n  m代表从第几条搜索数据 , n 代表搜索几条 m=0 代表搜索第一条数据 
 limit n      n 代表搜索几条
 """
# 网页分页浏览
    select * from employee limit 0,10  # 0代表第一条 ,往后搜10条数据
    select * from employee limit 10,10 # 10代表第11条,往后搜10条数据

# limit 数字  代表搜索条数
    select * from employee limit 1;
# 搜索表里面最后一条数据
    select * from employee order by id desc limit 1;
# 搜索表里面最后三条数据
    select * from employee order by id desc limit 3;

# 六.(了解) 可以使用正则表达式 (不推荐使用)
    select * from employee where emp_name regexp ".*n$"; #?号不识别
    select * from employee where emp_name regexp "程咬.*";     

2.多表查询

# 1.内联查询(内联接):  inner join ...on.. 至少两表以上做查询,把满足条件的所有数据查询出来(查询的是共同拥有的数据)
    select 字段 from 表1 inner join 表2 on 必要的关联字段 (2张表)
    select 字段 from 表1 inner join 表2 on 必要的关联字段1  inner join 表3 on 必要的关联字段2 ... inner join ... 

    # 语法:
    select * from employee inner join  department on employee.dep_id = department.id ;
    # as 起别名 (推荐)
    select * from employee as e inner join  department as d on e.dep_id = d.id ;
    # as 可以省略
    select * from employee  e inner join  department  d on e.dep_id = d.id ;

    # where 写法默认等价于inner join ..on..也是内联查询
    select * from employee , department  where  employee.dep_id = department.id ;
    select * from employee as e, department as d  where  e.dep_id = d.id ;

# 2.外联查询(外联接)
    # (1) left join ..on.. (左联接) : 以左表为主,右表为辅,完整查询左表所有数据,右表没有的数据补null 
    select * from employee left join   department on employee.dep_id = department.id ;
    # (2) right join ..on.. (右联接): 以右表为主,左表为辅,完整查询右表所有数据,左表没有的数据补null 
    select * from employee right join   department on employee.dep_id = department.id ;

# 3.全联查询(全联接) left join +(union) right join 
    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 ;
# 4.子查询
"""
子查询 : sql语句的嵌套
	(1) sql语句当中嵌套另外一条sql,用括号()包起来,表达一个整体;
	(2) 一般用在子句的后面 比如from , where ...身后 表达一个条件或者一张表
	(3) 速度快慢 : 单表查询 > 联表查询 > 子查询
"""
# 带EXISTS关键字的子查询
	"""
	exists 关键字,表达数据是否存在,用在子查询里
		如果内层sql 能够查到数据,返回True ,外层sql执行sql语句
		如果内层sql 不能够查到数据,返回False ,外层sql不执行sql语句
	"""
	select * from employee where exists (select * from employee where id = 1);
	
    """
	总结: 
		子查询可以作为临时表,也可以作为where子句的条件,通过()包括sql,表达一个整体;
		一般用在各个子句后面 select .. from ... where ...
	思路:
		可以把临时搜索出来的数据变成临时表,在和其他表做联表,最后做单表查询;
	"""

4.单表-多表查询

标签:lang   限制   拼接   第一条   rtm   通配符   表单查询   err   一起   

原文地址:https://www.cnblogs.com/jia-shu/p/14263871.html

版权声明:完美者 发表于 2021-01-13 11:07:38。
转载请注明:4.单表-多表查询 | 完美导航

暂无评论

暂无评论...