SQL
数据库的作用
数据的利用:
- 数据的存储
- 数据的计算
数据库如何存储数据
数据库如何组织数据
库表数据
数据库是用来存储数据的,在这个过程中,会涉及到:
- 数据的新增
- 数据的删除
- 数据的修改
- 数据的查询
- 数据库、数据表的管理
- 等等
而SQL语言,就是一种对数据库、数i据进行操作、管理、查询的工具
使用数据库软件去获得库->表->数据,这种数据组织、存储的能力
并借助SQL语言,完成对数据的增删改查等操作
SQL语言分类
SQL全称: Structured Query Language,结构化查询语言,用于访问和处理数据库的标准的计算机语言
- 数据定义:DDL(Data Definition Language)
- 库的创建删除、表的创建删除等
- 数据操纵:DML(Data Manipulation Language)
- 新增数据、删除数据、修改数据等
- 数据控制:DCL(Data ControlLanguage)
- 新增用户、删除用户、密码修改、权限管理等
- 数据查询: DQL(Data Query Language)
- 基于需求查询和计算数据
SQL语言的特征
- 大小写不敏感
- 通过分号
;
结尾 - 支持单行多行注释
单行注释:-- 注释内容(--后面一定要有一个空格)
单行注释:# 注释内容(# 后面可以不加空格,推荐加上)
多行注释:/*注释内容*/-
DDL
库管理
# 查看数据库
SHOW DATABASES,
# 使用数据库
USE 数据库名称;
# 创建数据库
CREATE DATABASE 数据库名称 [CHARSET UTF8];
# 删除数据库
DROP DATABASE 数据库名称 ;
# 查看当前使用的数据库
SELECT DATABASE();
表操作
# 查看有哪些表
SHOW tables; # 需要先选择数据库
# 删除表
DROP TABLE 表名称;
DROP TABLE IF EXISTS 表名称;
# 创建表
CREATE TABLE 表名称(
列名称 列类型,
列名称 列类型,
);
/*
列类型有
int 整数
float 浮点数
varchar(长度) 文本,长度为数字,做最大长度限制
date 日期类型
timestamp 时间戳类型
*/
字符串出现必须用单引号
DML
插入,删除,更新
数据插入INSERT
INSERT INTO 表[(列,列,,列)] VALUES(值,值,,值)[,(值,值,,值),,(值,值,,值)]
# sample
# 仅插入id列数据
INSERT INTO student(id) VALUES(10001),(10002),(10003)
# 插入全部列数据
INSERT INTO student(id,name,age) VALUES(10001,'周杰轮',31),(10002,'王力鸿',33),(10003,'林俊节',26)
#插入全部列数据,快捷写法
INSERT INTO student VALUES(10001,'周杰轮',31),(10002,'王力鸿',33),(10003,'林俊节'26)
关于单独插入某几类数据的结果
首先只插入两个含id成员的数据
其次在其基础上再只插入两个name成员,可以看到没有更新而是插入两个新的数据
数据删除DELETE
DELETE FROM 表名称 [WHERE 条件判断]
条件判断:列 操作符 值
操作符:= < <= >= != 等等,如
id = 5
id < 3
id >= 6
id != 5
DROP TABLE IF EXISTS student; # 备份sql中一般都有这样的语句,如果是数据库中有这个表,先drop掉,然后create表,然后再进行数据插入。
CREATE TABLE student(
id INT,
name VARCHAR(20),
age INT
)
INSERT INTO student VALUES(10001,'周杰轮',31),(10002,'王力鸿',33),(10003,'林俊节',35),(10004,'张学油',36),(10005,'刘德滑',30);
# 删除name为林俊节的数据
DELETE FROM student WHERE name ='林俊节';# 注意,不要忘记'',而且这里判断等于用的是一个等号
# 删除age > 33 的数据
DELETE FROM student WHERE age > 33;
# 删除全部数据
DELETE FROM student;
数据更新UPDATE
UPDATE 表名 SET 列=值 [WHERE 条件判断]
没有where条件表示改变此列所有的值为新值
DROP TABLE IF EXISTS student;
CREATE TABLE student(
id INT,
name VARCHAR(20)
age INT
)
INSERT INTO student VALUES(10001,'周杰轮',31),(10002,'王力鸿',33),(10003,'林俊节'35),(10004,'张学油',36),(10005,'刘德滑',30);
# 修改id为10001的name为陈一讯
UPDATE student SET name = '陈一讯' WHERE id = 10001;
# 修改全部数据的age为11
UPDATE student SET age = 11;
数据查询DQL
- 基础查询
- 排序聚合
- 排序分页
基础查询
在SQL中,通过SELECT关键字开头的SQL语句,来进行数据的查询
基础语法:
SELECT 字段列表|* FROM 表
DROP TABLE IF EXISTS student;
CREATE TABLE student(
id INT,
name VARCHAR(20),
age INT
)
INSERT INTO student VALUES(10001,'周杰轮',31),(10002,'王力鸿',33),(10003,'林俊节',35),(10004,'张学油',36),(10005,'刘德滑',30);
#查询id和name两个列
SELECT id,name FROM student;
#查询全部列
SELECT id,name,age FROM student;
# 查询全部列,快捷写法
SELECT * FROM student;
分组聚合
分组聚合应用场景非常多,如: 统计班级中,男生和女生的人数。
这种需求就需要
- 按性别分组
- 统计每个组的人数
这就称之为:分组聚合
基础语法:
SELECT 字段|聚合函数 FROM 表[WHERE 条件] GROUP BY 列
聚合函数有:
- SUM(列) 求和
- AVG(列) 求平均值
- MIN(列) 求最小值
- MAX(列) 求最大值
- COUNT(列|*) 求数量
SELECT gender, AVG(age) from student GROUP BY gender;
# 字段中加入name报错,因为组的平均不能由一个名称替代
语法限制:group by
写了谁,select
字段中才能选择谁
一个sql可以写多个聚合
排序
对查询结果进行排序
可以对查询的结果,使用ORDER BY 关键字,指定某个列进行排序,语法
SELECT 列|聚合函数|* FROM 表
WHERE ...
GROUP BY ...
ORDER BY ... [ASC | DESC]
分页
SELECT 列|聚合函数|* FROM 表
WHERE ...
GROUP BY ...
ORDER BY ... [ASC | DESC]
LIMIT n[,m]
LIMIT如果是单参数n
则为列出前n列数据
如果是n,m
,则指从序号n+1
开始列举m列数据
pymyspl
基础使用
from pymysql import Connection
# 获取到MySQL数据库的链接对象
conn = Connection(
host="127.0.0.1", # 主机名(ip)
port=3306, # 端口
user="root", # 用户名
password="123456", # 密码
)
# 测试
print(conn.get_server_info())
# 获取游标对象
cursor = conn.cursor()
conn.select_db("test") # 选择数据库
使用游标对象执行sql语句
1.执行非查询性质的sql
cursor.execute(
"""CREATE TABLE test_pymysql(
id INT,
info VARCHAR(255)
)"""
)
# 关闭对数据库的connection
conn.close()
from pymysql import Connection
# 获取到MySQL数据库的链接对象
conn = Connection(
host="127.0.0.1", # 主机名(ip)
port=3306, # 端口
user="root", # 用户名
password="123456", # 密码
)
# 获取游标对象
cursor = conn.cursor()
conn.select_db("test") # 选择数据库
# 2.执行查询性质的sql
cursor.execute("SELECT * FROM students")
# 获取查询结果
results: "tuple" = cursor.fetchall() # 获取所有列
for line in results:
print(line)
'''
结果:仅值,无属性
元组里套元组
(1, 'zun', 1.0)
(2, 'kisan', 5.0)
(3, 'reimu', 30.0)
(4, 'marisa', 90.0)
(5, 'sakuya', 20.0)
(6, 'yuyuko', 30.0)
'''
# 关闭对数据库的connection
conn.close()
数据插入
在数据插入中,如果像上文一样链接对象.execute()
命令是无法将数据插入到数据表中的
pymysql在执行数据插入或其它产生数据更改的SQL语句时默认是需要提交更改的,即,需要通过代码“确认”这种更改行为。
通过链接对象.commit()
即可确认此次行为
from pymysql import Connection
# 获取到MySQL数据库的链接对象
conn = Connection(
host="127.0.0.1", # 主机名(ip)
port=3306, # 端口
user="root", # 用户名
password="123456", # 密码
# autocommit = True # 设置自动提交
)
# 获取游标对象
cursor = conn.cursor()
conn.select_db("test") # 选择数据库
# 使用游标对象执行sql语句
# 数据插入
# 执行sql
cursor.execute(
"INSERT INTO students(id,name,score) values(10,'remilia',6),(11,'flandre',23);"
)
# 通过commit确认
conn.commit()
# 关闭对数据库的connection
conn.close()
0 评论:
发表评论