Mysql基础(二)

158 阅读4分钟

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操作数据库流程

创建连接--获取游标--执行命令--关闭游标--关闭连接

图解:

image.png

第三方模块安装: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()