数据库的关联查询

数据库的关联查询

首先我们创建三个表(老师 课程 老师_课程)

其中老师的字段有 work_num name gender age project

课程的字段有 class_num label description

老师_课程的字段有 class_num work_num delete_flag False

老师和课程的操作流程

1 创建学校数据库

mysql > create database school charset="utf8"

Query OK, 1 row affected (0.01 sec)

mysql> use school

Database changed

2 创建老师,课程,老师_课程三个表

mysql> create table teacher(id int primary key auto_increment,name char(30),gender char(6),age int,project char(32) charset="utf8")

mysql> create table classes(id int primary key auto_increment,label char(30),description text) charset="utf8"

mysql> create table t_classes(id int primary key auto_increment,t_id int,c_id int,delete_flag char(4)) charsrt="utf8"

数据库的关联查询

3 插入数据

数据库的关联查询

数据库的关联查询

数据库的关联查询

4查询

比如查询所有python科目的老师

SELECT * FROM teacher WHERE project = (SELECT label FROM classes WHERE id = 1)

select label description from classes where label = (select project from teacher where id = 1)

很简单 就是将两个表需要的共同条件按照固定句式写就好了(大写为固定句式)

但是对于多对多的关系,单纯的两表联查就不够了

SELECT NAME label description FROM teacher classes WHERE teacher.project = classes.label;

 

SELECT

t.NAME AS username,

c.label AS project,

c.description AS ds

FROM

teacher AS t,

classes AS c

WHERE


t.project = c.label;



SELECT
  c.label,
c.description
FROM
  classes AS c,
t_classes AS tc
WHERE
tc.t_id = 1
AND tc.c_id = c.id;
SELECT
t.NAME,
c.label,
description
FROM
classes AS c,
t_classes AS tc,
teacher AS t
WHERE
  tc.t_id = 1
AND tc.c_id = c.id
AND tc.t_id = t.id;

附录:

数据库创建语句

create table teacher(id int primary key auto_increment,name char(30),gender char(6),age int,project char(32)) charset="utf8";

create table classes(id int primary key auto_increment,label char(30),description text) charset="utf8";

create table t_classes(id int primary key auto_increment,t_id int,c_id int,delete_flag char(4)) charset="utf8";

快速插入的python脚本

#coding:utf-8

import random

import pymysql

#插入老师

db = pymysql.connect(

user = "root",

password = "1111",

host = "localhost",

database = "school",

charset = "utf8"

)

cursor = db.cursor()

last_name = list("赵钱孙李周吴郑王")

string = "苏宇轩 苏雨扬 苏雨璇 苏宇璇 苏苏 苏真真 苏雨熙 苏雨萱 苏雨轩 苏黎民 苏忠民 苏嘉毅 苏红 苏瀛 苏远航 苏伟祺 苏宸逸 苏益漫 苏卿尧 苏启尧 苏艺潇 苏绾铎 苏悠然 苏幽然 苏钰 苏俊喜 苏玲珑 苏毅尧 苏妍 苏元礤 苏子又 苏宇童 苏宇童 苏哇滕 苏云瑞 苏熙羟 苏博睿 苏紫菡 苏紫涵 苏文萱 苏雅然 苏佳晨 苏语晨 苏雨晨 苏贝晨 苏诗晗 苏欣妍 苏子萱 苏诗涵 苏依辰 苏依晨 苏晨萱 苏晨菲 苏晨希 苏晨曦 苏喧莹 苏喧妍 苏喧婷 苏昕雨 苏昕月 苏煜云 苏瑾琳 苏瑾 苏仁辙 苏湃濡 苏金月 苏金昌 苏文斌 苏煜轩 苏影 苏尚梅 苏锦曦 苏格格 苏昕靓 苏施雅 苏熙宸 苏冀彦 苏倩 苏袁 苏能 苏晓 苏焕迪 苏治诚 苏珍 苏乙祗 苏乙桓 苏姵莹 苏一员 苏眧臣 苏稔涵 苏广溢 苏子默 苏至朗 苏城朗 苏佳朗 苏圣朗 苏佩 苏钰涵 苏美琪 苏麒午 苏亚斌 苏宦安 苏凤菊 苏煜森 苏春喜 苏一涵 苏子生 苏一铭 苏铭铭 苏昕铭 苏智铭 苏鑫铭 苏学铭 苏跃铭 苏岳铭 苏越铭 苏壹铭 苏二铭 苏毅铭 苏子铭 苏康铭 苏亦铭 苏威铭 苏守铭 苏世铭 苏金铭 苏晓铭 苏珊 苏烨 苏琪 苏梦琪 苏欣悦 苏炘悦 苏刚 苏丽君 苏丽鑫 苏晶晶 苏婉灵 苏廷婷 苏怡婷 苏剑婷 苏醒 苏晨醒 苏婷婷 苏雯婷 苏恒运 苏君怡 苏文娟 苏文涓 苏建坤 苏宇杰 苏娅菲 苏子依 苏子怡 苏拉琪 苏子琪 苏子衡 苏子恒 苏子坤 苏子趟 苏子禾".replace("苏","").split(" ")

pro = ["python","c","java","php","linux"]

for i in range(100):

name = random.choice(last_name)+random.choice(string)

gender = random.choice("男女")

age = random.randint(20,40)

project = random.choice(pro)

sql = "insert into teacher(name,gender,age,project) value('%s','%s',%s,'%s')"%(name,gender,age,project)

try:

cursor.execute(sql)

except Exception as e:

print(e)

else:

print(sql)

db.commit()

cursor.close()

db.close()
#插入课程

db = pymysql.connect(

user = "root",

password = "1111",

host = "localhost",

database = "school",

charset = "utf8"

)

cursor = db.cursor()

pro = ["python","c","java","php","linux"]

for index,i in enumerate(pro):

description = "%s 是世界上第%s好的语言"%(i,index+1)

# sql = "insert into classes(label,description) value('%s','%s')"%(i,description)

sql = "update classes set description='%s' where id = %s"%(description,index+1)

try:

cursor.execute(sql)

except Exception as e:

print(e)

else:

print(sql)

db.commit()

cursor.close()

db.close()