讲之前我们先从整个角度看一下,学一门技术的时候,你要一点点的学,又要跳出来,以一个比较高的高度来看这个东西,所以叫大出着眼,小处着手,那我们SQL的学习,主要包括哪些内容,我们先整体的来看一下这些内容,SELECT的查询,很多人多少接触过一些数据库,或者没有接触过的,你可能听过这么一个词,增删改查,那增删改查主要是对数据库的,比如像表,数据对象的操作,可以增加一条记录,删除修改一条记录,或者也可以查询一些记录,那么当然增删改查里边,最重要的就是查,查 也是我们接触最多的一个操作,相当于都是进行一个查询的操作,涉及到各种各样的,我们就不去细说,然后就是除了查询之外的增删改的操作,以及commit提交,rollback回滚,这样的一个操作,叫数据处理,创建和管理表,创建和管理表什么意思呢,除了进行表数据的增删改之外,我们想这个表从哪里来的,或者这个表我不要了,或者我想清空这个表,等等的一些操作,讲的都是表,约束说的是什么,就是这个表我在创建的时候,创建这个表的时候,我可以给他加入一些约束,比如说某一列的值,一定是非空的,以及主键,外键,这样的信息我们都在约束中给大家讲,除了表之外,还有 一个对象,叫视图,什么是视图,用来干什么用,怎么创建视图,除了视图之外,还有其他的数据库对象,这个是我们整个给大家讲解,SQL语言的一个思路,一个框架,然后之后我们会讲PL/SQL,那么SQL和PL/SQL是我们整个数据库这一块的一个学习,接着你就可以学JDBC了,可以通过JAVA语言,来操作数据库,当然这里是需要你嵌入SQL语句的,然后通过SQL语句,JAVA语言和他结合起来,实现对数据库的一些处理,那我们就开始学习,学习之前,我们先看SQL初步,再从一个高观点上看一下SQL,SQL结构化查询语言,又给他细化成如下的三块,DML,DDL,DCL,这个需要大家你来理解,DML是缩写,叫数据库操纵语言,DDL数据库定义语言,DCL数据库控制语言,分别都有哪些操作

我们一个个来看,DML语言,就是我们刚才说的增删改查,他们四个操作,叫DML,当然查询是SQL的一个基础,非常重要,所以我们花了6节的内容给大家讲解,那下一个叫DDL


DDL数据定义语言,包括创建表,修改表,删除表,包括其他的数据库对象,索引,新建索引,删除索引,等等这样的一些命令,DROP,ALTER,CREATE,还有比如像TRUNCATE,属于DDL的,DDL的语言

什么叫DCL,我可以对数据库的修改,进行一个提交,进行一个回滚,还可以设置一下他的SAVEPOINT,这都属于叫DCL,这三个是比较常用的,这个内容是什么,就是分别怎么来使用,我们会一点点的给大家来讲解,相当于我们整个SQL这一块,我们讲完以后,我们再来看这个内容的话,这个说完以后我们就从头开始,先看第一节SELECT语句

这是学习目标,基本的使用SELECT语句,然后了解SQL和SQL PLUS的区别,那就可以了

那我们就开始学习,你先使用SCOTT用户来登陆ORCL数据库,我们在上一节的学习当中,已经在我们自己创建的对象里,添加了一些表,我们还进行过一个操作select * from employees;能够查询到employees这个表里边的,所有的数据信息,一共是107条,每一条的话有很多的列,比如说员工的ID号,first_name,last_name,email,phone_number,hire_date雇佣的日期,还有job_id,他的工种,工资,这个叫奖金率,有没有奖金率,然后他的Manager,老板的ID,以及他所在的部门,每条记录都有这样的一个信息,那么我们通过SQL语句的学习,不光是employees表,还有locations表,departments表,等等,一共有哪些表,我们这里有一个excle的图,这个我做好的,大家你可以看一下,员工表结构,我们添加的几个文件

这几个文件,我们用到的表就是这些,employees表,departments表,jobs表,locations表,包括job_grades这个表,那每一个表里面有哪些列,这里都标识出来了,相应他们之间的关系,这个关系我们后面会说到,现在先不着急,然后回来,那我想在这个表这里看一下,比如employees表都有哪些列的话,desc这个命令,desc employees;点回车

这里列出来了employees里面相应的列,就是我们看到刚才上面的,id,name,email,phoneNumber等等,这些信息,相应的数据类型,以及存储数值范围的大小,都指定了,这个往后会一点点来讲解,那我们就开始讲select,你需要先熟悉一下这个表的结构,熟悉一下表结构,这个你可以做一个参考,你也可以通过desc,这个命令来看一下employees这个表的,都有哪些列,那么最基本的一个操作呢,就是我们刚才演示的,我想查询一个表中所有的列,select * from employees;有这个表他就给你列出来了,你要是说如果你写错的话select * from employee;少了一个s

他就会提示说表或视图不存在,这很好理解,那现在我来进行这样一个操作,查询这个表中所有的列,那如果仅需要查询里面的某列或者某几列,我们可以这样写,假设我就想查询employee_id,每个员工的一个编号,以及last_name,再查一个email,这三列select employee_id,last_name,email from employees;这样写就可以,我这里打了一个换行,select和from算是我们SQL里面的关键字,最好我们出现关键字的时候,就给他换行,让那个可读性更强一点,实际上你写成一行也没有问题,这里就把我需要的查询的信息给展示出来了,这是我们今天讲的最基本的,最基础的,也是比较重要的操作,select from 一个表当中,就是这个意思,select from这是一个基本的结构,这个结构大家务必要掌握

这是查询特定的列,要查询的列是用列名,那这个列名一定是这个表里的,没有的话当然就会出问题

这里有个主意,说SQL语言大小写不敏感,可以写成一行也可以写成多行,这什么意思,就是我们刚才写的SELECT,我们可以这样写,比如说department_id,还有说department_name,from有一个表叫departments这个表,select department_id,depatment_name from departments;这样我就查询到departments表的数据,select和from我们看成是关键字,他们的大小写是不敏感的,SQL语言是完全有别于JAVA语言的,JAVA语言是严格区分大小写的,SQL是不区分的,是敏感的,可以写一行,也可以写多行,也就是说你刚才这个命令,你可以给他加到后边,这样写,写一行,一行或两行都行,建议你写成两行,这样他的可读性会强一点,方便你看,现在代码短你看不出来,一旦代码长的时候,你就给他换换行,跟JAVA是一样的,这个不需要多说,关键字不能缩写,也不能分行,关键字是谁,SELECT和FROM,不能够缩写,换行就成了多个单词了,各字句一般要分行写,然后使用缩进提高可读性,这我们刚才说到了

这里有一个算术运算符,数字和日期可以使用的算术运算符,加减乘除,这个大家从一年级就开始学习了,然后我们在JAVA当中讲数据类型的时候,也说到了有各种运算符,算术运算符,我们在SQL里面带着大家一起看一下,算术运算符,比如说,一个简单的select,8乘以4,你任何的运算一定是有from的,那这儿你from哪儿,没有具体的表了,那我就用一个伪表来代替,叫dualselect 8*4 from dual;

你也可以怎么着,desc我看一下employees的表结构

这里凡是标识为number的,都是数字,凡是标识为number的都是数字,凡是标识为date的,就表示日期,他说这两个都是可以进行算术运算的,我们比如说写一个,select last_name,工资是不是number类型的,我看一下这个人的工资,我想看一下这个人一年的工资,12*salary,然后年终给他发了一个奖金,每个人发1000,就这样写,然后from employees,select last_name,salary,salary*12 + 1000 from employees;这就出来了每一个人他的salary,他正常一个月的工资,以及12个月再加上奖金的,这里我们也可以看出运算级的优先,先后顺序,先乘除,后加减,相应的有小括号的我先算小括号里面的,ed的全称其实叫edit,一点回车,我在这里面也可以进行编辑,select last_name,salary,salary*12 + 1000,12*(salary+1000) from employees;

这两个是不是一个意思,显然不是,这里表示12个月的工资,然后整个基础上加1000,这里是每个月1000,说明有小括号的先算小括号里面的,运算的优先顺序,这两个结果肯定不一样,后面的肯定多,这是我们说的salary,number类型的,我们再来看一下日期型的,比如我们select,系统的sysdate,sysdate显示的是我们当天的时间,你也可以sysdate+1,sysdate-2,然后from还是一个伪表select sysdate,sysdate+1,sysdate-2 from dual;

这是今天,这是明天,这是前天,前两天,大家要注意,日期做加减,没有问题,日期不能做乘做除,select sysdate*2 from dual;他提示数据类型不一致,这个你先别管他


我们后边都会说,你想想,一个date型的函数,做个乘法,什么意思,根本没有任何意义,你要sysdate加个1天是明天,减个1是昨天,减个2表示前天,你乘以个2表示什么,没有任何意义,所以说日期函数,乘是没有意义的,相应的你做除,也是不能够做运算的,这个是需要大家来注意的一点,那我们接着往下,这是我们说的优先级的一个顺序,有括号的要先算小括号里的

定义空值,空值是无效的,未指定的,未知的,不可预知的值,空值不是空格或0,我们回来看一下这个概念叫空值select * from employees;这是这个表的所有的数据,COMMISSION_PCT有的是空的,有些是有值的,有空的也有值的,他表示的这个是什么概念呢,就是每个月的奖金率,这里表示按每个月的百分之十来加,没有的就是相当于没有,但没有大家要注意,不意味着是0,这个有点意思,你看我这样给大家操作一下select employee_id,last_name,commission_pct from employees;这里我们单纯拿出这几列来看一下,有的有,有的没有,那我想计算这个,name我不要了,我写成salary,我们来看一下员工的工资,这是月工资,我看加上奖金以后的月工资select employee_id,salary,salary*(1+commission_pct) from employees;这是每个人每个月的工资,这里是算上奖金以后的工资,大家你看这个结果,或者我再加一个select employee_id,salary,commission_pct,salary*(1+commission_pct) from employees;应该能够注意到,凡是commission_pct有值的,后边一定有值,如果commission_pct是空的,这个结果竟然也是空,没错吧,这就说明commission_pct,确实不是0,因为它如果是0的话,你想想你salary乘以1+0,这里应该写上你的salary,但是他没有写,说明他不是0,这个概念需要自己理解一下,commission_pct不一定意味着是0,同时我们看到一个知识点,凡是commssion_pct参与运算的,如果你要是为空,整个这个结果都为空,我们加一个注释,有别于JAVA中的,SQL中的两个短横线--,这个怎么写,空值不同于0,凡是空值参与的运算,结果都为空,这个空你就可以用这个来表示,我们JAVA中是不是也有这个概念,null,就是空呗,凡是null参与的,结果都是null,这个需要你记住

列的别名,我可以给这个列起个别名,我们直接来操作,我查询这样几个列,employee_id,last_name,这都是我们employee里面有的这样的列的,我再查询员工一年的工资是多少,先忽略奖金率,12*salary,然后from employees,这儿写的话分号就不用加了select employee_id,last_name,12* salary from employees运行,这儿我们看到了,当你这个查询的时候,他都给你标识了,这个叫employee_id,这个叫last_name,这个叫12*salary,这个我觉得体验不太好,我想给这个起个别名

或者像前面的employee_id,感觉有点太长了,我就可以给你取个别名,这个别名在你相应列的后面,不要加逗号,来一个空格,写上你想起的别名,我可以直接加到这儿,比如说就叫id,last_name就叫name,salary我就起annual_salaryselect employee_id id,last_name name 12*salary annual_sal from employees就是年的工资

annual表示每年的,我再OK一下,大家注意到,此时这个名字就是用别名来标识的

id,name,annual_sal是我刚刚命名的,他这里默认的使用的大写,默认使用的是大写,第一种就是我们刚才说的这一种,直接你在相应列的后面,来起上这个别名,列的别名,你也可以怎么着,在后面加上关键字,as,查询这列,使用id这个名查询出来,这个as加不加意义不大,还是这个意思,就是可以省略,就是这个意思

你看id都是大写的,我们已经说了两种方式了,加不加as,有的人id默认就用大写的,我就想你用一个小写的来表示,这个怎么办,这个就是我们要说的第三种方式,别名的第三种方式,加上双引号select employee_id as "id",last_name name,12*salary annual_sal from employees;此时加上的双引号,如果你是小写的,出来的就是小写,如果是大写的,出来的一定是大写

last_name我也可以给你命名一下,用双引号给他括起来,我就让你n首字母是大写的,我们看一下这个效果,select employee_id  as "id",last_name "Name",12*salary annual_sal from employees

这里就让你小写,这里就让你首字母大写,这里因为你没有使用双引号引起来,所以默认全是大写

给列区别名的三种方式,不加as的时候一种,第二种加一个as,第三种你可以加上一个双引号,什么时候双引号一定得加,一个你是想要以大写或者小写呈现的,你就用双引号,大小写不能改变,还有一种情况,像annual_sal,这是一个单词,没错,如果我先做使用salary*12取个别名,这个别名是由两个单词构成的,那你现在这种写法肯定是错的select employee_id id,last_name name,salary*12 annual sal from employees;

中间有空格,是分隔开的,那你如果想要整个作为一个别名的话,那你就需要给他加上双引号select employee_id id,last_name name,salary*12 "annual sal" from employees

这样说明他的别名是annul sal,就是这种情况下,双引号是必须的,别名是多个单词构成的,这中间用空格隔开,这个没问题

这就是我们讲的别名,第一种直接这样写,第二种加as,第三种加双引号,双引号又说了,这里按照你指定的格式,如果有多个单词一定要加双引号

连接符,我们这里讲的东西稍微有点散,特别小细节点,我们刚开始学JAVA也是,学学基本的数据类型,然后每种数据类型大小是多少,学学二进制十进制,再讲讲基本的运算符,都是稍微有点散的,越往后这个集成率越高,知识点越明晰,我们看这个叫连接符的概念,连接符,他用于把列与列,列与字符连接在一起,把列与字符连接在一起,用双竖线表示,其实这个,这个双竖线,我们之前没有讲过,但是,我说了一个但是,你学JAVA的时候,你们是不是经常做这么一个事,或者这样说吧,我打印一个语句,System.out.println(123+"hello"+123);打印一个什么,打印一个hello,加上123,我再写个123加上,我问这个打印的结果在JAVA里面,应该是什么,是不是应该是这个,123hello123,这个是输出语句打印的结果,此时只要有字符串参与运算的,就是用双引号括起来的,他和其他的数据类型,做运算的时候,这个符号就不是表示加了,而是表示的连接符,就是将这两个连接起来,连接以后的结果,也是作为一个字符串出现的,他作为一个字符串又和123连接,所以结果是他,那放在我们这儿,相当于在SQL当中不是用的加号了,用双竖线,表示的连接功能,也是以字符的,没错,那我们写一个例子吧,比如我们想实现这个,你可以这样来查

last_name,以及每个人的job_id,from employeesselect last_name,job_id from employees;这儿查询的是两列,你可以分别给这两列取个别名,但是我现在想啊,我就想说,谁谁的工作是什么,以一条的方式呈现,我们中间需要加一个连接符select last_name || '`s job_id is || job_id from employees键盘1左边的`,这样写,那么此时他能够默认

我们看看效果,这是我们想要的,这个人的工作是他

这儿只有一列,这个别名就没有什么别名,就是一个大厂串,你可以给他取个别名,as detailselect last_name ||'`s job_id is '||job_id as detail from employees

那么此时就有一个别名了

这个叫连接符,你也可以写成select last_name || '`s email is '|| email as details from employees

后边有相应的练习,last_name||job_id as "Employees",就是一列的形式给他展示出来

每当返回一行的时候,字符串输出一次,就是刚才你操作的这个信息,当你每打印一行的时候,每一条都有这样的信息,字符串可以是select列表中的一个字符,数字,日期,这个啥意思,select last_name||'`s hire_date is '|| hire_date as details如果你使用日期字符串的话,'`s hire_date is '这里是一个字符串,这个字符串在JAVA当中,是用双引号来包起来的,表明是一个字符串,而在SQL这一块,我们用的是单引号,用单引号来表明这是一个字符串,同样hire_date也是用单引号,来连接的,我们往后会说这个hire_date,用单引号来连接,这个是需要大家注意的,在SQL唯独哪里使用双引号呢,就是这,我们刚才起别名,在别名的时候我们使用双引号select last_name ||'`s hire_date is '|| hire_date as "details";除此之外,你就记住,讲字符串,还是讲date,都是用单引号来连接的

然后重复行,第一节的概念比较散,需要你们来记忆一下,默认情况下,查询会返回全部的行,包括重复的行,是这个意思,大家如果你要是打印这个信息select last_name,department_id from employees;这都是我们employees表里面的两个列,需要大家把这个表结构熟悉一下,我刚才打印的是这个,还有employee_id,我们发现有些员工的部门是相同的,还是出来107条记录,这个如果还是说不明显,怎么就明显了,那这里给你删了select department_id from employees;是不是还是107条记录,这个记录里面确确实实有很多重复的,我想看一下这个员工工作的部门到底有几个,那你这样写肯定不行吧,里边有太多重复了,我就想看有几个的话,得把我重复的给去掉吧,那么去重,使用的是这样一个命令select distinct department_id from employees

把这个表里面重复的给他滤掉

刚才107个,现在12个,把所有重复的给滤掉了,最后一个有空的,说明啥,有个员工没有部门,但是你跟重复的每个还不一样,所以算上他就是12个,那空的啥意思,可能这个人是个老板,他自己就没有部门了,接着往后,有一个这样的一个概念,最后需要了解SQL和SQL PLUS的区别,SQL PLUS是一个工具,我可以通过这个工具传送SQL语句给ORACLE服务器,根据你传入的SQL语句的信息,比如说查询的,我可以将这个查询结果传给你,最后反馈给客户端

那这两个的区别我们说一下,这个SQL不用多说了,它是一种语言了,刚才我们说的基本的SELECT语句,都是属于SQL的,关键字不能够缩写,使用语句控制数据库中的表的定义信息和表的结构,增删改查,创建,清空表,全称在这,结构化查询语言,SQL PLUS是一种什么,是一种环境,我们刚才使用这个环境调用了SQL命令,第一节的时候,这就是SQL PLUS,这是一个工具,它是一个环境,ORACLE的特性之一,关键字可以缩写,这里也相当于我们也用这个环境,desc employees,我这前面是不是有一个desc,他这个desc,不是SQL的关键字,它是SQL PLUS的关键字,SQL PLUS的


什么意思,就是SQL PLUS这个环境里面有一个关键字叫desc,他其实全称叫做describe,describe employees;

翻译过来是描述,描述一下这个表的结构,他就将这个表里面的有哪些列,列的数据类型,大小,desc这个命令可以缩写,那么缩写我们就缩写到desc了,你能des吗,des employees不能

这个就太短了,还有哪个,ed我们打开这个编辑框

这个ed也是SQL PLUS的关键字,他的全称叫edit

ed就是对他的一个缩写,e行不行,是不是不行,e太过分了,太多分不行,太短了,你至少得给个ed,有一个环境叫做SQL PLUS,这个你不懂你别乱讲,你学过C,C是一门编程语言,c++是在C的基础上给他的一个扩展,所以我们把c++叫做C plus plus,你别看到SQL,然后说SQL PLUS,SQL PLUS是SQL的一种升级,那就完蛋了,工作的时候千万别这样说,显得你太业余了,c#,实际上是4个加,Mysql是数据库

显示表结构,全称叫做describe,我们整个这一节的内容就讲完了,通过这一节你要会什么,就是select from,里面多了一个就是起别名,然后如何来删除里面重复的列,指定的列就是你要那一列就写哪一列,select from这是最核心的结构,from哪个表,只要你学SQL,这个是太太基础了

基本的SQL-SELECT语句相关推荐

  1. SQL Select语句完整的执行顺序:

    SQL Select语句完整的执行顺序: 1.from子句组装来自不同数据源的数据: 2.where子句基于指定的条件对记录行进行筛选: 3.group by子句将数据划分为多个分组: 4.使用聚集函 ...

  2. mysql sql select_mysql SQL Select 语句 简单应用

    一.SQL 简介 1. 什么是 SQL? SQL 指结构化查询语言 SQL 使我们有能力访问数据库 SQL 是一种 ANSI 的标准计算机语言 2. SQL 能做什么? SQL 面向数据库执行查询 S ...

  3. sql初学者指南_初学者SQL示例:SQL SELECT语句的用法

    sql初学者指南 SQLSELECT statements are used to retrieve data from the database and also, they populate th ...

  4. sql语句distinct_带DISTINCT子句SQL SELECT语句

    sql语句distinct Hey, folks! In this article, we will we focusing on SQL SELECT DISTINCT statement. 嘿伙计 ...

  5. sql语句count_带COUNT()函数SQL SELECT语句

    sql语句count Hey, folks! In this article, we will be focusing on SQL SELECT statement along with COUNT ...

  6. 数据库系统之SQL SELECT语句-4

    SQL - SELECT Statement -4 Outer Join Queries LEFT OUTER JOIN And RIGHT OUTER JOIN Full outer join qu ...

  7. sql select 语句_学习SQL:SELECT语句

    sql select 语句 The SELECT statement is probably the most important SQL command. It's used to return r ...

  8. 第4章 SQL SELECT 语句教程

    SELECT 语句用于从database中选取数据. 第4章 SQL SELECT 语句教程 SELECT 语句用于从database中选取数据. 结果被存储在一个结果表中,称为结果集. SQL SE ...

  9. Oracle数据库(二)—— 基本的SQL SELECT语句

    (一)SQL语句分为一下三种类型 DML:Date Manipulation Language 数据操纵语言 DDL:Data Definition Language 数据定义语言 DCL:Data ...

  10. SQL SELECT语句执行顺序

    SELECT语句内部的执行步骤. 一条完整的SELECT语句内部的执行顺序是这样的: FROM子句组装数据(包括通过ON进行连接): WHERE子句进行条件筛选: GROUP BY分组 : 使用聚集函 ...

最新文章

  1. java获取目录中最后被更改的文件_如何使用Java从目录中只获取10个最后修改过的文件?...
  2. ios微信支付失败 php,iOS 微信支付疑难杂症。
  3. Python攻克之路-网络编程(文件上传实现思路)
  4. [js] XML与JSON有什么的区别?
  5. linux下编译安装ntfs,linux下编译安装ntfs
  6. Intel 64/x86_64/IA-32/x86处理器 - 指令格式(9) - 64位指令格式(通用格式)
  7. 简单自制拖拽布局思路vue-Cil
  8. 机构、基民双输,基金销售的利益困局如何破?
  9. 注解与 xml 实现aop哪种好_Spring 从入门到入土——AOP 就这么简单!| 原力计划
  10. pbootcms模板忘记后台密码怎么办?
  11. 7654:等差数列末项计算
  12. Amazon ParallelCluster 3 集成 ANSYS CFD 计算
  13. dynamicCondition v3.0.6 插件新增下拉树编辑器
  14. 高德地图自定义地图怎么去除最上边这个默认的蓝色天空?太丑了!!
  15. BZOJ 3098(Hash Killer II-生日攻击)
  16. 线程、多线程与线程池总结
  17. 第6-3课:博弈树与井字棋(Tic-Tac-Toe)
  18. 山高有攀头,路远有奔头~
  19. 水晶报表的中文版下载
  20. jCore中文本地化工作札记 - 1

热门文章

  1. 学习Python最好的途径——激发自己的学习兴趣!
  2. 25 个 Java 机器学习工具和库
  3. Activiti工作流引擎使用
  4. 02-C#入门(循环)
  5. Linux帮助信息获取
  6. Windows Mobile 5
  7. 今天开始在博客园正式安家!
  8. 干货分享:什么是Java设计工厂模式?
  9. 60 分钟极速入门 PyTorch
  10. c语言不同类型指针间的强转,C语言中不同的结构体类型的指针间的强制转换详解...