版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
常用经典SQL语句大全完整版一、基础查询语句(SELECT)核心功能:从数据库表中提取所需数据,是SQL最基础、最常用的语句,可搭配多种条件、排序、限制等操作。1.基础查询(查询所有列/指定列)sql
--1.1查询表中所有列(不推荐用于大数据量表,效率低)
SELECT*FROM表名;
--1.2查询指定列(推荐,精准获取所需数据)
SELECT列名1,列名2,列名3FROM表名;
--1.3给列起别名(简化显示,避免列名重复)
SELECT列名1AS别名1,列名2别名2FROM表名;--AS可省略2.带条件查询(WHERE)sql
--2.1等于条件(=),注意:NULL值不能用=判断,需用ISNULL/ISNOTNULL
SELECT列名FROM表名WHERE列名='值';
--2.2不等于条件(!=或<>)
SELECT列名FROM表名WHERE列名!='值';
--2.3范围条件(BETWEEN...AND...,包含首尾值)
SELECT列名FROM表名WHERE列名BETWEEN最小值AND最大值;
--2.4多值匹配(IN,替代多个OR)
SELECT列名FROM表名WHERE列名IN('值1','值2','值3');
--2.5模糊查询(LIKE,%匹配任意字符,_匹配单个字符)
SELECT列名FROM表名WHERE列名LIKE'张%';--匹配以“张”开头的所有值
SELECT列名FROM表名WHERE列名LIKE'_三';--匹配第二个字是“三”的两个字的值
--2.6非空/空值查询
SELECT列名FROM表名WHERE列名ISNOTNULL;--非空
SELECT列名FROM表名WHERE列名ISNULL;--空值3.排序查询(ORDERBY)sql
--3.1升序排序(ASC,默认,可省略)
SELECT列名FROM表名ORDERBY列名ASC;
--3.2降序排序(DESC)
SELECT列名FROM表名ORDERBY列名DESC;
--3.3多列排序(先按列1排序,列1相同则按列2排序)
SELECT列名1,列名2FROM表名ORDERBY列名1DESC,列名2ASC;4.限制查询结果(LIMIT)sql
--4.1限制返回的行数(常用于分页)
SELECT列名FROM表名LIMIT10;--返回前10行
--4.2分页查询(跳过前n行,返回m行,n=(页码-1)*每页条数)
SELECT列名FROM表名LIMIT10,20;--跳过前10行,返回接下来20行(第2页,每页10条)5.去重查询(DISTINCT)sql
--去除查询结果中重复的行(仅当所有指定列都相同时才视为重复)
SELECTDISTINCT列名FROM表名;
--结合条件去重
SELECTDISTINCT列名FROM表名WHERE条件;二、聚合函数与分组查询(GROUPBY/HAVING)核心功能:对数据进行统计分析(如计数、求和、平均值等),结合分组可实现按类别统计,HAVING用于过滤分组后的结果(区别于WHERE:WHERE过滤行,HAVING过滤分组)。1.常用聚合函数sql
--1.1计数(COUNT,统计非NULL值的行数)
SELECTCOUNT(列名)AS计数FROM表名;--统计指定列非NULL行数
SELECTCOUNT(*)AS总行数FROM表名;--统计所有行数(包含NULL值)
--1.2求和(SUM,仅适用于数值型列)
SELECTSUM(列名)AS总和FROM表名;
--1.3平均值(AVG,仅适用于数值型列)
SELECTAVG(列名)AS平均值FROM表名;
--1.4最大值(MAX)/最小值(MIN)
SELECTMAX(列名)AS最大值,MIN(列名)AS最小值FROM表名;2.分组查询(GROUPBY)sql
--2.1按单个列分组,统计每组数据
SELECT分组列名,COUNT(*)AS每组数量FROM表名GROUPBY分组列名;
--2.2按多个列分组(多列组合为一个分组条件)
SELECT列名1,列名2,SUM(列名3)AS分组总和FROM表名GROUPBY列名1,列名2;
--2.3分组后过滤(HAVING,必须跟在GROUPBY后)
SELECT分组列名,COUNT(*)AS每组数量FROM表名
GROUPBY分组列名
HAVING每组数量>10;--只显示数量大于10的分组三、多表连接查询(JOIN)核心功能:当数据分布在多个表中时,通过表间的关联字段(如主键、外键),将多个表的数据合并查询,是SQL进阶查询的核心。1.内连接(INNERJOIN)只返回两个表中关联字段匹配的行(无匹配的行不显示),是最常用的连接方式。sql
--语法1:显式内连接
SELECT表1.列名1,表2.列名2FROM表1
INNERJOIN表2ON表1.关联列=表2.关联列;
--语法2:隐式内连接(逗号分隔表,WHERE指定关联条件)
SELECT表1.列名1,表2.列名2FROM表1,表2
WHERE表1.关联列=表2.关联列;2.左连接(LEFTJOIN/LEFTOUTERJOIN)返回左表的所有行,右表中匹配的行显示对应数据,无匹配的行显示NULL。sql
SELECT表1.列名1,表2.列名2FROM表1
LEFTJOIN表2ON表1.关联列=表2.关联列;
--筛选左表中未在右表匹配到的数据(常用场景)
SELECT表1.列名1FROM表1
LEFTJOIN表2ON表1.关联列=表2.关联列
WHERE表2.关联列ISNULL;3.右连接(RIGHTJOIN/RIGHTOUTERJOIN)与左连接相反,返回右表的所有行,左表中匹配的行显示对应数据,无匹配的行显示NULL。sql
SELECT表1.列名1,表2.列名2FROM表1
RIGHTJOIN表2ON表1.关联列=表2.关联列;4.全连接(FULLJOIN/FULLOUTERJOIN)返回两个表的所有行,匹配的行合并显示,无匹配的行分别显示NULL(MySQL不支持FULLJOIN,可通过UNION实现)。sql
--标准全连接(Oracle、SQLServer支持)
SELECT表1.列名1,表2.列名2FROM表1
FULLJOIN表2ON表1.关联列=表2.关联列;
--MySQL替代方案(左连接+右连接+UNION去重)
SELECT表1.列名1,表2.列名2FROM表1
LEFTJOIN表2ON表1.关联列=表2.关联列
UNION
SELECT表1.列名1,表2.列名2FROM表1
RIGHTJOIN表2ON表1.关联列=表2.关联列;5.交叉连接(CROSSJOIN)返回两个表的笛卡尔积(左表每行与右表每行都组合一次),慎用(数据量会急剧增加)。sql
SELECT表1.列名1,表2.列名2FROM表1
CROSSJOIN表2;四、数据操作语句(INSERT/UPDATE/DELETE)核心功能:对数据库表中的数据进行新增、修改、删除,操作前建议备份数据,避免误操作。1.新增数据(INSERT)sql
--1.1插入单行数据(指定列名,推荐,顺序可与表结构不一致)
INSERTINTO表名(列名1,列名2,列名3)VALUES('值1','值2',数值3);
--1.2插入单行数据(不指定列名,需与表结构列顺序完全一致)
INSERTINTO表名VALUES('值1','值2',数值3);
--1.3插入多行数据(高效,避免多次执行INSERT)
INSERTINTO表名(列名1,列名2)VALUES
('值1','值2'),
('值3','值4'),
('值5','值6');
--1.4从另一个表插入数据(批量复制数据)
INSERTINTO目标表(列名1,列名2)
SELECT列名1,列名2FROM源表WHERE条件;2.修改数据(UPDATE)sql
--2.1修改指定行数据(必须加WHERE条件,否则修改全表!)
UPDATE表名SET列名1='新值1',列名2=新值2WHERE条件;
--2.2结合子查询修改数据(根据其他表的数据修改当前表)
UPDATE表1SET表1.列名=表2.列名
FROM表1
INNERJOIN表2ON表1.关联列=表2.关联列
WHERE条件;3.删除数据(DELETE)sql
--3.1删除指定行数据(必须加WHERE条件,否则删除全表!)
DELETEFROM表名WHERE条件;
--3.2删除表中所有数据(保留表结构,可回滚,效率低于TRUNCATE)
DELETEFROM表名;
--3.3快速删除全表数据(不保留日志,不可回滚,效率高,慎用)
TRUNCATETABLE表名;--区别于DELETE:TRUNCATE无法加WHERE,会重置自增主键五、表结构操作语句(CREATETABLE/ALTERTABLE/DROPTABLE)核心功能:创建、修改、删除数据库表,定义表的字段、类型、约束等,属于DDL(数据定义语言)。1.创建表(CREATETABLE)sql
--基础创建表(指定字段名、数据类型、约束)
CREATETABLE表名(
字段1数据类型约束,
字段2数据类型约束,
字段3数据类型约束,
...
约束条件--如主键、外键等
);
--示例:创建用户表(含主键、非空、唯一约束)
CREATETABLEuser(
idINTPRIMARYKEYAUTO_INCREMENT,--主键,自增(MySQL)
usernameVARCHAR(50)NOTNULLUNIQUE,--非空,唯一(用户名不能重复)
passwordVARCHAR(100)NOTNULL,--非空
ageINTDEFAULT0,--默认值为0
create_timeDATETIMEDEFAULTCURRENT_TIMESTAMP--默认值为当前时间
);2.修改表结构(ALTERTABLE)sql
--2.1添加字段
ALTERTABLE表名ADD字段名数据类型约束;
--2.2修改字段数据类型
ALTERTABLE表名MODIFY字段名新数据类型;
--2.3修改字段名(MySQL)
ALTERTABLE表名CHANGE旧字段名新字段名数据类型;
--2.4删除字段
ALTERTABLE表名DROP字段名;
--2.5添加主键约束
ALTERTABLE表名ADDPRIMARYKEY(字段名);
--2.6添加外键约束(关联两个表)
ALTERTABLE子表名ADDFOREIGNKEY(子表关联字段)REFERENCES父表名(父表主键字段);
--2.7取消外键约束(MySQL,需先查外键名)
ALTERTABLE子表名DROPFOREIGNKEY外键名;3.删除表(DROPTABLE)sql
--删除单个表(慎用,删除后表结构和数据全丢失,不可回滚)
DROPTABLE表名;
--删除多个表
DROPTABLE表名1,表名2;
--若表存在则删除(避免报错)
DROPTABLEIFEXISTS表名;六、子查询(嵌套查询)核心功能:将一个查询语句(子查询)作为另一个查询语句的条件、数据源,实现复杂查询逻辑,分为相关子查询和非相关子查询。1.非相关子查询(子查询可独立执行,不依赖主查询)sql
--1.1子查询作为条件(IN/NOTIN)
SELECT列名FROM表名WHERE列名IN(SELECT列名FROM另一表WHERE条件);
--示例:查询订单金额大于平均金额的订单
SELECTorder_id,amountFROMorder
WHEREamount>(SELECTAVG(amount)FROMorder);
--1.2子查询作为数据源(FROM后,需给子查询起别名)
SELECTt.列名1,t.列名2FROM(SELECT列名1,列名2FROM表名WHERE条件)ASt;2.相关子查询(子查询依赖主查询的字段,需逐行执行)sql
--示例:查询每个部门中工资高于本部门平均工资的员工
SELECTdept_id,emp_name,salaryFROMempe1
WHEREsalary>(SELECTAVG(salary)FROMempe2WHEREe2.dept_id=e1.dept_id);七、常用高级语句与关键字1.合并查询结果(UNION/UNIONALL)sql
--UNION:合并两个查询结果,去重(需两个查询的列数、列类型一致)
SELECT列名FROM表1WHERE条件
UNION
SELECT列名FROM表2WHERE条件;
--UNIONALL:合并两个查询结果,不去重(效率高于UNION,适合无需去重场景)
SELECT列名FROM表1WHERE条件
UNIONALL
SELECT列名FROM表2WHERE条件;2.条件判断(CASEWHEN)用于实现多条件分支判断,可用于SELECT、UPDATE、WHERE等语句中。sql
--示例1:查询时根据条件显示不同内容
SELECT
emp_name,
salary,
CASE
WHENsalary>=10000THEN'高薪'
WHENsalary>=5000THEN'中薪'
ELSE'低薪'
ENDAS薪资等级
FROMemp;
--示例2:修改数据时根据条件赋值
UPDATEempSET
bonus=CASE
WHENsalary>=10000THEN2000
WHENsalary>=5000THEN1000
ELSE500
END;3.exists关键字(判断子查询是否有结果)exists返回布尔值(true/false),子查询有结果则返回true,否则false,效率高于IN(适合大数据量)。sql
--示例:查询存在订单的用户
SELECTusernameFROMuseru
WHEREEXISTS(SELECT1FROMorderoWHEREo.user_id=u.id);4.日期函数(常用)sql
--MySQL常用日期函数
SELECTCURRENT_DATE();--获取当前日期(YYYY-MM-DD)
SELECTCURRENT_TIME();--获取当前时间(HH:MM:SS)
SELECTCURRENT_TIMESTAMP();--获取当前日期时间(YYYY-MM-DDHH:MM:SS)
SELECTDATE_FORMAT(create_time,'%Y-%m-%d')AS日期FROM表名;--格式化日期
SELECTDATEDIFF(结束日期,开始日期)AS间隔天数;--计算两个日期间隔天数
--Oracle常用日期函数
SELECTSYSDATEFROMDUAL;--获取当前日期时间
SELECTTO_CHAR(SYSDATE,'YYYY-MM-DD')AS日期FROMDUAL;--格式化日期八、常用约束语句约束用于保证数据的完整性和一致性,常用约束包括主键、外键、非空、唯一、默认值。sql
--1.主键约束(PRIMARYKEY):唯一标识表中每行数据,非空且唯一
CREATETABLE表名(
字段INTPRIMARYKEY
);
--2.外键约束(FOREIGNKEY):关联两个表,保证子表数据与父表一致
CREATETABLE子表(
子表字段INT,
FOREIGNKEY(子表字段)REFERENCES父表(父表主键)
);
--3.非空约束(NOTNULL):字段不能为NULL
CREATETABLE表名(
字段VARCHAR(50)NOTNULL
);
--4.唯一约束(UNIQUE):字段值唯一,可为NULL(多个NULL不冲突)
CREATETABLE表名(
字段VARCHAR(50)UNIQUE
);
--5.默认值约束(DEFAULT):字段未赋值时,使用默认值
CREATETABLE表名(
字段INTDEFAULT0
);九、常用数据库运维语句1.数据库操作sql
--创建数据库
CREATEDATABASE数据库名;
--
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025 高中小说阅读理解之人物情感冲突课件
- 2026年及未来5年市场数据中国印泥行业市场全景评估及发展前景预测报告
- 2025 高中传记类阅读理解之人物生平课件
- 2026年基层减负精文简会文件篇幅字数与会议时长控制标准测试题
- 交通银行成都市温江区2026秋招金融科技岗笔试题详解
- 2026年海关系统海南自由贸易港二线口岸监管题库
- 农发行保定市高阳县2026秋招笔试综合模拟题及经济常识
- 2026年银行公司部经理竞聘面试问题
- 医疗健康信息化管理方案
- 2026年党校研究生入学考试专业基础理论知识全真模拟试卷及答案(八)
- 充装站安全绩效考核制度
- 2025年高考贵州卷物理真题(试卷+解析)
- 2026年高速公路安全驾驶培训
- 特殊作业奖惩制度范本
- 2026年2026江苏省人民医院心血管内科打字员招聘1人笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 大平层户型设计方案
- 2025年金融市场基础知识真题及答案
- GB/T 5563-2025橡胶和塑料软管及软管组合件静液压试验方法
- 云南省茶叶出口竞争力分析及提升对策研究
- 屠宰企业食品安全知识培训课件
- 卵巢黄体囊肿破裂课件
评论
0/150
提交评论