日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL 联合查询实质_1.多表查询 = 转化为一张联合大表 2.可视化工具 3.pymysql模块...

發布時間:2025/7/14 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL 联合查询实质_1.多表查询 = 转化为一张联合大表 2.可视化工具 3.pymysql模块... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

多表數據

create table dep(

id int primary key auto_increment,

name varchar(16),

work varchar(16)

);

create table emp(

id int primary key auto_increment,

name varchar(16),

salary float,

dep_id int

);

insert into dep values(1, ‘市場部‘, ‘銷售‘), (2, ‘教學部‘, ‘授課‘), (3, ‘管理部‘, ‘開車‘);

insert into emp(name, salary, dep_id) values(‘egon‘, 3.0, 2),(‘yanghuhu‘, 2.0, 2),(‘sanjiang‘, 10.0, 1),(‘owen‘, 88888.0, 2),(‘liujie‘, 8.0, 1),(‘yingjie‘, 1.2, 0);

笛卡爾積 (交叉連接)

‘‘‘

# 需求:

# 查看每位員工的部門的所有信息

select * from emp;

select * from dep;

# 子查詢, 最終結果只能顯示單表的信息, 但需求是同時顯示兩張表的信息 => 先將兩張表合成一張表

select * from emp where dep_id in (select id from dep);#只能顯示由部門的成員信息

‘‘‘

‘‘‘

笛卡爾積: 集合 X{a, b} * Y{o, p, q} => Z{{a, o}, {a, p}, {a, q}, {b, o}, {b, p}, {b, q}}

交叉查詢: select * from emp, dep; | select * from emp course join dep; 這兩個結果一樣

‘‘‘

‘‘‘ 下面做了篩選,結果小于等于完整的數據,所以是非笛卡爾積

select * from emp, dep where db2.emp.dep_id = db2.dep.id; # 同sql語句上表現是從兩張表拿數據

# 注意: 同時查詢兩張表形成的新表可以稱之為虛擬表, 原表與表之間可能存在重復字段, 同時使用時需要明確所屬表,必要時還需明確所屬數據庫

‘‘‘

多表連接(*****) 本質:轉換成虛擬的單表

內連接

‘‘‘

inner join on

內連接:結果為兩張表有對應關系的數據(emp有dep沒有,emp沒有dep有的記錄均不會被虛擬表展示)

語法:左表 inner join 右表 on 兩表有關聯的字段的條件, on就是產生對于關系的(連接的依據)

eg:select * from emp inner join dep on emp.dep_id = dep.id;

‘‘‘

左連接

‘‘‘

left join on

左連接:在內連接的基礎上還保留左表特有的記錄

語法:左表 left join 右表 on 兩表有關聯的字段的條件

eg:select emp.name ‘員工‘, dep.name ‘部門‘, dep.work ‘職責‘ from emp left join dep on emp.dep_id = dep.id;

‘‘‘

右連接

‘‘‘

right join on

右連接:在內連接的基礎上還保留右表特有的記錄

語法:左表 right join 右表 on 兩表有關聯的字段的條件

eg:select * from emp right join dep on emp.dep_id = dep.id;

‘‘‘

‘‘‘

內連接,左連接,右連接總結:

在連接語法join 前就是左表, 后就是右表

采用的是left關鍵詞就是左連接, right關鍵詞就是右連接, inner關鍵詞就是內連接

‘‘‘

全連接

‘‘‘

全連接:在內連接的基礎上分別保留這左表及右表特有的記錄

語法:mysql沒有full join on語法,但可以通過去重達到效果

eg:

select * from emp left join dep on emp.dep_id = dep.id

union

select * from emp right join dep on emp.dep_id = dep.id;

其中union就是將兩個表連接起來并達到去重的效果

‘‘‘

練習

‘‘‘

1.查詢每一位員工對應的工作職責

分析:每一位員工那么員工的信息要被全部保留:左表如果為emp表,那么左表的信息要被全部保留,用左連接

左表如果為dep表,那么右表的信息要被全部保留,用右連接

select emp.name,dep.work from emp left join dep on emp.dep_id=dep.id;

select emp.name,dep.work from dep right join emp on emp.dep_id=dep.id;

2.查詢每一個部門下的員工們及員工職責

分析:

每一個部門=>那么部門的信息要被全部保留并且需要分組

員工職責=>dep.work,由于分組不能直接被查詢=>需要用聚合函數處理

員工們=>emp.name做拼接=>group_concat(emp.name)

分組的字段=>部門=>emp.dep_id

左表如果為emp表,那么右表的信息要被全部保留,使用右連接

左表如果為dep表,那么左表的信息要被全部保留,使用左連接

select max(dep.name),max(dep.work),group_concat(emp.name) from emp right join dep on emp.dep_id=dep.id group by emp.dep_id;

select max(dep.name),max(dep.work),group_concat(emp.name) from dep left join emp on emp.dep_id=dep.id group by emp.dep_id;

‘‘‘

‘‘‘

注意:on的優先級高于group by 所以on在group by 的左邊

‘‘‘

navicat

‘‘‘

1. 安裝navicat

2.連接數據庫,并建庫

3.創建表、設置字段、插入數據

4.新建查詢

查詢在上面點擊有新建查詢

‘‘‘

sql文件注釋:單行注釋 -- abc; 不會報錯,有分號,--后要加空格

多行注釋 /*abc*/ 不會報錯,沒有分號

# abc; 有分號,#后要加空格

python使用mysql

# 模塊pymysql

# 按照并導入pymysql: pip3 insatll pymysql

# 通過pymysql操作數據庫分四步:

‘‘‘

1.建立連接

conn = pymysql.connect(host="localhost", port=3306, db=‘db3‘, user=‘root‘, password=‘root‘) #user和密碼必須加引號,密碼是數字也要加引號

2.設置字典類型游標

cursor = conn.cursor(pymysql.cursors.DictCursor) #設置字典類型的游標方便取值

3.執行sql語句并使用執行結果

# 書寫sql語句

sql = ‘select * from emp‘

# 執行sql語句, 有返回值, 返回值為得到的記錄行數

line = cursor.execute(sql)

print(line)

# 使用執行的結果:

fetchone())當前游標往后獲取一行記錄

fetchall()當前游標往后所有的記錄

#游標移動

scroll(num, mode="relative|absolute")

relative: 游標從當前位置往后移動num行

ablolute: 游標從頭往后移動num行, 一般可以結合line來使用能定位到任意位置

tag = cursor.fetchone() # fetch 拿取,第一次執行拿到第一條結果

print(tag)

print(tag[‘salary‘])

tag = cursor.fetchone() # 第二次執行拿到第二條結果

print(tag)

cursor.scroll(1, mode=‘relative‘) # 偏移第三條

# cursor.scroll(line - 1, mode=‘absolute‘) # 指針絕對, 游標永遠從頭開始偏移

tags = cursor.fetchall() # 第四條開始拿數據直到最后

print(tags)

4.斷開連接

cursor.close()

conn.close()

‘‘‘

pymysql處理sql的注入問題

# 什么是sql注入:

# 通過書寫sql包含(注釋相關的)特殊字符, 讓原有的sql執行順序發生改變, 從而改變執行得到的sql

#sql中的注釋:/**/ | -- | #

# 目的:

# 繞過原有的sql安全認證, 達到對數據庫攻擊的目的

# 沒有處理sql注入的寫法

‘‘‘

import pymysql

conn = pymysql.connect(host=‘localhost‘,port=3306,user=‘root‘,password=‘940828‘,db=‘db3‘)

cursor = conn.cursor(pymysql.cursors.DictCursor)

#登錄功能

#得到用戶輸入的賬戶密碼

user = input(‘請輸入用戶名:‘).strip()

pwd = input(‘請輸入密碼:‘).strip()

#和數據庫的賬號密碼進行比對

sql = ‘select * from user where user="%s" and pwd="%s"‘ %(user,pwd)

#%s為什么要用雙引號????如果后面數據是字符串形式必須加雙引號,是數字形式可加可不加.所以必須加上

res=cursor.execute(sql)

if res:

print(‘登錄成功!‘)

else:

print(‘登錄失敗!‘)

cursor.close()

conn.close()

‘‘‘

# sql注入

# 1.知道用戶名: henry" -- hehe | ooo

# select * from user where usr="henry" -- hehe" and pwd="ooo" #這樣是把-- 后面的代碼當成注釋

# 2.不知道用戶名 aaa" or 1=1 -- hehe | 000

# select * from user where usr="aaa" or 1=1 -- hehe" and pwd="000" #第一個or判斷為真,-- 后面的代碼當成注釋

# 處理sql注入

# 處理方式

# 對輸入的賬戶密碼做完全處理 => 不可能形成達到sql注入的特殊語法 => 正則

sql = ‘select * from user where usr=%s and pwd=%s‘

res = cursor.execute(sql, (usr, pwd))

#這個%s為什么不用雙引號?用雙引號會報錯!

增刪改

# 增

# 增sql語句

sql1 = ‘insert into user(user, pwd) values (%s, %s)‘

#cursor執行sql語句,在內存中完成了對數據的插入, 但不能將數據存放到硬盤

# 會將id完成自增,如果第一次運行沒有將數據放到硬盤,那么接下來運行并將數據寫到硬盤id會跳過一位.

# 在內存中一次插入一條

cursor.execute(sql1, ("opq", "123"))

# 在內存中一次插入多條

cursor.executemany(sql1, [("aaa", "000"), ("bbb", "111")])

# 將內存中的數據提交到硬盤中

conn.commit()

#刪

sql2 = ‘delete from user where user=%s‘

cursor.execute(sql2,(‘lzq‘))

conn.commit()

#改

sql3 = ‘update user set pwd=%s where user=%s‘

cursor.execute(sql3,(‘wade‘,‘wade‘))

conn.commit()

原文:https://www.cnblogs.com/lizeqian1994/p/10265209.html

總結

以上是生活随笔為你收集整理的MySQL 联合查询实质_1.多表查询 = 转化为一张联合大表 2.可视化工具 3.pymysql模块...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费看又黄又无码的网站 | 亚洲天堂久 | 国产女人高潮视频 | 国产人妖ts重口系列网站观看 | 亚洲欧美日韩精品在线 | 亚洲91网 | 国产无遮挡呻吟娇喘视频 | 精品国产aⅴ一区二区三区东京热 | 91免费高清在线观看 | 国产高清一区在线观看 | 欧美在线视频一区二区三区 | 99精品视频在线免费观看 | 白丝少妇| 亚洲激情精品 | 国产日韩欧美精品 | 国产一伦一伦一伦 | 日本一本在线观看 | 一区二区视频在线观看免费 | 三级视频网站 | 欧美a级肉欲大片xxx | 国产一区二区不卡视频 | 在线a级| 中文字幕免费观看视频 | 丰满人妻熟妇乱偷人无码 | 三级第一页 | 亚洲是色| 一区二区三区免费看视频 | av天堂永久资源网 | 天天干天天上 | 玖草在线视频 | 一区二区精品在线观看 | 国产精品欧美精品 | 日韩成人午夜影院 | 日大逼 | av免费精品 | 日日干av | 国产精品探花一区二区在线观看 | 理论视频在线观看 | 毛片无码一区二区三区a片视频 | 中文黄色片 | 天天操夜夜爽 | 欧美精品一区在线 | 日本黄色的视频 | a级国产视频 | 成人爽站w47pw| 国模无码视频一区 | 日韩精品免费一区二区三区竹菊 | 毛茸茸日本熟妇高潮 | 狠狠爱婷婷 | 成人性毛片 | 男人的天堂99 | 国产成人精品在线 | 久久精品国产99国产精品 | 91精品人妻一区二区三区 | 国产毛片电影 | 欧美69式性猛交 | 俄罗斯女人裸体性做爰 | 欧美色图12p | 奇米91| 欧美综合一区二区 | a免费观看 | 人妻在客厅被c的呻吟 | www.啪啪.com | 日本五十熟hd丰满 | 国产男女视频在线观看 | 天天拍夜夜爽 | 精品久久五月天 | 成人免费xxxxxx视频 | 大帝av| 三级视频小说 | 国产中文字幕第一页 | 成人精品免费看 | 黄色三及 | 我爱52av| 污网站在线免费看 | 亚洲国产成人一区二区 | 色综合影视 | 国产三级在线播放 | 超碰女优| 日韩中文字幕国产 | 国产中文一区二区三区 | 亚洲欧美国产精品 | 少妇熟女一区 | 久久久久a | 蜜桃视频在线观看网站 | 国产网站一区 | 国产成人精品av在线观 | 真实的国产乱xxxx在线 | 国产成人在线免费 | 国产精品国产自产拍高清av | 欧美三级国产 | 黑人vs亚洲人在线播放 | 乱妇乱女熟妇熟女网站 | 美女被男生免费视频 | 色婷婷六月 | 亚洲色图在线观看视频 | 伊人激情综合 | 在线观看欧美 | 乱岳 |