1、主键的条件
表中的任何列都可以作为主键,只要它满足以下条件:任意两行都不具有相同的主键值;
每一行都必须具有一个主键值(主键列不允许NULL值);主键列中的值不允许修改或更新;主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)sql语句一般返回原始的、无格式的数据。数据的格式化是表示问题,而不是检索问题。
检索出的数据并不是随机显示的。如果不排序,数据一般将以它在底层表中出现的顺序显示,这有可能是数据最初添加到表中的顺序。但是,如果数据随后进行过更新或删除,那么这个顺序会受到DBMS重用回收存储空间方式的影响。因此,如果不明确控制的话,则最终的结果不能也不应该依赖该排序顺序。关系数据库设计理论认为,如果不明确规定排序顺序,则不应该假定家所处的数据的顺序有任何意义。
distinct关键字必须直接放在列名的前面,作用于所有的列,不仅仅是跟在其后的那一列,distinct保证的行级别的一致,而不是一列
如果想要对一列的数据去重,distinct关键字后面只能跟一个列名。通常,order by子句中使用的列将是为显示而选择的列,用非检索列排序数据也是完全合法的。
order by 按多列排序,在前面的列不唯一的前提下,才对后面的列进行排序。order by子句,可按多列排序DESC降序排序,只应用在直接位于其前面的列名NULL与非匹配
通过过滤选择不包含指定值的所有行时,不会返回含有NULL值的行。过滤数据时,一定要验证被过滤行踪含NULL的行确实出现在返回的数据中。检索过滤
where子句中 默认顺序,AND操作符的优先级比OR高,应当使用小括号对操作符进行明确分组。IN 关键字功能类似于OR,比OR效率高NOT 用来否定其后面的关键字通配符
LIKE是谓词,不是操作符。区分大小写需要看DBMS的配置% 百分号任意字符出现任意次数,不可以匹配NULL_ 下划线匹配单个字符,只能匹配1个[] 方括号通配符表示字符集,匹配一个字符,只有access与sqlserver支持,可用^来取反 [^AB]通配符效率较低。
拼接字段
|| 连接
RTRIM()去除字符串右边空格 LTRIM()左边 TRIM()两边AS 别名聚集函数
AVG()返回某列的平均值,忽略列值为NULL的行COUNT()返回某列的行数,不在乎列的值MAX()返回某列的最大值,忽略列值为NULL的行MIN()返回某列的最小值,忽略列值为NULL的行SUM()返回某列的值之和,忽略列值为NULL的行 分组group by 后可以跟任意数目的列,不能是聚集函数,NULL也是一个分组一般要与聚集函数联合使用WHERE过滤行,HAVING过滤分组
where在数据分组前进行过滤,having在数据分组后进行过滤HAVING与GROUP BY组合使用SELECT子句顺序
select 要返回的列或表达式
from 从中检索数据的表where 行级过滤group by 分组说明,仅在改组计算聚集时使用having 组级过滤order by 对输出结果排序子查询
作为子查询的select语句只能查询单个列,企图检索多个列将返回错误select语句中操作多个表,应使用完全限定列名来避免歧义。连接表JOIN
内连接 INNER JOIN……ON,等值连接,两个表的相等测试
自联结 同一张表多次使用自然连接 返回的结果中列只出现一次,手动选择select的列外联结 LEFT OUTTER JOIN ,RIGHT OUTTER JOIN, FULL OUTTER JOIN,以那边的表为基表,保留哪边表的数据组合查询
UNION允许执行多个查询,与where子句能达到的效果相同UNION中的每个查询必须包含相同的列、表达式或聚集函数,次序没要求,数据类型不必完全相同,但是必须能兼容UNION有自动去重的功能UNION ALL 不去重,不取消重复的行不允许使用多个ORDER BY,只能在最后使用 INSERT 表数据复制 select * into A from B;delete from 而不是delect * from
delete删除整行,删除列可以用 update set null操作
视图
create view as select 。。。存储过程