SQL知识点详解(一)

       大家好,这是我第一次尝试着写一篇博客,虽然不知道为何去写,但是今天还是不由自主地坐在电脑面前写一些东西,或许是因为我想把学过的知识巩固一遍,也可能是因为怕遗忘,以此作为回顾的一个凭证。这篇文章可能很基础,到后面我会逐渐深入,写内容时每一个部分我会花费很长时间去整理,我就是想把每一步的含义讲的详细一些,是为了让更多初学者在学习过程中可以轻松一些,好理解一些。我也每天在不停地学习,在学习的过程中我希望可以和大家多交流,这样彼此才能更快地成长。

        本文的源代码在文章的结尾,将其导入到plsql中,即可进行本文的操作。

        这篇是个人原创,如果转载或转发请注明出处。下面我们就开始进入主题吧!!!

一. select语句知识点(这是SQL最基本,最常用的)

  select语法如下:

select  *| {[distinct] column...}
from    table;

  备注:'*'代表所有的列,'|'代表或者,distinct代表去除重复值,column代表列,table代表表名

             上述select语法的完整解释是:从table表中选出所有的列,或是去除重复的列。

1.给字段取别名(AS)

   取别名的语法如下:

select  字段名1  AS  别名1 ,字段名2  AS  别名2

from    表名   别名3

  备注:别名1是字段名1的别名, 别名2是字段名2的别名, 别名3是表名的别名。

             取别名的好处是用简单的字母表示复杂的字段名/表名。

             这里有两点要注意一下:①字段取别名时AS可以省略,直接在字段名的后面接别名;

                                                     ②表取别名时后面绝对不可以接AS,这么做是为了防止与数据存储过程中的关键字AS冲突。

  别名举例如下: 

select  last_name AS name , salary AS  s
from  employees  e; 
select  last_name  name , salary  s
from  employees  e; 

  上面两段代码其实是等价的,AS可以省略。得到的结果如下(截取了得出结果的一部分):

                                                                        

2.字符串连接符(||) 

  连接的代码如下:

select last_name || 'is a ' || job_id  AS  "Employee Detail"
from  employees;

  SQL语句中通过'||'连接符将last_name 和 is  a 和 job_id连接了起来。

  得出的结果如下(只是截取了一部分结果):

                                                                 

3.去除重复行(distinct)

  这段代码,意思是从empoyees表中取出manager_id的所有行,所有行中包含重复行,如下左图所示。

select  manager_id  from   employees;

  这段代码,使用了distinct,去除了manager_id中的重复行,如下右图所示。

select  distinct  manager_id  from   employees;

                                                                                                      

二.条件限制及排序

       条件限制顾名思义是为你搜索的数据添加一定的条件,以满足你所需要的结果,从一定程度上避免了你面临着一堆数据而需要一个一个地去找;排序就没有什么好说的了,就是将数据按降序或者是升序去排列,使得数据的结构更直观。下面将会详细的讲解这两方面的内容。

1.条件限制(where)

  条件限制的语法如下:

select  *| {[distinct] column...}
from    table
where   condition;

  备注:这段代码表示的是从table表中找到满足condition条件的所有列,或者是不重复的列。

  举例,从employees表中找出满足department_id=90条件的所有数据,代码如下:

select  * 
from   employees  
where  department_id=90;

  下表为得出的结果,避免了一个一个从数据库中找满足department_id=90的所有数据。

  • 比较操作符

      比较操作符                       意义
             =                       等于
             >                       大于
            >=                    大于等于
             <                       小于
            <=                    小于等于
            <>                      不等于
BETWEEN...AND...                  在两个值之间
           IN()                 在一个集合范围内
            LIKE  匹配一个字符串,可使用%通配符
          IS  NULL       是一个空值,不能使用=NULL

  列举部分例子如下,

         --1. '> 操作符的使用' --                  --2. 'IN 操作符的使用' --         
         select  last_name                        select  last_name              
         from    employees                        from    employees              
         where   salary > 12000;                  where   department_id IN (90);    

         --3. 'BETWEEN AND 操作符的使用' --        --4. 'LIKE 做模糊匹配' --
         select  last_name                        select  last_name
         from    employees                        from    employees
         salary between 2000 and 3000;            where   last_name LIKE '%g%'

结果从左到右分别为上面1~4的结果

                                                            

备注:①1~4的SQL分别解释为 1.从employees表中查询薪资大于12000的last_name;

                                                  2.从employees表中查询部门id为90的last_name;

                                                  3.从employees表中查询薪资在2000~3000的last_name;

                                                  4.从employees表中查询last_name中含有g字母的last_name。

           ②LIKE模糊查询中,%代表0或多个字符匹配;

                                            _代表单个字符。

 2.排序(ORDER  BY)

  升序:ASC

  降序:DESC

  这段代码只是将这些条件按照department_id进行了排序,没有明确规定是升序还是降序

select    last_name , employee_id , department_id
from      employees
order by  department_id ;

  结果如下图所示 (结果截取了一部分)

                                                        

  这段代码将条件按照department_id降序进行排列

select    last_name , employee_id , department_id
from      employees
order by  department_id  desc ;

  结果如下图所示 (结果截取了一部分)

                                                         

  这上面讲解的只是SQL中的冰山一角,更多的内容将在后续中持续更新,敬请期待!!!

源代码如下所示:

--建立表employees
create table employees
(EMPLOYEE_ID NUMBER(6) NOT NULL,
FIRST_NAME VARCHAR2(20),
LAST_NAME VARCHAR2(25) NOT NULL,
EMAIL VARCHAR2(25) NOT NULL,
PHONE_NUMBER VARCHAR(20),
HIRE_DATE DATE NOT NULL,
JOB_ID VARCHAR2(10) NOT NULL,
SALARY NUMBER(8,2),
COMMISSION_PCT NUMBER(2,2),
MANAGER_ID NUMBER(6),
DEPARTMENT_ID NUMBER(4));

--向employees表中插入数据
insert into employees values(100,'Steven','King','SKING','515.123.4567',to_date('1987-06-17','YYYY-MM-DD'),'AD_PRES',24000,NULL,NULL,90);
insert into employees values(101,'Neena','Kochhar','NKOCHHAR','515.123.4568',to_date('1989-09-21','YYYY-MM-DD'),'AD_VP',17000,NULL,100,90);
insert into employees values(102,'Lex','De Haan','LDEHAAN','515.123.4569',to_date('1993-01-13','YYYY-MM-DD'),'AD_VP',17000,NULL,100,90);
insert into employees values(103,'Alexander','Hunold','AHUNOLD','590.423.4567',to_date('1990-01-03','YYYY-MM-DD'),'IT_PROG',9000,NULL,102,60);
insert into employees values(104,'Bruce','Ernst','BERNST','590.423.4568',to_date('1991-05-21','YYYY-MM-DD'),'IT_PROG',6000,NULL,103,60);
insert into employees values(107,'Diana','Lorentz','DLORENTZ','590.423.5567',to_date('1999-02-07','YYYY-MM-DD'),'IT_PROG',4200,NULL,103,60);
insert into employees values(124,'Kevin','Mourgos','KMOURGOS','650.123.5234',to_date('1999-11-16','YYYY-MM-DD'),'ST_MAN',5800,NULL,100,50);
insert into employees values(141,'Trenna','Rajs','TRAJS','650.121.8009',to_date('1995-10-17','YYYY-MM-DD'),'ST_CLERK',3500,NULL,124,50);
insert into employees values(142,'Curtis','Davies','CDAVIES','650.121.2994',to_date('1997-01-29','YYYY-MM-DD'),'ST_CLERK',3100,NULL,124,50);
insert into employees values(143,'Randall','Matos','RMATOS','650.121.2874',to_date('1998-05-15','YYYY-MM-DD'),'ST_CLERK',2600,NULL,124,50);
insert into employees values(144,'Peter','Vargas','PVARGAS','650.121.2004',to_date('1998-07-09','YYYY-MM-DD'),'ST_CLERK',2500,NULL,124,50);
insert into employees values(149,'Eleni','Zlotkey','EZLOTKEY','011.44.1344.429018',to_date('2000-06-29','YYYY-MM-DD'),'SA_MAN',10500,.2,100,80);
insert into employees values(174,'Ellen','Abel','EABEL','011.44.1644.429267',to_date('1996-05-11','YYYY-MM-DD'),'SA_REP',11000,.3,149,80);
insert into employees values(178,'Kimberely','Grant','KGRANT','011.44.1644.429263',to_date('1999-05-24','YYYY-MM-DD'),'SA_REP',7000,.15,149,NULL);
insert into employees values(200,'Jennifer','Whalen','JWHALEN','515.123.4444',to_date('1987-09-17','YYYY-MM-DD'),'AD_ASST',4400,NULL,101,10);
insert into employees values(201,'Michael','Hartstein','MHARTSTE','515.123.5555',to_date('1996-02-17','YYYY-MM-DD'),'MK_MAN',13000,NULL,100,20);
insert into employees values(202,'Pat','Fay','PFAY','603.123.6666',to_date('1997-08-17','YYYY-MM-DD'),'MK_REP',6000,NULL,201,20);
insert into employees values(205,'Shelley','Higgins','SHIGGINS','515.123.8080',to_date('1994-06-07','YYYY-MM-DD'),'AC_MGR',12000,NULL,101,110);
insert into employees values(206,'William','Gietz','WGIETZ','515.123.8181',to_date('1994-06-07','YYYY-MM-DD'),'AC_ACCOUNT',8300,NULL,205,110);

猜你喜欢

转载自blog.csdn.net/jerrytomcat/article/details/81166510