`

Select专题

SQL 
阅读更多

Select专题

一、基础

1.基本的Select 查询语句


  语法:

    SELECT *|{[DISTINCT] column|expression [alias],...}

    FROM table;

 (1)查询所有的列:


    select * from dept;

    select dname,deptno,loc from dept;

   *的效率低


 (2) Sql语句的书写规范:

    1.大小写不敏感

    2.可以分行写

    3.关键字不能分行和和缩写

    4.条件一般分行写


     select * FROM EMP;


     SELECT *

     FROM emp;


(3)数学表达式 :+ - * /


     select ename,sal+300 from emp;


     运算符的优先级:

    *、/  > + -  同级从左到右进行运算,( )优先级最高


     select ename,sal,12*sal+100 from emp;

     select ename,sal,12*(sal+100) from emp;

(4) NULL 是一个不可用的值,不同于0或空行

   

     select ename,sal,comm from emp;

     select ename,sal,12*sal*comm from emp;

(5)定义字段column别名 alias

    可以直接在字段column名后,也可以是column名 as 别名alias

   需要双引号如果包含空格或特殊字符,再者是为了大小写敏感


    select ename name,sal,12*sal*comm from emp;

    select ename name,sal,12*sal*comm as "Annual Salary" from emp;

(6)连接字符 ||


    select ename||job as "Employees" from emp;

    select ename||' is a '||job as "Employees" from emp;

  (7)常量 :字符, 数字,日期等(在Select中)

   日期和字符必须要单一行单引号''包围起来


     select ename ||' is a'||job as "Employee Details" from emp;

(8)处理重复的行 distinct

     select deptno from dept;

     select distinct deptno from emp;



二、约束和排序数据

  语法:


    SELECT *|{[DISTINCT] column|expression [alias],...}

    FROM table

    [WHERE condition(s)]

    [ORDER BY];


(1) WHERE 条件

   

   日期和字符必须要单一行单引号''包围起来,

  字符串的值是大小写敏感的,日期date的值是格式敏感的(默认:DD-MON-RR


1. 约束列

    select * from emp where deptno=30;

    select * from emp where ename='KING';


2. 比较:=, >,>=, <,<=,<>


    select * from emp where sal>2000;


3.  between ... and ...,in(set),like, is null


         select * from emp where sal between 2000 and 2500;


         select * from emp where mgr in (7698,7839,7788);


//%>=0  _=1

         select * from emp where ename like 'A%'; 

         select * from emp where ename like '_A%';


        //转义字符 ESCAPE

         SELECT last_name, job_id

         FROM employees

         WHERE job_id LIKE '%SA\_%' ESCAPE '\';

         

         select * from emp where mgr is null;

         

4. 逻辑条件:      and ,or,not

    

         select * from emp where  sal>1000 and job like '%MAN%';


         select * from emp where  sal>1000 or job like '%MAN%';


         select * from emp where job not in ('SALESMAN','CLERK');


5.约束的优先级

     1 Arithmetic operators   算术运算符

2 Concatenation operator  链接运算符

3 Comparison conditions   比较条件

4 IS [NOT] NULL, LIKE, [NOT] IN

5 [NOT] BETWEEN

6 NOT logical condition

7 AND logical condition

8 OR logical condition 



     select * from emp where job='SALESMAN' or job='CLERK'  and sal >=1300;

     select * from emp where (job='SALESMAN' or job='CLERK')  and sal >=1300;




(二) ORDER BY 排序 ,放在SELECT语句的最后

    ASC: ascending order, default 升序

    DESC: descending order 降序


1.   select * from emp order by hiredate;


2.   select * from emp order by hiredate desc;


3. 按照别名排序

     select ename,sal,12*sal annsal from emp order by annsal;


4. 利用多列进行排序

     select ename,deptno,sal annsal from emp order by deptno,sal desc;


三 、函数


(1)字符串函数

      select ename,lower(ename) from emp; //转化为小写

      select upper('Sql course') from dual;//转化为大写

      select initcap('sql course') from dual;//转为驼峰写法


     dual table :是和数据字典以前生成的一张表,dual是在SYS的Schema中,但能被所有的用户使用

     dual表有一个DUMMY的字段,有一X的值

    

      select * from emp where ename='smith'; //没记录

      select * from emp where lower(ename)='smith';//有记录


      select concat('Hello','World') from dual; // 字符串连接

      select substr('HelloWorld',1,5) from dual;

      select length('HelloWorld') from dual;

      select instr('HelloWorld','W') from dual;

      select lpad(sal,10,'*') from emp;

      select rpad(sal,10,'*') from emp;

      select trim('H' from 'HelloWorld') from dual;


(2)数值函数

   

      select round(45.926,2),round(45.923,0),round(45.923,-1) from dual;

      select trunc(45.926,2),trunc(45.923,0),trunc(45.923,-1) from dual;

      select mod(1600,300) from dual;


(3)日期函数

    可以+ - 一个日期;

    两个日期相减得到两日期间的间隔天数;两日期不能相加


       select sysdate from dual;

       select sysdate+1 from dual;

       select sysdate-1 from dual;

       select ename,hiredate, (sysdate-hiredate)/365 from  emp;

       select sysdate+24/24,sysdate+33/24 from  dual;

      

      months_between(date1,date2)= (date1-date2)

      select months_between(to_date('1999.11.29','yyyy.mm.dd'), to_date('1998.11.

      29','yyyy.mm.dd')) from dual;


      add_months(date,number)=(date.month+number)

      select sysdate as today ,add_months(sysdate,1) as next_month,

       add_months(sysdate,-1) as last_month from dual;


      next_day(date,'day')

       select next_day(sysdate,5) from dual;

       select next_day(sysdate,'星期五') from dual;


      last_day(date)

      select last_day('01-4月-95') from dual;


     round(date,'format')

       select round(sysdate,'month') from dual;

       select round(sysdate,'year') from dual;

       select trunc(sysdate,'month') from dual;

       select trunc(sysdate,'year') from dual;



(4) 转化函数


       a) to_char(date,'format_model')

            format_model: 必须加单引号'' ,大小写敏感


               YYYY(Full year in numbers)

               YEAR(Year spelled out)

               MM(Two-digit value for month)

               MONTH(Full name of the month)

               MON(Three-letter abbreviation of the month)

               DY(Three-letter abbreviation of the day of the week)

               DAY(Full name of the day of the week)

               DD(Numeric day of the month)

               HH or HH12 or HH24

               MI

               SS


               select ename,to_char(hiredate,'fmDD Month YYYY') from emp;

                  

       b) to_char(number,'format_model')

              9 代表数字

              0 

              $ 美元符号

              L 本地货币符号

              . 小数点

              , 千分割符

  

               select ename,to_char(sal,'L999,999.00') from emp;



        c) to_number(char[,'format_model'])

               select to_number('1234') from dual;

               select to_number('1234','9999') from dual;



        d) to_date(char[,'format_model'])

                select to_date('020908','ddmmyyyy') from dual;


(5) 通用函数


       a) nvl(expr1,expr2) ,如果expr1为null,则用expr2代替

               select ename,sal,nvl(comm,0) from emp;


       b) nvl2(expr1,expr2,expr3),如果expr1不为null,则用expr2代替,否则用expr3代替

               select ename,sal,comm,nvl2(comm,sal+comm,sal) from emp;


       c) nullif(expr1,expr2)

               case when expr1=expr2 then null else expr1 end    


       d) case表达式

语法:

                   case expr when comparison_expr1 then return_expr1

                            [when comparison_expr2 then return_expr2

                            [when comparison_exprn then return_exprn

                             else else_expr]

                   end


                  select ename,job,sal,case job when 'CLERK' then 1.10*sal

                                                when 'MANAGER' then 1.20*sal

                                                else sal end "revised_salary"

                  from emp;



                  select ename,job,sal,case when job='CLERK' then 1.10*sal

                                            when job='MANAGER' then 1.20*sal

                                            else sal end "revised_salary"

                  from emp;

                   

四、多表连接

连接类型: 等值连接,不等值连接,外连接,自连接


      SELECT table1.column, table2.column

      FROM table1, table2

      WHERE table1.column1 = table2.column2;


        a) 等值连接 equijoins

                    select ename,dname

                    from emp,dept

                    where emp.deptno=dept.deptno;


                    select ename,dname

                    from emp,dept

                    where emp.deptno=dept.deptno

                          and emp.deptno=30;


                    select e.ename,d.ename

                    from emp e,dept d

                    where e.deptno=d.deptno;


                    select ename,dname

                    from emp e,dept d,

                    where e.deptno=d.deptno


                Joining More than Two Tables

                   hr>select e.LAST_NAME,d.DEPARTMENT_NAME,l.CITY 

                      from employees e,departments d,locations l

                      where e.department_id=d.department_id and d.location_id=l.location_id



         b) 不等值连接 nonequijoins

                    select ename,sal,grade

                    from emp e,salgrade s

                    where e.sal between s.losal and s.hisal 


         c)外连接  outer joins

      展示两表不满足条件的column,+在那边表示多展示此表不满足的column


              SELECT table1.column, table2.column

              FROM table1, table2

              WHERE table1.column = table2.column(+);


                  select e.ename,e.deptno,d.dname

                  from emp e,dept d

                  where e.deptno(+)=d.deptno;


                  select ename,dname

                  from emp,dept

                  where emp.deptno(+)=dept.deptno

                  and emp.deptno(+)=30;


 


 

分享到:
评论

相关推荐

    数据分析与专题图制作

    ### 数据分析与专题图制作 #### 一、地图数据分析 地图数据分析是GIS(地理信息系统)领域中的一个重要组成部分,主要用于从空间数据中提取有用的信息。在本节中,我们将重点介绍几种常用的数据分析方法,包括统计...

    guofei9987.github.io:我的博客

    【SQL】SELECT专题。 153 【spark,Hive,Hadoop,yarn】汇总 154 【火花】DataFrame。 155 【spark】sql.functions详解 159 【火花】工程实践 162 【Hive SQL】速查。 173 【火花】模型持久化 173 打包...

    bootstrapValidator bootstrap-select验证不可用的解决办法

    对于想要进一步提升Bootstrap技能的开发者,可以参考以下专题教程: - Bootstrap学习教程:掌握Bootstrap的基础用法,包括栅格系统、组件、JavaScript插件等。 - Bootstrap实战教程:通过实际项目加深对Bootstrap的...

    深入浅出Oracle之DB、PLSQL专题研究

    ### 深入浅出Oracle之DB、PLSQL专题研究 #### 一、特殊值、特殊字段、特殊对象、特殊语句 ##### 1.1 Null值 **说明:** 在Oracle数据库中,`NULL`值代表未知或者缺失的数据。与C语言、Java等编程语言中的`null`...

    面试专题-面试人员必看-MySQL专题.pdf

    可以通过执行SELECT VERSION();来获取当前安装的MySQL版本。 14. MySQL存储引擎: MySQL使用存储引擎来定义表的类型,存储机制、锁定级别、索引、功能和性能等各有不同。 15. MySQL驱动程序: MySQL提供多种驱动...

    SQL语句专题训练

    在SQL语言中,用于修改表结构的命令是`...这些是SQL语句专题训练中涉及的一些基础概念和操作,理解并熟练掌握它们对于进行有效的数据库查询和管理至关重要。通过持续的训练和实践,可以提升在SQL方面的技能和效率。

    Linq专题源码

    【标题】:“Linq专题源码” 在C#编程领域,LINQ(Language Integrated Query,语言集成查询)是一项强大的功能,它将查询表达式直接整合到C#语法中,极大地简化了数据操作。本专题主要关注LINQ的源码解析,帮助...

    面试专题-MySQL专题部分

    面试专题的MySQL部分通常涵盖了数据库设计、查询优化、事务处理、安全性、复制与集群等多个关键领域。以下是一些重要的知识点详解: 1. **数据库设计**: - **ER模型**:实体关系模型是数据库设计的基础,用于描述...

    【视频】Excel精讲专题-VBA分支与END语句

    本专题“Excel精讲专题-VBA分支与END语句”深入探讨了VBA中的分支结构和END语句,这两个概念是编写逻辑控制流程的关键元素。 首先,我们来了解一下VBA中的分支结构。分支结构主要用于根据不同的条件执行不同的代码...

    应用源码分析专题之mybatis第一节课快速开始课笔记_11

    在本专题中,我们将探讨 MyBatis 的优势以及如何快速开始使用它。 首先,让我们回顾一下 JDBC 的不足之处。JDBC 在底层并没有集成连接池,这意味着每次执行数据库操作时都需要手动创建和关闭连接,这既耗时又消耗...

    luoluo优化专题-执行计划

    执行计划通常由操作符组成,包括SELECT、FROM、WHERE等SQL关键字对应的物理或逻辑操作,例如全表扫描(Full Table Scan)、索引扫描(Index Scan)、连接操作(Join)等。每个操作符都有相应的成本估算,这些成本...

    Linq三层 专题练习

    **Linq三层专题练习详解** Linq(Language Integrated Query,语言集成查询)是.NET Framework中的一项强大技术,它为开发者提供了在C#和VB.NET等编程语言中内嵌查询的能力,使得数据操作更加简洁和直观。在这个...

    sql server专题实验4 复杂查询.docx

    SELECT * FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.ID; ``` 2. **LEFT JOIN (或 LEFT OUTER JOIN)**: - **定义**:返回左表中的所有行以及右表中匹配的行;如果右表中没有匹配项,则结果为NULL...

    JS组件Bootstrap Select2使用方法解析

    对于希望深入了解Bootstrap Select2的读者,推荐以下专题教程: 1. **Bootstrap学习教程**:全面掌握Bootstrap的布局、组件和响应式设计。 2. **Bootstrap实战教程**:通过实际项目加深对Bootstrap的理解。 3. **...

    帝国CMS列表页中获取当前信息所属专题名称的方法

    $zhuanti = $empire-&gt;fetch1("select ztid, classid from {$dbtbpre}enewsztinfo where id = {$r['id']}"); ``` 2. **判断信息是否关联专题**: 上述查询结果会返回一个关联数组,包含专题ID和类ID。如果信息有...

    sql server专题实验4 复杂查询.rar

    在SQL Server专题实验4中,我们主要探讨的是“复杂查询”的概念和应用。复杂查询是数据库管理系统中的一个重要组成部分,它涉及到多个表之间的关联、子查询、聚合函数、分组及排序等多个高级查询技术。通过本实验,...

    精品专题(2021-2022年收藏)mysql09实训指导书带答案.doc

    例如,查询course表中开课学期按照升序排列的课程信息,SQL语句为`SELECT * FROM course ORDER BY 开课学期 ASC`。 2. `GROUP BY`子句:用于将查询结果按照指定的字段进行分组,常与聚合函数一起使用,如`COUNT()`,...

Global site tag (gtag.js) - Google Analytics