使用子查询必须遵循以下几个规则: 子查询必须括在圆括号中。 子查询的 SELECT 子句中只能有一个列,除非主查询中有多个列,用于与子查询选中的列相比较。...在子查询中,GROUP BY 可以起到同 ORDER BY 相同的作用。 返回多行数据的子查询只能同多值操作符一起使用,比如 IN 操作符。...INSERT 语句可以将子查询返回的数据插入到其他表中。子查询中选取的数据可以被任何字符、日期或者数值函数所修饰。...当子查询同 UPDATE 一起使用的时候,既可以更新单个列,也可更新多个列。...下面的示例将从 CUSTOMERS 表中删除所有 AGE 大于或者等于 27 的记录: SQL> DELETE FROM CUSTOMERS WHERE AGE IN (SELECT AGE FROM
检索数据: 检索单个列: SELECT pname FROM product 检索多个列: SELECT pname,market_price,is_hot FROM product 检索所有列:...SELECT * FROM product 过滤检索结果中的重复数据: SELECT DISTINCT market_price FROM product DISTINCT关键字: 1、返回不同的值,...使用时放在列名的前面 2、多查询一个及以上列时,除非你查询的所有列的数据都不同,否则所有行都将被检索出来 限制检索结果: SELECT pname FROM product LIMIT 5,5 limit5,5...指示mysql返回从行5开始的5行记录 排序检索数据: 排序数据 SELECT pname FROM product ORDER BY pname 按多个列排序数据 SELECT pid,market_price...:] 任意可打印字符 [:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符 [:SPACE:] 包括空格在内的任意空白字符(同[\\f\\n\\r\\t\\v]) [:UPPER
❑ 每行都具有一个主键值(即列中不允许NULL值)。 ❑ 包含主键值的列从不修改或更新。(大多数 DBMS 不允许这么做,但如果你使用的 DBMS 允许这样做,好吧,千万别!)...如果从表中删除某一行,其主键值不分配给新行。 外键约束 外键是表中的一列,其值必须列在另一表的主键中。外键是保证引用完整性的极其重要部分。...❑ 唯一约束列可包含 NULL 值。 ❑ 唯一约束列可修改或更新。 ❑ 唯一约束列的值可重复使用。 ❑ 与主键不一样,唯一约束不能用来定义外键。 唯一约束的语法类似于其他约束的语法。...检查约束的常见用途有以下几点。 ❑ 检查最小或最大值。例如,防止 0 个物品的订单(即使 0 是合法的数)。 ❑ 指定范围。例如,保证发货日期大于等于今天的日期,但不超过今天起一年后的日期。...许多数据库管理员发现,过去创建的某个理想的索引经过几个月的数据处理后可能变得不再理想了。最好定期检查索引,并根据需要对索引进行调整。
1.MySQL基础知识 RDBMS 术语: 表(Table): 数据在关系数据库中以表的形式组织。每个表都有一个唯一的名称,并包含一组列和行。 列(Column): 表中的垂直字段,也称为字段或属性。...每列有一个特定的数据类型,如整数、字符串或日期。 行(Row): 表中的水平记录,也称为元组。每行包含表中的一组相关数据。...主键(Primary Key): 一列或一组列,其值能够唯一标识表中的每一行。主键用于确保表中的数据行是唯一的。 外键(Foreign Key): 用于建立表之间关系的一列或一组列。...外键通常是另一表的主键,用于确保引用完整性。 索引(Index): 数据库中的一种数据结构,用于提高检索速度。通过在一个或多个列上创建索引,可以加快数据检索和查询的效率。...查询(Query): 用于从数据库中检索数据的命令或语句,通常使用结构化查询语言(SQL)编写。 触发器(Trigger): 一种在数据库中定义的特殊存储过程,当特定事件发生时自动执行。
依旧从笛卡尔积的角度讲,就是先从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录, 赋值为NULL OUTER JOIN 外连接就是求两个集合的并集。...从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录,最后加上右表中剩余的记录 日期: now():当前具体的时间和日期 curdate():当前日期 curtime...不可重复读:同⼀条命令返回不同的结果集(更新).事务 A 多次读取同⼀数据,事务 B 在事务A 多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同⼀数据时,结果 不⼀致。...⾏ ; OLD 中的值全都是只读的,不能更新。...视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的。 在添加或更改这些表中的数据时,视图将返回改变过的数据。 视图的作⽤ 1.
`timestamp` 保存了自1970年1月1日的秒数,因为存储范围比较小,自然存储空间占用也比较小。 日期类型可以设置更新行时自动更新日期,建议日期时间类型根据精度存储为这两个类型。...Row 数据表的每一行记录。如学生张三。...2、检索数据 # 检索单列 select name from student; # 检索多列 select name, age, class from student; # 检索所有列 select...# 按照班级进行分组并统计各班人数 select class_id, count(*) from student group by class_id; # 列出大于三个学生的班级 select class_id...如何根据一个表的数据更新另一个表 比如以上 student 表保存着成绩,另有一表 score_correct 内存因失误而需修改的学生成绩。
SQL 目录 检索 过滤检索结果 数据汇总处理 分组 给检索结果排序 表操作 插入数据 更新删除数据 子查询-迭代查询 联结-关联多个表 组合查询 视图 其它 检索 检索某表中单个列: SELECT 列名...FROM 表名; 检索某表中多个列: SELECT 列名,列名,列名 FROM 表名; 检索某表中所有列:(尽量不用) SELECT * FROM 表名; 只检索某表中某列里不重复的项: SELECT...约束:每个列可以有一种或几种约束。 NOT NULL 非空约束. UNIQUE 唯一约束,可唯一标识数据库表中的每条记录。...PRIMARY KEY 主键约束,唯一标识数据库表中的每条记录,唯一且非空。 FOREIGN KEY 外键约束,一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。...步骤为,要更新的表,要更新的列,要更新的行。
目录 检索 过滤检索结果 数据汇总处理 分组 给检索结果排序 表操作 插入数据 更新删除数据 子查询-迭代查询 联结-关联多个表 组合查询 视图 其它 检索 检索某表中单个列: SELECT 列名...FROM 表名; 检索某表中多个列: SELECT 列名,列名,列名 FROM 表名; 检索某表中所有列:(尽量不用) SELECT * FROM 表名; 只检索某表中某列里不重复的项: SELECT...约束: 每个列可以有一种或几种约束。 NOT NULL 非空约束. UNIQUE 唯一约束,可唯一标识数据库表中的每条记录。...PRIMARY KEY 主键约束,唯一标识数据库表中的每条记录,唯一且非空。 FOREIGN KEY 外键约束,一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。...'; 步骤为,要更新的表,要更新的列,要更新的行。
ut:{ $gte: new Date(1595638774822) }, billSt: 1, rpts: 1 }).limit(5000) 5、更新逻辑 为了避免重复拉取数据,对已拉取的数据进行状态更新...,这个组合索引并不是真正的稀疏索引,根据稀疏索引定义来讲,稀疏索引中不包括不存在字段的文档,但是这个是组合索引,但ut日期字段一直都在.所以此稀疏索引中还是索引key对应文档信息,只是缺少billSt字段而已...ut时间叶子都要遍历,每一个相同ut类似叶子遍历,遍历完成,去检索下一个ut,直到所有ut都都检索,只统计1小时区间,只画出2个日期,实际有792个ut不同值,相当于有792如下树结构.生产1个月则更多...因为统计1小时内,ut存在792不同值,这里多seeks 1次,因为是范围,需要检索下个值是否大于最大值. db.fee_detail.aggregate([{$match:{ut: { $gte: ISODate...此案例中索引扫描值达到1700万,返回记录为0.
检查目标表列中的数据没出现被截断的情况--针对的是窜列的情况。比如comments里的内容含有列分隔符,被分隔开了。 . 对边界值进行分析检查 6....日期型验证,验证是否为日期格式,并且在所有日期类型数据的格式应该统一 . 精度验证,小数点的精度要满足期望的精度 . 数据检查:检查数据的正确性,完整性 . null检查 ....转换验证转换逻辑的正确性 7. 拷贝验证 . 验证目标表中业务要求所有惟一性指标均正确的实现(例如主键、惟一标识的键、或其他任一惟一表示的列) ....验证从源数据多列合并而成的数据是正确的 . 验证仅仅根据客户要求对源数据进行了多列合并至目标表中 8. 日期验证是ETL开发过程中常用的数据,主要用于: ....了解数据创建的日期,分区日期和业务日期要分清楚。 . 用于识别活动记录 . 根据业务需求透视表确定活动记录 . 便于基于时间插入、更新记录 9.
6日的日期和时间,数据精确到分钟。...(6)hierarchyid:可表示层次结构中的位置。 4 计算列 计算列由可以使用同一表中的其它列的表达式计算得来。..., Triggers, Procedures, CREATE TABLE中的全部列级和表级约束 6 创建域完整性 (1)CHECK约束的定义与删除 界面方式创建与删除CHECK约束 例如,在pxscj...在“常规”属性区域中的“表达式”栏后面单击 按钮(或直接在文本框中输入内容),打开“CHECK约束表达式”窗口,并编辑相应的CHECK约束表达式为“成绩>=0 AND成绩<=100”。...IN ('男', '女')) ) 【例6.10】 创建一个表student1,只考虑“学号”和“出生日期”两列,出生日期必须大于1980年1月1日,并命名CHECK约束。
在 SQLite 中,除了重命名表和在已有的表中添加列,ALTER TABLE 命令不支持其他操作(在其他数据库中可以改变表中列的数据类型,删除表中的列) (1)基本语法: 用来重命名已有的表的 ALTER...5、SQLite 子查询:在另一个 SQLite 查询内嵌入在 WHERE 子句中的查询。 使用子查询返回的数据将被用在主查询中作为条件,以进一步限制要检索的数据。...30的客户记录 delete from company where ID IN (select ID from company where AGE > 30); (6)运行效果图: 省略 6、SQLite...如果省略了 EXPLAIN 关键字或短语,任何的修改都会引起 SQLite 语句的查询行为,并返回有关 SQLite 语句如何操作的信息。...(1)count() : 计算表中的行数 (2)MAX() : 求某列的最大值 (3)MIN():求某列的最小值 (4)sqlite_version():返回SQLite的版本 (5)AVG():求某列的平均值
索引本身也很大, 索引往往以文件的形式存储到磁盘上 索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录.所以索3引也是要占磁盘空间的 虽然索引提高了查询速度,但是会降低更新表的速度....因为更新表时, MYSQL不仅要保存数据,还要保存一下索引文件每次更新添加了索引列的字段, 会调整因为更新所带来的键值变化后索引的信息 索引分类 单值索引 一个索引只包含间个列,一个表可以有多个单值索引...一般来说, 一个表建立索引不要超过5个 唯一索引 索引列的值必须唯一,但允许有空值 复合索引 一个索引包含多个列 全文索引 MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索, 可以利用全文索引来提高匹配的速度...同真实的表一样,视图包含一系列带有名称的列和行数据。 行和列数据来自定义视图的查询所引用的表,并且在引用视图时动态生成。...,就不能够直接修改 什么是存储过程 一组可编程的函数,是为了完成特定功能的SQL语句集 经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
3.注意事项 3.1 索引不会包含有null值的列: 只要列中包含有null值都将不会被包含在索引中,复合索引中只要有一列含有null值,那么这一列对于此复合索引就是无效的。...,原因可能有如下 1.1 检索大量超过需要的数据 1.2 服务层在分析大量超过需要的数据行 2.慢查询解决方案 2.1 不查询不需要的记录 2.2 多表关联时不要返回不必要的全部列 2.3 不重复查询相同的数据...3.RANGE分区 可以根据对列的指定,如下所示,当主键ID值大于10小于20的就会存储在p1区,当ID值小于10时就会存储在p0区,并且在磁盘当中也会分成两个ibd文件来进行存储,这种情况下如果插入的数据范围不在定义范围时...,例如插入30,则会报错.RANGE分区主要适用于日期列分区,如销售类的表,可以根据年份来分区存放销售记录 create table t( id int(11) )engine=innodb...4.视图的使用场景 权限控制的时候,不希望用户访问表中某些含敏感信息的列,比如工资 关键信息来源于多个复杂关联表,可以创建视图提取我们需要的信息,简化操作 三.外键 1.定义 表的外键是另一表的主键,
【面试题】 有一张“用户登陆记录表”,包含两个字段:用户id、日期。 【问题】查询2021年每个月,连续2天都有登陆的用户名单。 【解题步骤】 1....连续问题的万能模板 我在《拼多多面试题:如何找出连续出现N次的内容?》里讲过遇到“连续问题”如何解决,并送出了一个万能模板,模板使用的是窗口函数解决连续问题。...窗口函数lead可以获取每个字段的后面的第n个值,并生成新的一列。 而这道题描述的“用户连续登陆”中的“连续”可以理解为用户当前的登陆日期与本月下一次登陆日期相差一天。...从结果看,我们可以获得以下信息: 1)当“日期”与“用户当月下一个登陆日期”只相差一天,即用户本次登陆为连续登陆; 2)当“日期”与“用户当月下一个登陆日期”相差大于一天,即用户本次登陆为连续登陆的最后一天...from 用户登陆记录表 ) as t1; 可以看出,当连续终止时,即: 1)“日期”与“用户当月下一个登陆日期”相差大于一天; 2)“用户当月下一个登陆日期”等于“当月最后登陆日期”; 两种情况。
(schema)关于数据库和表的布局及特性的信息 列(column)表中的一个字段。...每个列都有相应的数据类型,用来定义列可以存储的数据种类 行 表中的数据是按行存储的,所保存的每个记录存储在自己的行内 主键(primary key)一列(或一组列),其值能够唯一区分表中的每一行...from table 显示表中的列 (同 describe table) show status 用于显示广泛的服务器状态信息 show create database 和 show create...4、检索数据 SELECT id,name FROM table; 使用DISTINCT 来告诉MySQL来返回不同的行 5、排序检索数据 ORDER BY ASC DESC 6、过滤数据...= 不等于 < 小于 <= 小于等于 > 大于 >= 大于等于 between 在指定的两个值之间 检查单个值 不匹配检查 范围值检查 空值检查 AND 操作符 OR 操作符 IN
根据起始时间和日期间隔算出不规则月份的开始日期,并将起始时间插入第1位。 A6: A.pseg(x),返回x在A中的哪一段,缺省序列成员组成左闭右开的区间,A必须为有序序列。 ...用来存放各个时间段内的销售额和时间 循环月份总成的天数,如果起始时间晚于这个月的最后一天,则把这个月的最后一天放入date_list,否则把起始时间放入,然后更新起始时间为起始时间推迟该月的天数后的日期...如果date_list中的日期数量大于1了,生成一个数组(判断数据中每个日期是否在该段时间段内,在为True,否则为False)。...我们的目的是过滤掉重复的记录,取出前6列,并重整第7,8两列,具体要求是:将wrok phone作为新文件第7列,将work email作为新文件第8列,如果有多个work phone或work email...在第二例中,日期处理时,esproc可以很轻松的划分出不规则的月份,并根据不规则月份进行计算。而python划分不规则月份时需要额外依赖datetime库,还要自行根据月份天数划分,实在是有些麻烦。
,来解决应用中对同表查询和插入的锁争用 例如,将concurrent_insert系统变量设为2,总是允许并发插入; 同时,通过定期在系统空闲时段执行OPTIONMIZE TABLE语句来整理空间碎片,...、或某些记录已经被删除 幻读(Phantom Reads) 一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据 4.3 事务隔离级别 在并发事务的问题中,“更新丢失...在使用范围条件检索并锁定记录时; InnoDB 这种加锁机制会阻塞符合条件范围内键值的并发插入,这往往会造成严重的锁等待; 因此,在实际开发中,尤其是并发插入较多的应用; 我们要尽量优化业务逻辑,尽量使用相等条件来访问更新数据...应用中,不同的程序会并发存取多个表 尽量约定以相同的顺序访问表 程序批处理数据时 事先对数据排序,保证每个线程按固定的顺序来处理记录 在事务中,要更新记录 应直接申请排他锁,而不应该先申请共享锁 在可重复读下...6 总结 6.1 MyISAM的表锁 共享读锁之间是兼容的,但共享读锁和排他写锁之间,以及排他写锁之间互斥,即读写串行 在一定条件下,MyISAM允许查询/插入并发,可利用这一点来解决应用中对同一表查询
存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。...更新从表,主表不变 3.3.2 Trigger 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。...同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成。...+ unique,确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。...,mysql需要扫描的行数很多,增加索引,并不能提高效率 3.定义为text和image和bit数据类型的列不应该增加索引, 4.当表的修改(UPDATE,INSERT,DELETE)操作远远大于检索(
这条语句会在数据库管理系统中创建一个新的数据库,并赋予它指定的名称。...如果要检索表中的所有列,可以使用通配符*: SELECT * FROM table_name; 这将返回表中所有列的所有行。...50000的员工记录,可以使用以下查询: SELECT * FROM employees WHERE salary >= 50000; 这将返回employees表中所有工资大于等于50000的员工记录...你还可以使用多个条件,例如,检索部门为’IT’且工资大于等于50000的员工记录: SELECT * FROM employees WHERE department = 'IT' AND salary...>= 50000; 这将返回employees表中部门为’IT’且工资大于等于50000的员工记录。
领取专属 10元无门槛券
手把手带您无忧上云