1.SQL的概述
SQL的全称:Structured Query Language,结构化查询语言,用于访问和处理数据库的标准计算机语言。
SQL语言1974年有Boyce和Chamberlin提出的,并且首先在IBM公司研制的关系数据库系统SystemR上实现。
经过多年发展,SQL已经成为数据库领域同意的数据操作标准语言,可以说几乎市面上所有的数据库系统都支持使用SQL语言来操作。
SQL语言的分类:
由于数据库管理系统(数据库软件)功能非常多,不仅仅是存储数据,还要包括数据的管理、表的管理、库的管理、账户管理、权限管理等等。
所以基于操作数据库的SQL语言,也基于此功能划分为四类:
-
数据定义:DDL(Data Definition Language)
库的创建删除、表的创建删除等
-
数据操控:DML(Data Manipulation Language)
新增数据、删除数据、修改数据等
-
数据控制:DCL(Data Control Language)
新增用户、删除用户、密码修改、权限管理等
-
数据查询:DQL(Data Query Language)
基于需求查询和计算数据
SQL的语法特征:
在学习DDL、DQL等之前,我们先来了解SQL的语法特征。
-
SQL语言,大小写不敏感
-
SQL可以单行或多行书写,最后以;号结束
-
SQL支持注释:
-
单行注释:--注释内容 (-- 后面一定要有一个空格)
-
单行注释:# 注释内容 (#后面可以不加空格,推荐加上)
-
多行注释:/* 注释内容 */
show -- 这是第一种注释方法 # 这是第二种注释方法 /* 多行注释 * */ databases;
2.SQL的DDL
DDL是指数据定义语言,用来对数据库中库表建立删除定义的。
创建库:
# 查看数据库 SHOW DATABASES # 使用数据库 USE 数据库名称: # 创建数据库 CREATE DATABASE数据库名称[CHARSET UTF8]: # 删除数据库 DROP DATABASE数据库名称; # 查看当前使用的数据库 SELECT DATABASE();
创建表和删除表:
# 查看有哪些表 SHOW TABLES; # 注意要先选择数据库 # 创建表 create table 表名称( 列名称 列类型, 列名称 列类型, …… ); drop table 表名称; drop table if exists 表名称; drop table where 条件判断;
列类型:
-- 列类型: int -- 整数 float -- 浮点数 varchar(长度) -- 文本,长度为数字,做最大长度限制 date -- 日期类型 timestamp -- 时间戳类型
3.SQL的DML
DML是指数据操作语言,用来对数据库中表的数据记录进行更新。
关键字:
-
插入INSERT
-
删除DELETE
-
更新UPDATE
基础语法:
insert into 表(列1,列2,列3,列4,……,列N) values(值1,值2,值3,……,值N)[(值1,值2,值3,……,值N),……,(值1,值2,值3,……,值N)]
示例:
create table student( id int, name varchart(20), age int ); # 仅插入id数据 insert into student(id) values(1000),(1002),(1003); # 插入全部id列数据 insert into student(id, name, age) values(1001, '张三', 20),(1002, '李四', 19),(1003, '王五', 21); # 插入全部列数据,快捷写法 insert into student values(1001, '张三', 20),(1002, '李四', 19),(1003, '王五', 21);
数据删除DELETE:
基础语法:
DELETE FROM 表名称 WHERE 条件判断 条件判断:列 操作符 值 操作符:= < > <= >= != 等 如: id = 5 id < 3 id >= 6 id != 5
演示案例:
CREATE TABLE student(
id int,
name varchar(10),
age int
);
INSERT INTO student(id) values(1), (2), (3);
/*
* 等价于下面的代码
* INSERT INTO student(id) values(1);
* INSERT INTO student(id) values(2);
* INSERT INTO student(id) values(3);
*/
insert into student(id, name, age) values(4, '张三', 31),(5, '李四',33);
delete from student where age = 33;
4.SQL的DQL
1.基础查询
基础语法:SELECT 字段列表|* FROM表
含义就是:从(FROM)表中,选择(SELECT)某些列进行展示
代码演示:
select id, name from student; select * from student; select * from student where age > 20; select * from student where id = '张三';
2.分组聚合
分组聚合应用场景,如:统计班级中男生和女生的人数。
这种需求就需要:
-
按性别分组
-
统计各组的人数
这就称之为:分组聚合。
基础语法:
select 字段|聚合函数 from 表 [where 条件] group by 列 聚合函数: sum(列) 求和 avg(列) 求平均值 min(列) 求最小值 max(列) 求最大值 count(列|*) 求数量
示例:
select gender, avg(age), sum(age), min(age), max(age), count(avg) from student group by gender;
3.排序分页
结果排序:
可以对查询结果,使用order by
关键字,指定某个列进行排序,语法:
select 列|聚合函数|* from 表 where …… group by …… order by …… [ASC | DESC]
示例:
select * from student where age > 20 order by age asc; select * from student where age > 20 order by age desc;
结果分页限制:
同样,可以使用limit
关键字,对查询结果进行数量限制或分页显示,语法:
select 列|聚合函数|* from 表 where …… group by …… order by …… [asc | desc] limit n[, m]
示例:
select * from student limit 10; # 取10条信息 select * from student limit 10, 5; # 从第11条开始往后取5条 select * from student where age > 20 group by age order by age limit 3;
5.Python操作MySQL基础使用
1.基础使用
pymysql
除了使用图像化工具以外,我们也可以使用编程编程语言来执行SQL从而操作数据库。
在Python中,使用第三方库:pymysql来完成对MySQL数据库的操作。
安装:pip install pymysql
but,一开始,在我的命令提示符里面怎么都下不下来,这时候按照notice里面的To update run后面的绿色的代码,粘贴到下面来进行操作:
或者使用下列的方式:
pip install pymysql -i http://pypi.douban.com/simple/ --trusted-host [pypi.douban.com](http://pypi.douban.com/)
创建到MySQL的数据库链接
代码如下:
from pymysql import Connection
# 获取到MySQL数据库的连接对象
conn = Connection(
host='localhost', # 主机名(或者IP地址)
port=3306, # 端口,默认3306
user='root', # 账户名
password='123456' # 密码
)
# 打开MySQL数据库软件信息
print(conn.get_server_info())
# 关闭到数据库的链接
conn.close()
或者输入如下的代码:
import pymysql
db = pymysql.connect(
host="localhost",
port=3306,
user='root', #在这里输入用户名
password='qazwsxedc.2345', #在这里输入密码
charset='utf8mb4'
) #连接数据库
cursor = db.cursor() #创建游标对象
sql = 'show databases' #sql语句
cursor.execute(sql) #执行sql语句
one = cursor.fetchone() #获取一条数据
print('one:',one)
many = cursor.fetchmany(3) #获取指定条数的数据,不写默认为1
print('many:',many)
all = cursor.fetchall() #获取全部数据
print('all:',all)
cursor.close()
db.close() #关闭数据库的连接
出现上图界面就说明pymysql成功将pycharm和mysql连接起来了。
执行查询性质的SQL语句:
from pymysql import Connection
# 获取到MySQL数据库的连接对象
conn = Connection(
host='localhost',
port=3306,
user='root',
password='2345'
)
# 获取游标对象
cursor = conn.cursor()
conn.select_db("world")
# 使用游标对象,执行sql语句
cursor.execute("SELECT * FROM student")
# 获取查询结果
results = cursor.fetchall()
for r in results:
print(r)
# 关闭到数据库的链接
conn.close()
2.数据插入
commit提交
pymysql在执行数据插入或其它产生数据更改的SQL语句时,默认是需要提交更改的,即,需要通过代码“确认”这种更改行为。
通过链接对象.commit()即可确认此行为。
from pymysql import Connection
# 获取到MySQL数据库的连接对象
conn = Connection(
host='localhost',
port=3306,
user='root',
password='2345'
)
# 获取游标对象
cursor = conn.cursor()
conn.select_db("world")
# 使用游标对象,执行sql语句
cursor.execute("insert into student values(10001, '唐七', 19)")
# 关闭到数据库的链接
conn.close()
6.综合案例
使用SQL语句和pymysql库完成综合案例的开发
DDL定义:
本次需求开发我们需要新建一个数据库来使用,数据库名称:py_sql
基于数据结构,可以得到建表语句:
CREATE TABLE order( order_date DATE, order_id, VARCHAR(255), money INT, province VARCHAR(10) );
实现步骤:
读取数据 -> 封装数据对象 -> 构建数据库链接 -> 写入数据库
import ..
text_file_reader = TextFileReader("D:/2011年1月销售数据.txt")
json_file_reader = JsonFileReader("0:/2011年2月销售数据JS0N.txt")
jan_data:list[Record] = text_file_reader.read_data()
feb_data:list[Record] = json_file_reader.read_data()
# 将2个月份的数据合并list来存储
all_data:list[Record] = jan_data + feb_data
# 构建MySQL链接对象
cursor = conn.cursor()
conn.select_db("py_sql")
# 组织SQL语句
for record in all_data:
sql = f"insert into orders(order_data, order_id, money, province)"
f"values('{record.date}','{record.order_id)'{record.noney},'{record.province}')"
print(sql)
cursor.excute(sql)
conn.close()