02-数据库MySQL[Python]

2018-10-25  本文已影响0人  慕杨_

一、数据的完整性之实体完整性

二、数据的完整性之域完整性

二、数据的完整性之引用完整性

四、多表查询

```
语法:
select 列1,列2,列N from
tableA 
inner join 
tableB
on tableA.列 = tableB.列  (此处表连接成一张大表,完全当成一张普通表看)
where,having,group by.... (条件照常写)

例如:
查询每个学生的具体信息
select 
tableA.*,tableB.score
from 
student tableA 
inner join 
score tableB
on 
tableA.stu_id=tableB.stu_id;

select 
tableA.*,score
from 
student tableA 
inner join 
score tableB
on 
tableA.stu_id=tableB.stu_id;

```
左连接2: 得到的是A中的所有数据减去"与B满足同一条件 的数据",然后得到的A剩余数据;

![1.2.2左连接](https://img.haomeiwen.com/i13621350/013b6da5cac8e4ec.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
语法:
  select 
  列1,列2,列N 
  from
  tableA 
  left join 
  tableB
  on 
  tableA.列 = tableB.列  (此处表连接成一张大表,完全当成一张普通表看)
  where,having,group by.... (条件照常写)

  例如,左连接1:
  select 
  tableA.*,score
  from 
  student tableA 
  left join 
  score tableB
  on 
  tableA.stu_id=tableB.stu_id;

  例如,左连接2:
  select 
  tableA.*
  from 
  student tableA 
  left join 
  score tableB
  on 
  tableA.stu_id=tableB.stu_id
  where
  score is null;

右连接2: 得到的是B中的所有数据减去 "与A满足同一条件的数据",然后得到的B剩余数据;

![1.3.2右连接](https://img.haomeiwen.com/i13621350/5862b64948953725.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


```
语法:
select 
列1,列2,列N 
from
tableA 
right join 
tableB
on 
tableA.列 = tableB.列  (此处表连接成一张大表,完全当成一张普通表看)
where,having,group by.... (条件照常写)

例如:
select 
tableA.*,score
from 
student tableA 
right join 
score tableB
on 
tableA.stu_id=tableB.stu_id;

```

> 左连接:即以左表为基准,到右表找匹配的数据,找不到匹配的用NULL补齐;
> 推荐左连接来代替右连接,兼容性会好一些;

五、多表查询

表1-student 表2-score
1、男同学的考试科目及对应成绩
2、姓张同学的考试科目及对应成绩
3、既有英语又有计算机成绩的学生信息
4、姓王的同学并且有一科以上成绩大于90分的学生信息

5、查询李四的考试科目(c_name)和考试成绩(grade)
6、查询计算机成绩低于95的学生信息
7、查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩

1、
SELECT name,sex,c_name,grade 
FROM 
student,score
WHERE
student.id=score.stu_id AND sex='男';
2、
SELECT name,c_name,grade
FROM
student,score
WHERE
student.id=score.stu_id AND name LIKE "张%"; 
3、
SELECT student.*
FROM 
student,score s1,score s2
WHERE
student.id=s1.stu_id AND student.id=s2.stu_id 
AND
s1.c_name="计算机" AND s2.c_name="英语"; 
4、
SELECT student.*
FROM
student,score
WHERE
student.id=score.stu_id AND grade>90 AND name LIKE "王%";
5、
SELECT name,c_name,grade 
FROM
student,score
WHERE
student.id=score.stu_id AND name="李四";
6、
SELECT student.*,c_name,grade 
FROM
student,score
WHERE
student.id=score.stu_id AND c_name="计算机" AND grade<95;
7、
SELECT name,2017-birth AS age,department,c_name,grade 
FROM
student,score
WHERE
student.id=score.stu_id AND address like "%湖南%";

找到表与表的对应关系;
如果多张表中有同一个属性名时必须标注是哪个表中的属性;

六、数据库的备份和恢复

八、MySQL与Python的交互

- 安装
    pip3 install pymysql

- 使用
import pymysql

# 链接数据库
db = pymysql.Connect(host='127.0.0.1', port=3306, user='root', password='123456', database='test08', charset='utf8')
# 数据库游标
cursor = db.cursor()

# 查询数据
db.begin()
cursor.execute("select * from students_info;")
db.commit()
# 获取所有数据
print(cursor.fetchall())
# 获取一个,根据下标取对应的数据
print(cursor.fetchall()[0])
# 注: 不能同时使用,因为游标会往后移动

# 插入数据
db.begin()
cursor.execute("insert into students_info values ('2000', '老李', '18', '男', '广东深圳', '1703', '89', '90', '81');")
db.commit()

# 更新数据
db.begin()
cursor.execute("update students_info set class='1807' where id=2000")
db.commit()

# 删除数据
db.begin()
cursor.execute("delete from students_info where id=2000")
db.commit()
上一篇 下一篇

猜你喜欢

热点阅读