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