文章目录
- DDL
- 建表
- 约束
- 已经建了表要添加约束
- 取消主键PRIMARY约束
- 外键 FOREIGN KEY
- 建表时加外键(表2必须已经创建,并且建表时列名已经定义)
- 已有表添加外键约束
- 删除外键约束
- DML
- SQL 常用数据类型汇总
- 搜索
- 搜索全部
- 搜索指定属性名的信息
- 搜索满足条件表达式的所有数据
- 搜索满足条件的唯一的指定属性
- 条件表达式WHERE
- AND 和 OR 运算符
- ORDER BY 语句用于根据指定的列对结果集进行排序
- 搜索满足条件的唯一的指定属性并按升序输出
- 搜索满足条件的唯一的指定属性并按降序输出
- 搜索满足条件的指定属性并按升序输出(如果有同名属性,同名的属性按第二属性升序输出)
- 搜索满足条件的指定属性并按降序输出(如果有同名属性,同名的属性按第二属性升序输出)
- GROUP BY
- HAVING
- INSERT插入
- 对表插入
- 对表的指定列插入
- UPDATE 修改
- 对表修改
- DELETE删除
- 删除行
- 删除所有行
- TOP
- 选取最上方指定条数
- limit有同样效果
- limit还可以选取范围(第m到第n条)
- 选取最上方百分之xx的数据
- LIKE 匹配搜索
- 通配符
- IN 规定多个值
- BETWEEN AND查找介于两个值之间的数据
- Alias/as 指定别名
- 列名指定别名
- 表名指定别名
- 多表联动查询
- 直接比对
- join操作
- JOIN类型
- UNION合并多个 SELECT 语句的结果集
- SELECT INTO 从一个表中选取数据,然后把数据插入另一个表中
- 有选择的备份
SQL 指结构化查询语言,全称是 Structured Query Language。
RDBMS 指的是关系型数据库管理系统。
SQL 对大小写不敏感!
SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。
DDL
DDL主要是对数据库和表的创建,修改,删除。
CREATE DATABASE - 创建新数据库
ALTER DATABASE - 修改数据库
CREATE TABLE - 创建新表
ALTER TABLE - 变更(改变)数据库表
DROP TABLE - 删除表
CREATE INDEX - 创建索引(搜索键)
DROP INDEX - 删除索引
建表
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)
数据类型 | 描述 |
---|---|
| 仅容纳整数。在括号内规定数字的最大位数。 |
| 容纳带有小数的数字。 "size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。 |
char(size) | 容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。 在括号中规定字符串的长度。 |
varchar(size) | 容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。 在括号中规定字符串的最大长度。 |
date(yyyymmdd) | 容纳日期。 |
约束
NOT NULL 不能为空
UNIQUE 唯一(不重复)
PRIMARY KEY 主键:包含唯一的值,不能为空,每个表都应该有一个主键,并且每个表只能有一个主键。
FOREIGN KEY
CHECK
DEFAULT
已经建了表要添加约束
ALTER TABLE 表名 ADD 约束名 (列名)
取消主键PRIMARY约束
ALTER TABLE 表名DROP PRIMARY KEY
外键 FOREIGN KEY
FOREIGN KEY 约束用于预防破坏表之间连接的动作。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
建表时加外键(表2必须已经创建,并且建表时列名已经定义)
FOREIGN KEY (列名) REFERENCES 表2(主键)
已有表添加外键约束
ALTER TABLE Orders
ADD FOREIGN KEY (当前建表的列名)
REFERENCES 表2(主键)
删除外键约束
ALTER TABLE 表名
DROP FOREIGN KEY fk_PerOrders
DML
SELECT - 从数据库表中获取数据
UPDATE - 更新数据库表中的数据
DELETE - 从数据库表中删除数据
INSERT INTO - 向数据库表中插入数据
SQL 常用数据类型汇总
字符串类:
CHAR(N),CHARACTER(n) 字符/字符串。固定长度 n。
VARCHAR(n),CHARACTER VARYING(n) 字符/字符串。可变长度。最大长度 n。
数字类:
BINARY(n) 二进制串,固定长度 n。
BOOLEAN 存储 TRUE 或 FALSE 值
VARBINARY(n) 或BINARY VARYING(n) 二进制串。可变长度。最大长度 n。
INT,INTEGER 长整数,4字节
SMALLINT 短整数,2字节
BIGINT 大整数,8字节
定点数:
NUMERIC(p,d) 定点数,有p为数字(不包含符号和小数点)组成,小数点后d位
DECIMAL(p,d),DEC(p,d) 同上
浮点数:
REAL 单精度浮点数,取决于机器精度
DOUBLR PRECISION 双精度浮点数
FLOAT (n) 可选精度的浮点数
日期:
DATE 存储年、月、日的值。YYYY-MM-DD
TIME 存储小时、分、秒的值。HH:MM:SS
TIMESTAMP 存储年、月、日、小时、分、秒的值。
INTERVAL 由一些整数字段组成,代表一段时间,取决于区间的类型。
集合:
ARRAY 元素的固定长度的有序集合
MULTISET 元素的可变长度的无序集合
XML 存储 XML 数据
以下是引用W3School 的 SQL 快速参考。
语句 | 语法 |
---|---|
AND / OR | SELECT column_name(s) FROM table_name WHERE condition AND|OR condition |
ALTER TABLE (add column) | ALTER TABLE table_name ADD column_name datatype |
ALTER TABLE (drop column) | ALTER TABLE table_name DROP COLUMN column_name |
AS (alias for column) | SELECT column_name AS column_alias FROM table_name |
AS (alias for table) | SELECT column_name FROM table_name AS table_alias |
BETWEEN | SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2 |
CREATE DATABASE | CREATE DATABASE database_name |
CREATE INDEX | CREATE INDEX index_name ON table_name (column_name) |
CREATE TABLE | CREATE TABLE table_name ( column_name1 data_type, column_name2 data_type, ....... ) |
CREATE UNIQUE INDEX | CREATE UNIQUE INDEX index_name ON table_name (column_name) |
CREATE VIEW | CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition |
DELETE FROM | DELETE FROM table_name (Note: Deletes the entire table!!) or DELETE FROM table_name |
DROP DATABASE | DROP DATABASE database_name |
DROP INDEX | DROP INDEX table_name.index_name |
DROP TABLE | DROP TABLE table_name |
GROUP BY | SELECT column_name1,SUM(column_name2) FROM table_name GROUP BY column_name1 |
HAVING | SELECT column_name1,SUM(column_name2) FROM table_name GROUP BY column_name1 HAVING SUM(column_name2) condition value |
IN | SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,..) |
INSERT INTO | INSERT INTO table_name VALUES (value1, value2,....) or INSERT INTO table_name |
LIKE | SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern |
ORDER BY | SELECT column_name(s) FROM table_name ORDER BY column_name [ASC|DESC] |
SELECT | SELECT column_name(s) FROM table_name |
SELECT * | SELECT * FROM table_name |
SELECT DISTINCT | SELECT DISTINCT column_name(s) FROM table_name |
SELECT INTO (used to create backup copies of tables) | SELECT * INTO new_table_name FROM original_table_name or SELECT column_name(s) |
TRUNCATE TABLE (deletes only the data inside the table) | TRUNCATE TABLE table_name |
UPDATE | UPDATE table_name SET column_name=new_value [, column_name=new_value] WHERE column_name=some_value |
WHERE | SELECT column_name(s) FROM table_name WHERE condition |
搜索
如果绑定了指定数据库,可以直接用表名称。
如果有多个数据库情况下,应该用数据库名.表名称
,如学生课程管理系统.学生信息
,学生课程管理系统是数据库名,学生信息是表名称。
搜索全部
select * from 表名称
搜索指定属性名的信息
select 属性名(列名称) from 表名称
搜索满足条件表达式的所有数据
select * from 表名称 where 条件表达式
搜索满足条件的唯一的指定属性
select DISTINCT 属性名(列名称) from 表名称 where 条件表达式
条件表达式WHERE
操作符 | 描述 |
---|---|
= | 等于 |
<> | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值不用引号。
AND 和 OR 运算符
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
用AND连接的条件表达式须全部满足才会输出,OR连接的表达式任意一个满足都会有输出。
用AND连接相当于多个条件合成一个条件,要么满足输出,要么不满足输出空。
用OR连接相当于多条指令执行后把各条语句的结果合并起来。
ORDER BY 语句用于根据指定的列对结果集进行排序
ORDER BY 语句默认按照升序ASC对记录进行排序,ASC一般不写,语句中同时出现升序和降序要求升序写ASC,降序写DESC。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
搜索满足条件的唯一的指定属性并按升序输出
select DISTINCT 属性名(列名称) from 表名称 where 条件表达式 ORDER BY 属性名(列名称)
搜索满足条件的唯一的指定属性并按降序输出
select DISTINCT 属性名(列名称) from 表名称 where 条件表达式 ORDER BY 属性名(列名称) DESC
搜索满足条件的指定属性并按升序输出(如果有同名属性,同名的属性按第二属性升序输出)
select 属性名(列名称) from 表名称 where 条件表达式 ORDER BY 属性名1(列名称1),属性名2(列名称2)
搜索满足条件的指定属性并按降序输出(如果有同名属性,同名的属性按第二属性升序输出)
select 属性名(列名称) from 表名称 where 条件表达式 ORDER BY 属性名1(列名称1)DESC,属性名2(列名称2)ASC
GROUP BY
有些情况下比如订单表中要统计消费最多的用户和他的总花费金额。
当我们使用SUM()时必须按照名字进行分组,不然就会出现把订单金额全加起来,而且每人都是金额总和的情况。
GROUP BY可以按照给定的列名分组进行聚合操作
GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。
SELECT 列名, 聚合函数(列名)
FROM 表名
WHERE 条件表达式
GROUP BY 列名
HAVING
聚合函数不能在where中使用,所以增加了having
GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。
SELECT 列名, 聚合函数(列名)
FROM 表名
WHERE 条件表达式
GROUP BY 列名
HAVING 聚合函数(列名) 操作符 值
INSERT插入
对表插入
INSERT INTO 表名称 VALUES (值1, 值2,....)
对表的指定列插入
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
UPDATE 修改
对表修改
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
DELETE删除
删除行
DELETE FROM 表名称 WHERE 列名称 = 值
删除所有行
DELETE FROM 表名称
或
DELETE * FROM 表名称
TOP
选取最上方指定条数
SELECT TOP 条数 * FROM 表名
limit有同样效果
SELECT * FROM 表名 LIMIT 条数
limit还可以选取范围(第m到第n条)
SELECT * FROM 表名 LIMIT 条数m,条数n
选取最上方百分之xx的数据
SELECT TOP xx PERCENT * FROM 表名
LIKE 匹配搜索
SELECT 列名
FROM 表明
WHERE 列名 LIKE xxx
'A%' A开头的值
'%A' A结尾的值
'%A%' 包含A的值
NOT LIKE 'A%' 不包含A的值
'_ABC' 第一个字符后是ABC的值
'A_B_C' 第一个字符是A,第三个字符是B,第五个字符是C的值
'[ABC]%' 第一个字符是ABC中任意一个(且只有一个)的值,如A你,B我,C他
通配符
通配符 | 描述 |
---|---|
% | 代表零个或多个字符 |
_ | 仅替代一个字符 |
[charlist] | 字符列中的任何单一字符(有且只有其中的一个) |
[^charlist] 或者 [!charlist] | 不在字符列中的任何单一字符 |
IN 规定多个值
SELECT 列名
FROM 表名
WHERE 列名 IN (value1,value2,...)
BETWEEN AND查找介于两个值之间的数据
SELECT 列名
FROM 表名
WHERE 列名 BETWEEN A AND B
Alias/as 指定别名
列名指定别名
SELECT 列名 as 别名
FROM 表名
WHERE 列名 BETWEEN A AND B
表名指定别名
SELECT 列名
FROM 表名 as 别名
WHERE 列名 BETWEEN A AND B
多表联动查询
直接比对
SELECT 表1.列名 ,表2.列名
FROM 表1,表2
WHERE 表1.列a = 表2.列b
join操作
SELECT 表1.列名 ,表2.列名
FROM 表1 INNER JOIN 表2
ON 表1.列a = 表2.列b
JOIN类型
INNER JOIN(内连接):在表中存在至少一个匹配时,返回行。
JOIN: 如果表中有至少一个匹配,则返回行
INNER JOIN 与 JOIN 是相同的。
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
从左表返回所有的行的意思是在匹配完正确的结果后,如果左表中还有一些没有匹配的数据,也会将这些数据输出。
比如要选择左表.姓,左表.名,右表.性别
如果条件语句没有配置成功,左表中剩下的那些依旧要输出(会按序输出在正确结果的下方),并且性别为空(因为没有匹配成功,性别是右表的属性)
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
从右表返回所有的行和LEFT JOIN相反
FULL JOIN: 只要其中一个表中存在匹配,就返回行
FULL JOIN就是在正确的结果基础上,把左表和右表( LEFT JOIN和RIGHT JOIN的结果都放在正确结果下方)
UNION合并多个 SELECT 语句的结果集
UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SELECT 列1 FROM 表1
UNION
SELECT 列2 FROM 表2
UNION 操作符选取不同的值,即默认具有DISTINCT的效果。UNION ALL允许重复。
SELECT INTO 从一个表中选取数据,然后把数据插入另一个表中
SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。
SELECT *
INTO 表的备份
FROM 原始表
有选择的备份
SELECT 列名
INTO 备份表
FROM 表
WHERE 条件表达式
更多推荐
SQL语句快速回忆——SQL基础知识点汇总
发布评论