MySQL查询数据
MySQL数据库使用SQL SELECT语句来查询数据
基础语句:select 字段1,字段2... from 表名 [where 条件] [limit n]
- 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
- SELECT 命令可以读取一条或者多条记录。
- 可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
- 可以使用 WHERE 语句来包含条件。
- 可以使用 LIMIT 属性来设定返回的记录数。
#建表以及新建数据
create table book_data(
id int auto_increment,
book_name varchar(10),
book_price int,
book_love varchar(5),
primary key(id)
)
insert into book_data(book_name,book_price,book_love) values ("三国演义", 100, "男");
insert into book_data(book_name, book_price, book_love) values ("红楼梦", 80, "女");
insert into book_data(book_name, book_price, book_love) values ("水浒传", 110, "男");
insert into book_data(book_name, book_price, book_love) values ("西游记", 150, "男");
insert into book_data(book_name, book_price, book_love) values ("羊皮卷", 250, "男");
insert into book_data(book_name, book_price, book_love) values ("鬼谷子", 110, "女");
insert into book_data(book_name, book_price, book_love) values ("甄嬛传", 110, "女");
insert into book_data(book_name, book_price, book_love) values ("三国演义2", 110, "男");
insert into book_data(book_name, book_price, book_love) values ("西游记续集", 110, "男");
select * from book_data; #查询book_data表中的所有数据信息
where查询
模糊查询
在MySQL中,like关键字主要用于搜索匹配字段中的指定内容,具体语法如下
#_表示一个任意字符
#%表示多个任意字符
# 查询所有110的价格
select book_price from book_data where book_price like '110';
# 查询所有以1开头的,三位数的价格
select * from book_data where book_price like '1__';
查询范围
between...and...表示在一个连续的范围内查询;
in...表示在一个非连续的范围内查询;
示例:
select * from book_data where id >= 3 and id <= 8;
select * from book_data where id between 3 and 8;
select * from book_data where not(id between 3 and 8) and book_name="三国演义";
select * from book_data where id in (2,4,6);
select * from book_data where id not in (2,4,6);
空判断查询
is null查询某个字段为空的数据 例如:
select * from book_data where book_price is null;
select * from book_data where book_price is not null;
高级查询
分页查询--limit
limit--分页查询关键词
start--表示开始行索引,默认0
count-表示查询条数
#查询前面5行book_love是【男】的数据
select * from book_data where book_love="男" limit 0,5;
聚合查询
通常对表中的数据进行统和计算 count()---求指定列的总行数
max()---求指定列最大值
min()---求指定列的最小值
sum()---求指定列和
avg()---求平均数
select count(id) from book_data;
select count(*) from book_data;
select max(book_price) from book_data where book_love="女";
select sum(book_price) from book_data;
排序--order by
升序----asc
降序----desc
select * from book_data order by book_price desc;
select * from book_data order by book_price asc;
分组查询
group by 列名【条件表达式】
# 查询书名一致的书本价格总和
select book_name,sum(book_price) from book_data group by book_name;
连接查询
#数据集,先插入数据
create table book_author(
id int auto_increment,
name varchar(10),
book_id int,
primary key (id)
)default charset="utf8";
insert into book_author(name, book_id) values ("罗贯中",1);
insert into book_author(name, book_id) values ("曹雪芹",2);
insert into book_author(name, book_id) values ("施耐庵",3);
insert into book_author(name, book_id) values ("吴承恩",4);
内连接
查询两张表中符合条件的共有记录
inner join----内连接关键字,一张表连接另外一张表,inner可以省略
on----查询条件
# 查询两张表id值相同的name和book_name
select book_data.book_name,book_author.name from book_data inner join book_author on book_data.id = book_author.book_id;
左连接
查询左边所有记录和右表符合条件的记录数据----left join
# 根据左表id查询右表相同数据,右表不存在即为null
select book_data.book_name,book_author.name from book_data left join book_author on book_data.id =book_author.book_id;
右连接
查询右边所有记录和左表符合条件的记录数据----right join
# 根据右表id查询左表相同数据,左表不存在即为null
select book_author.name,book_data.book_name from book_author right join book_data on book_author.book_id = book_data.id;
pymysql操作MySQL数据库
python操作数据库流程
创建连接--获取游标--执行命令--关闭游标--关闭连接
图解:
第三方模块安装:pip install pymysql
import pymysql
#创建连接
db = pymysql.Connect(
host="12.0.0.1", #属性
port=3306, #端口
yser="root", #用户
password="123456", #密码
db="d1" #数据库
)
# 创建游标,用于传递python给MySQL的命令和MySQL返回的内容
cursor = db.cursor()
# SQL插入语句
sql = "insert into t1 values (4,'张三',15)"
# 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
csv文件写入MySQL数据库
import csv
import pymysql
conn = pymysql.Connect(
host="127.0.0.1",
port=3306,
user="root",
password="123456",
db="d1"
)
cursor = conn.cursor()
with open('douban.csv', 'r', encoding='utf-8') as file:
reader = csv.reader(file)
data = list(reader)
print(data)
sql = 'INSERT INTO douban(title, position, info,price) VALUES (%s, %s, %s,%s)'
for row in data:
cursor.execute(sql, row)
conn.commit()
cursor.close()
conn.close()