掌握SQL基础:五招提升你的查询效率与技巧
SQL查询语句
<1>
<2>
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。
6.使用类似的运算符(%,_)
%代表一个或多个字符,_代表一个字符,[charlist]代表一个字符任意列中的单个字符、[^charlist]或[!charlist]字符列中不存在的任何单个字符。
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多行子查询
in和exists的区别:exists()之后的子查询称为相关子查询,不返回列表的值。
它只是返回true或false结果。
操作方法是执行一次主查询,然后在子查询中查询对应的结果。
如果属实则发放,否则不发放。
然后根据主查询中的每一行查询子查询。
in()之后的子查询返回结果集。
也就是说,执行顺序与exists()不同。
子查询首先生成结果集,然后主查询通过结果集查找符合要求的字段列表。
符合要求则输出,否则不输出。
5.3使用ALL
前面两条语句功能相同,但在从执行效率来看该函数会高很多。
5.4使用ANY
以上两条语句在功能上是相同的,但从执行效率来看该函数会高很多)
5.5子查询到大多数columns
SELECT*FROMempWHERE(job,deptno)=(SELECTjob,deptnoFROMempWHEREename='SMITH');5.6来自子查询在句子中使用子查询
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使用子查询插入数据
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。
通过掌握这些基本语句;您可以有效地操作和维护数据库,提高工作效率,保证数据的准确性和完整性。