导图社区 SQL
SQL(结构化查询语言)的介绍,SQL是维护和使用关系数据库中的计算机语言;关系型数据库就是数据集合,保存了任意多个表。
编辑于2023-05-08 15:24:10 广东SQL
关系型数据库和SQL
概念
维护和使用关系数据库中的计算机语言
3个部分
数据操纵语言
检索、修改、增加、删除
数据定义语言
创建和修改数据库本身
数据控制语言
用于维护数据库的安全
数据类型
数字
位bit
0
1
整数integer
浮点数decimal
实数real number
字符
日期/时间
需要单引号
关系型数据库
就是数据集合,保存了任意多个表
基本数据检索
语法注释
每条语句的末尾都要加;
适合用MYSQL和Oracle
注释
使用双中划线--
适用于MYSQL,但需要紧接一个空格或者诸如制表符
由/*和*/组成
适用于MYSQL
#
指定列
select后面如果有多个列,要用逗号隔开,每一列要单独一行
带有空格的列名
在MYSQL,关键字用重音符`....`把带有空格的列明括起来
在Oracle,关键字用双引号“...”把带有空格的列明括起来,有区分大小写
SELECT
WHERE字句用来表示查询逻辑
GOUNP BY
HAVING子句用于为整个一组的数据指定选择逻辑
ORDER BY子句按照升序或降序来排序数据
出现在WHERE字句之后,having子句之前
计算字段和别名
字面值
算术运算
要在SQL使用幂运算,必须使用POWER函数
Oracle提供了一个求幂运算的数学运算符,(**)表示
连接字段+表示
MYSQL不用+表示,需要调用CONCAT进行连接
Oracle不用+表示,需要使用双竖线||进行连接
列的别名
使用关键字AS用来指定一个列的别名
表的别名
也使用关键字AS用来指定一个列的别名
Oracle不允许使用AS
使用函数
什么是函数
任意数目的输入值转换成一个输出值的一种规则
标量函数
只针对单个数字进行运算
聚合函数
较大的数据集合进行操作
字符函数
left
right
LTRIM
从字符表达式的左侧来“修剪”字符
RTRIM
删除字符右边的空格
UPDATE
把任意的单词或短语转换成大写
LOWER
把任意的单词或短语转换成小写
日期/时间函数
GETDATE
返回当前日期和时间
Oracle中,和GETDATE等价的函数是 CURRENT_DATE
DATEPART
分析任意的具体日期
MYSQL中,和DATEPART等价的函数是DATE_FORMAT
DATEDIFF
两个日期之间相差的天数
数值函数
ROUND
四舍五入
RAND
PI
近似于3.14的无理数
POWER
指定包含幂的一个数字
转换函数
CASE
排序顺序
ASC
升序
DESC
降序
查询条件
where
top
限制行
MYSQL使用关键字LIMIT而不是TOP
Oracle使用关键字ROWNUM而不是TOP
ROWNUM必须在where字句中指定如“where ROWNUM<=number
like
查找开头的条件用’LOVE%‘
查找结尾的条件用’%LOVE‘
查找不是开头又不是结尾的条件用’% LOVE % ‘
通配符
%
布尔逻辑:使用集合代数
AND
OR
NOT
BETWEEN
IN
IS NULL
条件逻辑
CASE
以有条件的方式来指定一个特定的情况或一套逻辑
WHEN
WHEN出现,必须要有一个对应的
THEN
面向过程编程语言所使用的一种通用的逻辑结构
ELSE
END
汇总数据
消除重复
DISTINCT
消除重复,跟在select之后
聚合函数
专门分组数据
COUNT
返回所有选中的行的数目
用()指定一个具体的列
()里允许使用DISTINCT
SUN
AVG
MIN
MAX
where只是选择条件的行,而having表示只选择某个具体的条件
排名函数
ROW_NUMBER
与函数相关联的表达式的特定顺序来创建行编号
RANK
与ROW_NUMBER相同,如果有两行或多行的相同的值,产生的排名是1、2、2、4
DENSE_RANK
与RANK相同,但不会跳过任何编号
NTILE
允许生成百分位数或任何其他分片函数
排名函数的格式如下:RANK....() OVER (ORDER BY......ASC/DESC)
分区
格式如下:RANK....() OVER (PAPTITION BY ......ORDER BY......ASC/DESC)
分类汇总和交叉表
ROLLUP
是group by的拓展,创建了分组汇总行和汇总行
等价形式
GROUP BY ROLLUP ()
GROUP BY...,....WITH ROLLUP
mysql不支持该函数
GROUPING
用来理清GROUP BY WITH 字句检索后所产生的每个分组汇总结果
CUBE
GROUP BY子句使用关键字为所有指定的组合生成分类汇总
MY SQL不支持cube
PIVOT
交叉表查询
对其后的数据元素做透视,后面跟着for
FOR
内连接
INSERT JOIN
用来指定想要在查询中包括进来的另外一个表
ON
指定两个表如何准确地连接
IN
内连接只会返回关联的两个表之间相匹配的数据
外连接
左连接
右连接
全连接
MYSQL不提供全连接
左连接和右连接的区别在于,连接中列出两个表的顺序不同,左连接主表在左边列出,从表在右边列出;右连接主表在右边列出,从表在左边列出;
自连接和视图
CREATE VIEW
ALTER VIEW
DROP VIEW
子查询
只是插入到SELECT语句中的另一条SQL语句
EXISTS
确定关联子查询中是否存在数据
WITH
公用表达式:一种替代的子查询语法允许在著查询执行之前把它显示地定义出来
优点是主查询容易理解
SQL不支持公用表达式
与试图类似,但试图是永久保存,子查询是不保存的
集合逻辑
UNION
需要遵循的3个原则
SELECT必须有相同数目的列
必须以相同的顺序排列
必须有相同或可兼容的数据类型
意义是可以把相关的信息放在同一行
UNION ALL
UNION和UNION ALL的区别:UNION排除了所有重复的行, ALL UNION要求包含所有的行,即便是重复的
INTERSECT
把两个集合中都能找到的数据集合起来
SQL不支持
EXCEPT
一个集合存在另一个集合不存在
SQL不支持
在Oracle中,EXCEPT运算符的等价运算符是MINUS
存储过程和参数
使用存储一般有2个原因
多条SQL语句保存到一个单独的过程中
把参数和SQL语句结合使用
CREATE PROCEDURE
SQL语句在关键字BEGIN和END之间列出
BEGIN
EXEC/CALL
执行存储过程
SQL使用关键字CALL来执行存储过程
ALTER
修改
PROCEDURE
DROP PROCEDURE
存储过程和参数的区别
存储过程可以有任意数目的输出参数
通过调用程序来执行存储过程
修改数据
INSERT INTO
与VALUES连用
VALUES
用作插入到表中的值的列表的前缀
DELETE
TRUNCATE TABLE
删除一个列中所有的数据
DELETE与TRUNCATE TABLE的区别:TRUNCATE TABLE设置了自增行的值,DELETE语句不会影响那些值
UPDATE
UPDATE只能指定修改单个表,需要相关的子查询的话,需要SET使用一个相关的子查询
SET