qfxx第六周2

本文详细介绍了数据库操作,包括数据操作语言(DML)如插入、修改和删除,数据查询语言(DQL)的基本查询、条件查询、排序和分页,以及多表联合查询和数据事务语言(DTL)。示例涵盖了各种SQL语句,如INSERT、UPDATE、DELETE、SELECT及其组合使用,以及事务的开启、提交和回滚。
摘要由CSDN通过智能技术生成

今天老师讲了数据操作,数据查询,多表联合查询,数据事物语言,笔记如下:
day02

数据操作语言(DML)Data Manipulation Language

  • 说明:在大多数操作数据库中都是增删改

  • 准备:一张用于测试的表
    create table star(
    id int auto_increment,
    name varchar(20) not null,
    money float not null,
    province varchar(20) default null,
    age tinyint unsigned not null,
    sex tinyint not null,
    primary key(id)
    )engine=innodb default charset=utf8;

  • 插入数据

    • 方式1:不指定字段,添加数据的时候需要指定所有的字段值,
      insert into star values(1,‘蒋龙’,2556783,‘湖南’,22,0)
      [可以一次性插入多个,每条数据都必须使用()扩起来,使用之间使用逗号隔开]:
      [^]:
    • 方式2:指定字段,只需要传递指定字段值,通常使用这个方式,如:
      insert into star (name, money, age, sex, province)
      values(“周杰伦”, 78278278, 42, 0, “台湾”),
      (“胡歌”, 72636633,39,0,“上海”);
      注释:插入数据字段的顺序,与前面指定一定要一致,与数据库里面的字顺序无关。
    • 说明:插入数据不用传值的字段
      • 自增的字段
      • 有默认值
      • 可以为空
  • 修改数据:

    • 示例:update star set money=888 where id=3;
    • 警告:修改的时候,一定不要忘了添加条件,否则后果自负
  • 删除数据:

    • 示例:delete from star where name=“胡歌”;
    • 警告:删除操作一定不要了忘了加条件,后果很严重
    • 说明:在真实的项目中,不会真的删除,大多使用逻辑删除

数据查询语言(DQL)

  • 基本查询:select * from star;

  • 指定字段查询:select name, money FROM STAR;

  • 过滤重复的记录:select distinct province from star;

    • 说明:使用distinct 指定的额字段不能重复,指定多个字段
  • 条件查询:

    • 条件
      条件 说明
                                        	大于                                      
      
      < 小于

      = 大于等于
      <= 小于等于
      = 等于
      !=或 <> 不等于
      and 并且
      or 或者
      [not] between m and n [不]在[m,n]的区间
      [not] in () [不]在指定的集合中
      [not] like 条件 模糊匹配,%表示任意字符
      is [not] NULL 是否为空
      select [distinct]Depart,Tname from Teacher 限定后面的属性只出现一次(是弱约束,若后面的属性相应的有相同的话,这个关键字就不起作用了)

    • 示例:
      select * from star where id > 2;
      select * from star where id >5 and age >30;
      select * from star where age between 30 and 40;
      select * from star where id in (2,4,6);
      select * from star where province like “湖%”;
      select * from star where province is null;
  • 结果集排序(order by)
    select name, money from star order by money desc;
    select name, money, age from star order by age asc,money desc;

    • 说明:
      • 默认是升序asc,降序desc
      • 多个字段进行排序的时候,先安排第一个排序,相同的话再按照第二个进行排序
  • 限制结果集(limit)
    select * from star limit 3;#提取3条数据
    select * from star limit 3 offset 2;#跳过两条提取3条数据
    select * from star limit 2,3;#同上

    • 分页:
      每页 pagesize=10,page表示页码数,请写出对应的查询语句
      第一页:limit 0,10
      d第二页:limit 10,10
      第三页:limit 20,10
      第4页:limit 30,10

      page页:limit (page - 1)*pagesize,pagesize
      
  • 常用的聚合函数
    函数 说明
    count 统计个数
    sum 求和
    max 最大值
    min 最小值
    avg 平均值

    • 示例:
      select count(*) as c from star; #可以给查询的字段起别名
      select max(money) as max_money from star;
  • 分组及过滤(重要)(group by)
    select sex from star group by sex; #以性别进行分组
    select count() as c, sex from star group by sex;#分组以后并统计
    select count(
    ) as c, province from star group by province having c=1;#分组统计以后过滤

多表联合查询

https://blog.csdn.net/huaxiawudi/article/details/82288044      作业     
  • 创建两张表
    create table user (
    id int(11) not null auto_increment,
    username varchar(20) default null,
    gid int(11) ,
    primary key(id));

    create table goods (
    id int(11) not null auto_increment,
    name varchar(40) default null,
    price float default null,
    category varchar(20) default null,
    primary key(id));
    
  • 隐式内连接

    • 说明:查询哪个用户购买了什么商品
    • 示例: select username,name from user,goods where user.gid =goods.id;
  • 显示内连接

    • 说明:功能和隐式内连接一样,使用的关键字是join,一定要注意不是where,是on。
    • 示例:select username,name from user join goods on user.gid=goods.id;
  • 左外连接

    • 说明:以左边的表为主,主要显示左边的表,右边的表有对应的数据就显示,没有话就显示null
    • 示例:select username,name from user left join goods on user.gid=goods.id;
  • 右外连接

    • 说明:会显示右边的所有数据,左表有对应的数据的话就显示,没有的话就是null
    • 示例:select username,name from user right join goods on user.gid=goods.id;
  • 记录联合

    • 格式:select 语句1 union select 语句2
    • 示例:select username,name from user right join goods on user.gid=goods.id union
      select username,name from user left join goods on user.gid=goods.id;
    • union all:将两边的查询结果直接拼接到一起
    • union:去重之后进行拼接
  • 联合更新

    • 示例: update user u, goods g set u.gid=3,g.price=g.price+0.1 where u.gid=g.id and u.id=2;
  • 子(嵌套)查询

    • select * from user where gid in (select id from goods);
    • 说明:条件是一个sql语句

数据事务语言(DTL)

  • 说明:用于测试的表他的存储引擎必须是InnoDB

  • K开启事务:禁止自动提交
    set autocommit = 0;

    sql

  • 提交事务:整个事务过程没有出现问题
    commit;

  • 操作回滚:事务出现了问题,然后进行回滚,事务开始之前的状态
    rollback;

  • 代码
    #开启事务
    try:
    #执行相关的操作
    except Exception as e:
    #操作回滚
    else:
    #提交事务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值