SQL语句速成

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

SQL语句速成

作者:blue

时间:2024.7.19

[TOC]

1.建表

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

2.插入语句

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

INSERT INTO table_name
VALUES (value1,value2,value3,...);
AI 代码解读

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

INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
AI 代码解读

3.查询语句

SELECT <目标列名序列> -- 需要哪些列
    FROM <表名> [JOIN <表名> ON <连接条件>] -- 来自哪些表
    [WHERE <行选择条件>] -- 根据什么条件
    [GROUP BY <分组依据列>]
    [HAVING <组选择条件>]
    [ORDER BY <排列依据列>]
AI 代码解读
  • 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
AI 代码解读

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'
AI 代码解读

3.确定集合

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

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

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]'
AI 代码解读

5.涉及空值查询

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

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

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'
AI 代码解读

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
AI 代码解读

8.SQL常用聚合函数:

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

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

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

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

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

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

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

4.更新语句

UPDATE <表名> SET <字段名=> WHERE <筛选条件>;
AI 代码解读

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

update students set Sname='杨红梅' where Sid = 6;
AI 代码解读

5.删除语句

1.delete语句

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

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

2.drop语句

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

DROP TABLE table1_name, table2_name, ...;
AI 代码解读

6.视图创建

CREATE VIEW viewname [<属性列名>,<属性列名>,<属性列名>,……]
AS
SELECT语句
AI 代码解读

7.权限的授予与撤销

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

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

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

revoke语句

revoke <权限列表> on <数据库对象> from [RESTRICT|CASCADE]
AI 代码解读

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

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

8.alter

1:删除列

ALTER TABLE 表名 DROP COLUMN 列名
AI 代码解读

2:增加列

ALTER TABLE 表名 ADD COLUMN 列名 属性 【约束】
AI 代码解读

9.索引创建与删除

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

单独创建索引

create [clustered|nonclustered] index <索引名>
AI 代码解读

删除索引

drop index <索引名> on <表名>
AI 代码解读
目录
打赏
0
7
7
1
153
分享
相关文章
SQL语句
【8月更文挑战第23天】SQL语句
60 5
常用 SQL 语句汇总
常用 SQL 汇总 使用索引注意事项 使用like关键字时,前置%会导致索引失效。 使用null值会被自动从索引中排除,索引一般不会建立在有空值的列上。 使用or关键字时,or左右字段如果存在一个没有索引,有索引字段也会失效。
1951 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等