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 <表名>
目录
相关文章
|
Java Spring 容器
@Resource 这个注解什么用啊
@Resource 这个注解什么用啊
977 0
|
存储 Java 数据库连接
MyBatis-Plus 基础操作指南:实现高效的增删改查
MyBatis-Plus 基础操作指南:实现高效的增删改查
1016 0
|
SQL 关系型数据库 MySQL
菜鸟之路Day30一一MySQL之DML&DQL
本文介绍了MySQL中DML(数据操作语言)和DQL(数据查询语言)的核心用法。DML主要包括插入(insert)、更新(update)和删除(delete)语句,通过具体示例演示了如何对表数据进行增删改操作。DQL则聚焦于数据查询,涵盖基本查询、条件查询、聚合函数、分组查询、排序查询和分页查询等内容。文章通过丰富的SQL语句实例,帮助读者掌握如何高效查询和操作数据库中的数据,适合初学者学习和实践。
604 12
|
前端开发 Java
表白墙/留言墙 —— 初级SpringBoot项目,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
文章通过一个表白墙/留言墙的初级SpringBoot项目实例,详细讲解了如何进行前后端开发,包括定义前后端交互接口、创建SpringBoot项目、编写前端页面、后端代码逻辑及实体类封装的全过程。
604 3
表白墙/留言墙 —— 初级SpringBoot项目,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
10月前
|
安全 Java API
Java日期时间API:从Date到Java.time
本文深入解析了Java 8中引入的全新日期时间API,涵盖LocalDate、LocalTime、LocalDateTime、ZonedDateTime等核心类的使用,以及时间调整、格式化、时区处理和与旧API的互操作。通过实例对比,展示了新API在可变性、线程安全与易用性方面的显著优势,并提供迁移方案与实战技巧,助你掌握现代Java时间处理的最佳实践。
|
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;`实现代码复用,优化维护效率。
1212 5
|
JSON Java 程序员
菜鸟之路Day17一一IO流(三)
本文主要介绍了Java中的打印流、压缩/解压缩流以及Commons-io和Hutool工具包的使用。打印流包括字节打印流(PrintStream)和字符打印流(PrintWriter),支持数据原样写出、自动刷新与换行。压缩/解压缩流通过ZipInputStream和ZipOutputStream实现文件和文件夹的压缩与解压。Commons-io和Hutool工具包提供了高效的IO操作方法,简化了文件复制、删除等常见任务。文中还展示了System.out.println()作为打印流的应用示例。
338 2
|
存储 Java 程序员
菜鸟之路Day26一一Maven
本文由blue撰写,发布于2025年3月25日,主要介绍Maven工具的使用。Maven是Apache旗下的开源项目,用于管理和构建Java项目,基于项目对象模型(POM)概念。文章详细讲解了Maven的安装配置、IDEA中集成Maven的方法、依赖管理(包括依赖配置、传递与排除、依赖范围)、以及Maven的生命周期(clean、default、site)。通过学习,读者可掌握Maven的基本功能及其在项目中的应用。
609 12
|
Java 程序员
菜鸟之路Day22一一反射与动态代理
本文介绍了Java反射机制和动态代理的基本概念及应用。反射允许编程访问类的成员变量、构造方法和成员方法,通过三种方式获取Class对象,并演示了如何使用反射创建对象、调用方法和修改字段值。动态代理则通过接口实现无侵入式功能增强,展示了如何利用`Proxy`类和`InvocationHandler`接口生成代理对象并拦截方法调用。结合实例代码,详细讲解了反射在实际开发中的应用场景,如保存对象信息到文件和根据配置文件动态创建对象。 反射的主要作用包括: 1. 获取类的所有信息。 2. 结合配置文件动态创建对象。 动态代理的核心优势在于能够在不修改原有代码的情况下,为对象添加额外功能。
263 0
|
数据采集 监控 Java
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
本文是关于SpringBoot日志的详细教程,涵盖日志的定义、用途、SLF4J框架的使用、日志级别、持久化、文件分割及格式配置等内容。
1706 3
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......