• 欢迎光临~

多表查询 可视化软件Navicat

开发技术 开发技术 2022-11-28 次浏览

今日内容总结

多表查询的两种方法

#方式一:连表操作 
	1.inner join	内连接
    select * from 表1 inner join 表2 on 连接部分
    只连接两张表的共有部分
    
 	2.left join		左连接
    select * from 表1 left join 表2 on 连接部分
    以左表为基准 展示左表所有的数据 如果没有对应项用NULL填充
    
    3.right join	右连接
    select * from 表1 right join 表2 on 连接部分
    以右表为基准 展示右表所有的数据 如果没有对应的用NULL填充
    
    4.union		    全连接
    select * from 表1 left join 表2 on 连接部分
  	union
  	select * from 表1 right join 表2 on 连接部分;
   	以左右表为基准 展示所有的数据 各自没有的全部NULL填充
'''
当需要连接的表不再是两张而是更多的时候
	我们编写的SQL代码所得到结果可以视为一张新的表 可以将已经连接的两张表作为一张表去和别的表建立连接
'''
#方式二:子查询
	将一条SQL语句用括号括起来当成另外一条SQL语句的查询条件
    子查询类似于我们日常生活中解决问题的方式>>>:分布操作
    
'''
很多时候多表查询需要结合实际情况判断用哪种 更多时候甚至时相互配合
'''

小知识点补充说明

#concat与concat_ws
	concat用于分组之前的字段拼接操作
   	select conact(字段名1,'中间可插入符号',字段名2) from 表名;
  	
    concat_ws用于拼接多个字段并且中间的连接符要一致
    select concat_ws('符号',字段名1,字段名2,字段名3) from 表名;
#exists
	sql1 exists sql2
    sql2有结果的情况下才会执行sql1 否则不执行sql1 返回空数据
#表相关SQL补充
	1.修改表名
	alter table 表名 rename 新表名;
    
    2.添加字段
  	alter table	表名 add 字段名 字段类型(数字) 约束条件;
    '''
    在约束条件后面加上 after 已有字段 可选择插入字段的位置
    在约束条件后面加上 first 可以将字段移至最前
    '''
    
    3.修改字段
    alter table 表名 change 旧字段 新字段 字段类型(数字) 约束条件
    alter table 表名 modify 字段名 新字段类型(数字) 约束条件;
    
    4.删除字段
    alter table 表名 drop 字段名

可视化软件Navicat

第三方开发的用来充当数据库客户端的简单快捷的操作界面
	无论第三方软件底层的本质还是sql 类似于的软件还有许多但navicat是最出名的
    
#常用操作
	创建库、表、记录、外键
    逆向数据库到模型、模型创建
    新建查询可以编写sql语句并自带提示功能
    sql语句注释语法
    --、/**/、#
    运行 转储sql文件

多表查询练习题

1.查询所有的课程的名称以及对应的任课老师姓名
2.查询平均成绩大于八十分的同学的姓名和平均成绩
3.查询没有报名李平老师课的学生姓名
4.查询没有同时选修物理课程和体育课程的学生姓名

思路分享
--1.查询所有的课程的名称以及对应的任课老师姓名
	#1.先确定需要用到几张表>>>课程表 教师表
 	#2.预览表中的数据 做到心中有数
 	#3.确定多表查询的思路 连表 子查询 混合操作
--2.查询平均成绩大于八十的同学的姓名和平均成绩
	#1.先确定需要需要用到几张表>>>学生表 分数表
	#2.预览表中的数据
 	#3.根据已知条件80分 作为切入点 分数表
 	#4.求出每个学生的平均成绩 按照学生的id分组 然后使用avg求出即可
	#5.筛选出平均成绩低于八十的
 	#6.确定最后需要几张表>>>需要两张表 所以用连表更加合适
--3.查询没有报名李平老师课的学生
	#1.先确定需要用到几张表>>>老师表 课程表 分数表 学生表
 	#2.预览每张表的数据
 	#3.确定思路 思路1:正向筛选 思路2:筛选所有报了李平老师课程的学生id然后取反即可
--4.查询没有同时选修物理课程和体育课程的学生姓名
	#1.先确定需要的表>>>学生表 分数表 课程表
	#2.预览表数据
 	#3.根据给出的条件确定起手的表
 	#4.根据物理和体育筛选课程id
 	#5.根据课程id筛选出所有跟物理 体育有关的学生id
 	#6.统计每个学生报了的课程数 筛选出等于1的
	#7.我们有了学生id所以只用子查询查询学生姓名即可

python操作MySQL

pymysql模块(需要下载)
	pip3 install pymysql

import pymysql

#1.连接Mysql服务端
conn = pymysql.connect(
	host='127.0.0.1',
    port=3306,
    user='root'
    password='',
    db = '库名'
    charset='utf8md4'
)
# 2.产生游标对象
cursor = conn.coursor(cursor=pymysql.cursors.Dictcursor) #不写就是列表包元组 写了就是字典 指代性更强
#3.编写sql语句
sql = 'select * from score;'
#4.发送sql语句
affect_rows = cursor.excute(sql)  # execute有返回值 接收的是sql语句影响的行数
#5.获取sql语句执行之后的结果
res = currsor.fetchall()
print(res)

pymysql补充说明

#1.获取数据
	fetchall()	获取所有的结果
 	fetchone() 	获取结果集的第一个数据
    fetchmany()  获取指定数量的结果集
    ps:注意三者都有类似于文件光标移动的特性
    
    cursor.scroll(1,'relative')  # 基于当前位置往后移动
    cursor.scroll(0,'absolute')  # 基于数据的开头往后移动
    
#2.增删改查
	autocommit=True		# 针对增删改 可添加至配置 (自动确认)
    conn.commit()		# 针对增删改 需要二次确认 (代码确认)
程序员灯塔
转载请注明原文链接:多表查询 可视化软件Navicat
喜欢 (0)
违法和不良信息举报电话:022-22558618 举报邮箱:dljd@tidljd.com