SQL语法基础

2023-11-13

结构化查询语言(Structured Query Language):是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

数据查询语言(DQL):SELECT(查询)

数据操作语言(DML):INSERT(插入)、UPDATE(修改)、DELETE(删除)

一、常见的MySql的数据类型:

文本:varchar、text、longtext

数字:int、tinyint、bigint、float、double

日期:date(2021-07-15)、datetime(2021-11-03 15:31:05)

二、SQL常见语法


1、训练数据集,共四个表文件Course、Student、Score、Teacher

 

2、INSERT语法:在表文件中插入数据

INSERT INTO 表名称 VALUES(值1,值2,……);

INSERT INTO 表名称(列1,列2,……)

VALUES(值1,值2,……),(值1,值2,……),……;

注:关键字之间要有空格,如果不是多条语句同时执行,语句后的分号(;)可以省略

3、DELETE语法:删除表文件中部分数据

DELETE FROM 表名称

(WHERE 列名称 = 值)

4、UPDATE语法:修改表文件中数据

UPDATE 表名称

SET 列名称1 = 新值,

           列名称2 = 新值,

           ……

WHERE 列名称 = 某值

5、SELECT语法:查询语句

整体语法:SELECT 列名称1 AS 列1,

                       列名称2 AS 列2,

                       ……

FROM 表名称

(WHERE 列名称 = 某值

ORDER BY 列名称 ASC/DESC

LIMIT 数字1,数字2 )

示例:

SELECT s_id AS '学号',

                 s_name,

                 s_birthday,

                 s_sex

FROM student

WHERE s_id < 5

6、WHERE条件

(1)AND 和 OR

AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。

如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。

如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

示例:

查询生日为1993年3月5日的男学生的信息:

SELECT s_id,s_name,s_birthday,s_sex

FROM student

WHERE s_sex = '男' AND s_birthday = '1993-03-05’

查询生日为1993年3月5日或者性别为男的学生的信息:

SELECT s_id,s_name,s_birthday,s_sex

FROM student

WHERE s_sex = '男' OR s_birthday = '1993-03-05'

 

(2)LIKE(模糊查询)

通配符:

% :替代 0 个或多个字符

_ :替代一个字符

示例:

查询姓李的学生的信息:

SELECT s_id,s_name,s_birthday,s_sex

FROM student

WHERE s_name LIKE '李%'

查询生日为1993年3月5日且姓李的学生的信息:

SELECT s_id,s_name,s_birthday,s_sex

FROM student

WHERE s_name LIKE '李%' AND s_birthday = '1993-03-05’

查询姓名为两个字且姓为王的学生的信息:

SELECT s_id,s_name,s_birthday,s_sex

FROM student

WHERE s_name LIKE ‘王_’

(3)BETWEEN …… AND ……

BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值或者日期。

示例:

查询s_id在3到6之间的学生的信息:

SELECT s_id,s_name,s_birthday,s_sex

FROM student

WHERE s_id BETWEEN 3 AND 6( 包含3和6)

 

查询生日在1993年1月1日到1993年12月31日之间的学生信息:

SELECT s_id,s_name,s_birthday,s_sex

FROM student

WHERE s_birthday BETWEEN '1993-01-01' AND '1993-12-31'

 

(4)<,>,<>,>=,<=

< 小于

> 大于

<>(!=) 不等于

>= 大于等于

<= 小于等于

查询s_id在3到6之间的学生的信息:

SELECT s_id,s_name,s_birthday,s_sex

FROM student

WHERE s_id >=3 AND s_id <=6

(5)IN

查询s_id在3到6之间的学生的信息:

SELECT s_id,s_name,s_birthday,s_sex

FROM student

WHERE s_id IN (3,4,5,6)

综上,查询s_id在3到6之间的学生信息共列举了三种取值条件,输出结果均相同。

7、多表查询—LEFT JOIN…… ON…… 和 RIGHT JOIN…… ON ……

LEFT JOIN:从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行

RIGHT JOIN:与LEFT JOIN 相反,会从右表 (table_name2) 那里返回所有的行,

即使在左表 (table_name1) 中没有匹配的行。

示例1:同时查询score及student两个表的数据,保留score全部行

(1)SELECT student.s_id,student.s_name,score.c_id,score.s_score

FROM score

LEFT JOIN student

ON score.s_id = student.s_id

(2)SELECT student.s_id,student.s_name,score.c_id,score.s_score

FROM student

RIGHT JOIN score

ON score.s_id = student.s_id

示例2:查询c_id为1的学生的成绩和科目名称

SELECT b.s_id,b.s_name,a.c_name,b.s_score

FROM course a RIGHT JOIN (

SELECT student.s_id,student.s_name,score.c_id,score.s_score

FROM score

LEFT JOIN student

ON score.s_id = student.s_id WHERE c_id = 1) b

ON a.c_id = b.c_id

8、ORDER BY—排序

根据某一列的信息进行正序或倒序排序默认

ASC:从小到大排序(升序排列),一般可以省略

DESC:从大到小排序(降序排列)

示例:按照生日正序排序:

SELECT *

FROM student

ORDER BY s_birthday (ASC)

 

按照生日倒序排序:

SELECT *

FROM student

ORDER BY s_birthday DESC

9、LIMIT—分页

LIMIT num1,num2:

从num1开始,num1最小为0,查询num2条数据

如果从头开始,第一个数字可以省略

示例:按照生日正序排序查询前三人的信息:

SELECT * FROM student ORDER BY s_birthday  LIMIT 3

SELECT * FROM student ORDER BY s_birthday  LIMIT 0,3

按照生日倒序排序取第三个人到第五个人的信息:

SELECT *

FROM student

ORDER BY s_birthday DESC LIMIT 2,3

10、常用数学函数

COUNT():求数量

SUM():求和

AVG():求平均值

MAX():求最大值

MIN():求最小值

示例:求参加课程号为2的学生数量:

SELECT COUNT(*)

FROM score

WHERE c_id =2

 

求课程号为2的成绩总分:

SELECT SUM(s_score)

FROM score

WHERE c_id =2

 

求课程号为2的平均分:

SELECT AVG(s_score)

FROM score

WHERE c_id =2

 

求课程号为2的最高分:

SELECT MAX(s_score)

FROM score

WHERE c_id =2

 

求课程号为2的最低分:

SELECT MIN(s_score)

FROM score

WHERE c_id =2

 

GROUP BY:结合聚合函数,根据一个或多个列对结果集进行分组

HAVING:HAVING 子句可以让我们筛选分组后的各组数据

SELECT 列名称1 AS 列1,

          列名称2 AS 列2,

          ……

FROM 表名称

(WHERE 列名称 = 某值)

GROUP BY 列名称1

HAVING 条件

示例:获取每个科目的平均分:

SELECT c_id,AVG(s_score)

FROM score

GROUP BY c_id

获取平均分在66分以上的科目ID和平均分:

SELECT c_id,AVG(s_score)

FROM score

GROUP BY c_id

HAVING AVG(s_score)>66

 

11、常用日期函数

NOW():当前日期和时间

CURDATE():当前日期

CURTIME():当前时间

DATE_FORMAT(date,format):时间格式化

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s')

 SELECT DATE_FORMAT(NOW(), ‘%Y/%m/%d %H:%i:%s')


SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日 %H:%i:%s')

 

三、注意事项

1、关键字不区分大小写,包括SELECT等价于select,LIKE等价于like,COUNT()等价于count()

2、所有的符号都是英文符号,包括不限于:, ( ) ; % ! ‘ “

3、文本和日期类型的数据,前后需要加单引号,比如 …… WHERE s_sex = ‘男’

4、别名:字段取别名时可以加AS或者不加,以空格间隔,表名取别名时只能以空格间隔

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL语法基础 的相关文章

  • 合并并添加两个表中的值

    是否可以制作一个在两个表中添加值的查询 例如 假设您有两张表 id value a 1 c 2 d 3 f 4 g 5 and id value a 1 b 2 c 3 d 4 e 5 然后 当您 添加 两个表时 您将获得 id 匹配的结果
  • 如何在审计触发器中使用system_user但仍使用连接池?

    我想做以下两件事 在我的数据库表上使用审计触发器来识别哪个用户更新了什么 使用连接池来提高性能 对于 1 我在数据库触发器中使用 system user 来识别进行更改的用户 但这阻止我执行需要通用连接字符串的 2 有没有一种方法可以让我充
  • mod_rewrite, .htaccess 连接mysql数据库

    我希望 htaccess 文件中的 mod rewrite 链接到 mysql 数据库以向我提供映射信息 具体来说 我使用单个代码库来托管多个站点 因此 如果用户请求图像 例如 http www example com images car
  • Android 中读取未提交的事务

    我正在进行大量数据库操作 这会向我的数据库添加大约 10 000 条记录 由于这可能需要很长时间 因此最好使用事务 db startTransaction do write operations db setTransactionSucce
  • 性能:cakephp-mysql 中的 UUID 与自动递增

    我正在搜索 cakePHP 生成的 UUID 32 个字符长 是否比自动增量在性能上更快 插入和选择操作的比较 我应该使用 cakePHP 生成的 UUID 还是使用 MySQL 的简单自动增量生成的 UUID 这是我发现的一个案例研究 但
  • 连接两个表而不返回不需要的行

    我的表结构如下所示 tbl users tbl issues userid real name issueid assignedid creatorid 1 test 1 1 1 1 2 test 2 2 1
  • 在实体框架 6 中使用 SqlQuery>

    我正在尝试在 EF 6 中执行 SQL 查询 select查询返回两个字符串列 例如select a b 并且可以有任意数量的行 我想将结果映射到字典 但我无法摆脱以下错误 错误 1 无法将类型 System Data Entity Inf
  • MySQL 5:我的 GROUP BY 字段的顺序重要吗?

    Peeps 我的 MySQL 查询中有一些聚合 计算字段 我的 GROUP BY 子句是动态生成的 具体取决于用户在 Web 表单中选择的选项 很好奇 GROUP BY 子句中列出的字段顺序是否会对计算产生任何影响 例如 SUM AVERA
  • 不能简单地使用 PostgreSQL 表名(“关系不存在”)

    我正在尝试运行以下 PHP 脚本来执行简单的数据库查询 db host localhost db name showfinder username user password password dbconn pg connect host
  • 什么是动态 SQL 查询?何时需要使用动态 SQL 查询?

    什么是动态 SQL 查询 何时需要使用动态 SQL 查询 我正在使用 SQL Server 2005 这里有几篇文章 动态SQL简介 http www sqlteam com article introduction to dynamic
  • MySQL通过UPDATE/DELETE合并重复数据记录

    我有一个看起来像这样的表 mysql gt SELECT FROM Colors ID USERNAME RED GREEN YELLOW BLUE ORANGE PURPLE 1 joe 1 null 1 null null null 2
  • MySQL,连接两列

    MySQL 表中有两列 SUBJECT and YEAR 我想生成一个字母数字唯一编号 其中包含主题和年份的串联数据 我怎样才能做到这一点 是否可以使用像这样的简单运算符 您可以使用CONCAT http dev mysql com doc
  • 从 SQL 数据库获取日期时间

    我的数据库表中有一个 DateTime 记录 我编写一个查询从数据库中获取它 string command2 select Last Modified from Company Data where Company Name Descrip
  • 错误代码:1062。重复条目“PRIMARY”

    因此 我的教授给了我表格将其插入数据库 但是当我执行他的代码时 MySQL 不断给出错误代码 1062 这是冲突表和插入 TABLES CREATE TABLE FABRICANTES COD FABRICANTE integer NOT
  • 处理大数据表时应该如何使用Hibernate Mapping

    问题定义 我有一个包含大量数据 超过 100 000 行 的数据库表 表结构如下 AppID DocID DocStatus 1 100 0 1 101 1 2 200 0 2 300 1 每个 applicationID 可能有数千个文档
  • 如何在php/mysql中使用事务

    我正在使用 php mysql 我知道 mysql 中的事务 但不能在我的脚本中使用 下面是我的脚本 如何在我的代码中使用 php 事务 即 BEGIN ROLLBACK COMMIT foreach json a shop as json
  • 如何使用Python3.4在tornado中进行异步mysql操作?

    我现在使用Python3 4 我想在Tornado中使用异步mysql客户端 我已经发现torndb https github com bdarnell torndb但在阅读其源代码后 我认为它无法进行异步mysql操作 因为它只是封装了M
  • MySQL - 查找接近的匹配项

    MySQL 有没有办法在文本字段中找到紧密匹配的内容 说找到 email protected cdn cgi l email protection当搜索时 email protected cdn cgi l email protection
  • 如何在没有 DROP 数据库权限的情况下从命令行删除所有 MySQL 表? [复制]

    这个问题在这里已经有答案了 如何使用命令提示符删除 Windows MySQL 中的所有表 我想这样做的原因是我们的用户有权访问数据库删除 但无权重新创建数据库本身 因此我们必须手动删除表 有没有办法一次删除所有表 请记住 大多数表都与外键
  • 火鸟删除速度很慢

    我正在做这个简单的交易 DELETE FROM ominve01 WHERE CVE OBS IN SELECT CVE OBS FROM minve01 M WHERE M FECHA DOCU lt 31 12 2010 OR FECH

随机推荐

  • 中国天气网接口

    中国天气weather com http m weather com cn data 101110101 html 六天预报 http www weather com cn data sk 101110101 html 实时天气信息 其中1
  • RSA pkcs1与pkcs8 java获取私钥

    RSA pkcs1与pkcs8 java获取私钥 目录 RSA pkcs1与pkcs8 java获取私钥 获取秘钥 获取pkcs1 格式秘钥 获取pkcs8格式秘钥 读取秘钥信息 解密 获取秘钥 maven依赖
  • 【网络】几种常见的协议

    几种常见的协议 DNS Domain Name System 域名解析协议 端口号 53 通过域名解析获得域名所对应的IP FTP File Transfer Protocol 文件传输协议 端口号 21 用户可通过客户机程序向远程主机上传
  • el-input正则限制

    el input限制只能输入1 9且只保留一位小数 return rules deductionPrice required true message 请输入折扣力度 trigger blur validator this valuePri
  • 栈溢出学习

    前言 跟着ctfwiki学习 所有题目都在ctfwiki上可以找到 加油加油 栈溢出原理 栈溢出指的是程序向栈中某个变量中写入的字节数超过了这个变量本身所申请的字节数 因而导致与其相邻的栈中的变量的值被改变 看一个简单的程序 include
  • 【枚举的定义;枚举变量的定义、初始化和赋值】(学习笔记16--枚举)

    目录 枚举的定义 枚举变量的定义 枚举变量的初始化与赋值 使用枚举类型 可以提高程序代码的健壮性和可读性 并且枚举成员属于常量 甚至可以使用枚举成员名作为维的大小 来进行数组的定义 枚举的定义 定义枚举的格式为 enum 枚举名 枚举成员1
  • Muduo网络库核心梳理

    Muduo网络库 Muduo网络库本身并不复杂 是一个新手入门C 面向对象网络编程的经典实战项目 但是 新手在刚刚上手读代码的时候 非常容易陷入代码的汪洋大海 迷失方向 本文旨在简要梳理Muduo网络库的核心内容 帮助初学者快速上手源码阅读
  • DES算法简单介绍及用法

    大家好 今天给大家分享一下DES加密 一 DES介绍 加密一般分为可逆加密和不可逆加密 其中可逆加密一般又分为对称加密和非对称加密 前者是我们使用公用密钥加密之后可以使用公用密钥再解密出来 而后者则是使用公用密钥加密之后必须使用私用密钥来解
  • MySQL这一章就够了(一)

    前言 呕心沥血5个月淦出本文 整理所有MySQL知识 我愿称之为地表最强MySQL MySql笔记 MySQL是关系型数据库 基于SQL查询的开源跨平台数据库管理系统 它最初是由瑞典MySQL AB公司开发的 现在它是Oracle Corp
  • 手把手教你区块链java开发智能合约nft(第四篇)-如何动态获取gasPrice和gasLimit?

    手把手教你区块链java开发智能合约nft 第三篇 如何动态获取gasPrice和gasLimit 初学区块链 那真叫一个痛苦并无助 如果没有人带你的话 今天写的这篇是在前面文章基础上写的 初学区块链的朋友建议先看我前面写的文章 手把手教你
  • 【雕爷学编程】Arduino动手做(72)---HX711 人体称重模块

    37款传感器与执行器的提法 在网络上广泛流传 其实Arduino能够兼容的传感器模块肯定是不止这37种的 鉴于本人手头积累了一些传感器和执行器模块 依照实践出真知 一定要动手做 的理念 以学习和交流为目的 这里准备逐一动手尝试系列实验 不管
  • win32读取注册表

    直接代码 bool bIsIE6 false HKEY hKey NULL DWORD dwType DWORD dwSize LONG lReg RegOpenKey HKEY CLASSES ROOT HTTP shell open c
  • 技术方案设计没有深度?试试这套方法论

    原文为阿里技术发布的一篇文章 作者 高福来 不拔 读后受益匪浅 决定转载分享 平时听到一些同学说技术方案没什么深度 很难讲出来 怎么去体现技术方案设计的深度是大家普遍关心的一个问题 这个问题不是个例问题 因此分享下自己的一些观点和看法 主要
  • ps怎么对比原图快捷键_Photoshop最常用的10个快捷键,让你修图事半功倍!

    小伙伴们 小编今天要给大家发一波福利 揭秘Photoshop最常用的10个快捷键 让你修图事半功倍 1 Ctrl Ctrl 放大 缩小图层 使用Photoshop进行修图时 为了更加准确地进行精修 我们需要放大图片 此时使用快捷键 Ctrl
  • STM32F4-正点原子探索者-SYSTEM文件夹下的delay.c文件内延时函数详解

    目录 笔记 首先是对应的头文件delay h中的函数 1 delay init u8 SYSCLK 此处将把关于UCOS相关代码忽略 后面学习 注 以下为SysTick结构体详解 与主体函数只是有一定联系 可略过 SysTick结构体中的C
  • 散点矩阵

    import pandas as pd import matplotlib pyplot as plt import seaborn as sns crime pd read csv crimeRatesByState2005 csv cr
  • 【Unity3D】Unity3D游戏里实现复制粘贴功能

    public class sTest MonoBehaviour public InputField input public Button btn if UNITY IOS DllImport Internal private stati
  • ffmpeg开发环境的安装测试和更新的步骤

    本文将介绍ffmpeg开发环境的安装测试和更新的步骤 基于ubuntu16 04和ffmpeg3 2 1 安装x264 1 libx264需要yasm sudo apt get install yasm 但是yasm版本比较旧 所以安装na
  • 做个成功的管理者

    什么是 管理 大家对这词都不陌生 但什么才是真正的管理呢 管理的真谛在 理 不在 管 管理者的主要职责就是建立一个合理的游戏规则 让每个员工按照游戏规则自我管理 游戏规则要兼顾公司的利益和个人的利益 并且把公司的利益和个人的利益统一起来 尽
  • SQL语法基础

    结构化查询语言 Structured Query Language 是一种特殊目的的编程语言 是一种数据库查询和程序设计语言 用于存取数据以及查询 更新和管理关系数据库系统 数据查询语言 DQL SELECT 查询 数据操作语言 DML I