复习

大三期末复习

以下问题都需要熟练写出来

数据库的特点?

  1. 数据共享

  2. 存储的数据量大

  3. 容易持久保存

  4. 数据安全性高

有哪些数据库?

常见的数据库有:Oracle、MySql、SQL Server、DB2、sQLite,Redis

数据的种类包括?

文本、图形、图像、音频、视频等等

DDL、DQL、DML是什么?

  • DDL(Data Definition Language)数据定义语言
    • 用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter 等
  • DML(Data Manipulation Language)数据操作语言
    • 用来对数据库中表的数据进行增删改。关键字:insert,delete,update 等
  • DQL(Data Query Language)数据查询语言
    • 用来查询数据库中表的记录(数据)。关键字:select等
  • DCL(Data Control Language)数据控制语言(了解)
    • 用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT,REVOKE等

有哪些约束?他们分别的含义为?

  1. 主键约束:primary key

  2. 非空约束:not null

  3. 唯一约束:unique

  4. 外键约束:foreign key

数据库系统的组成?

数据库系统由数据库、数据库管理软件、数据库应用系统组成

数据类型分类?

数据类型

  1. int 整数类型
    age int
  2. double 小数类型
    score double(5,2) 总长度5,小数点后的位数2,最大值999.99
  3. date 日期,只包含年月日,yyyy-MM-dd
  4. datetime 日期,包含年月日和时分秒 yyyy-MM-dd HH:mm:ss
  5. timestamp 时间戳,包含年月日和时分秒 yyyy-MM-dd HH:mm:ss
    如果该类型字段没有赋值,或赋值为null,则默认使用当前系统时间填充
  6. varchar 字符串(长度可变)
  7. char字符串(长度固定)
    name varchar(20) 表示姓名最长20个字符的限制

注意

  1. 字符串char,varchar要指定长度

  2. varchar和日期类型的数据要加上引号(推荐使用单引号)

函数有哪些?

MIN()函数

MAX()函数

COUNT()函数

AVG函数

SUM()函数

分页查询?

公式(记住即可

找出当前页数起始行数之间的规律

起始行数 start=(currPage-1)*size

  • currPage 当前页数
  • size 每页展示的记录数

注意:limit 语法是mysql的方言,其它数据库,对于分页有不同的实现方式。

过滤重复数据?

关键字 distinct
直接放在select后面

模糊查询?

通配符:
_ 匹配一个字符
% 匹配0-n个字符

varchar 和char的区别?

varchar 字符串(长度可变)

char字符串(长度固定)

新建视图、删除试图语句?

-- view 视图  v_stu1视图名,你自己取的名字
create view v_stu1 as select * from student;
drop view v_stu1

重点看:数据库.md、数据定义语言(DDL).md的笔记

====================================================================

数据库.md

数据库的定义

狭义:
  • 存储数据的仓库
广义:
  • 可以对数据进行存储和管理的软件以及数据本身统称为数据库

为何需要数据库

存储数据的方法

第一种方法:用大脑来记住数据

第二种方法:写在纸上

第三种方法:写在计算机的内存中(java里面的数组和集合也可以存储数据 )

第四种方法:写成磁盘文件(电脑C盘、D盘等里的文件)

……………………

数据共享?

波哥大脑里面存储的数据,请问班长能知道吗?不管班长多爱波哥,班长和波哥多心有灵犀,是不可能共享波哥大脑里面的数据。

存储的数据量?

能在纸上存储的数据量大不大?而且是不是容易丢失

容易持久保存?

请各位小可爱们记住,在电脑里有两种方式存储数据。

第一种磁盘存储,磁盘存储,大家都知道,电脑的c盘、d盘存储数据。

第二种内存存储,问大家一个问题?

波哥现在打开电脑计算器进行计算,当波哥关闭电脑在打开电脑,刚才在计算器里进行计算的数据还在吗?

数据安全性?

	有天,辅导员让李雷用excel表收集班上同学的个人信息,李雷收集好了后就把 excel表放在自己的电脑桌面,然后从上到下打扮后去见自己女朋友韩梅梅。
	李雷的好兄弟小明也喜欢韩梅梅,但是爱而不得,所以心生怨恨,把李雷收集的表里的信息给胡乱修改一番。
	大家说这样合不合理?
	所以数据库出现了,解决了上面的问题。

数据库的发展史

  • 人工管理阶段

    没有磁盘,计算机没有操作系统,更没有数据管理软件,数据处理是以批处理方式进行的

  • 文件系统阶段
    ​ 使用磁盘文件存储数据

  • 数据库系统阶段
    层次模型的数据库
    网状模型的数据库
    ​ 关系型数据库和结构化查询语言
    ​ 当今,关系数据库为主流,各种不同数据库不断发展

常见数据库简介

时下流行的数据库
Oracle:收费的大型数据库,Oracle(甲骨文)公司的产品。Oracle收购SUN公司,收购MYSQL。

SQL Server: MicroSoft(微软)公司收费的中型的数据库C#、.net等语言常使用。

DB2:IBM公司的数据库产品,收费的。常应用在银行系统中,支持多操作系统、多种类型的硬件和设备

MySql:开源免费的数据库,中小型的数据库,已经被Oracle收购了。网站应用广泛

sQLite:嵌入式的小型数据库,默认内置在android系统中。

Redis:是完全开源免费的非关系型的数据库,是一个高性能的key-value数据库,可以帮数据库减少存储压力

数据库分类

  • 关系型数据库

    ​ 这种类型的数据库是最古老的数据库类型,关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)。

  • 非关系型数据库

    ​ 关系型数据库以外的统称为非关系型数据库,简称NoSQL(not only SQL)。从存储结构可以划分键值存储数据库(Redis)、列存储数据库(HBase)、面向文档数据库(MongoDB)、图形数据库(Neo4J)、搜索引擎存储(Elasticsearch)。(面试必问技术)

总结:

  1. 几乎所有的应用软件的后台都需要数据库
  2. 数据库存储数据占用空间小容易持久保存
  3. 存储比较安全
  4. 容易维护和升级
  5. 数据库移植比较容易
  6. 简化对数据的操作
  7. 为将来学习MySQL、0racle、SQL Server、DB2、SQLite、PostgreSQL、Redis等做准备
  8. B/S架构里面包含数据库

四个基本概念

数据(Data)

数据库(dataBase),简称DB

数据库管理系统(dataBase Manager System),简称DBMS

数据库系统(dataBase Application System),简称DBAS

数据–Data
① 数据的定义

客观事物符号表示,如图形符号、数字、字母等,数据(Data)是数据库中存储的基本对象。

在日常生活中,人们直接用语言来描述事物;在计算机中,为了存储和处理这些事物,就要将事物的特征抽象出来组成记录来描述。

② 数据的种类

文本、图形、图像、音频、视频等等

③ 数据的特点

数据与其语义是不可分的
(数据的含义称为数据的语义,数据与其语义是不可分的。)

④ 数据举例

例如 : 93是一个数据
语义1:学生某门课的成绩
语义2:某人的体重
语义3:计算机系2020级学生人数
语义4:请同学们给出

学生档案中的学生记录

(光头强,男,1984,上海, 计算机系,2003 )

语义:学生姓名、性别、出生年月、籍贯、所在院系、入学时间

解释:光头强是个大学生,1984年出生, 上海人,2003年考入计算机系

请给出另一个解释和语义

数据库(Database)

数据库(dataBase),简称DB。存放数据的仓库,按照一定的格式(有组织的方式)进行储存

数据库管理系统(dataBase Manager System)

DBMS是位于应用程序存储数据的之间的一层数据管理软件

数据库是通过DBMS创 建和操作的容器。

数据库系统(dataBase Application System)

数据库系统(Database System,简称DBS),使用到数据库技术的应用软件

数据库系统的构成
  • 数据库 Database
  • 数据库管理系统(及其开发工具)Database Management System
  • 应用系统
  • 数据库管理员 Database Administrator

小结:

存储数据的方法

第一种方法:用大脑来记住数据

第二种方法:写在纸上

第三种方法:写在计算机的内存中(java里面的数组和集合也可以存储数据 )

第四种方法:写成磁盘文件(电脑C盘、D盘等里的文件)

数据库是存储数据的仓库

数据库由以下特点:
数据共享
存储的数据量大
容易持久保存
数据安全性高

常见的数据库有Oracle、MySql、SQL Server、DB2、sQLite
数据库是通过DBMS创建和操作的容器
数据库系统由数据库、数据库管理软件、数据库应用系统组成

====================================================================

数据定义语言(DDL)

DDL(Data Definition Language)数据定义语言

  • 用来定义数据库对象:数据库,表,列等。关键字:create,drop,alter 等
1. 操作数据库
  1. C (Create):创建

    • 创建数据库

      create database 数据库名;
      
    • 创建数据库前先判断是否存在

      create database if not exists 数据库名;
      
    • 创建数据库,判断是否存在,并指定字符集

      create database if not exists 数据库名  character set 字符集
      
    随堂测试:
    1.创建一个数据库db1,判断是否存在,并指定字符集为utf8
    
    create database if not exists db1 character set utf8;
    
  2. R (Retrieve):查询

    • 查询所有数据库的名称

      show databases;
      
    • 查询某个数据库的字符集–其实是查询数据库的创建sql语句

      show  create database 数据库名;
      
    随堂测试:
    1.查询数据库db1的名称
    2.查询数据库db1的字符集
    
    show databases;
    show  create database db1;
    
  3. U(Update):修改

    • 修改数据库的字符集

      alter database 数据库名 character set utf8字符集;
      
    随堂测试:
    1.修改数据库db1的字符集为gbK,并查看修改后的字符集
    1.修改数据库db1的字符集为utf8,并查看修改后的字符集
    
    alter database db1 character set gbK;
    show  create database db1;
    
    alter database db1 character set utf8;
    show  create database db1;
    
  4. D(Delete):删除

    • 删除数据库

      drop database 数据库名;
      
    • 删除数据库前先判断是否存在

      drop database if exists 数据库名;
      
    随堂测试:
    1.删除数据库db1,并判断是否存在。
    2.新建数据库db1,并判断是否存在,指定默认字符集为utf8.
    
    drop database if exists db1;
     create database if not exists db1 character set utf8;
    
  5. 使用数据库

    • 查询当前正在使用的数据库名称

      select database();
      
    • 注意 和 show databases;的细微区别

      1. 语义不同,分别是:查看所有数据库名称,查看当前正在使用的数据库名称
      2. 写法不同,database() 和 databases 
      
    • 使用数据库

      use 数据库名;  
      use db1;  
      
2. ddl操作表
  1. 查询

    1. 查询某个数据库中所有的表名称

      show tables;
      
      use mysql;  
      show tables;
      
    2. 查询表结构

      desc 表名;
      
      desc db;
      
    3. 查询表的创建语句

      show create table 表名;
      show create table db;
      
  2. 创建

    创建表

        create table 表名(
            列名1  数据类型1,
            列名2  数据类型2,
            ......
            列名n 数据类型n
        );
    
        注意:最后一列,不需要加逗号
    
    数据类型
    1. int 整数类型
         age     int
    2. double 小数类型
         score   double(5,2) 总长度5,小数点后的位数2,最大值999.99
    3. date 日期,只包含年月日,yyyy-MM-dd
    4. datetime 日期,包含年月日和时分秒 yyyy-MM-dd HH:mm:ss
    5. timestamp 时间戳,包含年月日和时分秒 yyyy-MM-dd HH:mm:ss
          如果该类型字段没有赋值,或赋值为null,则默认使用当前系统时间填充
    6. varchar 字符串(长度可变)
    7. char字符串(长度固定)
        name varchar(20) 表示姓名最长20个字符的限制 
    
    注意:
    1.字符串char,varchar要指定长度
    2.varchar和日期类型的数据要加上引号(推荐使用单引号)
    
    
    随堂测试:
    请指出以下字段应该使用什么数据类型:
    A:学员的工资   
    B:最后一次修改时间  
    C:结婚日期  
    D:性别   男 女   
    E:爱好  
    F:身高  
    G:工龄  
    

    练习:创建一个学员表

    create table student(
    	id int,
        name varchar(10),
        age int,
        score double(4,1),
        birth date,
        insert_time timestamp
    );
    
    随堂测试:
    1.创建一个员工表employee,需要如下字段:
    员工编号,姓名,性别,年龄,工龄,生日,工资
    
    create table employee(
        id int, -- 员工编号
        name varchar(20),-- 姓名
        gender char(1),-- 性别
        age int,-- 年龄
        work_years int,-- 工龄
        birth date,-- 生日
        salary double(8,2) -- 工资
    );
    

    复制表

    create table 表名 like 被复制的表名;
    create table employee11 like employee;
    
  3. 删除表

    1. drop table 表名
    2. drop table if exists 表名
    
    drop table if exists employee
    
  4. 修改

    4.1.修改表

  • 修改表名

     alter table 表名 rename to 新表名
     
     alter table employee11 rename to employee
    
  • 修改表的字符集

    -- 查看表的字符集,其实是查看表的创建语句
    show create table 表名;
    
    show create table employee;
    
     -- 修改表的字符集
    alter table 表名 character set 字符集;
    
    
    alter table employee character set utf8;
    

    4.2.修改列

  • 添加一列

    alter table 表名 add 列名 数据类型;
    
    alter table employee add department varchar(20);
    
  • 修改列类型

     alter table 表名 modify 列名 数据类型;
     
     alter table employee modify department varchar(10);
    
  • 修改列名和类型

    alter table 表名 change 旧列名 新列名 数据类型;
    
    
     
     alter table employee change department dp varchar(20);
    
    
  • 删除列

    alter table 表名 drop 列名;
    
    alter table employee drop dp;
    
    随堂测试
    1.修改员工表employee名为emp
    2.修改表的字符集为gbk,查看表的字符集
    3.修改表的字符集为utf8,并查看表的字符集
    4.添加'部门'列
    5.修改'性别'列类型为varchar(6) 
    6.修改gender为sex,类型为varchar(6)
    7.删除'部门'

5.综合练习:

1.查看当前的服务器一共有多少个数据库 show databases;
2.查看当前正在使用的数据库         select database();
3.选定其中的一个数据库,进行使用     use db3;
4.查看当前库中有多少个表           show tables;
5.创建一个表
    create table employee(
        id int, -- 员工编号
        name varchar(20),-- 姓名
        gender char(1),-- 性别
        age int,-- 年龄
        work_years int,-- 工龄
        birth date,-- 生日
        salary double(8,2) -- 工资
    );
6.修改表:
	1.修改员工表employee名为emp
    2.修改表的字符集为gbk,查看表的字符集
    3.修改表的字符集为utf8,并查看表的字符集
    4.添加'部门'列
    5.修改'性别'列类型为varchar(6) 
    6.修改gender为sex,类型为varchar(6)
    7.删除'部门'

====================================================================

最后一道大题30分

考点:建库,建表,查询

参考:所有作业练习

提醒:如果认真看完做完作业的同学,最后一道大题肯定会拿满分,懂得都懂,就不在说了

====================================================================

大题模拟

/*
会员类型表UserTypeInfo [系统管理员-管理会员 店主-卖家 普通会员-买家]
类型编号 typeId  int 主键 自增长
类型名 typeName  varchar(20) 不能为空


会员信息表UserInfo
会员编号 userId  int 主键  自增长
会员名 userName  varchar(20)  不能为空
密码 userPwd  varchar(20)
类型编号 typeId  int 外键(引用UserTypeInfo的typeId)
会员状态 userStatus  varchar(20) 默认值为”正常”


店铺信息表ShopInfo
店铺编号 shopId  int 主键  自增长
店铺名 shopName  varchar(50) 不能为空
店主编号 userId  int 外键(引用UserInfo的userId)
店铺积分 userPoint  int 默认值为0

商品类型表 proType
类型编号 typeId  int 主键  自增长
类型名 typeName varchar(50) 唯一约束 不能为空
类型说明 typeDesc varchar(50)

商品信息表 proInfo
商品编号 proId  int 主键  自增长
商品名称 proName  varchar(50) 不能为空  
商品单价 proPrice  float
商品数量 proCount  int
商品状态 proStates  varchar(50) 默认值为”上架”
所属店铺编号 shopId  int 外键(引用shopInfo的shopId)
所属类型编号 typeId  int 外键(引用proType的typeId)


订单信息表 orderInfo
订单编号 orderId   int 主键  自增长
订购的商品编号 proId   int 外键
订购的数量 orderCount   int 
订单日期 orderDate   date 默认为系统的当前时间
订单状态 orderStatus  值只能为"未处理" 和 "已发货",默认为"未处理"
会员编号 userId  int 外键

*/

CREATE DATABASE `taobaoDB`

USE `taobaoDB`

CREATE TABLE UserTypeInfo(
	typeId INT PRIMARY KEY AUTO_INCREMENT,
	typeName VARCHAR(20) NOT NULL
);

INSERT UserTypeInfo(typeName) VALUES
('系统管理员-管理会员'),('店主-卖家'),('普通会员-买家');

CREATE TABLE UserInfo(
	userId INT PRIMARY KEY AUTO_INCREMENT,
	userName VARCHAR(20) NOT NULL,
	userPwd VARCHAR(20),
	typeId INT ,
	KEY `UserTypeInfo_typeId`(`typeId`),
	CONSTRAINT `UserTypeInfo_typeId` 
	FOREIGN KEY (`typeId`) REFERENCES UserTypeInfo(`typeId`),
	userSataus VARCHAR(20) DEFAULT '正常'
);

INSERT UserInfo(userName,userPwd,typeId) VALUES
('张三','123456','1'),
('李四','123456','2'),
('王五','123456','2'),
('赵六','123456','3'),
('孙七','123456','3');

CREATE TABLE ShopInfo(
	shopId INT PRIMARY KEY AUTO_INCREMENT,
	shopName VARCHAR(50) NOT NULL,
	userId INT ,
	KEY UserInfo_userId(`userId`),
	CONSTRAINT UserInfo_userId FOREIGN KEY (`userId`)
	REFERENCES UserInfo(`userId`),
	userPoint INT DEFAULT 0
);

INSERT INTO ShopInfo(shopName,userId) VALUES
('李四一店','2'),
('李四二店','2'),
('王五一店','3'),
('王五二店','3'),
('好李四一店','2');

CREATE TABLE proType(
	typeId INT PRIMARY KEY AUTO_INCREMENT,
	typeName VARCHAR(50) NOT NULL UNIQUE,
	typeDesc VARCHAR(50)
);

INSERT INTO proType(typeName,typeDesc) VALUES
('零食','零食'),
('饮料','饮料'),
('坚果','坚果');

CREATE TABLE proInfo(
	proId INT PRIMARY KEY AUTO_INCREMENT,
	proName VARCHAR(50) NOT NULL,
	proPrice FLOAT,
	proCount INT ,
	proStates VARCHAR(50) DEFAULT '上架',
	shopId INT,
	KEY ShopInfo_shopId(`shopId`),
	CONSTRAINT ShopInfo_shopId 
	FOREIGN KEY (`shopId`) 
	REFERENCES ShopInfo(`shopId`),
	typeId INT,
	KEY proType_typeId(`typeId`), 
	CONSTRAINT proType_typeId 
	FOREIGN KEY (`typeId`) 
	REFERENCES proType(`typeId`)
);

INSERT INTO proInfo(proName,proPrice,proCount,shopId,typeId) VALUES
('薯片','3','30','1','1'),
('薯片','3','30','2','1'),
('薯片','3','30','3','1'),
('可乐','3','100','1','2'),
('可乐','3','100','3','2'),
('可乐','3','100','4','2'),
('芒果干','5','100','1','3'),
('芒果干','5','100','2','3'),
('芒果干','5','100','4','3');

CREATE TABLE orderInfo(
	orderId INT PRIMARY KEY AUTO_INCREMENT,
	proId INT,
	KEY  proInfo_proId(`proId`), 
	CONSTRAINT proInfo 
	FOREIGN KEY (`proId`) 
	REFERENCES proInfo(`proId`),
	orderCount INT ,
	orderDate DATETIME DEFAULT NOW(),
	orderSataus VARCHAR(10) DEFAULT '未处理' 
	CHECK(orderSataus='未处理' OR orderSataus='已处理' ),
	userId INT ,
	KEY UserInfo1_userId(`userId`),
	CONSTRAINT UserInfo1_userId 
	FOREIGN KEY (`userId`) 
	REFERENCES UserInfo(`userId`)
);

INSERT INTO orderInfo(proId,orderCount,userId) VALUES
('1','5','4'),
('2','5','4'),
('3','5','5'),
('4','5','5'),
('5','5','5'),
('6','5','4'),
('7','5','5'),
('8','7','4');


-- 1、按照上面要求创建表和添加约束

-- 2、为每张表添加测试数据

-- 3、查询所有店铺的编号、名称、积分,以及店主名
SELECT shopId,shopName,userPoint,userName 
FROM ShopInfo 
INNER JOIN UserInfo 
ON ShopInfo.`userId`=UserInfo.`userId`;

-- 4、查询所有订单的编号、订购的商品名称、商品的类型名称 以及 订购的数量
SELECT orderId,proName,typeName,orderCount 
FROM orderInfo 
INNER JOIN 
proInfo 
ON orderInfo.`proId`=proInfo.`proId` 
INNER JOIN proType 
ON proInfo.`typeId`=proType.`typeId`;

-- 5、查询所有商品的编号、名称、单价、所属类型名、所属店铺名、以及店主名 
SELECT proId,proName,proPrice,typeName,shopName,userName 
FROM proType 
INNER JOIN proInfo 
ON proType.`typeId`=proInfo.`typeId` 
INNER JOIN ShopInfo 
ON proInfo.`shopId`=ShopInfo.`shopId` 
INNER JOIN UserInfo 
ON ShopInfo.`userId`=UserInfo.`userId`;

-- 6、查询所有订单的编号、订购的商品名称、商品的类型名称,商品所属店铺名,店主名以及订购的数量
SELECT orderId,proName,typeName,shopName,userName,orderCount 
FROM orderInfo 
INNER JOIN 
proInfo 
ON orderInfo.`proId`=proInfo.`proId` 
INNER JOIN proType 
ON proInfo.`typeId`=proType.`typeId` 
INNER JOIN ShopInfo 
ON proInfo.`shopId`=ShopInfo.`shopId` 
INNER JOIN UserInfo 
ON ShopInfo.`userId`=UserInfo.`userId`

-- 7、查询每个店铺的名称,以及该店铺下商品的种类,以及商品的总数量
SELECT shopName,COUNT(proType.typeId),SUM(proCount) 
FROM ShopInfo 
INNER JOIN proInfo 
ON ShopInfo.`shopId`=proInfo.`shopId` 
INNER JOIN proType 
ON proInfo.`typeId`=proType.`typeId` 
GROUP BY shopName;

-- 8、查询每个商品的名称、该商品所有订单的数量
SELECT proName,orderCount 
FROM orderInfo 
INNER JOIN proInfo 
ON orderInfo.`proId`=proInfo.`proId`;

-- 9、查询价格最贵的商品的名称、所属店铺的名称以及店主的名称
SELECT proName,shopName,userName 
FROM proInfo 
INNER JOIN ShopInfo 
ON proInfo.`shopId`=ShopInfo.`shopId` 
INNER JOIN UserInfo 
ON ShopInfo.`userId`=UserInfo.`userId` 
WHERE proPrice=(SELECT MAX(proPrice) FROM proInfo);

-- 10、查询单次订购数量最多的订单的编号、订购的商品名称、订购的日期以及订购该商品的会员名称
SELECT orderId,proName,orderDate,userName 
FROM proInfo 
INNER JOIN orderInfo 
ON proInfo.`proId`=orderInfo.`proId` 
INNER JOIN UserInfo 
ON orderInfo.`userId`=UserInfo.`userId` 
WHERE orderCount=(SELECT MAX(orderCount) FROM orderInfo);

-- 11、查询出店铺名以'好'字开头的店铺信息以及店主的名称
SELECT shopId,shopName,ShopInfo.userId,userPoint,userName 
FROM ShopInfo 
INNER JOIN UserInfo 
ON ShopInfo.`userId`=UserInfo.`userId` 
WHERE shopName LIKE '好%';

-- 12、查询出没有发布商品的店铺信息
SELECT ShopInfo.shopId,shopName,ShopInfo.userId,userPoint 
FROM ShopInfo 
LEFT JOIN proInfo 
ON ShopInfo.`shopId`=proInfo.`shopId` 
WHERE proCount IS NULL;

-- 13、将没有发布商品的店铺的积分减1
UPDATE ShopInfo 
SET userPoint = userPoint-1 
WHERE shopName = (
	SELECT shopName 
	FROM (
		SELECT shopName 
		FROM ShopInfo 
		LEFT JOIN proInfo 
		ON ShopInfo.`shopId`=proInfo.`shopId` 
		WHERE proCount IS NULL
		) 
	ShopInfo);

-- 14、查询出没有被订购的商品编号、商品名、所属的店铺名
SELECT proInfo.proId,proName,shopName 
FROM proInfo 
INNER JOIN ShopInfo 
ON proInfo.`shopId`=ShopInfo.`shopId` 
WHERE proInfo.proId = (
	SELECT proInfo.proId 
	FROM (
		SELECT proInfo.proId 
		FROM proInfo 
		LEFT JOIN orderInfo 
		ON proInfo.`proId`=orderInfo.`proId` 
		WHERE orderCount IS NULL
		) 
	proInfo);

-- 15、查询所有商品的编号、名称、被订购的次数以及订购的总数量
SELECT proInfo.proId,proName,COUNT(orderInfo.proId),SUM(orderCount) 
FROM proInfo 
INNER JOIN orderInfo 
ON proInfo.`proId`=orderInfo.`proId` 
GROUP BY orderInfo.proId;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值