SQL语句的分类
Sql语句的分类详细总结
⼀、数据定义语⾔DDL(Data Ddefinition Language)
SQL数据定义语⾔主要⽤来定义逻辑结构,包括定义基表,视图和索引。sql中union多表合并
1、定义
定义表
Create table<;表名> (<;列名字><;数据类型>[列级完整性约束条件] , ………….);
定义视图
视图:从⼀个或者⼏个基表或者视图导出的表(结果集),是⼀个逻辑上的虚表。数据库中只存放视图的定义,不存放视图的数据。所以基表的数据变化,视图的数据也会跟着变化。
Create view <;视图名> [(列名),(列名)…] as <⼦查询> [with check option]
⼦查询可以是不包含order by ⼦句和 distinct 短句的任意复杂select语句。
定义索引
Create[unque][cluster] index <;索引名> on <;表名>[次序] (<;列名>……..)
Unique选项表⽰此索引的每⼀个索引值不能重复,对应唯⼀的数据记录。
Cluster 选项表⽰要建⽴的索引是聚簇索引。
<;表名>是所需要创建索引的基表的名称。索引可以建⽴在对应标的⼀列或者多列上,个列名之间⽤逗号分隔。
(次序)指定了索引值的排列次序,ASC升序,DESC降序。缺省值ASC。
聚簇索引:指索引项的顺序与表中记录的物理顺序相⼀致的索引组织。(聚簇索引是将索引和表记录⼀起存放,⼀个基表只能建⽴⼀个聚簇索引。)(建⽴聚簇索引后,更新列数据时会导致表记录的物理顺序的变更,代价较⾼,经常更新的列不宜建⽴索引)
2、修改
Alter table 语句
Alter table<;表名>
[Add <;新列名><;数据类型>[完整性约束]]
[drop <;完整性约束名>]
[modify <;列名><;数据类型>];
<;表名>表⽰所要修改的基表,ADD⼦句⽤于增加新列和完整性约束条件,DROP⼦句⽤于三处指定的完整性约束条件,MODIFY⼦句⽤于修改原有的列定义,修改列名和数据类型
3、删除
删除表
Drop table <;表名>;
删除表后,表中的数据,表上的索引都将别删除。在oracle中,删除基表后,建⽴在表上的视图依然在数据字典中,但是⽤户引⽤会报错。
删除视图
Drop view <;视图名>;
视图是定义在了数据字典中的。
删除索引:
索引由系统进⾏维护,如果数据频繁的删改,系统维护索引的时间就会增加,此时可以删除不必要的索引。索引删除后,系统会从数据字典中清除该索引的描述。
⼆、数据查询语⾔DQL(Data Query Language)
SQL的数据查询语⾔主要⽤来对数据库中的各种数据对象进⾏查询。
完整语法:
SELECT[ALL | DISTINCT] TOP n[PERCENT] WITH TIES select_list
[INTO[new table name]]
[FROM{table_name | view_name} [(optimizer_hints)]
[,{table_name2| view_name2} [(optimizer_hints)]
[…,table_name6|view_name6][(optimizer hints)]]]
[WHEREclause]
[GROUPBY clause]
[HAVINGclause]
[ORDERBY clause]
[COMPUTEclause]
[FORBROWSE]
SQL 查询语句的解析顺序:
1、from⼦句组装来⾃不同数据源的数据;
2、where⼦句基于指定的条件对记录⾏进⾏筛选;
3、group by⼦句将数据划分为多个分组;
4、使⽤聚集函数进⾏计算;
5、使⽤having⼦句筛选分组;
6、计算所有的表达式;
7、select 的字段;
8、使⽤order by对结果集进⾏排序。
SQL语⾔不同于其他编程语⾔的最明显特征是处理代码的顺序。在⼤多数据库语⾔中,代码按编码顺序被处理。
简单查询
仅含有SELECT⼦句和FROM⼦句的查询就是简单查询。
1、使⽤FROM⼦句指定表
Select语句的不同部分常⽤来指定要从数据库返回的数据。Select语句使⽤from⼦句指定查询中包含的⾏和列所在的表。
2、使⽤  SELECT指定列
⽤户可以指定查询表中的某些列,属于投影操作。列名跟在SELECT关键词后⾯,每个列名⽤逗号隔开。
SELECTcolumn name1,……,column_name_n FROM table_name_1,….. table_name_n
4、算术表达式
5、在SELECT语句中可以使⽤算术表达式,+-*/和()。起别名
6、DISTINCT关键字
去除重复⾏
例:SELECT distinct deptno_id from emp;
在select 语句中使⽤distinct 筛选重复
7、WHERE⼦句
WHERE ⼦句⽤于筛选从from⼦句中返回的值,完成选择操作。
⼦句中的条件表达式
A=B 表⽰A值=B值,返回true
A>B
A<B
A!=B或A<>B 表⽰不等
A LIKE
B (通配符 % 任意字符,_代表任意⼀个字符)
NOT <;条件表达式> NOT运算符⽤于对结果取反。
⼦语句中的连接运算符
常⽤连接运算符:AND和OR。AND 左右两边都是TRUE才是TRUE  OR 是⼀边为TRUE就为TRUE
⼦语句中的NULL值
NULL是⼀个特定的术语,称之为空。
这是NULL的由来、也是NULL的基础,所有和NULL相关的操作的结果都可以从NULL的概念推导出来。
判断⼀个字段是否为NULL,应该⽤IS NULL或IS NOT NULL,⽽不能⽤‘=’。对NULL的判断只能定性,既是不是NULL(IS NULL/IS NOT NULL),⽽不能定值。简单的说,由于NULL存在着⽆数的可能,因此两个NULL不是相等的关系,同样也不能说两个NULL就不相等,或者⽐较两个NULL的⼤⼩,这些操作都是没有意义,得不到⼀个确切的答案的。因此,对NULL的=、!=、>、<、>=、<=等操作的结果都是未知的,也就算说,这些操作的结果仍然是NULL。
同理,对NULL进⾏+、-、*、/等操作的结果也是未知的,所以也是NULL。
所以,很多时候会这样总结NULL,除了IS NULL、IS NOT NULL以外,对NULL的任何操作的结果还是NULL。
上⾯这句话总结的很精辟,⽽且很好记,所以很多时候⼈们只记得这句话,⽽忘了这句话是如何得到的。其实只要清楚NULL的真正含义,在处理NULL的时候就不会出错。
8、ORDERBY ⼦句(在select语句后执⾏)
ORDERBY ⼦句可以对结果集中的数据进⾏排序。
语法:
SELECT column_list
FROM table_name
ORDERBY[(order_by_expression[ASC|DESC])……]
order_by_expression表⽰将要排序的列名或者由列名组成的表达式,关键字ASC升序排列,DESC降序排列。
9、GROUPBY 语句
⽤于在查询结果集中对记录进⾏分组,以汇总数居或者为整个分组显⽰单⾏的汇总信息。
使⽤GROUPBY ⼦句,必须满⾜下⾯的条件:
l在SELECT⼦句的后⾯只可以有两类表达式:统计函数和进⾏分组的列名。
l在SELECT⼦句中的列名必须是进⾏分组的列,初次之外添加其他的列名都是错误的,但是GROUP BY ⼦句后⾯的列名可以不出现在SELECT⼦句中。
l如果使⽤了WHERE⼦句,那么所有参加分组计算的数据必须⾸先满⾜WHERE⼦句只等的条件。
l在默认情况下,将按照GROUP BY ⼦句指定的分组列升序排列,如果需要重新排序,可以使⽤ORDERBY ⼦句指定新的排列顺序。
10、HAVING ⼦句
HAVING ⼦句通常与GROUP BY⼦句⼀起使⽤,在完成对分组结果统计后,使⽤HAVING ⼦句的功能对分组的结果进⼀步的筛选。
在SELECT ⼦句中使⽤了GROUPBY⼦句,那么HAVING⼦句将应⽤于GRPUP BY创建的那些组。如果指定了WHERE⼦句,⼆没有指定GROUP BY⼦句那
么HAVING⼦句将应⽤于WHERE⼦句的输出,并且整个输出别看做是⼀个组,如果在SELECT语句中既没有指定WHERE⼦句,也没有指定GROUP BY⼦句,那么HAVING⼦句将应⽤于FROM⼦句的输出,并且将其看作是⼀个组。
连接查询
1、简单链接
(1)、基本形式
仅仅通过select⼦句和from⼦句连接多个表,查询结果是通过笛卡尔积⽣成的表。(两个表⾏数的乘积)
(2)、条件限定
笛卡尔积含有⼤量冗余数据,⼀般情况下毫⽆意义。为了避免这种情况的出现,添加过滤条件。
(3)、表的别名
表别名是在FROM⼦句中⽤于各表的间断名称,可以唯⼀的表⽰数据源。
{如果为表指定了别名,那么语句中的所有⼦句都必须使⽤别名,⽽不允许再使⽤实际的表名}
2、JOIN连接
1、内连接
内链节是常⽤的多表查询,⽤关键字 INNER JOIN 。可以省略 INNER。
使⽤内链接查询多个表时候,在FROM⼦句中除了JOIN关键字外,必须定义⼀个ON⼦句,⾃定内链接操作列出与条件匹配的数据⾏,使⽤⽐较运算符⽐较被链接值。
内链接就是使⽤JOIN关键字连接两个表,使⽤ON指定连接表的连接条件。记忆不限制查询范围,可以在后⾯添加where⼦句。
使⽤内连接仅仅包含符合查询条件和连接条件的⾏。
2、⾃然连接
其限制条件,连接的各个表之间必须具有相同名称的列。
3、外连结
外连接分为左外连接【LEFT OUTER JOIN 】右外连接【RIGHTOUTER JOIN 】全外连接【FULL OUTER JOIN】三种。
外连接不仅仅列出符合与连接条件相匹配的⾏,还列出所有符合搜索条件的数据⾏。
左外连接(显⽰左表)
右外连接(显⽰右表)
全链接(显⽰所有符合搜索条件的数据⾏)
3、集合操作(复合查询)
将两个或者多个SQL查询结果合并构成复合查询。集合操作主要由集合操作实现,包括UNION(并运算),UNION ALL,INTERSECT(交运算)
和MINUS(差运算)。
UNION
并运算符将多个查询结果集相加,形成⼀个结果集。将第⼀个查询中的所有⾏与第⼆个查询中的所有⾏相加,消除其中重复⾏形成⼀个集合。
UNION ALL
UNION ALL 操作符形成的结果集中包含有两个⾃结果集中重复的⾏。
INTERSECT
对两个结果集中的数据,取交集
MINUS
表⽰差集,返回从第⼀个查询中返回的,但是没有在第⼆个查询中返回的记录。
4、⼦查询
⼦查询和连接查询,都提供了使⽤单个查询访问多个表中数据的⽅法。⼦查询在其他查询的基础上,提供⼀种进⼀步有效的⽅式来表⽰WHERE⼦句中的条件。⼦查询是⼀个SELECT 语句,可以在SELECT,INSERT,UPDATE或DELETE语句中使⽤。也可以在HAVING⼦句中使⽤⼦查询。
1、IN关键字
使⽤IN关键可以将源表中特定列的值与⼦查询返回的结果集中的值进⾏⽐较,若某⾏的特定列的值存在,则在SELECT语句的查询结果中就包含这⼀⾏。
2、EXISTS关键字
只需要考虑是否满⾜判断条件,数据本⾝不重要,就使⽤EXISTS。
查询返回⼀个或着多⾏,为TRUE否则为FALSE。
3、⽐较运算符
确认⼦查询返回的结果中只包含⼀个单值,可以直接使⽤⽐较运算【=,<>|!=,<,>,<=,>=】
三、数据操纵语⾔DML(Data Manipulation Language)
SQL的数据操纵语⾔,⽤于改变数据库中的数据,包括插⼊,删除,修改。
1、插⼊
INSERT语句想数据表中插⼊数据,可以⼀次插⼊⼀条数据,也可以根据SELECT查询⼦句的结果集批量插⼊指定数据表。
1)⼀般的INSERT语句
INSERT INTO[user] table [@db_link] [(column)]

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。