掌握SQL基础:五招提升你的查询效率与技巧

创始人
2024-12-16 16:44:00
0 次浏览
0 评论

SQL查询语句

<1>

DESCemp;

<2>

SELECT*FROMemp;

3.查询指定列

SELECTempmo,ename,mgrFROMemp;

SELECTDISTINCTmgrFROMemp;仅显示结果不同的项

4.选择查询指定行

SELECT*FROMempWHEREjob='CLERK';

5.使用算术表达式

SELECTename,sal*13+nvl(comm,0)FROMemp;

nvl(comm,1)表示如果comm中有值,则nvl(comm,1)=comm;如果comm没有值,则nvl(comm,1)=0。

SELECTename,sal*13+nvl(comm,0)year_salFROMemp(year_sal是别名,可以按别名排序)

SELECT*FROMempWHEREhiredate>'01;-January-82';

6.使用类似的运算符(%,_)

%代表一个或多个字符,_代表一个字符,[charlist]代表一个字符任意列中的单个字符、[^charlist]或[!charlist]字符列中不存在的任何单个字符。

SELECT*FROMempWHEREenamelike'S__T%';

7.在条件where中使用In

SELECT*FROMempWHEREjobIN('CLERK','分析师');

8.查询字段内容为空/非空的语句

SELECT*FROMempWHEREmgrIS/ISNOTNULL;

9、使用逻辑运算符号

SELECT*FROMempWHERE(sal>500orjob='MANAGE')andenamelike'J%';

10、根据的值对查询结果进行排序字段

SELECT*FROMempORDERBYdeptno,salDESC;(按部门升序,按薪资降序)

1、对数据进行分组(最大值、最小值、平均值、总和、计数)

SELECTMAX(sal),MIN(age),AVG(sal),SUM(sal)fromemp;

SELECT*FROMempwheresal=(SELECTMAX(sal)fromemp));

SELECCOUNT(*)FROMemp;

SELECT*FROMempwheresal=(SELECTMAX(sal)fromemp));

SELECCOUNT(*)FROMemp;

2.groupby(用于查询结果的分组统计)和going子句(用于限制分组显示结果)

SELECTdeptno,MAX(sal),AVG(sal)FROMempGROUPBYdeptno;

SELECTdeptno,job,AVG(sal),MIN(sal)FROMempgroupbydeptno,jobhavingAVG(sal)<2000>

数据分组汇总:

分组功能只能outNowselectlist、hai、orderby子句(不能出现在where)

b如果select语句同时包含groupby、hai、orderby,则它们的顺序为groupby、hai、orderby。

c.如果所选列中有列、表达式和分组函数,则这些列和表达式必须出现在groupby子句中,否则会出现错误。

使用groupby并不是使用have的先决条件。

3.多表查询

SELECTe.name,e.sal,d.dnameFROMempe,deptdWHEREe.deptno=d.deptnoorderbyd.deptno;

SELECTe.ename,e.sal,s.gradeFROMempe,salgradesWHERe.salBETWEENs.losalANDs.hisal;

4.自连接(指同表的连接查询)

SELECTer.ename,ee.enamemgr_namefromemper,empeewhereer.mgr=ee.empno;

5、子查询(语句select嵌入其他SQL语句中,也称为嵌套查询)

:5.1单行子查询

SELECTenameFROMempWHEREdeptno=(SELECTdeptnoFROMempwhereename='SMITH');查询查询表中与smith同一部门的人员姓名。
由于返回结果只有一行,因此使用“=”连接子查询语句

5.2多行子查询

SELECTename,job,sal,deptnofromempWHEREjobIN(SELECTDISTINCTjobFROMempWHEREdeptno=10);查询表中与部门号10同职的员工的姓名、职业、工资、部门号,因为返回结果为如果有多行,则使用“IN”连接子查询语句。

in和exists的区别:exists()之后的子查询称为相关子查询,不返回列表的值。
它只是返回true或false结果。
操作方法是执行一次主查询,然后在子查询中查询对应的结果。
如果属实则发放,否则不发放。
然后根据主查询中的每一行查询子查询。
in()之后的子查询返回结果集。
也就是说,执行顺序与exists()不同。
子查询首先生成结果集,然后主查询通过结果集查找符合要求的字段列表。
符合要求则输出,否则不输出。

5.3使用ALL

SELECTename,sal,deptnoFROMempWHEREsal>ALL(SELECTsalFROMempWHEREdeptno=30);ELECTename,sal,deptnoFROMempWHEREsal>(SELECTMAX(sal)FROMempWHEREdeptno=30);查询工资高于部门号为30的所有员工的姓名、工资和部门号。
前面两条语句功能相同,但在从执行效率来看该函数会高很多。

5.4使用ANY

SELECTename,sal,deptnoFROMempWHEREsal>ANY(SELECTsalFROMempWHEREdeptno=30)或SQL>SELECTename,sal,deptnoFROMempWHEREsal>(SELECTMIN(sal)FROMempWHEREdeptno=30查询员工姓名、工资和部门编号​​其薪资高于任何部门号为30的员工(只要高于给定员工的薪资即可。
以上两条语句在功能上是相同的,但从执行效率来看该函数会高很多)

5.5子查询到大多数columns

SELECT*FROMempWHERE(job,deptno)=(SELECTjob,deptnoFROMempWHEREename='SMITH');

​5.6来自子查询在句子中使用子查询

SELECTemp.deptno,emp.ename,emp.sal,t_avgsal.avgsalFROMemp,(SELECTemp.deptno,avg(emp.sal)avgsalFROMempGROUPBYemp.deptno)t_avgsalw这里emp.deptno=t_avgsal.deptnoANDemp.sal>t_avgsal.avgsalORDERBYemp.deptno;

5.7分页查询

数据库中的每一行数据都有一个对应的行号,称为rownum

SELECTa2.*FROM(SELECTa1.*,ROWNUMrnFROM(SELECT*FROMempORDERBYsal)a1WHEREROWNUM<=10)a2WHERErn>=6;

用于指定查询列、查询结果的排序等。
,只需修改最内层子查询即可。

5.8使用查询结果创建一个新表

CREATETABLEmytable(id,name,sal,job,deptno)ASSELECTempno,ename,sal,job,deptnoFROMemp;

5.9并集查询(并并集、交集交集、并集并集+交集、减差集)

SELECTename,sal,jobFROMempWHEREsal>2500UNION(INTERSECT/UNIONALL/MINUS)SELECTename,sal,jobFROMempWHEREjob='MANAGER';

集合查询的执行效率远远优于and、and等查询逻辑或者。

5.10使用子查询插入数据

CREATETABLEmyEmp(empIDnumber(4),namevarchar2(20),salnumber(6),jobvarchar2(10),deptnumber(2));首先创建一个空表;

INSERTINTOmyEmp(empID,name,sal,job,dept)SELECTempno,ename,sal,job,deptnoFROMempWHEREdeptno=10然后在emp表中插入部门号为10的数据新建myEmp表,获取数据批量查询;。

5.11使用查询更新表中的数据

UPDATEempSET(job,sal,comm)=(SELECTjob,sal,commFROMempwhereename='SMITH')WHEREename='SCOTT';

SQL简单查询语句

本文介绍以下五个知识点:1.基本查询定义1.基本查询语法:SELECTFIELDLISTFROMTABLENAME2.查询所有字段:SELECTFROMTABLENAME3.SELECTALTERASNameName,GenderASPersonFROMStudents4.重复数据删除:从学生中选择不同的姓名;5、SQL编写规则:2、指定查询条件信息如下图:selectname,学号name="monkey";运行顺序、select子句上次运行以及其他子句按其编写顺序排列。
3.注释和平方表达式注意事项4.运算符1.算术运算符注意:所有运算结果都包含空值例如:要计算结果表的百分比,请选择学号/100作为分数中的“百分比分数”;不适用等例如:查询出生日期小于“1990-01-01”的学生,选择姓名、教育地出生日期<“1990-01-01”;string,排序10放在2之前,因为这是一个字符串,只比较第一个位置的大小,而不是长度。
5、逻辑运算符:1)示例:查询学号为01或02的课程号为01的班级信息:withlocation(s_id=01ors_id=02)andc_id=01;#andprioritywithor2)。
一种简单的写法是:在student表中选择名字不是monkey或者jackma的学生wherenamenotin('monkey','jackma');5、字符串模糊查询关键字表示作为字符串模糊查询_下划线表示任意1个字符匹配一个字符查询(模糊查询),可以与通配符一起使用。
是“%”和“_”;百分号“%”匹配任何长度的字符,甚至零个字符,下划线“_”匹配任何单个字符。

SQL的基本语句

SQL是一种用于管理关系数据库的语言,其基本语句用于搜索信息;安装涵盖更新和删除数据等操作。
其中,查询数据的基本语句格式是“SELECTFROMtablename”,可以轻松检索表中的所有记录。
如果您只想获取特定列;您可以将*替换为特定的列名称。
用于数据添加操作;向指定表添加新数据“列名1,列名2)values(值1,值2);”输入使用此语句时,您需要确保输入的数据与表结构中的列匹配。
当需要更新表中的数据时。
您可以使用“更新表名设置列名=值;”可以使用。
注意,该语句允许用户更改表中指定列的值,但修改前应进行备份。
如果需要删除表中的数据;您可以使用“deletefrom表名;”可以使用该语句将删除表中的所有记录或满足WHERE子句指定条件的记录。
当需要扩展表的结构时;您可以使用“变量表名添加列列名参数类型”来添加新列。
该语句可以在现有表中添加新字段,方便调整数据库结构。
创建表时列名称;使用“创建表名”语句来定义表的结构,包括数据类型和其他信息。
这一步是建立数据库的基础。
执行条件语句时;SQL提供了CASEWHENTHEN语句来进行条件判断。
一个简单的Case函数可以实现如下逻辑语句:CASEsexWHEN'1'THEN'男'WHEN'2'THEN'女'ELSE'其他'END。
案例搜索功能比较复杂,可以处理多种条件:CASEWHENsex='1'THEN'male'WHENsex='2'THEN'female'ELSE'other'END。
通过掌握这些基本语句;您可以有效地操作和维护数据库,提高工作效率,保证数据的准确性和完整性。
热门文章
1
C语言字符串常量解析:区别、用途及存储方... 什么是字符串常量字符串常量是C语言中的一种数据类型,它是由一对双引号括起来的字符...

2
C语言printf函数:格式字符串与输出... printf函数中的格式与输出项有什么关系?在C语言中,printf函数中的格式...

3
Excel技巧:计算字符串起始位置与合并... 如何计算字符串在特定文本中的起始位置,怎么计算字符串在特定文本中的起始位置您可以...

4
Python发音全解:掌握正确的发音方法... python怎么读我的很多学习编程的朋友可能都知道Python这个词,但是他们中...

5
字符与字符串:编程中的基础文本类型解析 字符串什么意思字符串是由数字、字母和下划线组成的字符串,表示为s=“a1a2…a...

6
Python编程语言:多领域应用与开发优... Python的作用是什么?Python是一种跨平台计算机编程语言,是ABC语言的...

7
深度解析:C语言编程特点与应用领域 什么叫c语言C语言是一种编程语言。C编程语言应用广泛,具有以下特点和特点:1.语...

8
Java全解析:跨平台编程语言的魅力与多... java是什么Java是一种功能强大的编程语言,被称为“一次编写,随处运行”模型...

9
Excel字符提取技巧:轻松使用LEFT... 如何在Excel中提取文本字符串中的字符?在Excel中,要单独提取文本字符串中...

10
C语言字符串转数字:常用函数及转换技巧详... c语言所有类型转换函数C语言提供了多种类型转换函数,包括atoi()、atol(...