首页 > 数据库 >SQL套题

SQL套题

时间:2022-10-24 16:23:40浏览次数:32  
标签:INSERT goods -- VALUES SQL NULL type 套题

我一直觉得这种SQL套题是自己明显的短板,之前海康的笔试也遇到了,这也可能是没能通过的一大原因
因为好像到目前为止,除了上《数据库原理》课的时候,其他时候基本都是写的非常简单的增删查改SQL

正文

题目如下:

建表,准备素材

这里省去了goods表的detail字段,同时也省去了外键
先填type表字段

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for goods
-- ----------------------------
DROP TABLE IF EXISTS `goods`;
CREATE TABLE `goods`  (
  `GoodsLd` int NOT NULL,
  `Name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `TypeId` int NULL DEFAULT NULL,
  `Stock` int NULL DEFAULT NULL,
  PRIMARY KEY (`GoodsLd`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of goods
-- ----------------------------
INSERT INTO `goods` VALUES (1, '大众S1', 3, 67);
INSERT INTO `goods` VALUES (2, '大众A7', 3, 32);
INSERT INTO `goods` VALUES (3, '丰田U2', 4, 12);
INSERT INTO `goods` VALUES (4, '铃木4', 5, 46);
INSERT INTO `goods` VALUES (5, '宝马Q4', 6, 43);

SET FOREIGN_KEY_CHECKS = 1;

-- ----------------------------
-- Table structure for order
-- ----------------------------
DROP TABLE IF EXISTS `order`;
CREATE TABLE `order`  (
  `OrderId` int NOT NULL,
  `GoodsId` int NULL DEFAULT NULL,
  `Num` int NULL DEFAULT NULL,
  `Date` datetime NULL DEFAULT NULL,
  PRIMARY KEY (`OrderId`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of order
-- ----------------------------
INSERT INTO `order` VALUES (1, 1, 13, NULL);
INSERT INTO `order` VALUES (2, 3, 4, NULL);
INSERT INTO `order` VALUES (3, 4, 10, NULL);
INSERT INTO `order` VALUES (4, 5, 36, NULL);

SET FOREIGN_KEY_CHECKS = 1;

-- ----------------------------
-- Table structure for type
-- ----------------------------
DROP TABLE IF EXISTS `type`;
CREATE TABLE `type`  (
  `TypeId` int NOT NULL,
  `Name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `UpId` int NULL DEFAULT NULL,
  PRIMARY KEY (`TypeId`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of type
-- ----------------------------
INSERT INTO `type` VALUES (1, '汽车', NULL);
INSERT INTO `type` VALUES (2, '摩托车', NULL);
INSERT INTO `type` VALUES (3, '大众', 1);
INSERT INTO `type` VALUES (4, '丰田', 1);
INSERT INTO `type` VALUES (5, '铃木', 2);
INSERT INTO `type` VALUES (6, '宝马', 2);

SET FOREIGN_KEY_CHECKS = 1;

开始干正事儿

  1. 第一问的难点在于上级类别
SELECT
	a.`Name`,
	Stock,
	`类别`,
	c.`name` AS '上级类别' 
FROM
	(
	SELECT
		goods.NAME,
		Stock,
		type.`Name` AS '类别',
		UpId 
	FROM
		goods,
		type 
	WHERE
		Stock > 0 
		AND goods.`Name` LIKE '新品%' 
		AND goods.TypeId = type.TypeId 
	) a
	LEFT JOIN ( SELECT TypeId, NAME FROM type ) c ON c.TypeId = a.UpId

我们先做了一次查询,得到了需要的大部分数据,但是UpId并不是最终的数据,还得再去type表中查一次,而且是需要同时匹配多个数据,同时需要左表中所有的数据,所以这里用LEFT JOIN
另外UpId和TypeId这两个额外的关联字段是必须的

# 还可以先处理type表
SELECT
	goods.`Name`,
	Stock,
	`类别`,
	`上级类别` 
FROM
	goods,(
	SELECT
		a.`TypeId`,
		a.`Name` AS '类别',
		b.`Name` AS '上级类别' 
	FROM
		type a
		LEFT JOIN type b ON a.UpId = b.TypeId 
	) c 
WHERE
	Stock > 0 
	AND goods.`Name` LIKE '新品%' 
	AND goods.TypeId = c.TypeId

标签:INSERT,goods,--,VALUES,SQL,NULL,type,套题
From: https://www.cnblogs.com/yaocy/p/16815940.html

相关文章

  • mysql数据库指定ip远程访问(设置远程连接),赋权操作
    mysql数据库指定ip远程访问(设置远程连接)远程访问mysql报错,ip不允许链接的情况:错误号码1045Accessdeniedforuser'用户名'@'数据库地址'(usingpassword:YES) 查......
  • 微软推出SQL Server 2005 Report Packs
    微软推出八个SQLServer2005报表类型,包括了:SQLServer2005ReportPackforSQLServerIntegrationServices​​​SSISEventLogReportPack.exe​​​-2,458KBS......
  • 云服务器中Centos安装MySQL方法
    一、Centos安装MySQL方法1、下载并安装mysqlyum-yinstallmysql57-community-release-el7-10.noarch.rpm2、安装mysql服务器yum-yinstallmysql-community-s......
  • SqlServer修改数据库文件存放位置
    --查看当前的存放位置selectdatabase_id,name,physical_nameASCurrentLocation,state_desc,sizefromsys.master_files wheredatabase_id=db_id(N'数据库名'); --......
  • 华为云数据库 GaussDB(for MySQL),让企业无忧数据恢复
    可能很多网络运营单位在数字化转型过程中都遇见过因为停电导致信息数据丢失,进而致使整个网络运营单位的云上业务被迫中断这样的问题?这时候网络运营单位需要探索到业务中断......
  • MySQL存储过程
    MySQL存储过程 MySQL储存过程_long-way-to-go的博客-CSDN博客_mysql存储过程 与sql存储过程区别1、输入参数写法不同createprocedure存储过程名称(in/out/inou......
  • mysql 忘记root密码
    忘记root密码1、关闭正在运行的MySQL服务。(任务管理器,结束进程mysqld.exe)2、打开DOS窗口,转到mysql\bin目录。3、输入mysqld--skip-grant-tables回车。--skip-grant-t......
  • PostgresqlAndPostGis
    Postgresql&PostGis问题及解决方法关于postGIS没有template_postgis模版的问题解决//1、建立普通数据库createdatabasexx;//2、然后输入官网给的这几条添加......
  • Mysql索引原理揭秘之——MyISAM和InnoDB
    MyISAM引擎的索引实现在MyISAM里面,另外有两个文件,一个是.MYD文件,D代表Data,是MyISAM的数据文件,存放数据记录,比如我们的user_myisam表的所有的表数据;一个是.MYI文件,I代表Inde......
  • 博客园 首页 新随笔 联系 管理 .NET 5在Docker中访问MSSQL报错
    不知道你有没有在.NETCore/.NET5的Docker访问MSSQLServer数据库,如果有,那么很有可能会遇到这个错误。1SSL版本错误最近在公司用.NET5重构部分业务服务,由于之前老系......