首页 > 数据库 >MySQL高级语言(第一篇)

MySQL高级语言(第一篇)

时间:2024-11-07 19:19:57浏览次数:3  
标签:返回 第一篇 表名 高级 查询 date str MySQL 字符串

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 字段的约束

  1. 主键约束(Primary Key)

    • 主键约束用于唯一标识表中的每一行记录。
    • 主键字段的值不能为空,也不能重复。
  2. 唯一约束(Unique)

    • 唯一约束确保字段中的每个值都是唯一的。
    • 与主键约束不同的是,唯一约束的字段允许为空值(但空值在唯一约束中也被视为不同的值)。
  3. 非空约束(Not Null)

    • 非空约束要求字段在插入或更新记录时必须提供值。
    • 如果尝试插入空值,数据库将报错。
  4. 默认值约束(Default)

    • 默认值约束为字段指定了一个默认值。
    • 如果在插入记录时没有为该字段提供值,则使用默认值。
  5. 检查约束(Check)

    • 检查约束用于限制字段值可以接受的合法范围。
    • 例如,可以指定一个字段只能接受特定范围内的数值或特定格式的字符串。
  6. 自增约束(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之前 先了解一下我们常用的函数都有哪些

字符串函数
  1. 字符串连接函数

    • CONCAT(str1, str2, ...):将多个字符串连接成一个字符串。

    • CONCAT_WS(separator, str1, str2, ...):使用指定的分隔符将多个字符串连接成一个字符串。如果参数中有NULL值,则不会将其添加到结果中,除非分隔符本身是NULL。

  2. 字符串大小写转换函数

    • UPPER(str):将字符串转换为大写。

    • LOWER(str) 或 LCASE(str):将字符串转换为小写。

  3. 字符串提取函数

    • 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作为替代)。

  4. 字符串替换函数

    • REPLACE(str, from_str, to_str):将字符串中的子字符串from_str替换为to_str。

  5. 字符串查找函数

    • INSTR(str, substr) 或 LOCATE(substr, str[, start]):返回子字符串substr在字符串str中第一次出现的位置。如果指定了start参数,则从该位置开始搜索。

    • POSITION(substr IN str):返回子字符串substr在字符串str中第一次出现的位置(与LOCATEINSTR功能相似,但语法不同)。

    • FIND_IN_SET(str, strlist):返回字符串str在逗号分隔的字符串列表strlist中的位置。如果str不在strlist中,则返回0。

  6. 字符串长度函数

    • LENGTH(str):返回字符串的字节长度(对于多字节字符集,如UTF-8,一个字符可能占用多个字节)。

    • CHAR_LENGTH(str) 或 CHARACTER_LENGTH(str):返回字符串的字符长度(不考虑字符的编码,即一个字符占一个单位长度)。

  7. 字符串填充和截取函数

    • LPAD(str, len, padstr):在字符串str的左侧填充指定字符padstr,直到字符串的总长度达到len。

    • RPAD(str, len, padstr):在字符串str的右侧填充指定字符padstr,直到字符串的总长度达到len。

    • TRIM(str):去除字符串str两端的空格(或其他指定字符)。LTRIM(str)去除左侧的空格,RTRIM(str)去除右侧的空格。

  8. 字符串格式化函数

    • FORMAT(num, decimal_places):将数字num格式化为带有指定小数位数的字符串。

  9. 其他字符串函数

    • 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中的特殊字符进行转义,并添加单引号。

 时间函数
  1. CURDATE():返回当前日期,格式为'YYYY-MM-DD'。它只包含年、月、日部分。
  2. CURTIME():返回当前时间,格式为'HH:MM:SS'。它只包含时、分、秒部分。
  3. NOW():返回当前的日期和时间,格式为'YYYY-MM-DD HH:MM:SS'。它包含年、月、日、时、分、秒。
  4. UNIX_TIMESTAMP(date):将日期或日期时间值转换为UNIX时间戳。UNIX时间戳是从'1970-01-01 00:00:00' UTC开始的秒数。
  5. FROM_UNIXTIME(timestamp):将UNIX时间戳转换为日期时间格式。这个函数与UNIX_TIMESTAMP()函数互为反函数。
  6. YEAR(date):返回日期所在的年份。
  7. MONTH(date):返回日期对应的月份。
  8. DAY(date):返回日期对应的日(几号)。
  9. WEEK(date):返回给定日期是一年中的第几周。
  10. DAYOFYEAR(date):返回日期是一年中的第几天。
  11. DAYOFMONTH(date):返回日期位于所在月份的第几天。
  12. QUARTER(date):返回日期对应的季度。
  13. DATEDIFF(date1, date2):计算两个日期之间相差的天数。
  14. LAST_DAY(date):返回date所在月份的最后一天的日期。
  15. DATE_ADD(date, INTERVAL expr unit) 或 ADDDATE(date, INTERVAL expr unit):在指定日期上加上一个时间间隔,unit可以是SECOND、MINUTE、HOUR、DAY等。
  16. DATE_SUB(date, INTERVAL expr unit) 或 SUBDATE(date, INTERVAL expr unit):在指定日期上减去一个时间间隔,unit可以是SECOND、MINUTE、HOUR、DAY等。这个函数与DATE_ADD()或ADDDATE()函数的作用相反。
  17. DATE_FORMAT(date, format):根据指定的格式返回日期时间值。format参数指定了日期时间的格式,常用的格式包括'%Y'(年)、'%m'(月)、'%d'(日)、'%H'(小时)、'%i'(分钟)、'%s'(秒)等。
  18. 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短语的条件中。被嵌套的查询称为子查询或内层查询,而外部查询则称为父查询或外层查询。子查询的结果作为输入传递回父查询,父查询将这个值结合到计算中,以便确定最后的输出。

语法结构

子查询的语法结构可以根据所使用的比较运算符或谓词的不同而有所变化。以下是一些常见的子查询语法结构:

  1. 带有比较运算符的子查询:如 =><>=<=!= 等。
  2. 带有ANY(some)或ALL谓词的子查询:如 comparison [ANY | ALL | SOME] (sqlstatement)
  3. 带有谓词IN的子查询:如 expression [NOT] IN (sqlstatement)
  4. 带有EXISTS谓词的子查询:如 [NOT] EXISTS (sqlstatement)
子查询使用规则与注意事项
  1. 子查询必须括在圆括号中。
  2. 子查询的SELECT子句中通常只能有一个列,除非主查询中有多个列用于与子查询选中的列进行比较。
  3. 子查询不能直接使用ORDER BY子句,但可以使用GROUP BY子句来起到类似的作用。
  4. 返回多行数据的子查询只能与多值操作符一起使用,如IN操作符。
  5. 子查询不能直接用在集合函数中。
  6. BETWEEN操作符不能同子查询一起使用(但可以在子查询内部使用)。
  7. 原则上子查询嵌套不要超过三层,超过的话可以考虑使用临时表将子查询结果先保存,再和其他查询进行关联。

以下是简单的案例

SELECT 学号, 姓名, 系名   
FROM 学生表   
WHERE 系名 IN (SELECT 系名 FROM 学生表 WHERE 姓名='刘晨');

 在这个示例中,子查询 (SELECT 系名 FROM 学生表 WHERE 姓名='刘晨') 返回了“刘晨”所在的系名,然后主查询使用这个系名来查找与“刘晨”同一个系学习的学生。

综上所述,子查询是SQL语言中一种强大而灵活的工具,它可以帮助用户实现复杂的数据查询和操作。

标签:返回,第一篇,表名,高级,查询,date,str,MySQL,字符串
From: https://blog.csdn.net/2401_88512872/article/details/143499640

相关文章

  • 高级java每日一道面试题-2024年10月29日-JVM篇-简述分代垃圾回收器是怎么工作的?
    如果有遗漏,评论区告诉我进行补充面试官:简述分代垃圾回收器是怎么工作的?我回答:在Java高级面试中,分代垃圾回收器的工作原理是一个重要的考点。下面将详细解释分代垃圾回收器是如何工作的:分代垃圾回收器的基本概念分代垃圾回收器是一种基于对象生命周期的垃圾回收方......
  • 高级java每日一道面试题-2024年10月28日-RabbitMQ篇-RabbitMQ的使用场景有哪些?
    如果有遗漏,评论区告诉我进行补充面试官:RabbitMQ的使用场景有哪些?我回答:RabbitMQ是一个开源的消息代理和队列服务器,它遵循高级消息队列协议(AMQP)。RabbitMQ的核心作用是作为应用程序之间的中介,实现异步消息传递。它可以帮助解耦系统组件、提供消息的持久化、支持消息......
  • mysql常见的一些配置项
    MySQL有许多配置选项,可以用来调整其行为以满足特定的需求。以下是一些常见的配置选项,除了大小写敏感之外,这些配置选项也经常被调整:1.字符集和排序规则character_set_server:设置服务器的默认字符集。collation_server:设置服务器的默认排序规则。character_set_client......
  • Mysql数据库一
    CREATEDATABASE数据库名;//创建数据库SHOWdatabases;//查看数据库列表USE数据库名;//选择数据库DROPDATABASE数据库名://删除数据库   3.创建表        ......
  • 2025年上半年软考高级科目有哪些?附选科指南
    新手在准备报考软考时,都会遇到这样的一个问题——科目这么多,我适合考什么?2025上半年软考高级有哪些科目可以报考?要想知道自己适合报什么科目,就需要了解每个科目是什么,考什么等一系列的问题,接着往下看2025年上半年,预计将有以下科目开考:1、信息系统项目管理师:信息系统项目管......
  • 基于Centos7.X部署mysql8.4集群(主备)
    1、目标    将在主库的数据变更同步到从库,从而保证主库和从库的数据一致。2、原理    2.1主库会把数据变更记录在二进制日志文件Binlog中    2.2从库连接主库,读取binlog日志,并写入自身中继日志relaylog    2.3slave重做中继日志,将改变......
  • 揭秘MySQL事务的四大特性与隔离级别:从理论到实战,让你的数据操作无懈可击!
    MySQL事务的四大特性与隔离级别是数据库管理中非常重要的概念,它们确保了数据在并发操作下的一致性、完整性和可靠性。下面将详细介绍这四大特性及其隔离级别,并附上代码示例和详细解释。一、MySQL事务的四大特性原子性(Atomicity):定义:事务的所有操作要么全部完成,要么全部不完......
  • 高级 SQL 技巧详解
    文章目录高级SQL技巧详解一、引言二、窗口函数1、窗口函数的使用1.1、RANK()函数示例1.2、常用窗口函数三、公共表表达式(CTE)2、CTE的使用2.1、CTE示例四、索引优化3、索引的创建与优化3.1、创建索引3.2、索引类型与注意事项五、事务管理4、事务的基本操作4.1......
  • Mysql官网下载Windows、Linux各个版本
    下载软件官网地址:https://www.mysql.com/百度网盘分享的文件:Mysql链接:https://pan.baidu.com/s/1nT3oI-hXiQvZqdhi2Wv17g 提取码:8l4r 百度网盘只提供了Windows版本的,其他版本可以官网下载进入官网后,点击-看下图(说一万句不如一张图来得实在)往下滑屏幕,在点击在点击......
  • 在Debian12上安装mysql 8.0
    从deb安装默认是区分大小写的一、安装过程请参考:https://www.cnblogs.com/sunshine-sm/p/18030729设置为不区分大小写,请参考https://www.cnblogs.com/binli33/p/18531992二、常用命令mysql-uroot-papt-get--purgeautoremovemysql-serversystemctlstart......