SQL语句速成

简介: 《SQL语句速成》由blue编写,涵盖建表、插入、查询、更新、删除、视图创建、权限管理及索引操作等核心内容。通过具体示例介绍SQL基本语法和常用聚合函数,帮助读者快速掌握SQL编程技巧。发布于2024年7月19日。

SQL语句速成

作者:blue

时间:2024.7.19

[TOC]

1.建表

CREATE TABLE table_name
(
    列名 列类型 PRIMARY KEY(主键)
    列名 列类型
    列名 列类型
    FOREIGN KEY (列名) REFERENCES 表名(列名) --这表示该列的是外键以及他的外键约束
)

2.插入语句

第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:

INSERT INTO table_name
VALUES (value1,value2,value3,...);

第二种形式需要指定列名及被插入的值:

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

3.查询语句

SELECT <目标列名序列> -- 需要哪些列
    FROM <表名> [JOIN <表名> ON <连接条件>] -- 来自哪些表
    [WHERE <行选择条件>] -- 根据什么条件
    [GROUP BY <分组依据列>]
    [HAVING <组选择条件>]
    [ORDER BY <排列依据列>]
  • SELECT 子句用于指定输出的字段
  • FROM 子句用于指定数据的来源
  • WHERE 子句用于指定数据的行选择条件
  • GROUP BY 子句用于对检索到的记录进行分组
  • HAVING 子句用于指定对分组后结果的选择条件
  • ORDER BY 子句用于对查询的结果进行排序

where子句的部分查询条件

查询条件 谓词
比较 =, >, >=, <=, <, <>, !=
确定范围 BETWEEN … AND …, NOT BETWEEN … AND…
确定集合 IN, NOT IN
字符匹配 LIKE, NOT LIKE
空值 IS NULL, IS NOT NULL
多重条件 AND, OR

1.比较大小

-- 查询计算机系所有学生的姓名
SELECT Sname FROM Student WHERE Sdept='计算机系'

-- 查询考试成绩大于90的学生的学号、课程号和成绩
SELECT Sno, Cno, Grade FROM SC WHERE Grade > 90

2.确定范围

注意:
BETWEEN ... AND ... :包括边界
NOT BETWEEN ... AND ... :不包括边界

-- 查询学分在2~3之间的课程的课程名称、学分和开课学期
SELECT Cname, Credit, Semester FROM Course WHERE Credit BETWEEN 2 AND 3

-- 等价于
SELECT Cname, Credit, Semester FROM Course 
WHERE Credit >= 2 AND Credit <=3

-- 查询学分不在2~3之间的课程的课程名称、学分和开课学期
SELECT Cname, Credit, Semester FROM Course 
WHERE Credit NOT BETWEEN 2 AND 3

-- 等价于
SELECT Cname, Credit, Semester FROM Course
WHERE Credit < 2 OR Credit > 3

-- 查询出生在1997年的学生的全部信息
SELECT * FROM Student
WHERE Sbirthday BETWEEN '1997-01-01' AND '1997-12-31'

3.确定集合

-- 查询‘计算机系’和‘机电系’学生的学号、姓名和所在系
SELECT Sno, Sname, Sdept FROM Student
WHERE Sdept IN ('计算机系', '机电系')

-- 查询不在‘计算机系’和‘机电系’学生的学号、姓名和所在系
SELECT Sno, Sname, Sdept FROM Student
WHERE Sdept NOT IN ('计算机系', '机电系')

4.字符串匹配

匹配串中有如下四种通配符:
_:匹配任意一个字符
%:匹配0到多个字符
[]:匹配[ ]中任意一个字符。如[abcd]表示匹配a, b, c, d中的一个。
    若要比较的字符是连续的,也可以用连字符'-'表达,比如匹配 abcd中任意一个
    可写成 [a-d]
[^ ]:不匹配[ ]中的任意一个字符,用法与[ ]一致,也可以用'-'表示连续字符

-- 查询姓‘李’的学生的学号、姓名和所在系
SELECT Sno, Sname, Sdept FROM Student
WHERE Sname LIKE '李%'

-- 查询姓名中第二个字是‘冲’的学生的学号、姓名和所在系
SELECT Sno, Sname, Sdept FROM Student
WHERE Sname LIKE '_冲%'

-- 查询学号最后不是‘2’或者‘3’的学生的学号、姓名和所在系
SELECT Sno, Sname, Sdept FROM Student
WHERE Sno NOT LIKE '%[23]'

5.涉及空值查询

-- 查询还没有考试的学生的学号、相应的课程号
SELECT Sno, Cno FROM SC
WHERE Grade IS NULL

-- 查询有备注的学生的学号、姓名和备注
SELECT Sno, Sname, Memo FROM Student
WHERE Memo IS NOT NULL

6.多重条件查询

-- 查询‘计算机系’有备注的学生的学好、姓名、所在系和备注
SELECT Sno, Sname, Sdept, Memo FROM Student
WHERE Memo IS NOT NULL AND Sdelt = '计算机系'

-- 查询 ‘机电系’和‘计算机系’1997年出生的学生的学号、姓名、所在系和生日
SELECT Sno, Sname, Sdept, Sbirthday FROM Student
WHERE (Sdept = '计算机系' OR Sdept = '机电系')
AND Sbirthday BETWEEN '1997-01-01' AND '1997-12-31'

7.对查询结果进行排序

/*
语法格式:
ORDER BY <列名> [ASC | DESC][, ...n]
ASC  表示升序
DESC 表示降序
默认ASC
*/

-- 将‘C01’号课程的成绩按升序排列
SELECT Cno, Grade FROM SC
WHERE Cno='C01' ORDER BY Grade

-- 将‘1001’号学生的成绩按降序排列
SELECT Cno, Grade FROM SC
WHERE Sno='1001' ORDER BY Grade DESC

8.SQL常用聚合函数:

COUNT():统计表中*元组的个数

COUNT([DISTINCT] <列名>):统计本列的列值个数,DISTINCT表示去掉重复值后再统计

SUM(<列名>):计算列值的和值(必须是数值类型)

AVG(<列名>):计算列值的平均值(必须是数值类型)

MAX(<列名>):得到列的最大值

MIN(<列名>):得到列的最小值

使用HAVING 子句。HAVING子句用于对分组后的统计结果再进行筛选,它的功能与WHERE类似,但它用于组而不是单个记录。在HAVING中能使用聚合函数,但在WHERE不能。

4.更新语句

UPDATE <表名> SET <字段名=> WHERE <筛选条件>;

例子:在学生表中,将学生编号Sid为6的学生姓名Sname修改为:杨红梅

update students set Sname='杨红梅' where Sid = 6;

5.删除语句

1.delete语句

DELETE FROM table_name
WHERE condition;
  • table_name:要删除的表名称。
  • condition:删除条件,用于指定哪些数据要删除。

WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!

2.drop语句

DROP TABLE删除一个或多个表。可以使用以下语法:

DROP TABLE table1_name, table2_name, ...;

6.视图创建

CREATE VIEW viewname [<属性列名>,<属性列名>,<属性列名>,……]
AS
SELECT语句

7.权限的授予与撤销

grant语句,用于向用户授予权限

grant <权限列表> on <数据库对象> to <用户列表> [with grant option]

[with grant option]表示被授予权限的用户具有转授权

revoke语句

revoke <权限列表> on <数据库对象> from [RESTRICT|CASCADE]

RESTRICT:限制级联收回,当用户没有将权限转授给其他用户的时候,才能收回用户的权限,否则系统拒绝执行该收权动作

CASCADE:把用户拥有数据对象的上的授权及其转授出去的授权同时收回

8.alter

1:删除列

ALTER TABLE 表名 DROP COLUMN 列名

2:增加列

ALTER TABLE 表名 ADD COLUMN 列名 属性 【约束】

9.索引创建与删除

在定义表的基本语句时,为表添加clustered(聚集索引)或nonclustered(非聚集索引)

单独创建索引

create [clustered|nonclustered] index <索引名>

删除索引

drop index <索引名> on <表名>
目录
相关文章
|
4月前
|
SQL XML Java
菜鸟之路Day35一一Mybatis之XML映射与动态SQL
本文介绍了MyBatis框架中XML映射与动态SQL的使用方法,作者通过实例详细解析了XML映射文件的配置规范,包括namespace、id和resultType的设置。文章还对比了注解与XML映射的优缺点,强调复杂SQL更适合XML方式。在动态SQL部分,重点讲解了`&lt;if&gt;`、`&lt;where&gt;`、`&lt;set&gt;`、`&lt;foreach&gt;`等标签的应用场景,如条件查询、动态更新和批量删除,并通过代码示例展示了其灵活性与实用性。最后,通过`&lt;sql&gt;`和`&lt;include&gt;`实现代码复用,优化维护效率。
344 5
|
XML 域名解析 JSON
【RESTful】RESTful API 接口设计规范 | 示例
【RESTful】RESTful API 接口设计规范 | 示例
12279 0
【RESTful】RESTful API 接口设计规范 | 示例
|
SQL 存储 关系型数据库
解析MySQL Binlog:从零开始的入门指南【binlog入门指南】
解析MySQL Binlog:从零开始的入门指南【binlog入门指南】
13148 0
|
7月前
|
人工智能 Java 测试技术
本地玩转 DeepSeek 和 Qwen 最新开源版本(入门+进阶)
本文将介绍如何基于开源工具部署大模型、构建测试应用、调用大模型能力的完整链路。
1493 130
|
8月前
|
消息中间件 人工智能 运维
1月更文特别场——寻找用云高手,分享云&AI实践
我们寻找你,用云高手,欢迎分享你的真知灼见!
3044 68
1月更文特别场——寻找用云高手,分享云&AI实践
|
自然语言处理 IDE 开发工具
通义灵码编程智能体上线,支持Qwen3模型
通义灵码最全使用指南,一键收藏。
128207 31
通义灵码编程智能体上线,支持Qwen3模型
|
分布式计算 资源调度 Hadoop
Hadoop【问题记录 02】【hadoop-3.1.3 单机版】ResourceManager无法启动NodeManager启动后过自动关闭 javax/activation/DataSource
【4月更文挑战第2天】Hadoop【问题记录 02】【hadoop-3.1.3 单机版】ResourceManager无法启动NodeManager启动后过自动关闭 javax/activation/DataSource
414 2
|
11月前
|
数据采集 移动开发 数据可视化
模型预测笔记(一):数据清洗分析及可视化、模型搭建、模型训练和预测代码一体化和对应结果展示(可作为baseline)
这篇文章介绍了数据清洗、分析、可视化、模型搭建、训练和预测的全过程,包括缺失值处理、异常值处理、特征选择、数据归一化等关键步骤,并展示了模型融合技术。
1410 1
模型预测笔记(一):数据清洗分析及可视化、模型搭建、模型训练和预测代码一体化和对应结果展示(可作为baseline)
|
9月前
|
网络协议 程序员
为什么TCP需要三次握手?一文讲透!
TCP三次握手是TCP协议建立连接的关键步骤,确保客户端和服务端同步状态并确认彼此的存在。过程分为三步:1) 客户端发送SYN包请求连接;2) 服务端回应SYN/ACK包确认收到并提供初始序列号;3) 客户端发送ACK包确认服务端的序列号,双方进入连接状态。此机制确保了双向通信的可靠性和资源的有效利用,避免了失效请求导致的问题。