精华内容
下载资源
问答
  • 题目:某些SELECT语句中的WHERE子句不使用索引,以下说法正确的是() A、where语句使用到"!=",将不使用索引 B、where语句使用"||",将不使用索引 C、where语句使用"+",将不使用索引 D、以上说法都正确 结果...

    题目:某些SELECT语句中的WHERE子句不使用索引,以下说法正确的是()

    A、where语句中使用到"!=",将不使用索引

    B、where语句中使用"||",将不使用索引

    C、where语句中使用"+",将不使用索引

    D、以上说法都正确

    结果:D

    解释:

    A:"!="不会使用索引,因为索引只能告诉你什么存在于表中,而不能告诉你什么不存在于表中,例子如下:

    不会使用索引:
    
    SELECT ACCOUNT_NAME
    
    FROM TRANSACTION
    
    WHERE AMOUNT != 0;
    
    使用索引:
    
    SELECT ACCOUNT_NAME
    
    FROM TRANSACTION
    
    WHERE AMOUNT > 0;
    

    B:"||"是字符连接函数,所有的函数都不会使用索引,例子如下:

    不使用索引:
    
    SELECT ACCOUNT_NAME,AMOUNT
    
    FROM TRANSACTION
    
    WHERE ACCOUNT_NAME||ACCOUNT_TYPE='AMEXA';
    
    使用索引:
    
    SELECT ACCOUNT_NAME,AMOUNT
    
    FROM TRANSACTION
    
    WHERE ACCOUNT_NAME = 'AMEX'
    
    AND  ACCOUNT_TYPE = 'A';
    

    C:"+"是数学函数,所有的函数都不会使用索引,例子如下:

    不使用索引:
    
    SELECT ACCOUNT_NAME, AMOUNT
    
    FROM TRANSACTION
    
    WHERE AMOUNT + 3000 > 5000;
    
    使用索引:
    
    SELECT ACCOUNT_NAME, AMOUNT
    
    FROM TRANSACTION
    
    WHERE AMOUNT > 2000 ;
    

    D:因为上面的三个都正确,所以D项正确

    延伸:

    相同的索引列不能互相比较,,否则将会启用全表扫描,例子如下:

    不使用索引:
    
    SELECT ACCOUNT_NAME,AMOUNT
    
    FROM TRANSACTION
    
    WHERE ACCOUNT_NAME = NVL(ACC_NAME,ACCOUNT_NAME);
    

    上面的是Oracle中的例子,NVL()函数中的第一个参数如果为null,就返回第二个参数

    如果一定要对使用函数的列启用索引,ORACLE新的功能是 基于函数的索引(Function-Based Index) 也许是一个较好的方案。

    展开全文
  • select语句的完整书写顺序如下: select distinct 字段列表 from 左表 连接类型 JOIN 右表 on 多表条件 where 条件 group by 分组字段 having 分组条件 order by 排序条件 limit 分页参数 实际执行的顺序...

    其实SQL语句并不是按照书写的顺序执行的,了解正确的执行顺序有助于我们更好的理解数据库。
    select语句的完整书写顺序如下:

    select
    distinct
    	字段列表
    from
    	左表 连接类型 JOIN 右表
    on
    	多表条件
    where
    	条件
    group by
    	分组字段
    having
    	分组条件
    order by
    	排序条件
    limit
    	分页参数
    
    

    实际执行的顺序如下:

    1、from 子句组装来自不同数据源的数据;
    	(1) FROM <left_table>
    	(2) <join_type> JOIN <right_table>,对表执行笛卡尔积(交叉联接)。
    	(3) ON <join_condition>,对 VT1 应用 ON 筛选器
    2、where 子句基于指定的条件对记录行进行筛选;
    3、group by 子句将数据划分为多个分组;
    4、使用聚集函数进行计算;
    5、使用 having 子句筛选分组;
    6、计算所有的表达式;
    7、SELECT:处理 SELECT 列表
    8、DISTINCT:将重复的行删除
    9、ORDER BY,按照条件进行排序
    10、生成最终表,返回给调用者
    
    

    以上每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只有最后一步生成的表才会给调用者。
    如果没有在查询中指定某一个子句,将跳过相应的步骤。

    展开全文
  • 基本select语句

    千次阅读 2018-05-14 10:41:41
    --------------基本select语句总结 8.6--------------------------------------------------------------------------------SQL:结构化查询语句---------------------------------一 、基 本 查 询 语 法-----------...
    --------------基本select语句总结 8.6
    
    ------------------------------------------------------------------------------
    --SQL:结构化查询语句
    ---------------------------------一 、基 本 查 询 语 法-------------------------------------------
    一.基本查询语法
    select * from emp;
    select empno,ename from emp;
    --空值不参与运算
    select empno,sal as mysal from emp; --为列重命名A
    select empno,sal,ename as "worker's name" from emp; --""表示特殊字符串引用
    select empno,sal,deptno "部门编号" from emp;        --as可以没有
    --使用||将多个列合并
    select '编号为'||empno||'的工资为'||sal||',10年的收入为'||(sal*13)*10 from emp;
    --""仅限于特殊引用,表示字符串用''


    ----------------------------------二 、过 滤 和 排 序--------------------------------------------
    二.过滤和排序
    select * from emp where deptno=20; --过滤出部门编号为20的员工信息
    Select distinct JOB From emp where JOB = 'CLERK'; --distinct过滤出不重复的数据
    Select * from emp where SAL != 800; --过滤
    --between and 可用于数字、字符、和日期类型数据. 包括800和2500
    Select * from emp where SAL Between 800 And 2500; 
    Select * from emp where empno In(7521,7900,7876); --In(某个集合)


    select * from emp where ENAME Like '%A%N%'; --模糊查询,名字中有A和N的,A在N之前
    select * from emp where ENAME Like '__M%'; --两跳,第三个字母是M的。


    Select * from emp where MGR is null; --过滤出没有上司的,这里用 IS 不是 =。


    Select * from emp where SAL > 2000 AND COMM Is null; --and
    Select * from emp where SAL>2500 OR COMM Is not null; --or


    --and,or连用,注意默认情况下and的优先级比or高
    Select * from emp where SAL>2000 AND MGR is null or job = 'ANALYST'; 


    --排序,默认ASC-升序,DESC降序
    Select * from emp  Order by sal asc,Hiredate desc; --按sal升序,sal相同按hiredate降序排列。
    Select ename name , sal salary from emp Order by salary asc; --按别名排序


    ---------------------------------------三 、单 行 函 数----------------------------------------------------
    三.单行函数:对每行输入数据进行计算得到对应的结果,单行函数可嵌套使用
    --分类:字符函数、数字函数、日期函数、转换函数、以及其它函数


    A.字符类:lower,upper,initcap,concat,substr,LPAD,RPAD,trim,replace
    select ename,lower(ename) from emp; --loewer
    select ename,lower(ename),upper(lower(ename)) from emp; --upper
    select ename,INITCAP(ename) from emp; --INITCAP 首字母大写,其余小写


    --字符处理类
    select CONCAT(empno,ename) from emp; --CONCAT:连接不同字段,只能连接两个字段。


    --SUBSTR 截取子串
    select ename,substr(ename,2) from emp; --从第二个位置截至末尾。(截掉第一个字符)
    select ename,substr(ename,2,3) from emp; --从第二个位置开始截取三个字符


    select ename,length(ename) from emp; --length:统计字符长度
    select ename,instr(ename,'A') from emp; --INSTR 求A在ename中的索引
    --LPAD,RPAD: 左右粘贴
    select empno,ename,sal,LPAD(sal,10,'$') from emp; --左粘贴 ,显示10位,不够左粘贴'$'.
    --trim两边滤空 LTRIM,RTRIM
    select TRIM('   a  b   c     ') from dual; --字符串中间的空格不管
    --replace:替换
    Select ename ,Replace(ename,'A','*') from emp;  --将A用*代替


    B.数字转换类型:ROUND,TRUNC,MOD
    Select ROUND(16.7777788888888,3) from dual; --保留三位小数,四舍五入
    Select ROUND(178.36934,-1) from dual; --整数位减少一位显示
    Select TRUNC(16.7777788888888,3) from dual; --直接截尾
    Select MOD(89,10) from dual; --MOD:取余


    C.日期类函数:MONTH_BETWEEN,ADD_MONTHS,NEXT_DAY,LAST_DAY,ROUND,TRUNC


    --MONTH_BETWEEN:两个日期的月份之差
    Select max(hiredate) from emp; --最晚工作的人
    Select min(hiredate) from emp; --最早工作的人
    select max(TO_CHAR(hiredate,'yyyy'))-min(TO_CHAR(hiredate,'yyyy')) from emp; --两者年份之差
    Select ename,hiredate,MONTHS_BETWEEN(sysdate,hiredate) from emp; --MONTHS_BETWEEN:hiredate和sysdate之间月份之差
    select max(MONTHS_BETWEEN(sysdate,hiredate)) from emp; --最早雇佣的人
    select * from emp where MONTHS_BETWEEN(sysdate,hiredate)=(select max(MONTHS_BETWEEN(sysdate,hiredate)) from emp);--最早工作人的全部信息
    --ADD_MONTHS
    select hiredate,ADD_MONTHS(hiredate,3) from emp;
    --NEXT_DAY:以当前时间为基准,下一个目标日的日期
    select NEXT_DAY(sysdate,'星期二') from dual;
    --LAST_DAY:计算当前日期的最后一天
    select LAST_DAY(sysdate) from dual;
    select LAST_DAY(hiredate)-hiredate from emp; 
    --ROUND:对日期进行四舍五入
    select ROUND(sysdate,'yyyy') from dual; --按年进行四舍五入
    select round(sysdate) from dual; --按日进行舍入
    --TRUNC:截取
    select trunc(sysdate,'D') from dual; --截取至本周第一天
    select trunc(sysdate,'MM') from dual; --截取至本月第一天
    select trunc(sysdate,'DD') from dual; --截取至本日0:00
    select trunc(sysdate,'yyyy') from dual; --截取至本年第一天
    Select TRUNC(sysdate-365) from dual; --sysdate-1:代表一天。TRUNC:截掉时分秒
    Select Sysdate-1/24/60 from dual; --一分钟之前的时间显示。




    D:转换类函数。类型转换只能发生在:数字与字符、日期与字符之间。to_char,to_date,to_number


    to_char:转换数字为字符,转换日期为字符 
    --tochar(date,'fmt')
    select TO_CHAR(sal,'$999,999.00') from emp; --按千分位保留两位小数显示,L 本地货币符号显示
    --数字类型格式控制符:9-代表一位数字,有显示,无不显示。0-强制显示该位,无以0显示
               --$,L:货币符号显示。,. :千分位、小数位显示


    select TO_CHAR(123.235,'L999.00') from dual; --需要显示的位数不能比原来少
    select TO_CHAR(sysdate,'"今天是"yyyy-mm-dd DAY MON HH24:MI:SS PM') from dual;--p41
    select TO_CHAR(sysdate,'"今天是"YYYY YEAR DAY ') from dual;
    --日期类格式控制符:year:年的拼写。MONTH:月的拼写。DAY:星期的拼写。MON:月的缩写。DY:星期的缩写。
    --其它时间格式控制符:AM:早上或下午。HH24:24小时制。SP:数字的拼写。TH:数字的序列词。"":特殊字符。


    TO_DATE:将字符串转换为日期格式,格式要匹配。
    select TO_DATE('01-5月-04') from dual; --隐式转换,因为字符串与默认日期格式完全匹配。默认日期格式:DD-MON-YY
    select TO_DATE('2008年-01-01','yyyy"年"-mm-dd') from dual; --转换格式要和原格式完全匹配。
    select TO_DATE('2008.8.4','yyyy.mm.dd') from dual; --格式匹配
    Select TO_DATE('2008-01-01 星期二 10:36:31 上午','YYYY-MM-DD DAY HH:MI:SS PM') From DUAL


    TO_NUMBER:将字符串转换为数字。
    注意:格式必须要匹配.
    Select TO_NUMBER('$1,600.01','$999,999.99') From DUAL


    E:其它函数
    --与空值相关的函数:NVL(exper1,exper2),NVL2(exper1,exper2,exper3),NULLIF(exper1,exper2),COALESCE(exper1,……,expern)
    select comm,NVL(comm,200) from emp; --每有的以200显示,NVL的两个参数类新需匹配,否则出错
    select SAL,comm,NVL2(comm,sal+comm,sal) from emp; --NVL2,comm不为空则显示sal+comm,否则显示sal。
    select ENAME,JOB,NULLIF(LENGTH(ename),5) from emp; --NULLIF,判断是否相等,相等返回null否则返回表达式1。
    select * from emp where NULLIF(LENGTH(ename),5) is NULL; --显示emp表中所有名字长为5的数据记录。
    --coalesce找到第一个不为空的表达式,返回
    select MGR,COMM,EMPNO,coalesce(MGR,COMM,empno,88) from emp; --coalesce:逐个判断,成立显示,否则向后


    --条件表达式:case+字段名,when……then……else……end,decode()
    select JOB,case job when'CLERK'then'店员'when'SALESMAN'then'销售'when'MANAGER'then'经理'else'其他'end from emp;
    select job,decode(job,'CLERK','店员','SALESMAN','销售','MANAGER','经理','其它')from emp;
    按工作种类调整工资
    select job,sal,decode(job,'CLERK',sal,'SALESMAN',sal*1.2,'MANAGER',sal*1.8,sal) from emp;




    -------------------------------- 四、分  组  函  数------------------------------------
    四.分组函数:是多行函数,对多行值进行计算,得到多行对应单个结果。
    对每个表数据进行分组,得到多组结果,对每组记录进行计算,每组分别返回一个结果,最终产生多个组对应的数据集合
    select job,max(sal),min(sal),avg(sal),sum(sal),count(distinct deptno) from emp group by job;
    注意:a.所有包含在select列表不再组函数中的字段都必须在GROUP BY中。
          b.group by可以和where搭配,where只能在group by前面,where子句中不能包含任何组函数。
    select job from emp where sal=(select max(sal) from emp) group by job; --此处where子句不能直接用组函数,只能使用子查询。
    select job from emp where sal>2000 group by job;


    使用HAVING子句对分组结果进行过滤
    select max(sal),min(sal),deptno,sal from emp group by deptno,sal HAVING sal>2000;
    组函数的嵌套最多嵌套两层,如果一个使用组函数查询没有group by子句,那么组函数不能嵌套。




    --------------------------------五 、子   查   询--------------------------------------------
    五.子查询
    语句内部的子句,
    Select * From EMP Where SAL>(Select SAL From EMP Where ENAME='ALLEN');


    a.注意:
    A.子查询总是先于主语句的运行
    B.必须有(),表示是一个整体
    C.习惯上,把子查询放在条件的右边
    D.单行操作符只能接受一个值
    单行:> < >= <=等


    b.子查询的分类:
    A.单行
    B.多行


    c.单行的语法
    select 字段 from 表 where 字段 >[单行] (子查询)


    d.多行
    in ,all,any
    in:表示在一个区间内
    select * from emp where ename in (
    select ename from emp where sal>2000
    )


    any:
    > any:从子查询中取一个最小的
    < any:从子查询中取一个最大的


    all
    >all :从子查询中取一个最大的
    <all:从子查询中取一个最小的


    ------------------------------- 六、多 表 连 接-------------------------------
    六.多表连接
    数据来源于多个表,通过表之间的关系取出对应的行数据。查询通常建立在存在相互关系的父子表上
    多表连接的分类:等值连接、非等值连接、外连接和自连接四种。从Orcale 9i开始增加了对新的SQL标准-SQL1999的支持。


    A.等值连接:通常建立在存在主外键约束条件的多表上,两个字段通过等号建立等值关系。
    select * from emp,dept; --产生笛卡尔集:两个表任意组合的结果。
    select * from emp e,dept d where e.deptno=d.deptno; 
    select ename,job,dname,sal,e.deptno,d.deptno from emp e,dept d where e.deptno=d.deptno and sal>2000;
    (1)列只出现一次不需要加前缀,明确定义可以提高效率,别名可以提高查找效率。
    (2)不同的连接条件可以使用and或or
    (3)当然,你可以为表定义一个别名,但是不能使用as(字段重命名可以使用)    


    B.不等值连接:一个表中的记录,在另一个表中能够找到匹配的记录即可
    Select e.*,g.grade From emp e,salgrade g Where e.sal Between g.losal And g.hisal; --查询员工的工资级别


    C.外连接:把不满足条件的数据显示出来
    Select * From EMP E,DEPT D Where E.DEPTNO=D.DEPTNO(+)
    外连接可以在左表,也可以在右表,但只能出现一次。
    左连接  将产生以表达式右边的字段为依据的查询效果,即右边所有数据和左边和右边匹配的数据。


    D.自连接:一个表被虚拟成两个表,查看两个相关字段的信息。
    select e.ename||' works for :'||e2.ename from emp e,emp e2 where e.mgr=e2.empno; --自查询,查询每个人老大的名称


    E.SQL99新标准下的多表连接
    (1)CROSS JOIN:交叉连接
      select * from emp cross join dept; --产生笛卡尔集
    (2)NATURAL JOIN:自然连接,默认将名称相同的列进行连接。
      select * from emp natural join dept; 
      select * from emp e,dept d where e.deptno=d.deptno; --和自然连接的效果一样
    (3)用 using 字句进行指定连接条件连接
      select * from emp Join dept using(deptno);
    (4)使用 on 来指定连接具体条件
      Select * From EMP Join DEPT On  emp.deptno=dept.deptno And EMP.DEPTNO=20
    (5)多个表连接查询
      Select  E.ENAME,E.SAL,D.DNAME,S.GRADE
     FROM EMP E Join DEPT D On E.DEPTNO=D.DEPTNO 
      Join SALGRADE S On E.SAL Between S.LOSAL And S.HISAL
    (6)外连接:
      与内连接的区别:
      内连接========查询条件相等的记录(能够匹配的)
      外连接========条件相等的+没匹配的
      select * from EMP E  Left Outer join DEPT D on E.DEPTNO=D.DEPTNO; --LEFT OUTER JION
      select * from EMP E  Right Outer join DEPT D on E.DEPTNO=D.DEPTNO; --LEFT OUTER JION
      select * from EMP E  Full Outer join DEPT D on E.DEPTNO=D.DEPTNO; --LEFT OUTER JION
      LEFT OUTER JOIN……ON:左外连接,返回左边所有的值及右边匹配的值。(和上面的外连接刚好相反) 




    ------------------------------------ 七、数 据 处 理-----------------------------------
    七、数据处理
    DML:DATA Market language
    insert
    update
    delete
    这三类的操作对数据会产生影响,牵涉到"事务"


    1.写入数据:
    语法: insert into 表(列1,列2) values(值1,值2)
    Insert Into EMP(EMPNO,ENAME,JOB,SAL) Values(1234,'ZHANGSHAN','MANAGER',8000)
    rollback
    注意:
    A.表后面()内表示的是字段名称
    Values()内表示是字段所对应的值


    B.值要与列所表示的数据类型对应
    C.值的个数要和列的个数对应
    D.注意顺序,对应
    E.没有指定值的列默认为null
    查询的时候,可以使用is null来提取
    F.写入的数据只在当前窗口内是有效的,打开一个新的SQL Window就无效


    如果需要持久性保存下来
    需要进行事务处理




    事务:所谓事务,就是一组操作单元,事务提交,再语句的结果全部生效,如果回滚,全部撤销


    事务操作
    A.提交commit
    B.rollback
    C.回滚到指定的点




    --insert的值可以是一个固定的取值,比如sysdate,序列等
    Insert Into EMP(EMPNO,ENAME,JOB,SAL,comm,hiredate) Values(1238,'ZHANGSHAN','MANAGER',8000,Null,Sysdate)
    Insert Into emp(empno,ename,hiredate) Values(2222,'zhangshan',to_date('2008-08-08','yyyy-mm-dd'))


    --使用Insert从其他表中拷贝数据
    Insert Into emp(empno,ename) select deptno,dname from dept;
    insert into temp_1(select * from emp where sal > 3000);


    2.使用变量是执行sql语句
    --在sql中,可以是"&变量名称"来定义表名,字段名,值等信息
    Insert Into emp(empno,&filedname,hiredate) Values(&请输入编号,'&人员姓名',to_date('2008-08-08','yyyy-mm-dd'))




    3.使用insert语句从其他表中拷贝数据
    Insert Into EMP(EMPNO,ENAME) Select DEPTNO,DNAME From DEPT


    注意:
    A.字段类型要对应
    B.字段个数要对应


    4.更新操作
    语法:update 表 set 字段=值 where 条件
    Update emp Set ename='zhangshan',job='manager' Where empno=7369


    注意:
    A.不同的字段用逗号隔开
    B.如果没有指定条件,默认更新所有的记录




    5.在更新语句中使用子查询
    Update emp Set sal=(
           Select sal From emp Where ename='SMITH'
    ),job=(
    Select job From emp Where ename='ALLEN'
    ) Where empno=7521


    6.关于更新时发生的数据关联问题
    如果一个字段的值的来源是另外一个表,比如emp表中的deptno,其值不能随意指定,因为deptno的值引用自dept表中的deptno字段


    Update emp Set deptno=55 Where empno=7499  ---error
    因为dept表中如果没有deptno为55的记录,会出现数据完整性约束问题


    Update emp Set deptno=10 Where empno=7499---ok


    7.删除记录
    delete [from] table where condition
    如:
    Delete From emp Where empno=1234


    条件可以为多个
    Delete From emp Where empno=7369 And ename='SMITH'


    8.使用子查询执行delete操作
    Delete EMP Where ENAME=(
    Select ENAME From EMP Where SAL=(Select Max(SAL) From EMP)
    )


    9.关于删除的完整性约束:
    如果一个字段被另外一个表的字段引用,那个这个值就不能删除


    delete from dept where deptno=40
    可以删除,因为在emp表中没有某个人在40部门下面


    delete from dept where deptno=30
    出现数据完整性约束条件错误,因为30号部门被引用


    10.事务管理
    事务:一组操作单元
    同进同出
    你可以设置一个保存点,必要的时候可以退到某个指定的位置
    Insert Into EMP(EMPNO,ENAME,JOB,SAL) Values(1236,'ZHANGSHAN','MANAGER',8000)
    Savepoint insert_done;
    Insert Into EMP(EMPNO,ENAME,JOB,SAL) Values(1235,'ZHANGSHAN','MANAGER',8000)
    Insert Into EMP(EMPNO,ENAME,JOB,SAL,comm,hiredate) Values(1238,'ZHANGSHAN','MANAGER',8000,Null,Sysdate)


    Rollback To insert_done
    有些场合下,事务是自动来提交的
    比如创建或修改表的时候






    --------------------------八 、创建和管理数据--------------------------
    数据库表主要分为几大类
    A.系统表  B.自定义表  C.数据字典表
    Select * From USER_TABLES
    Select * From USER_SEQUENCES


    1.命名规则
    A.表名长度必须在30位以内  B.表名要避开关键词  C.表名要有意义


    2.创建表
    语法规则类似于:
    Create Table MYTABLE(Id Number(4,2),Name Varchar2(20),AGE Number(3));
    你可以在创建表的同时,指定默认值
    create table DEMO2(dname varchar2(20),dage number(3) check (dage  between 10 and 150),hiredate date default sysdate);


    3.查看其他用户的表
    以sys身份可以看到scott用户下的表
    select * from scott.emp
    反之,scott不能看sys用户下的表的信息


    4.默认值的指定
    Create Table A1(
    Id Number(4),
    BIRTHDAY Date Default TO_DATE('2008-08-08','YYYY-MM-DD')
    )


    5.字段类型的定义
    char---定长字符串
    varchar2----变长字符串


    char(20)   abcd---------20
    varchar(20) abcd--------4


    NUMBER(N):表示整数位不能大于n个,小数位可以任意
    number(m,n):表示总长度为m位,其中小数位为n,整数为为m-n


    Date 类型:可以使用to_date把字符串类型转换为date类型
    BLOB:大的二进值对象,可以用来存储图片,视频文件等信息


    6.使用子查询来创建表
    create table 表名 as 子查询


    create table t3 as select * from emp where sal>2000;


    7.更新表的结构
    alter table
    A.追加列
    Alter Table userinfo Add (addr Varchar2(20) Default 'beijing')


    B.修改列
    Alter Table userinfo Modify (age Number(6))
    使用modify可以修改数据类型,长度,默认值
    请注意:对默认值的修改,只对后面的数据才有效


    C.删除列
    Alter Table userinfo Drop Column age


    8.删除表的定义
    drop table 表的名称
    drop table emp;


    9.对表进行重命名
    使用rename .... to
    比如:RENAME A TO B
    注意:这个表是你的,你是这个对象的所有者


    提示:
    在PLSQL中,添加记录的两种方式
    A.可以使用insert语句   B.直接在工具里面直接编辑
    前提:必须获得一个可更新的结果集
    B1:SELECT * FROM EMP FOR UPDATE
    B2:select t.*, t.rowid from userinfo t


    10.删除表的内容
    两种方式
    A.delete删除
    B.truncate清空表的内容


    区别:
    delete:从数据库的缓存区清除该数据
    truncate:把数据删除了,然后清空所占用的空间


    delete可以撤销
    truncate不能撤销
    truncate===delete+commit


    TRUNCATE 语法
    TRUNCATE TABLE EMP;


    TRUNCATE和drop 区别
    drop:删除表的定义,整个对象删掉,删除的是对象的本身,全部
    truncate:删除表的内容,只是删除数据,表的结果会保留


    11.注释
    分两种
    A.表   B.字段
    表的注释
    COMMENT ON TABLE EMP IS 'MY DEMO'


    列的注释
    COMMENT ON COLUMN EMP.ENAME IS '我的注释'


    12.从plsql工具中导出表的信息
    TOOLS---EXPORT TABLES---SQL INSERTS


    ---------------------------九 、约束----------------------------
    约束:主要是用来限定内容                 作用对象:表
    1.约束分类
    五大类
    A.非空
    B.唯一
    C.主键:非空+唯一
    D.外键:值是外来的
    E.检查:值是符合条件


    2.注意事项
    A.可以给约束起个名字,也可以是使用默认的名字
    B.创建的两种时机
       创建表的同时/修改表的定义的时候
    C.约束的定义位置
    表级/列级
    D.在字典表中可以查看到这些约束信息
    表的定义:user_tables
    约束的定义:user_constraints
    使用SELECT * FROM USER_CONSTRAINTS语句可以查看到所有的约束信息


    注意:以后如果出现:ORA-01400:无法将null写入用户.表.字段,表示该字段必须要赋一个值


    3.not null约束
    用来修饰字段的     表示该列的值不能为null


    定义位置:not null只能在列级
    列级:区别于表级
    表级:定义的时候,与字段用逗号分开,和字段是同一语句级别
    列级:定义的时候,紧跟在字段的后面
    CREATE TABLE employees(employee_id  NUMBER(6),first_name   VARCHAR2(20),
           ...
    job_id       VARCHAR2(10) NOT NULL,CONSTRAINT emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID));


    上面的例子中
    not null=======列级
    CONSTRAINT emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID)代表一个表级的定义


    4.unique唯一约束
    是用来修饰一个字段的,内容的unique要求字段内容不能有重复


    unique定义位置
    A.表级(自定义名称)   B.列级(使用系统默认名称)


    基本语法:
    列级:字段名 unique
    表级:,constraints uni_名称 unique(字段名)


    例子:
    CREATE TABLE T4(
    ID NUMBER(4) UNIQUE,--column
    NAME VARCHAR2(20),
    AGE NUMBER(3),
    CONSTRAINTS UNI_NAME UNIQUE(NAME)--table
    )


    5.主键约束
    也是用来约束字段的,要求其内容必须不能为null,也不能重复
    PRIMARY KEY:主键==not null+unique


    定义位置:
    A.表级   B.列级


    定义方式
    列级:字段名 primary key
    表级:constraints pk_id primary key(id)
    一般情况下,我们在创建表的同时,都会为表指定一个主键,用来唯一标识一条记录,以便在程序中实现修改,删除等业务逻辑操作时,根据该主键标识来准确定位到要操作的记录




    联合主键:
    把多个字段合起来作为一个主键,要求多个字段每一项都不能为null,并且合起来的值不能重复.


    6.外键约束
    外来的键值,如EMP表的deptno字段引用了dept表中的deptno字段
    我们认为:emp表中的deptno是一个外键,emp.deptno不能任意指定,只能从dept.deptno的值中任意选一个


    外键约束定义的位置:
    A.表级   B.列级


    语法定义格式:constraints 自定义名称 FOREIGN KEY (字段名) references 表名(字段名)


    使用外键约束的条件:如果A表引用B表中的字段id
    条件有两个:B表中的id必须有主键约束 或 唯一性约束


    删除表的方式:A.drop table   B.工具中drop


    列级外键定义:直接在列名的后面 references dept(deptno) 


    7.关于外键的删除级联设置
    联动的效果,我们可以在父项进行删除的时候,让子项联动


    两种方式
    A.on delete cascade:级联删除
    B.on delete set null(不引用)


    外键引用时的值的选择:A.要么为null  B.要么从父表中取一个值


    8.CHECK约束
    check:对某个字段的值的约束,要求该字段的每一行都必须满足的条件,它以一种很直观的方式,来限定你的行值


    CREATE TABLE STAFF(
    STAFFID NUMBER(5),
    NAME VARCHAR2(20) CHECK(NAME IN ('A','B','C'))
    )


    定义位置:
    可以表级也可以是列级


    9,约束的添加
    语法:alter table 表名 add primary key (字段名称)
    实例:ALTER TABLE STAFF ADD PRIMARY KEY (NAME)


    10.删除已存在的约束
    ALTER TABLE 表名 drop constraints 约束名
    比如:ALTER TABLE STAFF DROP CONSTRAINTS SYS_C003042


    11.级联删除约束
    在删除约束的同时,也删除跟该字段有关系的约束设置
    ALTER TABLE DEPT DROP CONSTRAINT PK_DEPT CASCADE
    该代码执行后:emp表中的外键引用就不存在了


    12.有效化和无效化约束
    使用disable和enable关键词
    ALTER TABLE EMP DISABLE CONSTRAINT PK_EMPNO
    ALTER TABLE EMP ENABLE CONSTRAINT PK_EMPNO


    13.从数据字典中查询
    select * from user_constraint:查询对应的表
    SELECT * FROM USER_CONS_COLUMNS:查询对应的列




    ------------------------十 、视图----------------------------
    10g:以DBA的身份登录(sys,Oracle),在Command Window中输入以下命令:grant create view to scott;


    视图:逻辑上的数据集合
    逻辑上:区别于物理上
    物理上:表示真实的,现实存在
    逻辑上:虚的数据,来源于真实的表


    比如,我们可以为emp创建一个视图:
    CREATE OR REPLACE VIEW EMP_VIEW AS SELECT EMPNO,ENAME,JOB,HIREDATE FROM EMP


    以后如果想要EMPNO,ENAME,JOB,HIREDATE这些数据,就可以不必访问emp了,直接从视图中来查找
    作用:a.控制数据访问 b.简化查询 c.数据独立性 d.避免重复访问相同的数据


    1.创建格式:
    create or replace view 视图名词 as 数据集合(通常是一个查询语句)


    2.在创建视图的时候,可以使用别名
    CREATE OR REPLACE VIEW EMP_VIEW AS 
    SELECT empno employee_number,ename employee_name,job type,hiredate birthday FROM EMP


    3.修改视图:
    create or replace view myview as select...


    4.视图创建的规则
    视图的内容可以是任意的集合
    CREATE OR REPLACE VIEW EMP_VIEW AS 
    SELECT JOB,MAX(SAL) AS MAXSAL,MIN(SAL) AS MINSAL,
    (MAX(SAL)-MIN(SAL)) AS SAL,COUNT(*) NUM,AVG(SAL) AVGSAL 
    FROM EMP GROUP BY JOB 
    HAVING JOB IS NOT NULL




    5.区别:
    A语句:CREATE OR REPLACE VIEW JOB_VIEW AS 
          SELECT DISTINCT(JOB) FROM EMP WHERE JOB IS NOT NULL
    B语句:CREATE TABLE JOB_TEMP AS SELECT DISTINCT(JOB) FROM EMP WHERE JOB IS NOT NULL


    主要区别:
    共同点:都做到了:数据被独立出来


    最大不同:JOB_TEMP是一个物理的表,是要占用很多的数据库空间的,
    相当于硬盘上的资料被拷贝了一份


    JOB_VIEW:数据还是同一份,不会多占空间,JOB_VIEW相当于是一个"快捷方式"


    视图数据的来源===基础表
    对基础表的数据的改变将会影响到视图,视图本身并不保存数据,只是对相关数据集合的一个引用而已
    简单视图操作的数据和基础表中的数据是"同一份"


    复杂视图不能使用DML:
    原因:数据已经被整合了,如果被改变,无法和基础表的数据对应了


    6.删除视图:
    drop view 视图名称,删除视图是对基础表不会产生任何的影响


    7.TOP-N分析:
    使用到一个关键的列名:rownum
    rownum:行编号
    伪列:虚拟的列,你并没有在表中人为的添加这个列,
    但是当你使用rownum关键词,oracle服务器能够解析


    使用的方式
    rownum<或<=
    因为它总是从第一行开始


    例外:
    ROWNUM=1不会为null


    分页查询的变通方式:查询第三行到第八行之间的数据
    SELECT * FROM (SELECT e.*,ROWNUM AS RN FROM EMP e) WHERE RN BETWEEN 3 AND 8;
    --方法二
    select * from emp where rownum <= 8
    minus
    select * from emp where rownum <3;


    --------------------十一 、其它数据库对象---------------------
    数据库主要对象:表、视图、序列、索引、同义词
    表:数据集合
    视图:逻辑上数据集
    序列:有规律数值(不为null且唯一的键值)
    索引:定位记录
    同义词:类似于别名


    1.序列:
    A.共享的   B.提供有规律的数值


    提取方式:序列名.nextval
    select seq.nextval from emp
    INSERT INTO EMP(EMPNO) VALUES(MYSEQ.NEXTVAL)


    2.查询已定义的序列
    SELECT * FROM USER_SEQUENCES


    3.使用序列的约束
    nextval 下一个值 , currval  表示当前值
    currval的值必须在nextval被指定后才有效


    4.删除序列
    drop sequence myseq


    5.索引:
    一种典型的数据库对象
    作用:提交数据的查询效率,尤其对一些数据量很大的表
    索引是用来为表服务的
    索引是oracle服务器自动来使用(索引区的查找是oracle自动的)和维护(当记录发生变化的时候,索引区会自动随之更改)


    6.定义
    定义的两种方式 
    A.自动创建:
    主键 或 唯一性约束


    B.手动创建
    CREATE INDEX ENAME_IDX ON emp(ename)


    7.索引的创建时机问题:
    两种情况下一般都要创建一个索引:
    列经常被用来做条件查询的时候
    表数据量很大的时候


    下列情况不要创建索引:
    表很小
    列不经常作为连接条件或出现在WHERE子句中
    查询的数据大于2%到4%
    表经常更新


    8.同义词
    为对象起一个同义的名称
    目的:为了缩短对名称长度的引用


    创建方式:
    synonym:CREATE SYNONYM  同义词名词 for 对象(scott.emp)


    CREATE SYNONYM SN_EMP FOR  SCOTT.EMP
    CREATE SYNONYM SN_DEPT FOR SCOTT.DEPT
    SELECT * FROM SN_EMP E,SN_DEPT D WHERE E.DEPTNO=D.DEPTNO


    9.集合操作符
    三大类
    合集:union/union all
    交集:intersect
    差集:minus


    合并集合:
    SELECT * FROM EMP WHERE SAL>2000
    UNION
    SELECT * FROM EMP WHERE JOB='MANAGER'


    注意:
    A.不同的表合并时,要注意字段个数要对象
    B.类型要对应
    C.显示的字段是第一个表的字段列名为新的集合的列名
    使用union all保留重复的记录
    intersect交集
    不保留重复的
    minus


    分页查询
    两种方式
    SELECT * FROM (
           SELECT ENAME,EMPNO,JOB,ROWNUM RN FROM EMP
    ) WHERE RN BETWEEN 3 AND 9
    A.使用rownum限定
    select * from emp where rownum <= 8
    minus
    select * from emp where rownum < 3
    B.minus集合操作符


    10.关于dual表的使用
    dual是一个虚表
    其表中只是返回一条记录
    作用:A.计算数值
         B.提取系统的某些值,比如user,sysdate
         C.转换


    DUAL和其他的表的区别
    SELECT UPPER('smITh') FROM DUAL   只返回一条
    SELECT UPPER('smITh') FROM EMP    返回N条











































































































































































































































































































































    展开全文
  • SELECT语句

    2007-12-04 10:57:00
    整理了一下SELECT语句的一点用法,不过这是SQL SERVER 2000 下的,整体的语法和informix 的SQL语法差不多,仅供参考,对于初学SQL语句的新手来说还是有帮助的,嘿嘿~~~ 其实我就是新手,以后还请各位大侠多多执教...
    整理了一下SELECT语句的一点用法,不过这是SQL SERVER 2000 下的,整体的语法和informix 的SQL语法差不多,仅供参考,对于初学SQL语句的新手来说还是有帮助的,嘿嘿~~~ 其实我就是新手,以后还请各位大侠多多执教!!!
    SELECT
    从数据库中检索行,并允许从一个或多个表中选择一个或多个行或列。虽然 SELECT 语句的完整语法较复杂,但是其主要的子句可归纳如下:
    SELECT select_list
    [ INTO new_table ]
    FROM table_source
    [ WHERE search_condition ]
    [ GROUP BY group_by_expression ]
    [ HAVING search_condition ]
    [ ORDER BY order_expression [ ASC | DESC ] ]
    可以在查询之间使用 UNION 运算符,以将查询的结果组合成单个结果集。
    语法
    SELECT statement ::=
       < query_expression >
       [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] }
           [ ,...n ]    ]
       [ COMPUTE
           { { AVG | COUNT | MAX | MIN | SUM } ( expression ) } [ ,...n ]
           [ BY expression [ ,...n ] ]
       ]
       [ FOR { BROWSE | XML { RAW | AUTO | EXPLICIT }
               [ , XMLDATA ]
               [ , ELEMENTS ]
               [ , BINARY base64 ]
           }
    ]
       [ OPTION ( < query_hint > [ ,...n ]) ]
    < query expression > ::=
       { < query specification > | ( < query expression > ) }
       [ UNION [ ALL ] < query specification | ( < query expression > ) [...n ] ]
    < query specification > ::=
       SELECT [ ALL | DISTINCT ]
           [ { TOP integer | TOP integer PERCENT } [ WITH TIES ] ]
           < select_list >
       [ INTO new_table ]
       [ FROM { < table_source > } [ ,...n ] ]
       [ WHERE < search_condition > ]
       [ GROUP BY [ ALL ] group_by_expression [ ,...n ]
           [ WITH { CUBE | ROLLUP } ]
       ]
       [HAVING <search_condition>]
    由于 SELECT 语句的复杂性,下面按子句说明详细的语法元素和参数:
    SELECT 子句
    指定由查询返回的列。
    语法
    SELECT [ ALL | DISTINCT ]
       [ TOP n [ PERCENT ] [ WITH TIES ] ]
       < select_list >
    < select_list > ::=
       {    *
           | { table_name | view_name | table_alias }.*
           |     { column_name | expression | IDENTITYCOL | ROWGUIDCOL }
               [ [ AS ] column_alias ]
           | column_alias = expression
       }    [ ,...n ]
    参数
    ALL
    指定在结果集中可以显示重复行。 ALL 是默认设置。
    DISTINCT
    指定在结果集中只能显示唯一行。为了 DISTINCT 关键字的用途,空值被认为相等。
    TOP n [PERCENT]
    指定只从查询结果集中输出前 n 行。 n 是介于 0 4294967295 之间的整数。如果还指定了 PERCENT ,则只从结果集中输出前百分之 n 行。当指定时带 PERCENT 时, n 必须是介于 0 100 之间的整数。
    如果查询包含 ORDER BY 子句,将输出由 ORDER BY 子句排序的前 n 行(或前百分之 n 行)。如果查询没有 ORDER BY 子句,行的顺序将任意。
    WITH TIES
    指定从基本结果集中返回附加的行,这些行包含与出现在 TOP n (PERCENT) 行最后的 ORDER BY 列中的值相同的值。如果指定了 ORDER BY 子句,则只能指定 TOP ...WITH TIES
    < select_list >
    为结果集选择的列。选择列表是以逗号分隔的一系列表达式。
    *
    指定在 FROM 子句内返回所有表和视图内的所有列。列按 FROM 子句所指定的由表或视图返回,并按它们在表或视图中的顺序返回。
    table_name | view_name | table_alias.*
    * 的作用域限制为指定的表或视图。
    column_name
    是要返回的列名。限定 column_name 以避免二义性引用,当 FROM 子句中的两个表内有包含重复名的列时会出现这种情况。例如, Northwind 数据库中的 Customers Orders 表内都有名为 ColumnID 的列。如果在查询中联接这两个表,可以在选择列表中将客户 ID 指定为 Customers.CustomerID
    expression
    是列名、常量、函数以及由运算符连接的列名、常量和函数的任意组合,或者是子查询。
    IDENTITYCOL
    返回标识列。有关更多信息,请参见 IDENTITY (属性)、 ALTER TABLE CREATE TABLE
    如果 FROM 子句中的多个表内有包含 IDENTITY 属性的列,则必须用特定的表名(如 T1.IDENTITYCOL )限定 IDENTITYCOL
    ROWGUIDCOL
    返回行全局唯一标识列。
    如果在 FROM 子句中有多个表具有 ROWGUIDCOL 属性,则必须用特定的表名(如 T1.ROWGUIDCOL )限定 ROWGUIDCOL
    column_alias
    是查询结果集内替换列名的可选名。例如,可以为名为 quantity 的列指定别名,如 "Quantity" "Quantity to Date" "Qty"
    别名还可用于为表达式结果指定名称,例如:
    USE Northwind
    SELECT AVG(UnitPrice) AS 'Average Price'
    FROM [Order Details]
    column_alias
    可用于 ORDER BY 子句。然而,不能用于 WHERE GROUP BY HAVING 子句。如果查询表达式是 DECLARE CURSOR 语句的一部分,则 column_alias 不能用在 FOR UPDATE 子句中。
    INTO 子句
    创建新表并将结果行从查询插入新表中。
    用户若要执行带 INTO 子句的 SELECT 语句,必须在目的数据库内具有 CREATE TABLE 权限。 SELECT...INTO 不能与 COMPUTE 子句一起使用。有关更多信息,请参见事务和显式事务。
    通过在 WHERE 子句中包含 FALSE 条件,可以使用 SELECT...INTO 创建没有数据的相同表定义(不同表名)。
    语法
    [ INTO new_table ]
    参数
    new_table
    根据选择列表中的列和 WHERE 子句选择的行,指定要创建的新表名。 new_table 的格式通过对选择列表中的表达式进行取值来确定。 new_table 中的列按选择列表指定的顺序创建。 new_table 中的每列有与选择列表中的相应表达式相同的名称、数据类型和值。
    当选择列表中包含计算列时,新表中的相应列不是计算列。新列中的值是在执行 SELECT...INTO 时计算出的。
    在此次发布的 SQL Server 版本中, select into/bulkcopy 数据库选项对是否可以使用 SELECT INTO 创建永久表没有影响。对包括 SELECT INTO 在内的某些大容量操作的记录量,取决于对数据库有效的恢复模式。有关更多信息,请参见使用恢复模型。
    在以前发布的版本中,如果设置了 select into/bulk copy ,则可用 SELECT INTO 创建永久表。
    select into/bulk copy
    用于向后兼容,但在以后的版本中可能不支持该选项。有关更多信息,请参考 " 恢复模式 " " 向后兼容性 " 主题以及 ALTER DATABASE 主题。
    FROM 子句
    指定从其中检索行的表。需要 FROM 子句,除非选择列表只包含常量、变量和算术表达式(没有列名)。有关更多信息,请参见 FROM
    语法
    [ FROM { < table_source > } [ ,...n ] ]
    < table_source > ::=
       table_name [ [ AS ] table_alias ] [ WITH ( < table_hint > [ ,...n ] ) ]
       | view_name [ [ AS ] table_alias ]
       | rowset_function [ [ AS ] table_alias ]
       | OPENXML
       | derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]
       | < joined_table >
    < joined_table > ::=
        < table_source > < join_type > < table_source > ON < search_condition >
       | < table_source > CROSS JOIN < table_source >
       | < joined_table >
    < join_type > ::=
       [ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ]
       [ < join_hint > ]
       JOIN
    参数
    < table_source >
    指定用于 SELECT 语句的表、视图、派生表和联接表。
    table_name [[AS] table_alias ]
    指定表名和可选别名。
    view_name [ [ AS ] table_alias ]
    指定名称、视图和可选别名。
    rowset_function [ [AS] table_alias ]
    是行集函数名和可选别名。有关行集函数列表的更多信息,请参见行集函数。
    OPENXML
    XML 文档上提供行集视图。有关更多信息,请参见 OPENXML
    WITH ( < table_hint > [ ,...n ] )
    指定一个或更多表提示。有关表提示的更多信息,请参见 FROM
    derived_table [ [ AS ] table_alias ]
    是嵌套 SELECT 语句,可从指定的数据库和表中检索行。
    column_alias
    替换结果集内列名的可选别名。
    <joined_table>
    是两个或更多表的积的结果集。例如:
    SELECT *
    FROM tab1 LEFT OUTER JOIN tab2 ON tab1.c3 = tab2.c3
       RIGHT OUTER JOIN tab3 LEFT OUTER JOIN tab4
           ON tab3.c1 = tab4.c1
           ON tab2.c3 = tab4.c3
    对于多个 CROSS 联接,请使用圆括号来更改联接的自然顺序。
    <join_type>
    指定联接操作的类型。
    INNER
    指定返回所有相匹配的行对。废弃两个表中不匹配的行。如果未指定联接类型,则这是默认设置。
    LEFT [OUTER]
    指定除所有由内联接返回的行外,所有来自左表的不符合指定条件的行也包含在结果集内。来自左表的输出列设置为 NULL
    RIGHT [OUTER]
    指定除所有由内联接返回的行外,所有来自右表的不符合指定条件的行也包含在结果集内。来自右表的输出列设置为 NULL
    FULL [OUTER]
    如果来自左表或右表的某行与选择准则不匹配,则指定在结果集内包含该行,并且将与另一个表对应的输出列设置为 NULL 。除此之外,结果集中还包含通常由内联接返回的所有行。
    <join_hint>
    指定联接提示或执行算法。如果指定了 <join_hint> ,也必须明确指定 INNER LEFT RIGHT FULL 。有关联接提示的更多信息,请参见 FROM
    JOIN
    表示联接所指定的表或视图。
    ON <search_condition>
    指定联接所基于的条件。此条件可指定任何谓词,但通常使用列和比较运算符。例如:
    SELECT ProductID, Suppliers.SupplierID
       FROM Suppliers JOIN Products
       ON (Suppliers.SupplierID = Products.SupplierID)
    当条件指定列时,列不必有相同的名称或相同的数据类型。但是如果数据类型不同,则它们必须是兼容或可由 Microsoft? SQL Server? 进行隐性转换的类型。如果数据类型不能隐式转换,则条件必须使用 CAST 函数显式转换数据类型。
    有关搜索条件和谓词的更多信息,请参见搜索条件。
    CROSS JOIN
    指定两个表的矢量积。返回同样的行,就像要联接的表只列于 FROM 子句中,并且未指定 WHERE 子句。例如,这两个查询返回的结果集都由 T1 T2 中所有行的完全联接组成:
    SELECT * FROM T1, T2
    SELECT * FROM T1 CROSS JOIN T2
    WHERE 子句
    指定用于限制返回的行的搜索条件。
    语法
    [ WHERE < search_condition > | < old_outer_join > ]
    < old_outer_join > ::=
       column_name { * = | = * } column_name
    参数
    <search_condition>
    通过使用谓词限制结果集内返回的行。对搜索条件中可以包含的谓词数量没有限制。有关搜索条件和谓词的更多信息,请参见搜索条件。
    < old_outer_join >
    使用不标准的产品专用语法和 WHERE 子句指定外联接。 *= 运算符用于指定左向外联接, =* 运算符用于指定右向外联接。
    下例指定一个左向外联接,并在结果集内包含 Tab1 中不满足指定条件的行:
    SELECT Tab1.name, Tab2.id
    FROM Tab1, Tab2
    WHERE Tab1.id *=Tab2.id
    说明  这种语法具有潜在的二义性解释并且不标准,因此不提倡使用这种语法进行外联接。而应在 FROM 子句中指定联接。
    可以通过在 FROM 子句中使用联接运算符,或通过在 WHERE 子句中使用不标准的 *= =* 运算符来指定外联接。不能在同一语句中同时使用这两种方法。
    GROUP BY 子句
    指定用来放置输出行的组,并且如果 SELECT 子句 <select list> 中包含聚合函数,则计算每组的汇总值。指定 GROUP BY 时,选择列表中任一非聚合表达式内的所有列都应包含在 GROUP BY 列表中,或者 GROUP BY 表达式必须与选择列表表达式完全匹配。
    说明  如果未指定 ORDER BY 子句,则使用 GROUP BY 子句不按任何特定的顺序返回组。建议始终使用 ORDER BY 子句指定具体的数据顺序。
    语法
    [ GROUP BY [ ALL ] group_by_expression [ ,...n ]
           [ WITH { CUBE | ROLLUP } ]
    ]
    参数
    ALL
    包含所有组和结果集,甚至包含那些任何行都不满足 WHERE 子句指定的搜索条件的组和结果集。如果指定了 ALL ,将对组中不满足搜索条件的汇总列返回空值。不能用 CUBE ROLLUP 运算符指定 ALL
    如果访问远程表的查询中有 WHERE 子句,则不支持 GROUP BY ALL 操作。
    group_by_expression
    是对其执行分组的表达式。 group_by_expression 也称为分组列。 group_by expression 可以是列或引用列的非聚合表达式。在选择列表内定义的列的别名不能用于指定分组列。
    说明  text ntext image 类型的列不能用于 group_by_expression
    对于不包含 CUBE ROLLUP GROUP BY 子句, group_by_expression 的项数受查询所涉及的 GROUP BY 列的大小、聚合列和聚合值的限制。该限制从 8,060 字节的限制开始,对保存中间查询结果所需的中间级工作表有 8,060 字节的限制。如果指定了 CUBE ROLLUP ,则最多只能有 10 个分组表达式。
    CUBE
    指定在结果集内不仅包含由 GROUP BY 提供的正常行,还包含汇总行。在结果集内返回每个可能的组和子组组合的 GROUP BY 汇总行。 GROUP BY 汇总行在结果中显示为 NULL ,但可用来表示所有值。使用 GROUPING 函数确定结果集内的空值是否是 GROUP BY 汇总值。
    结果集内的汇总行数取决于 GROUP BY 子句内包含的列数。 GROUP BY 子句中的每个操作数(列)绑定在分组 NULL 下,并且分组适用于所有其它操作数(列)。由于 CUBE 返回每个可能的组和子组组合,因此不论指定分组列时所使用的是什么顺序,行数都相同。
    ROLLUP
    指定在结果集内不仅包含由 GROUP BY 提供的正常行,还包含汇总行。按层次结构顺序,从组内的最低级别到最高级别汇总组。组的层次结构取决于指定分组列时所使用的顺序。更改分组列的顺序会影响在结果集内生成的行数。
    重要  使用 CUBE ROLLUP 时,不支持区分聚合,如 AVG(DISTINCT column_name) COUNT(DISTINCT column_name) SUM(DISTINCT column_name) 。如果使用这类聚合, SQL Server 将返回错误信息并取消查询。
    HAVING 子句
    指定组或聚合的搜索条件。 HAVING 通常与 GROUP BY 子句一起使用。如果不使用 GROUP BY 子句, HAVING 的行为与 WHERE 子句一样。
    语法
    [HAVING <search_condition>]
    参数
    <search_condition>
    指定组或聚合应满足的搜索条件。当 HAVING GROUP BY ALL 一起使用时, HAVING 子句替代 ALL 。有关更多信息,请参见搜索条件。
    HAVING 子句中不能使用 text image ntext 数据类型。
    说明  SELECT 语句中使用 HAVING 子句不影响 CUBE 运算符分组结果集和返回汇总聚合行的方式。
    UNION 运算符
    将两个或更多查询的结果组合为单个结果集,该结果集包含联合查询中的所有查询的全部行。这与使用联接组合两个表中的列不同。
    使用 UNION 组合两个查询的结果集的两个基本规则是:
    所有查询中的列数和列的顺序必须相同。
    数据类型必须兼容。
    语法
       { < query specification > | ( < query expression > ) }
           UNION [ ALL ]
           < query specification | ( < query expression > )
               [ UNION [ ALL ] < query specification | ( < query expression > )
                   [ ...n ] ]
    参数
    < query_specification > | ( < query_expression > )
    是查询规范或查询表达式,用以返回与另一个查询规范或查询表达式所返回的数据组合的数据。作为 UNION 运算一部分的列定义可以不相同,但它们必须通过隐性转换实现兼容。
    下表说明数据类型与相应 (ith) 列的选项的比较规则。
    ith
    列的数据类型 结果表中 ith 列的数据类型
    非数据兼容类型(数据转换不由 Microsoft? SQL Server? 隐性处理)。 SQL Server 返回的错误。
    长度为 L1 L2 的固定长度 char 长度与 L1 L2 中较长的那个相等的固定长度 char
    长度为 L1 L2 的固定长度 binary 长度与 L1 L2 中较长的那个相等的固定长度 binary
    任一列或两列都是可变长度 char 长度与为 ith 列指定的最大长度相等的可变长度 char
    任一列或两列都是可变长度 binary 长度与为 ith 列指定的最大长度相等的可变长度 binary
    两列都是数字数据类型(如 smallint int float money )。 与两列的最大精度相等的数据类型。例如,如果表 A ith 列是 int 类型,表 B ith 列是 float 类型,则 ith 列在结果表中的数据类型是 float ,因为 float int 更精确。
    两列的描述都指定 NOT NULL 指定 NOT NULL
    UNION
    指定组合多个结果集并将其作为单个结果集返回。
    ALL
    在结果中包含所有的行,包括重复行。如果没有指定,则删除重复行。
    ORDER BY 子句
    指定结果集的排序。除非同时指定了 TOP ,否则 ORDER BY 子句在视图、内嵌函数、派生表和子查询中无效。
    语法
    [ ORDER BY { order_by_expression [ ASC | DESC ] }    [ ,...n ] ]
    参数
    order_by_expression
    指定要排序的列。可以将排序列指定为列名或列的别名(可由表名或视图名限定)和表达式,或者指定为代表选择列表内的名称、别名或表达式的位置的负整数。
    可指定多个排序列。 ORDER BY 子句中的排序列序列定义排序结果集的结构。
    ORDER BY
    子句可包括未出现在此选择列表中的项目。然而,如果指定 SELECT DISTINCT ,或者如果 SELECT 语句包含 UNION 运算符,则排序列必定出现在选择列表中。
    此外,当 SELECT 语句包含 UNION 运算符时,列名或列的别名必须是在第一选择列表内指定的列名或列的别名。
    说明  ORDER BY 子句中不能使用 ntext text image 列。
    ASC
    指定按递增顺序,从最低值到最高值对指定列中的值进行排序。
    DESC
    指定按递减顺序,从最高值到最低值对指定列中的值进行排序。
    空值被视为最低的可能值。
    ORDER BY 子句中的项目数没有限制。然而,对于排序操作所需的中间级工作表的大小有 8,060 字节的限制。这限制了在 ORDER BY 子句中指定的列的合计大小。
    COMPUTE
    子句
    生成合计作为附加的汇总列出现在结果集的最后。当与 BY 一起使用时, COMPUTE 子句在结果集内生成控制中断和分类汇总。可在同一查询内指定 COMPUTE BY COMPUTE
    语法
    [ COMPUTE
       { { AVG | COUNT | MAX | MIN | STDEV | STDEVP
           | VAR | VARP | SUM }
               ( expression ) } [ ,...n ]
       [ BY expression [ ,...n ] ]
    参数
    AVG | COUNT | MAX | MIN | STDEV | STDEVP | VAR | VARP | SUM
    指定要执行的聚合。下面是 COMPUTE 子句使用的行聚合函数:
    行聚合函数 结果
    AVG
    数字表达式中所有值的平均值
    COUNT
    选定的行数
    MAX
    表达式中的最高值
    MIN
    表达式中的最低值
    STDEV
    表达式中所有值的统计标准偏差
    STDEVP
    表达式中所有值的填充统计标准偏差
    SUM
    数字表达式中所有值的和
    VAR
    表达式中所有值的统计方差
    VARP
    表达式中所有值的填充统计方差
    没有等同于 COUNT(*) 的函数。若要查找由 GROUP BY COUNT(*) 生成的汇总信息,请使用不带 BY COMPUTE 子句。
    这些函数忽略空值。
    如果是用 COPPUT 子句指定的行聚合函数,则不允许它们使用 DISTINCT 关键字。
    当添加或平均整数数据时,即使列的数据类型为 smallint tinyint SQL Server 也将结果视为 int 值。有关返回添加数据或平均数据的类型的更多信息,请参见 SUM AVG
    说明  为减少在 ODBC DB-Library 程序中溢出错误的可能性,请将平均或汇总结果的所有变量声明均作为数据类型 int
    ( expression )
    表达式,如对其执行计算的列名。 expression 必须出现在选择列表中,并且必须将其指定为与选择列表中的某个表达式完全一样。在 expression 内不能使用在选择列表中指定的列的别名。
    说明  COMPUTE COMPUTE BY 子句中,不能指定 ntext text image 数据类型。
    BY expression
    在结果集内生成控制中断和分类汇总。 expression order_by_expression 在相关 ORDER BY 子句中的精确复本。一般情况下,这是列名或列的别名。可指定多个表达式。在 BY 后列出多个表达式可将一个组分成子组并在每个分组级别上应用聚合函数。
    如果使用 COMPUTE BY ,则必须也使用 ORDER BY 子句。表达式必须与在 QRDER BY 后列出的子句相同或是其子集,并且必须按相同的序列。例如,如果 ORDER BY 子句是:
    ORDER BY a, b, c
    COMPUTE 子句可以是下面的任意一个(或全部):
    COMPUTE BY a, b, c
    COMPUTE BY a, b
    COMPUTE BY a
    说明  在带 COMPUTE 子句的 SELECT 语句中,选择列表中的列顺序替代 COMPUTE 子句中的聚合函数顺序。 ODBC DB-library 程序员必须知道这种顺序要求,以将聚合函数结果放在正确的位置。
    由于包含 COMPUTE 的语句生成表并且这些表的汇总结果不存储在数据库中,因此在 SELECT INTO 语句中不能使用 COMPUTE 。因而,任何由 COMPUTE 生成的计算结果不出现在用 SELECT INTO 语句创建的新表内。
    SELECT 语句是 DECLARE CURSOR 语句的一部分时,不能使用 COMPUTE 子句。
    FOR
    子句
    FOR
    子句用于指定 BROWSE XML 选项( BROWSE XML 是不相关的选项)。
    语法
    [ FOR { BROWSE | XML { RAW | AUTO | EXPLICIT }
               [ , XMLDATA ]
               [ , ELEMENTS ]
               [ , BINARY BASE64 ]
           }
    ]
    参数
    BROWSE
    指定当查看 DB-Library 浏览模式游标中的数据时允许更新。如果表包含时间戳列(用 timestamp 数据类型定义的列),表有唯一索引且 FOR BROWSE 选项在 SELECT 语句的最后发送到 SQL Server ,则可以在应用程序中浏览该表。有关更多信息,请参见浏览模式。
    说明  在含有 FOR BROWSE 选项的 SELECT 语句中无法使用 <lock_hint> HOLDLOCK
    FOR BROWSE
    选项不能出现在用 UNION 运算符联接的 SELECT 语句中。
    XML
    指定查询结果将作为 XML 文档返回。必须指定下列 XML 模式之一: RAW AUTO EXPLICIT 。有关 XML 数据和 SQL Server 的更多信息,请参见使用 FOR XML 检索 XML 文档。
    RAW
    获得查询结果并将结果集内的各行转换为 XML 元素,用一般标识符 <row /> 作为元素标记。有关更多信息,请参见使用 RAW 模式。
    AUTO
    以简单的嵌套 XML 树返回查询结果。在 FROM 子句内,每个在 SELECT 子句中至少有一列被列出的表都表示为一个 XML 元素。 SELECT 子句中列出的列映射到适当的元素特性。有关更多信息,请参见使用 AUTO 模式。
    EXPLICIT
    指定显式定义所得到的 XML 树的形状。使用此种模式,要求以一种特定的方式编写查询,以便显式指定有关期望的嵌套的附加信息。有关更多信息,请参见使用 EXPLICIT 模式。
    XMLDATA
    返回架构,但不将根元素添加到结果中。如果指定了 XMLDATA ,它将被追加到文档上。
    ELEMENTS
    指定列作为子元素返回。否则,列将映射到 XML 特性。
    BINARY BASE64
    指定查询返回二进制 base64 编码格式的二进制数据。使用 RAW EXPLICIT 模式检索二进制数据时,必须指定该选项。这是 AUTO 模式中的默认值。
    OPTION 子句
    指定应在整个查询中使用所指定的查询提示。每个查询提示只能指定一次,但允许指定多个查询提示。用该语句只可能指定一个 OPTION 子句。查询提示影响语句中的所有运算符。如果主查询中涉及 UNION ,则只有涉及 UNION 运算符的最后一个查询可以有 OPTION 子句。如果一个或多个查询提示导致查询优化器不生成有效计划,则产生 8622 号错误。
    注意  查询优化器通常为查询选择最佳执行计划,因此建议有经验的数据库管理员将 <join_hint> <query_hint> <table_hint> 仅作为最后的手段。
    语法
    [ OPTION ( < query_hint > [ ,...n ) ]
    < query_hint > ::=
       {    { HASH | ORDER } GROUP
       | { CONCAT | HASH | MERGE } UNION
       | {LOOP | MERGE | HASH } JOIN
       | FAST number_rows
       | FORCE ORDER
       | MAXDOP number
       | ROBUST PLAN
       | KEEP PLAN
       | KEEPFIXED PLAN
       | EXPAND VIEWS
       }
    参数
    { HASH | ORDER } GROUP
    指定在 GROUP BY DISTINCT COMPUTE 查询子句中所描述的聚合应使用哈希操作或排列。
    { MERGE | HASH | CONCAT } UNION
    指定由合并、哈希或串联 UNION 集合执行所有 UNION 运算。如果指定了不止一个 UNION 提示,查询优化器就会从这些指定的提示中选择开销最少的策略。
    { LOOP | MERGE | HASH } JOIN
    指定在整个查询中所有的联接操作由循环联接、合并联接或哈希联接来完成。如果指定了多个联接提示,则优化器从允许的联接策略中选择最便宜的联接策略。
    如果在同一个查询中,还为一对特定的表指定了联接提示,则虽然仍须遵守查询提示,但该联接提示将优先联接这两个表。因此,为这对表指定的联接提示可能只限制选择查询提示中允许的联接方法。有关详细信息,请参见提示。
    FAST number_rows
    指定对查询进行优化,以便快速检索第一个 number_rows (非负整数)。在第一个 number_rows 返回后,查询继续进行并生成完整的结果集。
    FORCE ORDER
    指定在查询优化过程中保持由查询语法表示的联接顺序。
    MAXDOP number
    只对指定了 sp_configure max degree of parallelism 配置选项的查询替代该选项。当使用 MAXDOP 查询提示时,所有和 max degree of parallelism 配置选项一起使用的语义规则均适用。有关更多信息,请参见 max degree of parallelism 选项。
    ROBUST PLAN
    强制查询优化器以性能为代价,使用对最大可能的行大小有效的计划。处理查询时,中间级表和运算符可能需要存储和处理比输入行宽的行。在有些情况下,行可能很宽,以致某个运算符无法处理行。如果发生这种情况, SQL Server 将在查询执行过程中生成错误。通过使用 ROBUST PLAN ,可以指示查询优化器不考虑可能会遇到该问题的查询计划。
    KEEP PLAN
    强制查询优化器对查询放宽估计的重新编译阈值。估计的重新编译阈值是一个点,基于该点当对表的索引列更改(更新、删除或插入)达到估计的数字时自动重新编译查询。指定 KEEP PLAN 将确保当表有多个更新时不会频繁地对查询进行重新编译。
    KEEPFIXED PLAN
    强制查询优化器不因统计中的更改或索引列(更新、删除或插入)而重新编译查询。指定 KEEPFIXED PLAN 将确保仅当更改基础表的架构或在那些表上执行 sp_recompile 时才重新编译查询。
    EXPAND VIEWS
    指定展开索引视图,而且查询优化器不将任何索引视图看作是查询中任何部分的替代。(当视图名称由查询文本中的视图定义替换时,视图将展开。)实际上,该查询提示不允许在查询计划中直接使用索引视图和直接在索引视图上使用索引。
    只有在查询的 SELECT 部分中直接引用视图,而且指定 WITH (NOEXPAND) WITH NOEXPAND INDEX( index_val [ ,...n ] ) ),才会展开索引视图。有关查询提示 WITH (NOEXPAND) 的更多信息,请参见 FROM
    只有语句的 SELECT 部分的视图(包括 INSERT UPDATE DELETE 语句中的视图)才受提示影响。
    注释
    SELECT
    语句中的子句顺序非常重要。可以省略可选子句,但这些子句在使用时必须按适当的顺序出现。
    只有当这些语句的选择列表包含给函数的局域变量赋值的表达式时,在用户定义的函数中才允许有 SELECT 语句。
    table 变量的作用域内,可以像访问常规表那样访问 table 变量,因此可以在 SELECT 语句内将 table 变量作为表源使用。
    对于由四部分组成的名称,若其中的服务器名称使用的是 OPENDATASOURCE 函数,则该名称可以在表名能够在 SELECT 语句内出现的任何位置作为表源使用。
    对涉及远程表的 SELECT 语句有一些语法限制。有关更多信息,请参见外部数据和 Transact-SQL
    选择列表内包含的 text ntext 列的返回长度默认为最小的 text 实际大小、默认的 TEXTSIZE 会话设置或硬编码应用程序限制。若要更改会话的返回文本长度,请使用 SET 语句。默认情况下,用 SELECT 语句返回的文本数据的长度限制是 4,000 字节。
    如果发生下列两种情况中的一种, SQL Server 将生成编号为 511 的异常错误并回滚当前执行的语句:
    SELECT
    语句生成超过 8,060 字节的结果行或中间级工作表。
    试图对超过 8,060 字节的行执行 DELETE INSERT UPDATE 语句。
    SQL Server 中,如果没有为 SELECT INTO CREATE VIEW 语句创建的列提供列名,将会发生错误。
    选择标识列
    将现有标识列选入新表时,新列将继承 IDENTITY 属性,除非下列条件中的一个为真:
    SELECT
    语句包含联接、 GROUP BY 子句或聚合函数。
    多个 SELECT 语句由 UNION 联接。
    标识列在选择列表内多次列出。
    标识列是表达式的一部分。
    如果这些条件中的一个为真,列将被创建为 NOT NULL 而不继承 IDENTITY 属性。所有用于标识列的规则和限制均适用于新表。
    旧式外联接
    SQL Server
    的早期版本支持在 WHERE 子句中使用 *= =* 运算符定义外联接。 SQL Server 7.0 版支持 SQL-92 标准,该标准在 FROM 子句中提供联接运算符。建议使用 SQL-92 语法重新编写查询。
    WHERE
    GROUP BY HAVING 子句的处理顺序
    下表显示带 WHERE 子句、 GROUP BY 子句和 HAVING 子句的 SELECT 语句的处理顺序:
    WHERE
    子句排除不满足搜索条件的行。
    GROUP BY
    子句将选定的行收集到 GROUP BY 子句中各唯一值的组中。
    在选择列表中指定的聚合函数计算各组的汇总值。
    HAVING
    子句进一步排除不满足搜索条件的行。
    权限
    SELECT
    权限默认授予 sysadmin 固定服务器角色成员、 db_owner db_datareader 固定数据库角色的成员以及表的所有者。 sysadmin db_owner db_securityadmin 角色的成员和表所有者可以将权限转让给其他用户。
    如果用 INTO 子句创建永久表,用户必须在目的数据库中具有 CREATE TABLE 权限。 
    展开全文
  • SELECT语句选项

    千次阅读 2005-11-04 10:49:00
    SELECT选项精制结果正如我们从上一篇文章所读到的那样,SELECT语句具有种类繁多的各类选项,这些选项可以用来控制数据返回的方式。这些选项以子句、关键词和函数的形式存在。子句是一种修改结果的语句。子句不是...
  • 下列语句部分是Mssql语句,不可以在access使用。 下列语句部分是Mssql语句,不可以在access使用。 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,...
  • Select语句完整的执行顺序

    千次阅读 2019-05-10 19:26:08
    SQL Select语句完整的执行顺序: 1、from子句组装来自不同数据源的数据; 2、where子句基于指定的条件对记录行进行筛选; 3、group by子句将数据划分为多个分组; 4、使用聚集函数进行计算; 5、使用having子句筛选...
  • 数据库SELECT语句学习

    2006-05-10 19:59:00
    SELECT选项精制结果 正如我们从上一篇文章所读到的那样,SELECT语句具有种类繁多的各类选项,这些选项可以用来控制数据返回的方式。这些选项以子句、关键词和函数的形式存在。 子句是一种修改结果的语句。子句...
  • 动态sql使用select into语句出错问题

    千次阅读 2017-12-25 16:22:10
    如果你用的是 Oracle 8i 及以上的版本,那简单,在过程中用 execute immediate sql_str 就行, sql_str 是一个拼凑的 SQL 语句,但这个动态语句中带参数,或 Select 的结果要 into 到变量时就要稍加留心一下了。...
  • SELECT 语句的主要部分

    2009-03-18 23:12:00
    虽然 SELECT 语句的完整语法较复杂,但是其主要的子句可归纳如下:SELECT select_list[INTO new_table_name]FROM table_list[WHERE search_conditions][GROUP BY group_by_list][HAVING search_conditions][ORDER BY...
  • SELECT 语句与其子句的详解

    千次阅读 2007-05-09 16:22:00
    整理了一下SELECT语句的一点用法,不过这是SQL SERVER 2000 下的,整体的语法和informix 的SQL语法差不多,仅供参考,对于初学SQL语句的新手来说还是有帮助的,嘿嘿~~~ 其实我就是新手,以后还请各位大侠多多执教...
  • SQL-SELECT 语句,From子句,where条件查询

    千次阅读 2011-12-07 10:55:49
    SELECT 语句 SELECT 语句用来检索数据表的数据,而哪些数据被检索由列出的数据行与语句中的 WHERE 子句决定。例如,要从之前建立的 Customer_Data数据表检索 customer_id 以及 first_name 数据行的数据,并且...
  • SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集。...同时,每条 SELECT 语句中的列的顺序必须相同。 SQL UNION 语法 SELECT column_name(s) FROM table_name1 UNION SELECT colu
  • SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集。...同时,每条 SELECT 语句中的列的顺序必须相同。 SQL UNION 语法 SELECT column_name(s) FROM table_name1 UNION SELECT colu
  • 学前必备知识 第一章:SQL Server 数据库环境搭建与使用 ...第五章:SQL Server2019数据库之 综合案例练习、开启 SELECT 语句之旅 第六章:SQL Server2019数据库之 SELECT 语句的深入使用 在 第六章:SQL Serv
  • mysql优化SELECT语句和其它查询

    千次阅读 2012-02-06 09:31:58
    7.2.1. EXPLAIN语法(获取SELECT相关信息)7.2.2. 估计查询性能7.2.3. SELECT查询的速度7.2.4. MySQL怎样优化WHERE子句7.2.5. 范围优化7.2.6. 索引合并优化7.2.7. MySQL如何优化IS NULL7.2.8. MySQL如何优化...
  • SQLServer 2000:SELECT 语句的各部分1

    千次阅读 2007-02-12 18:40:00
    SELECT 语句的各部分虽然 SELECT 语句的完整语法较复杂,但是其主要的子句可归纳如下:SELECT select_list[INTO new_table_name]FROM table_list[WHERE search_conditions][GROUP BY group_by_list][HAVING search_...
  • VBA-Select Case语句教程

    千次阅读 2012-04-24 10:00:32
    Select Case语句教程 [日期:2008-03-01] 来源: 作者:admin [字体:大 小] 为了避免难以弄清的复杂的嵌套的If语句,你可以使用Select Case语句代替。它的语法为: Select Case 测试表达式 Case ...
  • Mysql的Select查询语句性能检测工…

    千次阅读 2013-09-27 23:13:11
    EXPLAIN可以分析你所写Select语句,根据给出的结果,你可以对语句进行优化。 EXPLAIN tbl_name 或: EXPLAIN [EXTENDED] SELECT select_options EXPLAIN语句可以用作DESCRIBE的一个同义词,或获得关于MySQL如何...
  • SQL语句里合并两个select查询结果

    千次阅读 2019-03-04 10:25:00
    SQLUNION操作符UNION操作符用于合并两个或多个SELECT语句的结果集。...同时,每条SELECT语句中的列的顺序必须相同。SQL UNION 语法SELECT column_name(s)FROMtable_name1UNIONSELECT column_name(s...
  • SQL语句 SELECT LIKE用法详解

    千次阅读 2012-08-30 09:42:45
    LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用是在一个字符型字段列检索包含对应子串的。 A:%包含零个或多个字符的任意字符串: 1、...
  • ・使用GROUP BY 语句时,SELECT中的项目,必须在GROUP BY 出现 SELECT a, b, c FROM table1 GROUP BY a, b, c ・或者和聚合函数一起使用 (一般都是这么使用) SELECT a, b, sum(c) FROM table1...
  • SQL 执行语句是报错“SELECT 失败,因为下列 SET 选项的设置不正确: 'ARITHABORT'……”解决方法:“你先在Management Studio里面,新建查询,然后执行:SELECT is_ARITHABORT_on FROM sys.databases看看你数据库...
  • SQL 执行语句是报错“SELECT 失败,因为下列 SET 选项的设置不正确: 'ARITHABORT'……” 解决方法: “你先在Management Studio里面,新建查询,然后执行: SELECT is_ARITHABORT_on FROM sys....
  • SELECT 失败,因为下列 SET 选项的设置不正确: 'QUOTED_IDENTIFIER'。请确保 SET 选项正确无误,可以用于 计算列 上的索引视图和/或索引和/或筛选的索引和/或查询通知和/或 XML 数据类型方法和/或空间索引操作。。 ...
  • 今天做了一个查询数据库xml字段的sql语句,结果在ADO执行的时候报了这个错误,百度后找到了解决方法。备忘 当你在SQL Server上试图更新一个索引视图引用的表时,你可能回收到如下有错误 INSERT 失败,因为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,529
精华内容 20,611
关键字:

下列select语句中错误的是