SQL笔记/常用语法

SQL语法教程

重要提醒:

  • sql对大小写不敏感
  • 有的数据库系统用分号(;)隔开各个语句,即每一个操作语句结束后要加上分号(;)。

SQL DML 和 DDL

可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。

SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。

查询更新指令构成了 SQL 的 数据操作语言 (DML) 部分:

  • SELECT - 从数据库表中获取数据
  • UPDATE - 更新数据库表中的数据
  • DELETE - 从数据库表中删除数据
  • INSERT INTO - 向数据库表中插入数据

SQL 的数据定义语言 (DDL) 部分使我们有能力创建删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

SQL 中最重要的 DDL 语句:

  • CREATE DATABASE - 创建新数据库
  • ALTER DATABASE - 修改数据库
  • CREATE TABLE - 创建新表
  • ALTER TABLE - 变更(改变)数据库表
  • DROP TABLE - 删除表
  • CREATE INDEX - 创建索引(搜索键)
  • DROP INDEX - 删除索引

1. SELECT

SELECT 语句用于从表中选取数据。结果被存储在一个结果表中(称为结果集)。

1.1 SELECT

# 获取一列
SELECT 列名称 FROM 表名称
# 获取多列
SELECT 列名称1,列名称2 FROM 表名称
# 获取所有列
SELECT * FROM 表名称

1.2 SELECT DISTINCT

关键词 DISTINCT 用于返回唯一不同的值。(相同的值仅出现一次)

# 获取 列名称1 中不同的值
SELECT DISTINCT 列名称1 FROM 表名称

2. SELECT + WHERE

有条件地从表中获取数据。

SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
SELECT 列名称 FROM 表名称 WHERE 列 其他特殊操作

运算符:

运算符描述
=等于
<>不等于。**注释:**在 SQL 的一些版本中,该操作符可被写成 !=
>大于
<小于
>=大于等于
<=小于等于
BETWEEN在某个范围内
LIKE搜索某种模式
IN指定针对某个列的多个可能值

例子

搜索 empno 等于 7900 的数据:

Select * from emp where empno=7900;

Where +条件(筛选行)

条件:列,比较运算符,值

比较运算符包涵:= > < >= ,<=, !=,<> 表示(不等于)

Select * from emp where ename='SMITH';

例子中的 SMITH 用单引号引起来,表示是字符串,字符串要区分大小写。

逻辑运算(and, or, not, ())

a. And :与 同时满足两个条件的值。
Select * from emp where sal > 2000 and sal < 3000;

查询 EMP 表中 SAL 列中大于 2000 小于 3000 的值。

b. Or:或 满足其中一个条件的值
Select * from emp where sal > 2000 or comm > 500;

查询 emp 表中 SAL 大于 2000 或 COMM 大于500的值。

c. Not:非 满足不包含该条件的值。
select * from emp where not sal > 1500;

查询EMP表中 sal 小于等于 1500 的值。

d. 逻辑运算的优先级:
()    not        and         or

特殊条件

a. 空值判断: is null
Select * from emp where comm is null;

查询 emp 表中 comm 列中的空值。

b. between and (在 之间的值)
Select * from emp where sal between 1500 and 3000;

查询 emp 表中 SAL 列中大于 1500 的小于 3000 的值。

注意:大于等于 1500 且小于等于 3000, 1500 为下限,3000 为上限,下限在前,上限在后,查询的范围包涵有上下限的值。

c. In
Select * from emp where sal in (5000,3000,1500);

查询 EMP 表 SAL 列中等于 5000,3000,1500 的值。

**d. like **和 通配符

Like模糊查询

Select * from emp where ename like 'M%';

查询 EMP 表中 Ename 列中有 M 的值,M 为要查询内容中的模糊信息。

  • % 表示多个字值,_ 下划线表示一个字符;
  • M% : 为能配符,正则表达式,表示的意思为模糊查询信息为 M 开头的。
  • %M% : 表示查询包含M的所有内容。
  • %M_ : 表示查询以M在倒数第二位的所有内容。
通配符描述
%替代一个或多个字符
_仅替代一个字符
[charlist]字符列中的任何单一字符
[^charlist]或者[!charlist]不在字符列中的任何单一字符

3. SELECT + ORDER BY

排序

  • ORDER BY 语句用于根据指定的列对结果集进行排序

  • ORDER BY 语句默认按照升序对记录进行排序。

  • 如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。

# 语法
SELECTFROMORDER BYDESC
# 例子
SELECT Company, OrderNumber FROM Orders ORDER BY Company
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC

多个排序条件:以逆字母顺序显示公司名称,并以数字顺序显示顺序号

SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC

4. INSERT INTO

插入新的一行:其中(值1, 值2,…)对应(列1, 列2,…)

INSERT INTO 表名称 VALUES (1,2,....)

也可以指定所要插入数据的列:剩下的没有指定的列新增的一行中为空

INSERT INTO table_name (1,2,...) VALUES (1,2,....)

5. UPDATE

用于修改表中的数据:

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

6. DELETE

用于删除表中的行:

DELETE FROM 表名称 WHERE 列名称 =

7. CREATE TABLE

创建表格:

CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)

数据类型(data_type)

数据类型规定了列可容纳何种数据类型。下面的表格包含了SQL中最常用的数据类型:

数据类型描述
integer(size)int(size)smallint(size)tinyint(size)仅容纳整数。在括号内规定数字的最大位数。
decimal(size,d)numeric(size,d)容纳带有小数的数字。“size” 规定数字的最大位数。“d” 规定小数点右侧的最大位数。
char(size)容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。在括号中规定字符串的长度。
varchar(size)容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。在括号中规定字符串的最大长度。
date(yyyymmdd)容纳日期。

9. SELECT + JOIN

用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

  • JOIN或INNER JOIN: 如果表中有至少一个匹配,则返回行
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行

a. INNER JOIN

如果表中有至少一个匹配,则返回行

SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2 
ON table_name1.column_name=table_name2.column_name;

b. LEFT JOIN

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。(右表中没有的显示为空)

c. RIGHT JOIN

即使左表中没有匹配,也从右表返回所有的行

d. FULL JOIN

只要几个表中其中一个表中存在匹配,就返回行

10. UNION 操作符

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。(合并行)

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

UNION 和 UNION ALL

UNION 命令只会选取不同的值,重复的值只选取一次。UNION ALL 会选取所有的值,不管是否重复。

10. GROUP BY

GROUP BY 语句用于结合合计函数(aggregate_function),根据一个或多个列对结果集进行分组。

语法如下:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

11. HAVING

在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。

HAVING 用于给GROUP BY 的合计函数增加限定条件。

语法如下:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value

12. 合计函数

在 SQL Server 中的合计函数

函数描述
AVG(column)返回某列的平均值
BINARY_CHECKSUM
CHECKSUM
CHECKSUM_AGG
COUNT(column)返回某列的行数(不包括NULL值)
COUNT(*)返回被选行数
COUNT(DISTINCT column)返回相异结果的数目
FIRST(column)返回在指定的域中第一个记录的值(SQLServer2000 不支持)
LAST(column)返回在指定的域中最后一个记录的值(SQLServer2000 不支持)
MAX(column)返回某列的最高值
MIN(column)返回某列的最低值
STDEV(column)
STDEVP(column)
SUM(column)返回某列的总和
VAR(column)
VARP(column)

总结-常用语句汇总

语句语法
AND / ORSELECT 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
BETWEENSELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2
CREATE DATABASECREATE DATABASE database_name
CREATE INDEXCREATE INDEX index_name ON table_name (column_name)
CREATE TABLECREATE TABLE table_name ( column_name1 data_type, column_name2 data_type, … )
CREATE UNIQUE INDEXCREATE UNIQUE INDEX index_name ON table_name (column_name)
CREATE VIEWCREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition
DELETE FROMDELETE FROM table_name (Note: Deletes the entire table!!)orDELETE FROM table_name WHERE condition
DROP DATABASEDROP DATABASE database_name
DROP INDEXDROP INDEX table_name.index_name
DROP TABLEDROP TABLE table_name
GROUP BYSELECT column_name1,SUM(column_name2) FROM table_name GROUP BY column_name1
HAVINGSELECT column_name1,SUM(column_name2) FROM table_name GROUP BY column_name1 HAVING SUM(column_name2) condition value
INSELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,…)
INSERT INTOINSERT INTO table_name VALUES (value1, value2,…)orINSERT INTO table_name (column_name1, column_name2,…) VALUES (value1, value2,…)
LIKESELECT column_name(s) FROM table_name WHERE column_name LIKE pattern
ORDER BYSELECT column_name(s) FROM table_name ORDER BY column_name [ASC|DESC]
SELECTSELECT column_name(s) FROM table_name
SELECT *SELECT * FROM table_name
SELECT DISTINCTSELECT DISTINCT column_name(s) FROM table_name
SELECT INTO (used to create backup copies of tables)SELECT * INTO new_table_name FROM original_table_nameorSELECT column_name(s) INTO new_table_name FROM original_table_name
TRUNCATE TABLE (deletes only the data inside the table)TRUNCATE TABLE table_name
UPDATEUPDATE table_name SET column_name=new_value [, column_name=new_value] WHERE column_name=some_value
WHERESELECT column_name(s) FROM table_name WHERE condition
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值