第四章 SQL语法分类

第四章 SQL语法分类

文章目录

一、数据查询

1、简单查询

  • 日常查询中,最常用的是通过FROM子句实现的查询
  • 语法格式: ​ SELECT[,…] FROM table_reference[,…]
  • 使用方法:
  • SELECT关键字之后和FROM子句之前出现的表达式称为SELECT项。SELECT项用于指定要查询的列,FROM指定要从哪个表中查询。如果要查询所有列,可以在SELECT后面使用*号,如果只查询特定的列,可以直接在SELECT后面指定列名,列名之间用逗号隔开。
  • 示例:创建一个training表,并向表中插入三行数据后。查看training表的所有列
    第四章 SQL语法分类
  • SELECT后面使用*号查询training表中的所有列
    第四章 SQL语法分类

; 2、去除重复值

  • DISTINCT关键字
  • 从SELECT的结果集中删除所有重复的行,使结果集中的每一行都是唯一的。取值范围:已存在的字段名,或字段表达式。
  • 语法格式: ​ SELECT DISTINCT[,…] FROM table_reference[,…]
  • 如果在DISTINCT关键字后只有一个列,则使用该列来计算重复,如果有两列或者多列,则将使用这些列的组合来进行重复检查。
  • 示例:下表中是一个部门的员工信息,利用distinct关键字来查询员工的岗位和奖金,去除岗位和奖金相同的记录。

staff_idnamejobbonus30wangxindeveloper900031xufengtester700034dengguitester700035caomingdeveloper1000037lixuedeveloper9000

第四章 SQL语法分类

3、查询列的选择

  • 在选择查询列时,列名可以用下面几种形式表达:
  • 手动输入列名,多个列之间用英文逗号隔开(,)分隔。 SELECT a, b, f1, f2 FROM t1, t2;
    • 其中,列a、b是表t1中的列,f1、f2是表t2中的列。
  • 可以是计算出来的字段 SELECT a+b FROM t1;
  • 如果某两个或某几个表正好有一些共同的列名,推荐使用表名限定列名。不限定列名可以得到查询结果,但使用完全限定的表和列名称,可以减少数据库内部的处理工作量,从而提升查询的返回性能。例如: SELLECT t1.f1 t2.f2 from t1, t2;
  • 示例:查看training表中参与培训的员工编号及培训课程名。
    第四章 SQL语法分类
  • 示例:表名限定列名,查询学号sid为10的学生的数学成绩和英语成绩。 ​ 数学成绩表 mathsidscore109511871299 ​ 英语成绩表 englishsidscore108211871293

第四章 SQL语法分类

; 4、别名

  • 通过使用子句AS some_name,可以为表名称或列名称指定另一个标题名显示,一般创建别名是为了让列名称的可读性更强。
  • 语法格式
  • 列和表的SQL别名分别跟在相应的列名和表名后面,中间可以加或不加一个”AS”关键字。

5、条件查询

  • 在SELECT语句中,可以通过设置条件以达到更精确的查询。条件由表达式与操作符共同指定,且条件返回的值是TURE,FALSE或NULL。查询条件可以应用于WHERE句子,HAVING子句。
  • 语法格式:
  • condition 子句 select_statement{predicate}[{AND|OR}condition] [,…n]
  • predicate 子句
  • 查询条件由表达式和操作符共同定义。常用的条件定义方式如下:
  • 比较操作符”>,
  • 测试运算符指定的范围查询条件。如果希望返回的结果必须满足多个条件,可以使用AND逻辑操作符连接这些条件;如果希望返回的结果满足多个条件之一即可,可以使用OR逻辑操作符连接这些条件。
  • 示例:使用比较操作符来指定查询条件,例如查询学习课程SQL majorization的人员信息。
  • 逻辑操作符
  • 常用的逻辑操作符有AND、OR和NOT,他们的运算结果有三个值,分别为TURE、FALSE和NULL,其中NULL代表未知。他们运算的优先级顺序为:NOT>AND>OR。 ​ 运算规则表aba AND ba OR bNOT aTURETURETURETUREFALSETUREFALSEFALSETUREFALSETURENULLNULLTUREFALSEFALSEFALSEFALSEFALSETRUEFALSENULLFALSENULLTRUENULLNULLNULLNULLNULL
  • GaussDB(for MySQL)支持如下表的测试运算符:运算符描述IN/NOT IN元素在/不在指定的集合中EXISTS/NOT EXISTS存在/不存在符合条件的元素ANY/SOME存在一个满足条件。SOME是ANY的同义词ALL全部满足条件BETWEEN…AND…在两者之间,例如a BETWEEN x AND y等效于a>= x and a

6、join连接查询

  • 实际应用中所需要的数据,经常会需要查询两个或两个以上的表。这种查询两个或两个以上数据表或视图的查询叫做连接查询。连接查询通常建立在存在相互关系的父子表之间
  • 语法格式
  • 当查询的FROM子句中出现多个表时,数据库就会执行连接
  • 查询的SELECT列表可以是这些表中任意一些列。 SELECT table1.column,table2.column FROM table,table2;
  • 大多数连接查询包含至少一个连接条件,连接条件可以在FROM子句中,也可以在WHERE子句中。
  • 内连接:内连接的关键字为inner join,其中inner可以省略。使用内连接,连接执行顺序必然遵循语句中所写的表的顺序。
  • 示例:查询员工ID、最高学历和考试分数。使用training和education两个相关的例(staff_id)做查询操作。

7、子查询

  • WITH AS子句
  • 定义一个SQL片段,该SQL片段会被整个SQL语句用到。
  • 语法格式 ​ WITH {table_name AS select_statement1}[,…] select_statement2
  • table_name
    • 用户自定义的存储SQL片段的表名称
  • select_statement1
    • 从基本表中查询数据的SELECT语句
  • select_statement2
    • 从用户自定义的存储SQL片段的表中查询数据SELECT语句。
  • 子查询是指在查询、建表或插入语句的内部嵌入查询,以获得临时结果集。
  • 子查询可以分为相关子查询和非相关子查询
  • 子查询语法格式与普通查询相同
  • 使用方法
  • 子查询可以出现在FROM子句、WHERE子句、以及WITH AS子句中
  • FROM子句中的子查询也称为内联视图
  • WHERE子句中的子查询也称为嵌套子查询
  • 示例:

8、合并结果集

  • 除子查询外,还可以使用集合运算符处理多个查询的结果集,输出最终结果。
  • Union运算符:将多个查询块的结果集合并为一个结果集输出 select_statement UNION[ALL] select_subquery
  • 使用方法
  • 每个查询块的查询列数目必须相同。
  • 每个查询块对应的查询列必须为相同数据类型或同一数据类型组
  • 关键字ALL的意思是保持所有重复数据,而没有ALL的情况下表示删除所有重复数据
  • 图解

第四章 SQL语法分类

; 9、差异结果集

第四章 SQL语法分类

10、数据分组

  • 数据库查询中,分组是一个非常重要的应用。分组是指将数据表中的记录以某个或者某些列为标准,值相等的划分为一组。
  • 语法格式 ​ GROUP BY{ column_name } { ,…}
  • 使用方法
  • GROUP BY子句中的表达式可以包含FROM子句中表,视图的任何列,无论是这些列是否出现在SELECT列表中
  • GROUP BY子句对行进行分组,但不保证结果集的顺序。要对分组进行排序,请使用ORDER BY子句
  • GROUP BY后的表达式可以使用括号,如:group by(expr1, expr2),或者group by(expr1),(expr2)。但不支持group by(expr1, expr2),expr3 格式。

11、数据排序

  • ORDER BY子句
  • 使用ORDER BY子句对查询语句返回的行根据指定的列进行排序。如果没有ORDER BY子句,则多次执行的同一查询将不一定以相同的顺序进行行的检索。
  • 语法格式 ORDER BY{ column_name|number|expression} [ASC|DESC] [ ,…]
  • 使用方法
  • ORDER BY语句默认按照升序对记录进行排序。如果希望按照降序对记录进行排序,请使用DESC关键字。
  • ASC默认为NULLS FIRST即默认NULL值为最小,NULL值在最前,DESC默认为NULLS LAST。
  • 示例:

12、数据限制

  • 数据限制功能包括两个独立的子句,LIMIT子句和OFFSET子句。
  • LIMIT子句允许限制查询返回的行。可以指定偏移量,以及要返回的行数或行百分比。可以使用此子句实现top—N报表,要获得一致的结果,请指定ORDER BY子句以确保确定性排序顺序。 LIMIT {count|ALL}
  • OFFSET 子句设置开始返回的位置。 OFFSET start
  • 使用方法
  • start:指定在返回行之前要跳过的行数
  • count:指定要返回的最大行数
  • start和count都被指定时,在开始计算要返回的count行之前会跳过start行
  • LIMIT 5,20与LIMIT 20 OFFSET 5及OFFSET 5 LIMIT 20等效。
  • 示例:

二、数据操作

1、数据插入

  • 功能描述
  • 在表中插入新的数据
  • 注意事项
  • 只有拥有表INSERT权限的用户,才可以向表中插入数据
  • 如果使用RETURNING子句,用户必须要有该表的SELECT权限
  • 如果使用query子句插入来自查询里的数据行,用户还需要拥有在查询里使用的表的SELECT权限。
  • INSERT事务提交是默认开启的
  • 语法格式
  • INSERT语句有三种形式
  • 值插入,构造一行记录并插入到表中
  • 查询插入,通过SELECT子句返回的结果集构造一行或多行记录插入到表中
  • 先插入记录,如果报主键冲突错误则执行UPDATE操作,更新指定字段值
  • 示例:

2、数据修改

  • 功能描述
  • 更新表中行的值
  • 注意事项
  • UPDATE事务提交是默认开启的
  • 执行该语句的用户需要有表的UPDATE权限
  • *语法格式

3、数据删除

  • 功能描述
  • 从表中删除行
  • 注意事项
  • 执行该语句的用户需要有表的DELETE权限
  • DELETE事务提交是默认开启的
  • 语法格式*
    三、数据定义 **

1、数据库对象

  • 什么是数据库对象?
  • 数据库对象是数据库的组成部分,数据库对象主要包含:表,索引,视图,存储过程,缺省值,规则,触发器,用户,函数等。
  • 表是数据库中的一种特殊结构,用于存储数据对象以及对象之间的关系,由行和列组成的。
  • 索引
  • 索引是对数据库中一列或多列的值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息。
  • 视图
  • 视图是从一个或几个基本表中导出的虚表,可用于控制用户对数据的访问
  • 存储过程
  • 存储过程是一组为了完成特定功能的SQL语句的集合。一搬用于报表统计、数据迁移等
  • 缺省值
  • 缺省值是当前表中创建列或插入数据时,对没有指定其具体值的列或列数据项赋予事先设定好的值
  • 规则
  • 规则是对数据库表中数据的限制。它限定的是表的列
  • 触发器
  • 触发器是一种特殊类型的存储过程,通过指定的事件触发执行。一般用于数据审计、数据备份等
  • 函数
  • 函数是对一些业务逻辑的封装,以完成特定的功能。函数执行完成后会返回执行的结果

2、DDL分类

  • DDL(Data Definition Language数据定义语言),用于定义或修改数据库中的对象,主要分为三种类型语句:CREATE、ALTER和DROP。
  • CREATE用来创建数据库对象
  • ALTER用来修改数据库对象的属性
  • DROP则是用来删除数据库对象

3、定义表

  • 表是数据库中的一种特殊结构,用于存储数据对象以及对象之间的关系。所涉及的SQL语句如下表所示 ​ 表的SQL

功能相关SQL创建表CREATE TABLE修改表属性ALTER TABLE删除表DROP TABLE删除表中所有数据TRUNCATE TABLE

4、创建表

  • 语法格式:
  • 注意
  • 创建当前用户的表,用户需要被授予CREATE TABLE系统权限
  • 其中,表名、列名(数据类型)在创建表时必须指定
  • 参数说明
  • 创建临时表
  • 示例:

5、修改表属性

  • ALTER TABLE功能指通过更改、添加、删除列和约束来更改表的定义,功能包括:
  • 列的添加、删除、修改、重命名
  • 约束的添加、删除
  • 约束的启动和禁用
  • 修改分区的名称
  • 注意
  • 增加表中的列属性时,保证表中无记录
  • 修改表中的列属性时,保证表中数据类型不冲突,如有冲突需要将该列的值至NULL
  • 语法格式
  • 示例:
  • training表中添加列full_masks ALTER TABLE training ADD full_masks INT;
  • 删除course_period ALTER TABLE training DROP course_period;
  • 修改列的数据类型 ALTER TABLE training MODIFY course_name VARCHAR(60);
  • 添加约束

6、删除表

  • 注意
  • 用户需要DROP TABLE权限,普通用户不可以删除系统用户对象
  • 语法格式 DROP [TEMPORARY] TABLE [ IF EXISTS] [ database_name. ]table_name[RESTRICT|CASCADE]
  • 参数说明
  • CASCADE
  • RESTRICT
  • 此参数暂时无其他意义,为了移植语法。
  • 示例
  • 删除表Training DROP TABLE IF EXISTS training;
  • 删除临时表tmp_training DROP TABLE IF EXISTS tmp_training;

7、定义索引

  • 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可以可快速访问数据库表中的特定信息。所涉及的SQL语句,如下表所示 ​ 索引的SQL功能相关SQL创建索引CREATE INDEX修改索引属性ALTER INDEX删除索引DROP INDEX
  • 索引按照索引列数分为单列索引和多列索引,按照索引使用方法可以分为普通索引、唯一索引、函数索引、分区索引、全文索引。

8、创建索引

  • 功能描述
  • 在指定的表上创建一索引。索引可以用来提高数据库查询性能,但是不恰当的使用将导致性能下降
  • 注意
  • 执行该语句的用户需要有INDEX权限,普通用户不可以创建系统用户对象
  • 语法格式:

9、修改索引属性

  • 语法格式:
  • TLTER INDEX index_name{VISIBLE|INVISIBLE}
  • VISIBLE|INVISIBLE
  • 默认创建之后为可用状态。使用命令查看:show index from posts;
  • 索引状态至为可用和不可用的状态
  • RENAME INDEX old_name TO new_name
  • 对索引进行重命名
  • 示例:
  • 创建索引
  • 将索引状态置为可用
  • 重命名索引

10、删除索引

  • 语法格式
  • 参数说明
  • 待删除索引名
  • 删除索引时指定表明
  • 示例

11、定义视图

  • 视图是从一个或几个基本表中导出的需表,可用于控制用户对数据访问,所涉及的SQL语句,如下表所示。 ​ 视图的SQL功能相关SQL创建视图CREATE VIEW删除视图DROP VIEW
  • 视图与基本表不同,数据库中仅存视图的定义,而不存放视图所对应的数据,这些数据仍存放在原来的基本表中。若基本表中的数据发生变化,从视图中查询的数据也随之改变。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中用户感兴趣的数据及变化。

12、创建视图

  • 语法格式 CREATE[ OR REPLACE ] VIEW view_name AS subquery
  • 参数说明
  • [OR REPLACE]
    • 创建视图时,若视图存在则更新
  • view_name
    • 视图名
  • AS subquery
    • 子查询
  • 示例:

13、删除视图

  • 语法格式
  • DROP VIEW [ IF EXISTS ] view_name
  • 参数说明
  • IF EXISTS
    • 视图存在则执行删除
  • view_name
    • 待删除的视图名
  • 示例: DRPOP VIEW IF EXISTS training_view;

四、数据控制

1、事务控制

  • 事务是用户定义的一个数据库操作系列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
  • 事务控制提供了事务的启动、提交、两阶段提交准备、回滚、设置隔离级别操作,并支持在事务中创建保存点。 ​ 事务控制功能相关SQL提交事务COMMIT回滚事务ROLLBACK
  • GaussDB(for MySQL)没有提供显示定义事务开始的语句,第一个可执行SQL(除登录语句外)隐含事务的开始。

2、提交事务

  • 功能描述
  • 该语句使用当前事务工作单元中的所有操作”永久化”,并结束该事务
  • 语法格式 COMMIT;
  • 示例:

3、回滚事务

  • 功能描述
  • 该语句回滚(废除)当前事务工作单元中的所有操作,并结束该事务。
  • 语法格式: ROLLBACK[TO SAVEPOINT savepoint_name]
  • 示例:创建表posts,插入数据,回滚所有操作并结束事务。

4、事务保存点

  • 功能描述
  • SAVEPOINT语句用于在事务中设置保存点
  • 保存点提供了一种灵活的回滚,事务在执行中可以回滚到某个保存点。在该保存点以前的操作有效,而以后的操作被回滚掉。一个事务中可以设置多个保存点。
  • 语法格式: SAVEPOINT savepoint_name
  • 示例:回滚事务到保存点
  • 创建表bonus_2019
  • 向表bonus_2019中插入记录1
  • 设置保存点s1
  • 向bonus_2019中插入记录2
  • 设置保存点s2
  • 示例:

五、其他

1、SHOW命令

  • 功能描述
  • 该语句有许多形式,可以提供有关数据库、表、列和有关服务器状态等信息
  • 语法格式
  • 示例:显示实例下的数据库 SHOW DATABASSES;
  • 示例:显示数据库中的表
  • 创建表bonus_2019
  • 查看数据库中的表
  • 结果为:
  • 示例:查看bonus_2019表的建表语句 SHOW CREATE bonus_2019;
  • 结果为:

2、SET命令

  • 功能描述
  • 该语句使用户可以将值分配给不同的变量、服务器或客户端的操作
  • 语法格式
  • 示例
  • 将变量name值设置为43
  • 将全局参数max_connections设置为1000
  • 将当前会话的sql_mode值设置为TRADITIONAL(只影响当前会话)

Original: https://blog.csdn.net/weixin_51275821/article/details/122752652
Author: 刘学.
Title: 第四章 SQL语法分类

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/664364/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球