前提
本次分享只局限于 sql server 和 mysql 这两种数据库,其他数据库暂不总结
正文
1. 对查询的字段进行去重(distinct)
用法注意:
1. distinct【查询字段】,必须放在要查询字段的开头,即放在第一个参数;
2. 只能在SELECT 语句中使用,不能在 INSERT, DELETE, UPDATE 中使用;
3. DISTINCT 表示对后面的所有参数的拼接取 不重复的记录,即查出的参数拼接每行记录都是唯一的
1.1 只对一个字段查重
对一个字段查重,表示选取该字段一列不重复的数据
SELECT DISTINCT 字段名 FROM 表名
1.2 多个字段去重
SELECT DISTINCT 字段名1,字段名2 FROM 表名
只有 字段1和字段2都不同时,才会被去重掉
2. 控制返回记录的条数(top/limit)
2.1 sql server 中的 top
用法:
输出前三条纪录
Select top 3 * from 表名
输出前 20% 条记录
Select top 20 percent * from 表名
--6 * 20% = 1.2
--输出的是前2条记录,不是1条
2.2 MySql 中的 limit
用法:
给定一个参数,它表示返回最大的记录行数目:
输出前 5条记录SELECT * FROM table LIMIT 5
给定两个参数,返回两个参数之间的记录
SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15
检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1
SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last
3. sql 一句话复制一条数据并修改其中的字段
insert into table select 字段1, 字段2, 字段3, from table where....--select 后跟随的字段是表中的全部字段
4. 左连接,右连接,内连接
左连接(left join)
又称左外连接,是外连接的一种,它是以左表为基础,根据 On 后给出的两表条件将两表连接起来。结果会将左表所有的查询信息列出,右表只显示共同有的那部分,没有对应的部分只能补空显示
维恩图如下:
SQL 语句:
SELECT A.PK, B.PK FROM table_a A LEFT JOIN table_b B ON A.PK = B.PK; WHERE 条件…
右连接(right join)
又称右外连接,也是外连接的一种,它是以右表为基础,根据On后给出的两表条件将两表连接起来。结果会将右表所有的查询信息列出,左表只显示共同有的那部分,没有对应的部分只能补空显示
维恩图如下:
SQL 语句:
SELECT A.PK, B.PK FROM table_a A RIGHT JOIN table_b B ON A.PK = B.PK; WHERE 条件…..
内连接(inner join)
内连接是一种一一映射关系,也就是两张表都有的记录才能显示出来
维恩图:
SQL 语句:
SELECT A.PK , B.PK FROM table_a A INNER JOIN table_b B ON A.PK = B.PK;
5. Union 和 Union all
Union:union 在进行表连接后会筛选掉重复的记录,所以在表连接后对所产生的结果集进行筛选运算,删除重复的记录再返回结果集
Union all:union 只是简单的将两个结果合并就返回。如果返回的结果集中有重复的数据,那么返回的结果集中就包含重复的数据。
从性能讲 union all 要比 union 快很多,因为他没有排序去重的耗时
ps: 使用 union 和 union all 时一定要保证查询的列一致,即select 后的参数名一致
6. Varchar 和 char 的区别
(1)char 的长度是不可变的,而varchar的长度是可变的。
如:定义一个 char[10] 和 varchar[10],如果存进去的是“yang”,那么 char 所占的长度依然是10,除了字符“yang”外,后面跟6个空格,varchar 就立马把长度变为4了,取数据的时候,char 类型的要用trim() 去掉多余的空格,而 varchar 是不需要的。
(2)char 的存取速度要比 varchar 快的多,因为其长度固定,方便的程序的存储与查找。
Char 也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,varchar 是以空间效率为首位
(3)char的存储方式是:对英文字符(ASCII)占用1个字节,对一个汉字占用2个字节。
varchar的存储方式是:对每个英文字符占用2个字节,汉字也占用2个字节
ps:不同的编码形式对应的存储方式不一样
UTF-8编码:
一个英文字符对应一个字节,一个中午(含繁体)占用3个字节
(4)两者的存储数据都非unicode的字符数据。
7. 索引
7.1 什么是索引?
数据库索引,是数据库管理系统中一个排序的数据结构,索引的实现通常使用 B 树及其变种 B+ 树。
在数据之外,数据库系统还维护这满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就被叫做索引。
7.2 索引的作用?
协助快速查询,更新数据库表中数据
7.3 索引的优缺点?
优点:
创建索引可以大大提高系统的性能
通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性
可以大大加快数据的检索速度,这也是创建索引的最主要原因
可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义
在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间
通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统性能。
缺点:
创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
当对表中的数据进行增加,删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。