SQL语句语法大全_第1页
SQL语句语法大全_第2页
SQL语句语法大全_第3页
SQL语句语法大全_第4页
SQL语句语法大全_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SQL语句语法大全SQL(StructuredQueryLanguage,结构化查询语言)是用于管理关系型数据库的标准语言,核心功能包括数据查询、插入、更新、删除、表结构操作、权限管理等。本汇总按功能分类,整理常用SQL语法,附简洁示例,兼顾基础与实用性,适合入门学习和日常查阅。一、基础必备(通用语法)1.注释语法注释用于说明SQL语句含义,不执行,分为单行注释和多行注释,不同数据库通用。单行注释:--注释内容(两个减号+空格,后面跟注释)多行注释:/*注释内容*/(可跨多行,常用于批量注释)示例:--查询用户表所有数据;/*这是多行注释,用于说明该语句的作用,跨多行也可*/SELECT*FROMuser;2.关键字规范SQL关键字(如SELECT、FROM、WHERE)不区分大小写,但建议统一大写(增强可读性)。表名、列名、别名区分大小写(取决于数据库,如MySQL默认不区分,Oracle默认区分)。字符串值必须用单引号('')包裹,数值类型无需加引号。二、数据查询语句(SELECT)核心功能:从数据库表中查询指定数据,是SQL中最常用的语句,语法灵活,可搭配多种子句。1.基础语法(查询指定列/所有列)格式:SELECT列名1,列名2,...FROM表名;说明:用*表示查询所有列(不推荐,效率低,且易受表结构变化影响)。列名之间用逗号分隔,最后一列后不加逗号。示例1:查询user表中id、name、age三列数据

SELECTid,name,ageFROMuser;示例2:查询user表所有数据(不推荐)

SELECT*FROMuser;2.别名(AS)功能:给列名、表名起别名,简化语句,增强可读性,AS可省略。格式:SELECT列名1AS别名1,列名2别名2FROM表名AS表别名;示例:给user表起别名u,name列起别名“用户名”

SELECTu.id,AS用户名,u.ageFROMuserASu;3.去重(DISTINCT)功能:去除查询结果中重复的行,仅保留唯一值(作用于所有查询列的组合)。格式:SELECTDISTINCT列名1,列名2FROM表名;示例:查询user表中所有不同的年龄(去除重复年龄)

SELECTDISTINCTageFROMuser;4.条件筛选(WHERE)功能:过滤查询结果,只保留满足条件的行,紧跟FROM子句。格式:SELECT列名FROM表名WHERE条件表达式;常用条件运算符:运算符含义示例=等于(注意:NULL不能用=判断,需用ISNULL)age=18<>/!=不等于name<>'张三'>/<大于/小于age>20>=/<=大于等于/小于等于age<=30BETWEEN...AND...在指定范围内(包含边界值)ageBETWEEN18AND25IN(...)在指定集合中idIN(1,2,3)NOTIN(...)不在指定集合中idNOTIN(4,5,6)LIKE模糊匹配(%匹配任意字符,_匹配单个字符)nameLIKE'张%'(匹配姓张的所有名字)ISNULL判断值为NULLphoneISNULL(查询无手机号的用户)ISNOTNULL判断值不为NULLphoneISNOTNULL逻辑运算符(用于组合多个条件):AND(同时满足)、OR(满足任一)、NOT(取反)示例:查询年龄18-25岁、姓名姓张的用户

SELECT*FROMuserWHEREageBETWEEN18AND25ANDnameLIKE'张%';5.排序(ORDERBY)功能:对查询结果按指定列排序,默认升序(ASC),可指定降序(DESC),紧跟WHERE子句(无WHERE则紧跟FROM)。格式:SELECT列名FROM表名[WHERE条件]ORDERBY列名1[ASC/DESC],列名2[ASC/DESC];说明:多列排序时,先按第一列排序,第一列相同则按第二列排序。示例:查询user表,按年龄降序排序,年龄相同按id升序排序

SELECT*FROMuserORDERBYageDESC,idASC;6.限制结果条数(LIMIT/TOP/ROWNUM)功能:限制查询结果的行数,不同数据库语法不同,核心作用一致。MySQL/PostgreSQL:使用LIMIT(最常用)

格式:SELECT列名FROM表名LIMIT条数;(取前N条)

格式2:SELECT列名FROM表名LIMIT偏移量,条数;(跳过前X条,取N条)

示例:取前10条数据:SELECT*FROMuserLIMIT10;;跳过前5条,取10条:SELECT*FROMuserLIMIT5,10;SQLServer/Access:使用TOP

格式:SELECTTOP条数列名FROM表名;

示例:取前5条数据:SELECTTOP5*FROMuser;Oracle:使用ROWNUM

格式:SELECT列名FROM(SELECT列名FROM表名)WHEREROWNUM<=条数;

示例:取前3条数据:SELECT*FROM(SELECT*FROMuser)WHEREROWNUM<=3;7.聚合函数(GROUPBY+HAVING)聚合函数:对一组数据进行计算,返回单个结果,常用聚合函数如下:COUNT():统计行数(COUNT(*)统计所有行,COUNT(列名)统计非NULL行数)SUM():计算列的总和(仅适用于数值类型)AVG():计算列的平均值(仅适用于数值类型)MAX():获取列的最大值MIN():获取列的最小值GROUPBY:按指定列分组,聚合函数作用于每一组,语法紧跟WHERE(无WHERE则紧跟FROM)。格式:SELECT分组列,聚合函数FROM表名[WHERE条件]GROUPBY分组列;HAVING:过滤分组后的结果(与WHERE区别:WHERE过滤行,HAVING过滤分组),紧跟GROUPBY。格式:SELECT分组列,聚合函数FROM表名[WHERE条件]GROUPBY分组列HAVING聚合条件;示例1:按性别分组,统计每组的用户数量

SELECTgender,COUNT(*)AS人数FROMuserGROUPBYgender;示例2:按性别分组,统计每组平均年龄,只保留平均年龄>20的分组

SELECTgender,AVG(age)AS平均年龄FROMuserGROUPBYgenderHAVINGAVG(age)>20;8.子查询(嵌套查询)功能:将一个查询结果作为另一个查询的条件或数据源,嵌套在FROM、WHERE、IN等子句中,分为单行子查询、多行子查询。格式1(WHERE子句中,单行子查询):SELECT列名FROM表名WHERE列名运算符(SELECT列名FROM另一表名WHERE条件);格式2(FROM子句中,多行子查询,作为临时表):SELECT列名FROM(SELECT列名FROM表名WHERE条件)AS临时表名;示例1:查询年龄大于平均年龄的用户

SELECT*FROMuserWHEREage>(SELECTAVG(age)FROMuser);示例2:查询姓张的用户的订单信息(子查询作为临时表)

SELECTo.*FROM(SELECTidFROMuserWHEREnameLIKE'张%')ASuJOINorderoONu.id=o.user_id;9.多表连接(JOIN)功能:将多个表通过共同的列(关联列)连接起来,查询多个表的关联数据,核心分为内连接、左连接、右连接、全连接。基础格式:SELECT列名FROM表1JOIN表2ON表1.关联列=表2.关联列[WHERE条件];内连接(INNERJOIN,可省略INNER):只保留两个表中关联列匹配的行,无匹配则不显示。

示例:查询用户及其对应的订单信息(只显示有订单的用户)

SELECT,o.order_noFROMuseruINNERJOINorderoONu.id=o.user_id;左连接(LEFTJOIN):保留左表(表1)所有行,右表(表2)匹配的行显示,无匹配则显示NULL。

示例:查询所有用户及其对应的订单信息(无订单的用户也显示,订单信息为NULL)

SELECT,o.order_noFROMuseruLEFTJOINorderoONu.id=o.user_id;右连接(RIGHTJOIN):保留右表(表2)所有行,左表(表1)匹配的行显示,无匹配则显示NULL。

示例:查询所有订单及其对应的用户信息(无对应用户的订单也显示,用户信息为NULL)

SELECT,o.order_noFROMuseruRIGHTJOINorderoONu.id=o.user_id;全连接(FULLJOIN):保留两个表所有行,无匹配的地方显示NULL(MySQL不支持,可通过UNION实现)。

示例(SQLServer/Oracle):SELECT,o.order_noFROMuseruFULLJOINorderoONu.id=o.user_id;三、数据操作语句(DML)DML(DataManipulationLanguage)用于操作表中的数据,包括插入、更新、删除,执行后需提交(COMMIT)才能生效(部分数据库自动提交)。1.插入数据(INSERTINTO)功能:向表中插入一条或多条新数据。格式1(指定列插入):INSERTINTO表名(列名1,列名2,...)VALUES(值1,值2,...);(推荐,不受表结构顺序影响)格式2(插入所有列):INSERTINTO表名VALUES(值1,值2,...);(需与表中列的顺序、数量完全一致)格式3(批量插入):INSERTINTO表名(列名1,列名2,...)VALUES(值1,值2,...),(值1,值2,...),...;示例1:向user表插入一条数据(指定列)

INSERTINTOuser(name,age,gender,phone)VALUES('李四',22,'男',);示例2:向user表批量插入3条数据

INSERTINTOuser(name,age,gender)VALUES('王五',25,'女'),('赵六',28,'男'),('孙七',21,'女');注意:插入的值需与列的类型匹配,主键列(如id)需保证唯一,非空列(NOTNULL)必须插入值。2.更新数据(UPDATE)功能:修改表中已存在的数据,必须加WHERE条件(否则会修改表中所有行,慎用)。格式:UPDATE表名SET列名1=值1,列名2=值2,...[WHERE条件];示例1:修改id为1的用户的年龄为20

UPDATEuserSETage=20WHEREid=1;示例2:修改姓张的用户的手机号/p>

UPDATEuserSETphone=WHEREnameLIKE'张%';注意:无WHERE条件时,会更新表中所有行,如UPDATEuserSETage=30;会将所有用户的年龄改为30,务必谨慎。3.删除数据(DELETE)功能:删除表中已存在的数据,必须加WHERE条件(否则会删除表中所有数据,慎用)。格式:DELETEFROM表名[WHERE条件];示例1:删除id为5的用户

DELETEFROMuserWHEREid=5;示例2:删除年龄小于18的用户

DELETEFROMuserWHEREage<18;注意:无WHERE条件时,会删除表中所有数据(表结构保留),如DELETEFROMuser;(清空表)。如果表与其他表有关联(如外键),需先删除关联表的数据,再删除当前表数据,否则会报错。四、表结构操作语句(DDL)DDL(DataDefinitionLanguage)用于定义数据库对象(表、列、索引等),执行后立即生效,无需提交。1.创建表(CREATETABLE)功能:创建新的数据库表,需指定表名、列名、列类型、约束条件。格式:CREATETABLE表名(

列名1数据类型[约束条件],

列名2数据类型[约束条件],

...

[表级约束条件]

);常用数据类型(通用):字符串类型:VARCHAR(n)(可变长度字符串,n为最大长度)、CHAR(n)(固定长度字符串)数值类型:INT(整数)、BIGINT(长整数)、DECIMAL(p,s)(小数,p为总位数,s为小数位数)日期时间类型:DATE(日期,格式YYYY-MM-DD)、DATETIME(日期时间,格式YYYY-MM-DDHH:MM:SS)、TIMESTAMP(时间戳,自动记录插入/更新时间)其他类型:BOOLEAN(布尔值,true/false)、TEXT(长文本,用于存储大量文字)常用约束条件:PRIMARYKEY(主键):唯一标识表中的每一行,非空且唯一,一个表只能有一个主键。NOTNULL(非空):该列不能为NULL,必须插入值。UNIQUE(唯一):该列的值不能重复,可为空。DEFAULT(默认值):当该列未插入值时,自动使用默认值。FOREIGNKEY(外键):关联另一张表的主键,保证数据一致性。示例:创建user表(包含主键、非空、默认值约束)

CREATETABLEuser(

idINTPRIMARYKEY,--主键,非空且唯一

nameVARCHAR(50)NOTNULL,--非空,姓名

ageINTDEFAULT18,--默认值18

genderVARCHAR(10)UNIQUE,--唯一,性别

phoneVARCHAR(20),

create_timeDATETIMEDEFAULTCURRENT_TIMESTAMP--默认当前时间

);2.修改表结构(ALTERTABLE)功能:修改已存在的表结构,包括添加列、修改列、删除列、修改约束等。常用语法:添加列:ALTERTABLE表名ADD列名数据类型[约束条件];

示例:给user表添加email列(非空)

ALTERTABLEuserADDemailVARCHAR(100)NOTNULL;修改列(修改数据类型/约束):ALTERTABLE表名MODIFY列名新数据类型[新约束条件];

示例:将user表的age列改为BIGINT类型

ALTERTABLEuserMODIFYageBIGINT;修改列名:ALTERTABLE表名CHANGE旧列名新列名数据类型[约束条件];

示例:将user表的phone列改为tel列

ALTERTABLEuserCHANGEphonetelVARCHAR(20);删除列:ALTERTABLE表名DROP列名;

示例:删除user表的email列

ALTERTABLEuserDROPemail;添加主键:ALTERTABLE表名ADDPRIMARYKEY(列名);删除主键:ALTERTABLE表名DROPPRIMARYKEY;3.删除表(DROPTABLE)功能:删除整个表(包括表结构和表中所有数据),慎用。格式:DROPTABLE表名;示例:删除user表

DROPTABLEuser;注意:删除表后,数据和表结构均无法恢复,若表与其他表有关联,需先删除关联约束或关联表。4.清空表(TRUNCATETABLE)功能:清空表中所有数据,保留表结构(与DELETEFROM表名的区别:TRUNCATE无法加WHERE条件,效率更高,且会重置自增主键)。格式:TRUNCATETABLE表名;示例:清空user表数据(保留表结构)

TRUNCATETABLEuser;区别:DELETE删除数据可回滚,TRUNCATE删除数据不可回滚;DELETE会记录日志,TRUNCATE不记录日志,效率更高。五、权限管理语句(DCL)DCL(DataControlLanguage)用于管理数据库用户的权限,包括授权、撤销授权、创建用户等,常用语句如下。1.创建用户(CREATEUSER)格式:CREATEUSER'用户名'@'主机地址'IDENTIFIEDBY'密码';说明:主机地址用%表示所有主机可访问,localhost表示仅本地可访问。示例:创建用户test,密码123456,允许所有主机访问

CREATEUSER'test'@'%'IDENTIFIEDBY'123456';2.授权(GRANT)功能:给用户授予指定的数据库权限(如查询、插入、修改等)。格式:GRANT权限1,权限2,...ON数据库名.表名TO'用户名'@'主机地址';常用权限:SELECT(查询)、INSERT(插入)、UPDATE(更新)、DELETE(删除)、ALLPRIVILEGES(所有权限)。示例1:给test用户授予user表的查询、插入权限

GRANTSELECT,INSERTONtest_db.userTO'test'@'%';示例2:给test用户授予test_db数据库所有表的所有权限

GRANTALLPRIVILEGESONtest_db.*TO'test'@'%';3.撤销授权(REVOKE)功能:撤销用户已有的权限。格式:REVOKE权限1,权限2,...ON数据库名.表名FROM'用户名'@'主机地址';示例:撤销test用户对user表的插入权限

REVOKEINSERTONtest_db.userFROM'test'@'%';4.删除用户(DROPUSER)格式:DROPUSER'用户名'@'主机地址';示例:删除test用户

DROPUSER'test'@'%';六、常用高级语法1.事务(TRANSACTION)事务是一组不可分割的SQL操作,要么全部执行成功,要么全部执行失败(回滚),确保数据一致性,常用语句:开始事务:STARTTRANSACTION;(或BEGIN;)提交事务:COMMIT;(执行成功后提交,数据永久生效)回滚事务:ROLLBACK;(执行失败后回滚,恢复到事务开始前的状态)示例:转账事务(从A用户转账到B用户,确保两步都成功)

STARTTRANSACTION;

UPDATEaccountSETbalance=balance-100WHEREname='A';--A用户减100

UPDATEaccountSETbalance=balance+100WHEREname='B';--B用户加100

COMMIT;--两步都成功,提交

--若有一步失败,执行ROLLBACK;

2.索引(INDEX)功能:提高查询效率,减少数据库扫描行数,常用创建和删除语法。创建索引:CREATEINDEX索引名ON表名(列名1,列名2,...);

示例:给user表的name列创建索引

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论