1.SQL高级语言是什么?
SQL(Structured Query Language)本身是一种用于管理和操作关系数据库的标准编程语言,它并不是传统意义上的“高级语言”如C++、Java或Python等。然而,在数据库管理和开发的语境中,人们有时会提到“SQL高级语言”或“SQL的高级特性”,这通常指的是SQL中那些更为复杂、强大和高级的功能及语句。
需要注意的是,虽然这些特性被称为“高级”,但它们并不是SQL的必需部分。对于大多数基本的数据库操作,如数据插入、更新、删除和简单的查询,基础的SQL语句就已经足够了。然而,在处理更复杂的数据库需求时,了解和掌握这些高级特性将是非常有帮助的。
2.SQL高级语言概述
SQL高级语言包括数据定义、数据操纵和数据控制等多个方面的功能。其中,数据定义功能可用于定义SQL模式、基本表、视图和索引;数据操纵又可分成数据查询和数据更新两类,其中数据更新又分为插入、删除和修改三种操作;数据控制功能则包括对基本表和视图的授权,以及完整性规则的描述。
3.SQL高级语句及功能
3.1 数据定义语句
3.1.1 创建数据库
- CREATE DATABASE:创建一个新的数据库。
CREATE DATABASE 数据库名;
3.1.2 数据库中创建表
- CREATE TABLE:在数据库中创建一个新的表。
CREATE table 表名(
字段 字段属性
)
3.1.3 字段的约束
-
主键约束(Primary Key):
- 主键约束用于唯一标识表中的每一行记录。
- 主键字段的值不能为空,也不能重复。
-
唯一约束(Unique):
- 唯一约束确保字段中的每个值都是唯一的。
- 与主键约束不同的是,唯一约束的字段允许为空值(但空值在唯一约束中也被视为不同的值)。
-
非空约束(Not Null):
- 非空约束要求字段在插入或更新记录时必须提供值。
- 如果尝试插入空值,数据库将报错。
-
默认值约束(Default):
- 默认值约束为字段指定了一个默认值。
- 如果在插入记录时没有为该字段提供值,则使用默认值。
-
检查约束(Check):
- 检查约束用于限制字段值可以接受的合法范围。
- 例如,可以指定一个字段只能接受特定范围内的数值或特定格式的字符串。
-
自增约束(Auto Increment):
- 自增约束通常用于主键字段,使字段的值在每次插入新记录时自动递增。
- 这有助于生成唯一的标识符。
3.1.4 查看表
SHOW tables:查看数据库中存在的表。
SHOW 表名;
也可以使用 DESCRIBE或DESC来查看某张表
DESCRIBE 表名
或
DESC表名
3.1.5 删除
DROP:删除索引、表或数据库。
DROP TABLE [IF EXISTS]表名 -- 删除表
ALTER TABLE 表名 DROP 字段名 -- 删除字段
3.1.6 修改数据表的表名
RENAME:修改表名
ALTER TABLE 旧表名 RENAME 新表名
3.1.7 修改数据表的字段
CHANGE:修改数据表字段
ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型 [属性]
3.1.8 给数据表添加字段
ADD:添加字段
ALTER TABLE 表名 ADD 字段名 数据类型 [属性]
3.2 数据操纵语句
3.2.1 DML语句 (增、删、改)
INSERT INTO:向表中插入新的数据行。
INSERT INTO 表名 [(字段名列表)] VALUES(值列表)
UPDA SET:修改表中已有的数据行。
UPDATE 表名 SET 字段1=值1,字段2=值2,···,字段n=值n [WHERE 条件]
DELETE:从表中删除数据行。
DELETE FROM 表名 [WHERE 条件]
3.2.2 DQL语句 (查)
3.2.2.1函数
在了解DQL之前 先了解一下我们常用的函数都有哪些
字符串函数
-
字符串连接函数
-
CONCAT(str1, str2, ...)
:将多个字符串连接成一个字符串。 -
CONCAT_WS(separator, str1, str2, ...)
:使用指定的分隔符将多个字符串连接成一个字符串。如果参数中有NULL值,则不会将其添加到结果中,除非分隔符本身是NULL。
-
-
字符串大小写转换函数
-
UPPER(str)
:将字符串转换为大写。 -
LOWER(str)
或LCASE(str)
:将字符串转换为小写。
-
-
字符串提取函数
-
SUBSTRING(str, start, length)
或SUBSTR(str, start, length)
:从字符串中提取子字符串。start参数指定起始位置(从1开始),length参数指定要提取的字符数。如果省略length参数,则提取从start位置到字符串末尾的所有字符。 -
LEFT(str, length)
:返回字符串左侧指定长度的子字符串。 -
RIGHT(str, length)
:返回字符串右侧指定长度的子字符串。 -
MID(str, start, length)
:从字符串的指定位置开始提取指定长度的子字符串(某些MySQL版本中可能不支持此函数,可以使用SUBSTRING
作为替代)。
-
-
字符串替换函数
-
REPLACE(str, from_str, to_str)
:将字符串中的子字符串from_str替换为to_str。
-
-
字符串查找函数
-
INSTR(str, substr)
或LOCATE(substr, str[, start])
:返回子字符串substr在字符串str中第一次出现的位置。如果指定了start参数,则从该位置开始搜索。 -
POSITION(substr IN str)
:返回子字符串substr在字符串str中第一次出现的位置(与LOCATE
和INSTR
功能相似,但语法不同)。 -
FIND_IN_SET(str, strlist)
:返回字符串str在逗号分隔的字符串列表strlist中的位置。如果str不在strlist中,则返回0。
-
-
字符串长度函数
-
LENGTH(str)
:返回字符串的字节长度(对于多字节字符集,如UTF-8,一个字符可能占用多个字节)。 -
CHAR_LENGTH(str)
或CHARACTER_LENGTH(str)
:返回字符串的字符长度(不考虑字符的编码,即一个字符占一个单位长度)。
-
-
字符串填充和截取函数
-
LPAD(str, len, padstr)
:在字符串str的左侧填充指定字符padstr,直到字符串的总长度达到len。 -
RPAD(str, len, padstr)
:在字符串str的右侧填充指定字符padstr,直到字符串的总长度达到len。 -
TRIM(str)
:去除字符串str两端的空格(或其他指定字符)。LTRIM(str)
去除左侧的空格,RTRIM(str)
去除右侧的空格。
-
-
字符串格式化函数
-
FORMAT(num, decimal_places)
:将数字num格式化为带有指定小数位数的字符串。
-
-
其他字符串函数
-
ASCII(str)
:返回字符串str最左边字符的ASCII码值。 -
CHAR(ascii_code[, ...])
:根据给定的ASCII码值返回对应的字符。 -
BIN(num)
:将整数num转换为二进制字符串。 -
HEX(str)
:将字符串str转换为十六进制字符串。 -
OCT(num)
:将整数num转换为八进制字符串。 -
INSERT(str, pos, len, newstr)
:在字符串str的指定位置pos插入子字符串newstr,同时替换从该位置开始的len个字符。 -
QUOTE(str)
:用反斜杠和单引号将字符串str中的特殊字符进行转义,并添加单引号。
-
时间函数
- CURDATE():返回当前日期,格式为'YYYY-MM-DD'。它只包含年、月、日部分。
- CURTIME():返回当前时间,格式为'HH:MM:SS'。它只包含时、分、秒部分。
- NOW():返回当前的日期和时间,格式为'YYYY-MM-DD HH:MM:SS'。它包含年、月、日、时、分、秒。
- UNIX_TIMESTAMP(date):将日期或日期时间值转换为UNIX时间戳。UNIX时间戳是从'1970-01-01 00:00:00' UTC开始的秒数。
- FROM_UNIXTIME(timestamp):将UNIX时间戳转换为日期时间格式。这个函数与UNIX_TIMESTAMP()函数互为反函数。
- YEAR(date):返回日期所在的年份。
- MONTH(date):返回日期对应的月份。
- DAY(date):返回日期对应的日(几号)。
- WEEK(date):返回给定日期是一年中的第几周。
- DAYOFYEAR(date):返回日期是一年中的第几天。
- DAYOFMONTH(date):返回日期位于所在月份的第几天。
- QUARTER(date):返回日期对应的季度。
- DATEDIFF(date1, date2):计算两个日期之间相差的天数。
- LAST_DAY(date):返回date所在月份的最后一天的日期。
- DATE_ADD(date, INTERVAL expr unit) 或 ADDDATE(date, INTERVAL expr unit):在指定日期上加上一个时间间隔,unit可以是SECOND、MINUTE、HOUR、DAY等。
- DATE_SUB(date, INTERVAL expr unit) 或 SUBDATE(date, INTERVAL expr unit):在指定日期上减去一个时间间隔,unit可以是SECOND、MINUTE、HOUR、DAY等。这个函数与DATE_ADD()或ADDDATE()函数的作用相反。
- DATE_FORMAT(date, format):根据指定的格式返回日期时间值。format参数指定了日期时间的格式,常用的格式包括'%Y'(年)、'%m'(月)、'%d'(日)、'%H'(小时)、'%i'(分钟)、'%s'(秒)等。
- TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2):返回两个日期时间表达式之间的差异,结果以unit为单位。unit可以是SECOND、MINUTE、HOUR、DAY等。
聚合函数 (常用函数)
1.COUNT():返回某字段的行数
2.MAX():返回某字段的最大值
3.MIN():返回某字段的最小值
4.SUM():返回某字段的和
5.AVG():返回某字段的平均值
数学函数
CEIL(x):返回大于或等于数值x的最小整数
SELECT CELT(-2.1); -- 返回:-2
FLOOR(x):返回小于或等于数值x的最大整数
SELECT FLOOR(-2.1); -- 返回-3
EAND():返回0~1的随机数
SELECT RAND(); -- 返回:0.15013303621682242
3.2.2.2 分页查询
分页查询是数据库查询中的一种常见操作,特别是在处理大量数据时。通过分页查询,用户可以将数据分成多个页面进行浏览,从而提高用户体验和查询效率。
分页查询原理
分页查询的原理是将数据表中的所有数据分成多个页面来展示。例如,如果有100条记录,指定每页显示10条,那么将会分10页来展示这些记录。
LIMIT:常用来实现数据的分页查询
SELECT * FROM 表名 [LIMIT[位置偏移量,]行数];
3.2.2.3 子查询
子查询(Sub Query)或称内查询(Inner Query)、嵌套查询(Nested Query),是SELECT-SQL语言中一种常用的程序模块。当一个查询是另一个查询的条件时,就称之为子查询。
子查询概念
子查询本质上是一个完整的SELECT语句,它可以嵌套在另一个查询的WHERE子句或HAVING短语的条件中。被嵌套的查询称为子查询或内层查询,而外部查询则称为父查询或外层查询。子查询的结果作为输入传递回父查询,父查询将这个值结合到计算中,以便确定最后的输出。
语法结构
子查询的语法结构可以根据所使用的比较运算符或谓词的不同而有所变化。以下是一些常见的子查询语法结构:
- 带有比较运算符的子查询:如
=
、>
、<
、>=
、<=
、!=
等。 - 带有ANY(some)或ALL谓词的子查询:如
comparison [ANY | ALL | SOME] (sqlstatement)
。 - 带有谓词IN的子查询:如
expression [NOT] IN (sqlstatement)
。 - 带有EXISTS谓词的子查询:如
[NOT] EXISTS (sqlstatement)
。
子查询使用规则与注意事项
- 子查询必须括在圆括号中。
- 子查询的SELECT子句中通常只能有一个列,除非主查询中有多个列用于与子查询选中的列进行比较。
- 子查询不能直接使用ORDER BY子句,但可以使用GROUP BY子句来起到类似的作用。
- 返回多行数据的子查询只能与多值操作符一起使用,如IN操作符。
- 子查询不能直接用在集合函数中。
- BETWEEN操作符不能同子查询一起使用(但可以在子查询内部使用)。
- 原则上子查询嵌套不要超过三层,超过的话可以考虑使用临时表将子查询结果先保存,再和其他查询进行关联。
以下是简单的案例
SELECT 学号, 姓名, 系名
FROM 学生表
WHERE 系名 IN (SELECT 系名 FROM 学生表 WHERE 姓名='刘晨');
在这个示例中,子查询 (SELECT 系名 FROM 学生表 WHERE 姓名='刘晨')
返回了“刘晨”所在的系名,然后主查询使用这个系名来查找与“刘晨”同一个系学习的学生。
综上所述,子查询是SQL语言中一种强大而灵活的工具,它可以帮助用户实现复杂的数据查询和操作。
标签:返回,第一篇,表名,高级,查询,date,str,MySQL,字符串 From: https://blog.csdn.net/2401_88512872/article/details/143499640