数据库(mysql)2加强

  • count 求和,对标中的数据的个数求和 count(列名)
查询统计账务表中,一共有多少数据
SELECT COUNT(*)' count’  FROM  zhangwu

  • sum求和,对一列数据进行求和计算 sum(列名)
对账务表查询对所有的金额求和计算
SELECT SUM(ZMONEY)  FROM zhangwu

求和,统计所有支出的总金额
SELECT SUM(ZMONEY)  FROM zhangwu  WHERE zname  LIKE‘%支出%’

   

数据库

数据库:本质上就是一个文件系统。通过标准的sql对数据进行curd操作
sql:
结构化查询语句
作用:
管理数据库
sql的分类:
DDL:数据定义语言
操作对象:数据库和表
关键词:create alter drop
DML:数据操作语言
操作对象:记录
DQL:数据查询语言(非官方)
DCL:数据控制语言
操作对象:用户,事物 ,权限

curd:creat(创建),update(更新),retrieve(读取),delete(删除)

  • 排序查询
  1. 查询所有的商品,按价格进行排序。(asc-升序,desc-降序)
select * from products order by prise    desc;

2.查询名称有新的商品的信息并且按价格降序排序。

select * from products where pname  like  "%新%"  order by price desc;
  • 聚合函数

    对一列进行计算,返回值是一个

    *sum( ),avg(),max(),min(),count()
    

1.获得所有商品的价格总和

select sum( price) from products;

2.获得商品表中价格的平均数

select avg(price) from products;

– round(值,保留小数位)

select round(avg(price),2)  from products;

3.获得商品表中有多少条记录

select count(*)  from products;

分组:使用 group by
1.根据cno自读那愤怒值,分组后统计商品个数。

select cno,counta(*) from products group by cno;

2.根据cno分组,分组统计每组商品的总数量,【并且总数量>200】

select  cno , sum(pnum)  from  products  group by cno;

【select  cno , sum(pnum)  from  products  group by cno  having sum(pnum)>200 ;】

注意
where 和having 区别:

  1. where 是对分组前的数据进行过滤
    having 是对分组后的数据进行过滤
  2. where后面不能使用聚合函数,having可以
    

mysql中的数据类型

在这里插入图片描述

一对多

-- 创建用户表
          CREATE TABLE USER{
                       id INT PRIMARY KEY AUTO_INCREMENT,
                       username VARCHAR(20)
         };


-- 创建订单表
 CREATE TABLE orders{
         id INT PRIMARY KEY AUTO_INCREMENT,
         totalprice  DOUBLE,
         user_id INT
};'user'
  • 为了保证数据的有效性和完整性 ,添加约束(外键约束)
    再多表的一方添加外键约束
    格式:
    alter table 多表名称 add foreign key(外键名称) reference 一表名称(主键)
    例:alter table orders add foreign key(user_id)references user( id );

添加了除了外键约束之后有如下特点:
1.主表中不能删除从表中已引用的数据
2.从表中不能添加主表中不存在的数据
开发处理中一对多:
在多表中添加一个外检,名称一般为主表的名称_id,字段类型一般和主表的保持一致
为保证数据的有效性和完整性,再多表的外键上添加外键约束即可。

多对多

在开发时,一般引入一张中间表,在中间表中存放两张表的主键,一般还会将这两个主键设置成这两个表的联合主键,将多对多拆分成两个一对多
 为了保证数据的有效性和完整性,在中间表上添加两个外键约束即可

CREATE TABLE product(        -- 创建商品表

id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
price DOUBLE
);

CREATE TABLE orderitem(     -- 创建中间表
oid INT,
pid INT
);
                             -- 添加外键约束
ALTER  TABLE orderitem ADD FOREIGN KEY(oid ) REFERENCES orders(id);
ALTER  TABLE orderitem ADD FOREIGN KEY(pid ) REFERENCES product (id);

内连接

  • 格式1.:现显式的内连接
    select a.* ,b.* from a [inner] join b on ab的连接条件
  • 格式2.:隐式的内链接
    select a.*,b.*from a, b where ab的连接条件

    外连接

    左外链接:
    select a.* ,b.* from a left [outer] join b on 连接条件;
    意思:
    先展示join左边的(a)表的所有数据,根据条件关联查询 join右边的表(b)符合条件则展示出来,不符合以null值展示。
    右外连接:
    select a.,b. from a right [outer] join a on 连接条件;
    意思:
    先展示join右边的(a)表的所有数据,根据条件关联查询 join左边的表(b)符合条件则展示出来,不符合以null值展示。
练习:

  查询用户的订单,没有订单的用户不显示
       隐式内连接:
              select user.*,orders.* from user, orders where user.id=orders.user_id;
        显式内连接:
               select user.*,orders.* from user  join  orders  on  user.id=orders.user_id;
  查询所有用户的订单详情
        左外链接:user在左
                select user.*,orders.* from user  left   join  orders  on  user.id=orders.user_id;
  查询所有订单的用户详情
         右外连接:orders 在右
                 select user.*,orders.* from user  right   join  orders  on  user.id=orders.user_id;

子查询

子查询:是将一个查询的结果作为一张临时表

 select user.*,tmp.*from user,(select * from orders where price>300) as tmp where user.id=tmp.user_id;

  • 给表起别名
    格式: 表【as】 别名
发布了43 篇原创文章 · 获赞 6 · 访问量 1547

猜你喜欢

转载自blog.csdn.net/weixin_43729631/article/details/89422668