86上山之数据库(二)
•发布于   •作者 咸鱼  •291 次浏览  •来自 资讯

数据库第二天的内容应该和我在学校学的SQL差不多,用到了select语句,可以在学校学的数据库内容不记得了,确切的说是没学好啊,第二天的内容主要是用最基础的select语句查询一些数据,并且用到了一些函数,如单行函数。

1.通常把表的创建,数据的添加都放到一个  ***.sql下   

格式:e:\aa\my.sql

以sql结尾,数据库脚本

直接通过命令执行脚本

start 脚本路径

或者@脚本路径

如果脚本中的日期是英文的,需要把当前环境的日期语言修改

注意:仅针对于当次会话(会话:一个用户的当次连接)

alter session set nls_date_language=english;

//1.创建一个用户:oaec,密码:oaec,授权

//2.连接到oaec,修改日期的会话语言,执行脚本

但凡出错,导致脚本执行失败,先删除用户重头再来

1.SELECT语句

基本语法:

SELECT 列1名,列2名...列n名

FROM 表名;

eg1:查询部分字段

SELECT id,first_name,last_name

FROM s_emp;

eg2:查询全部字段: 显示字段的顺序按照定义的顺序

SELECT *

FROM s_emp;

SELECT *

FROM s_dept;

查询的时候起别名:改变显示的结果,列名是新的名字(大写)

SELECT id,first_name fn,last_name ln

FROM s_emp;

在修改查询结果的显示列名时,默认显示为大写,如果需要显示为小写,

把名字加双引号

如果别名包含特殊字符,比如空格,也需要通过双引号

SELECT id,first_name "f n",last_name "ln"

FROM s_emp;

//显示为2列,

SELECT first_name,last_name

FROM s_emp;

如果需要把多个列合并为一列,拼接符:||,    ',':文本常量

SELECT first_name||','||last_name

FROM s_emp;

//查询每个员工的月薪

SELECT first_name,salary

FROM s_emp;

//数值型,日期型可以在查询时,做加减乘除运算(算术运算)

//查询每个员工的年薪(12月薪)

SELECT first_name,salary*12

FROM s_emp;

//commission_pct:提成百分比

//如果某个字段(列)没有值,null,代表的是未知的,不可确定的

//如果值是null,算数运算结果还是null

SELECT first_name,salary,commission_pct

FROM s_emp;

//计算包含提成后的月薪:

SELECT first_name,salary*(1+commission_pct/100)

FROM s_emp;

空值转换函数NVL(列,值)

对于数值列:NVL(列,数值),如果是null,取数值

对于字符串列:NVL(列,'字符串常量');,如果是null,取值字符串常量

SELECT first_name,salary*(1+NVL(commission_pct,0)/100)

FROM s_emp;

//查询所有的部门的名字:

SELECT name

FROM s_dept;

//查询所有不重复的名字:DISTINCT

SELECT DISTINCT name

FROM s_dept;

sys:最大的管理员,在安装后就存在,级别最高,拥有所有的权限

system:第二大管理员,在安装后就存在,级别第二高,拥有基本的管理普通用户的权限

我们需要创建的表,都是属于某一个用户的,(选择使用普通用户)

通过system创建普通用户,授予基本权限

做事情,一定先切换到普通用户,再做普通用户的

show user:查看当前用户

2.ORDER BY子句和WHERE子句

SELECT 

FROM 表;

执行顺序:

FROM:选确定数据源(表),

SELECT:再确定选择哪些字段(列)

1)ORDER BY:排序,可以针对要查找的数据结果排个序

注意:

1.在排序的时候:null认为是最大的

2.执行顺序的问题

SELECT 

FROM

ORDER BY

顺序:1)FROM 2)SELECT 3)在确定的结果中做排序,ORDER BY

ORDER BY永远在最后一个位置,最后执行

2)WHERE子句:筛选数据

SELECT

FROM

WHERE id>10

ORDER BY;

WHERE后面跟的是表达式,如果表达式结果成立,则结果集包含这一行,

不成立,不包含

表达式中的运算符:

比较运算符:

>,=,>=,<=,   !=,<>,^=,不等于

BETWEEN...AND...:在..和..之间

IN:在某一个集合范围内

LIKE:像...样的,模糊查询

IS NULL:是空的

NOT BETWEEN...AND...

NOT IN()

NOT LIKE ''

IS NOT NULL

逻辑运算符:与或非

AND:与  ,两个结果都满足才满足

OR:或    只要有一个结果满足就满足

NOT:非

LIKE(模糊查询): 

%:可以表示任意的0个或多个字符 '张%'--- 张三, 张三三,张三三阿三,张

_:可以表示任意的1个字符     '张_' --- 张X

'%aa':   aaa  abaa  aa

'_aa':   baa  aaa

'hello_every'  '%_%':至少有一个

优先级:NOT>AND>OR  


注意:

1)WHERE的位置紧跟在FROM之后

2)执行顺序:

SELECT

FROM

WHERE

ORDER BY;

1.FROM->2.WHERE->3.SELECT,到此确定结果集->4.ORDER BY,对结果集排序

应该说是先拿到表,再选择表内所有字段的满足where要求的行,再选择列,最后排序

SELECT id

FROM s_emp

WHERE salary>1000

ORDER BY id desc;

3.单行函数

函数分为:

单行函数:一行可以得到一个结果

多行函数(组函数):多个行得到一个结果,(一组得到一个结果)

1)字符函数(字符串)

LOWER:转换为小写

UPPER:转换为大写

INITCAP:把每个单词的首字母大写,其余都小写

CONCAT:拼接

LENGTH:长度

SUBSTR(字符串,起始点,长度)  在数据库中,起始点都是1

SELECT SUBSTR('helloevery',2,4) FROM dual;=>ello

FROM dual;

补充:dual,虚表,为了满足select... from...语法

SELECT 1+2

FROM dual;



1 回复
小小芙

听说开86的都是老司机啊


回到顶部

©2017 Powered by 三十三行伪代码
皖ICP备17005175号-3