Context、Select(day01)
Oracle
sql: 4天
plsql: 2天
proc: 2天
数据库介绍
1.1 数据库简介
1.1.1 数据管理技术的发展
人工管理阶段:20世纪50年代中期之前文件管理阶段:20世纪的50年代末期到60年代中期
缺点:数据冗余
数据的不准确
数据之间的联系弱
数据库管理阶段:
数据库技术诞生的三大标志性事件:
1968年,IBM公司---> IMS
1969年,DBTG发布了一系列的报告---> 标准和规范
1970年,IBM的研究员E.F.Codd 发表了一系列论文
提出了关系模型
特点:采用复杂的结构化的数据模型
最低的冗余度
数据完整性
数据库系统为用户提供了方便的接口
控制功能:
并发控制
数据库的恢复
安全性
系统更加灵活
信息处理方式不在以程序为中心,而是以数据为中心1.1.2 和数据库相关的几个术语
数据(data):数据库存储的基本对象,包括文字、图形、声音、视频等
数据库(database):长期存储在计算机内、有组织、可共享的大量数据的集合
数据库管理系统(DBMS):是位于操作系统和用户之间的一层应用程序,科学的组织、存储数据,高效的获取和维护数据
数据库系统(DBS): 由数据库、数据库管理系统、应用程序和数据库管理员(或用户) 组成的系统。
数据库管理员: DBA1.1.3 关系数据库
用二维表保存数据的数据库
表头 字段
行
列
字段值
1.2 主流的关系型数据库产品
商业型
Oracle Oracle(甲骨文) 10g 11g 12c
DB2 IBM
sql server 微软
sybase
开源
mysql Oracle
1.3 sql语言
SQL(Structured Query Language): 结构化查询语言
SQL分为:
数据查询语言(DQL): select
用来查询数据中的数据 使用最广泛、语法最灵活
数据操作语言(DML): insert delete update
用来改变数据库中的数据
数据定义语句(DDL): create drop alter
用来创建、删除、修改数据库对象
事务控制语句(TCL): commit rollback savepoint
用来保证数据的一致性
数据控制语句(DCL): grant、revoke、create user
用来执行权限的授予和回收、创建用户等
1.4 远程登录服务器
1.4.1 开发工具
sql*plus
sqlplus:oracle提供,和数据库进行交互的工具
命令提示符下的工具
oracle sqldeveloper: 可视化工具
1.4.2 远程登录
第一步:远程登录服务器
telnet ip
用户名:
密码:
第二步:使用sqlplus工具
sqlplus
输入用户名:
输入密码:
现场班:
telnet 172.60.5.80 或172.60.5.81
用户:oracle
密码: oracle
sqlplus
输入用户名: openlab
输入密码: open123
SQL>
sqlplus命令:可以不以分号结尾
sql语句: 必须以分号结尾(学习的内容)
1.5 描述表结构
sqlplus命令:desc
desc 表名[;]
desc s_emp;
Name Null? Type
ID 员工编号 NOT NULL NUMBER(7)
LAST_NAME 姓 NOT NULL VARCHAR2(25)
FIRST_NAME 名 VARCHAR2(25)
USERID VARCHAR2(8)
START_DATE 入职日期 DATE
COMMENTS VARCHAR2(255)
MANAGER_ID 领导编号 NUMBER(7)
TITLE 职位 VARCHAR2(25)
DEPT_ID 部门编号 NUMBER(7)
SALARY 工资 NUMBER(11,2)
COMMISSION_PCT 提成 NUMBER(4,2)
Name:表中的字段名
Null? 该字段是否允许为空
NOT NULL:不允许为空
Type: 字段的数据类型
number(p,s) 数字类型
p: 有效数字的位数(从第一个非零数字开始)
1<=p<=38 默认38
s: 精度
-84<=s<=127
number ---> number(38,0)
number(p) ----> number(p,0)
number(p,s)
varchar2(n) 变长字符串 n不能省略 1~4000bytes
char(n) 定长字符串 n默认为1 1~2000bytes
date 日期
- select语句
2.1 几个概念
选择:选中部分行,全部列
投影:选中全部行,部分列
表连接:需要的数据来自于多张表
2.2 select语句的子句
基本的查询语句: select..from
where子句
order by子句
单行函数
表连接
组函数和分组
子查询
3.select..from语句
select 字段列表 from 表名;
3.1 列出表中一个字段
select 字段名 from 表名;
-- 列出所有员工的工资
select salary from s_emp;
3.2 列出表中的多个字段
select 字段名,字段名,.... from 表名;
-- 列出员工的编号、名字、职位、工资
select id,first_name,title,salary from s_emp;
3.3 列出表中全部字段
--
select id,last_name,first_name,userid,..... from s_emp;
-- 使用 * 代替所有字段
select * from s_emp;
3.4 算数运算 一般指的是数字类型
+ - * /
-- 列出员工的信息,包括编号、名字、工资、年收入
12*salary + 1000
select id,first_name,salary,12*salary+1000 from s_emp;
3.5 字段或表达式 命名 别名
3.5.1 语法
字段或表达式 [as] 别名
select id,first_name as name,salary,
12*salary+1000 yearsal from s_emp;
3.5.2 使用 ""
-- 屏蔽特殊字符或关键字等
select id,first_name as name,salary,
12*salary+1000 "year sal" from s_emp;
-- 大小写敏感
select id,first_name as name,salary,
12*salary+1000 "YearSal" from s_emp;
3.6 sql中的字符串
3.6.1 字符串的表示方式
单引号:''
'a' 'Hello world'
3.6.2 字符串的拼接
||
-- 把员工的first_name和last_name拼接起来
select id,first_name||last_name as name from s_emp;
-- 把员工的first_name和last_name之间拼接一个 .
select id,first_name||'.'||last_name as name
from s_emp;
-- 把员工的first_name和last_name之间拼接一个 '
使用转义字符:'
select id,first_name||''''||last_name as name
from s_emp;
3.7 NULL值的处理
-- 计算员工的年收入,考虑提成
12salary + 12salarycommission_pct/100
12salary(1+commission_pct/100)
-- 下面语句的结果集是错误的
select id,first_name,title,
12salary*(1+commission_pct/100) as yearsal
from s_emp;
NULL值参与运算的表达式的结果为空
使用函数 nvl 处理NULL值
nvl(par1,par2) : 当par1不为空,返回par1
放par1为空,返回par2
nvl(12*salary*(1+commission_pct/100),12*salary)
12*salary*(1+nvl(commission_pct,0)/100)
select id,first_name,salary,
12*salary*(1+nvl(commission_pct,0)/100) as yearsal
from s_emp;
3.8 排重 distinct
-- 列出员工的职位
select distinct title from s_emp;
-- 多列排重
select distinct title,dept_id from s_emp;
where子句
select ...
from ..
where 条件;
4.1 作用
根据条件对表中的数据进行筛选,挑选出符合条件的行
4.2 数字类型的条件
-- 列出工资大于1400的员工的信息
select id,first_name,salary from s_emp
where salary>1400;
4.3 字符串类型的条件
-- 列出名字为'Ben'的员工的信息
select id,first_name,salary from s_emp
where first_name = 'Ben'; -- 有一行结果
select id,first_name,salary from s_emp
where first_name = 'ben'; -- 没有结果
-- sql中没有 ==
-- sql中不区分大小写,但是字符串的值是区分的
4.4 比较运算符
> < >= <= = !=(<> ^=)
4.5 sql提供的运算符
4.5.1 表示一个闭区间 [a,b]
between a and b
-- 列出工资在[1100,1550] 之间的员工的信息
select id,first_name,salary from s_emp
where salary between 1100 and 1550;4.5.2 表示一个列表
in(值1,值2,...)
address in('北京','上海','广州')
-- 列出部门编号为 31,42,50的员工的信息
select id,first_name,dept_id from s_emp
where dept_id in(31,42,50);4.5.3 模糊查询
like '包含通配符的字符串' 通配符:
%: 任意长度的任意字符
_: 一位任意字符 StuName like '李_%' -- 列出first_name首字母为'M'的员工的信息
select id,first_name from s_emp
where first_name like 'M%';
-- 列出first_name第二个字母为'a'的员工的信息
select id,first_name from s_emp
where first_name like '_a%'; user_tables: 数字字典 保存当前用户的所有表的信息
desc user_tables;
-- 列出user_tables中以'S_'开头的表的信息
select table_name from user_tables
where table_name like 'S_%';
-- 使用转义字符 escape
select table_name from user_tables
where table_name like 'S\_%' escape '\';
4.5.4 空值的判断
is null-- 列出manager_id为空的员工的信息
select id,first_name,title from s_emp
where manager_id = null;
select id,first_name,title from s_emp
where manager_id != null;
-- 使用=或!=判断null值,结果永远为假 select id,first_name,title from s_emp
where manager_id is null;
4.6 sql中的逻辑运算符
and or not
-- 使用and改写 between and 案例
列出工资在[1100,1550]之间的员工的信息
select id,first_name,salary from s_emp
where salary between 1100 and 1550;
select id,first_name,salary from s_emp
where salary>=1100 and salary<=1550;-- 使用or改写 in 案例
列出编号为31,42,50的部门的员工的信息
select id,first_name,dept_id from s_emp
where dept_id in(31,42,50);
select id,first_name,dept_id from s_emp
where dept_id=31 or dept_id=42 or dept_id=50;对立面:
> <=
< >=
= !=(<> ^=) between and not between and
in not in(注意NULL值)
like not like
is null is not null -- 列出有提成的员工的信息
select id,first_name,commission_pct from s_emp
where commission_pct is not null;
order by子句
5.1 总是出现在一条select语句的最后
select 字段列表
from 表名
where 子句
......
order by子句;
5.2 语法
order by 排序标准 排序方式
排序方式:
asc 升序 (自然顺序、字典顺序) 默认排序方式
desc 降序5.3 按照工资降序排序,列出dept_id为31,32,33的员工的信息
select id,first_name,salary,dept_id from s_emp
where dept_id in(31,32,33)
order by salary desc;5.4 多列排序
select id,first_name,salary from s_emp
order by salary;order by 排序标准1 排序方式,排序标准2 排序方式
select id,first_name,salary from s_emp
order by salary,id desc;
-- 多列排序时,每一个排序标准的排序方式是自己定义的5.5 排序时,默认按照最大值处理
-- 根据manager_id排序,列出员工的信息
select id,first_name,manager_id from s_emp
order by manager_id desc;
-----------------------------------------------------------------总结
1.数据库介绍
sql语言
sqlplus的命令:desc
数据类型
2.select语句
3.select...from
4.where子句
比较运算符:> < >= <= = !=(<> ^=)
sql提供的运算符
between and
in
like
is null
sql中的逻辑运算符
and or notorder by子句
练习:
- 查看s_dept和s_region表的表结构
- 查询s_dept和s_region表中的数据
- 计算员工的年收入,列出年收入大于15000的员工的信息,
并对年收入进行降序排序。
Context、Select(day01)的更多相关文章
- Python之路-python(Queue队列、进程、Gevent协程、Select\Poll\Epoll异步IO与事件驱动)
一.进程: 1.语法 2.进程间通讯 3.进程池 二.Gevent协程 三.Select\Poll\Epoll异步IO与事件驱动 一.进程: 1.语法 简单的启动线程语法 def run(name): ...
- Esper系列(九)NamedWindow语法create、Insert、select
功能:用于存储一种或多种类型的事件的集合,并能对所存储的事件进行增删改查操作. CreateNameWindow 根据已有的数据源构造 格式: 1 [context context_name] 2 ...
- [转]jQuery操作radio、checkbox、select 集合.
1.radio:单选框 html代码 <input type="radio" name="radio" id="radio1" val ...
- JS/JQuery针对不同类型元素的操作(radio、select、checkbox)
一.select下拉框 I:javascript方法 1:获取选中的值 F1: var myselect=document.getElementById("test");或者 ...
- Linux平台延时之sleep、usleep、nanosleep、select比较
Linux平台延时之sleep.usleep.nanosleep.select比较 标签: 嵌入式thread线程cpu多线程 2015-05-05 15:28 369人阅读 评论(0) 收藏 举报 ...
- 第十天 多进程、协程(multiprocessing、greenlet、gevent、gevent.monkey、select、selector)
1.多进程实现方式(类似于多线程) import multiprocessing import time,threading def thread_run():#定义一个线程函数 print(&quo ...
- css取消input、select默认样式(手机端)
IOS端: background-color:transparent; border-color:transparent; andorid端: 仅仅使用上面的代码还不够,可以发现select框在某些浏 ...
- Jquery 操作Html 控件 CheckBox、Radio、Select 控件 【转】http://www.cnblogs.com/lxblog/archive/2013/01/09/2853056.html
Jquery 操作Html 控件 CheckBox.Radio.Select 控件 在使用 Javascript 编写前台脚本的时候,经常会操作 Html 控件,比如 checkbox.radio ...
- input、select等表单元素的对齐问题
今天在写页面时,发现了一个问题,当INPUT.SELECT及用图片做的button放在一起(并排放一起)时,没法子对齐,自己以不愿再加其他代码.也不愿使用JS来实现图片button的效果,试好半天,发 ...
随机推荐
- HDU 5435
数位DP题,然而不会做.设dp[i][j]表示前i位异或和为j的时候的个数.先dp出所有的可能组合使得异或和为j的个数,然后按位进行枚举.对于dp[i][j],其实不止是前i位,对于后i位的情况同样适 ...
- 编程之美初赛第二场AB
题目1 : 扑克牌 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 一副不含王的扑克牌由52张牌组成,由红桃.黑桃.梅花.方块4组牌组成,每组13张不同的面值.现在给定52 ...
- tabBar颜色改动
//未点击的颜色 [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKey ...
- SolrCloud 分布式集群部署步骤
https://segmentfault.com/a/1190000000595712 SolrCloud 分布式集群部署步骤 solr solrcloud zookeeper apache-tomc ...
- 完美解决 linux sublime 中文无法输入
感谢oschina 中几位前辈的分享 下面是我结合自己的情况所配置的具体步骤: 系统环境: ubuntu 12.10 输入法:fcitx fcitx 安装 apt-get install fcitx ...
- 两个向量之间的欧式距离及radial-basis-functions(RBF)
template <class DataType1, class DataType2>double EuclideanDistance(std::vector<DataType1&g ...
- 603E
LCT维护MST+子树信息 看了好长时间题解 editorial 结论:像做最小生成树一样,当每个连通块都是偶数个点就停下来. 每次复杂度mlogm 口胡 首先我们发现奇数个点是不满足每个点度数为奇数 ...
- 87.Ext_菜单组件_Ext.menu.Menu
转自:https://blog.csdn.net/lms1256012967/article/details/52574921 菜单组件常用配置: /* Ext.menu.Menu主要配置项表: it ...
- 机器人走迷宫(dfs)
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1590 #include <stdio.h ...
- IP Address
http://poj.org/problem?id=2105 #include<stdio.h> #include<string.h> int main() { ]; ] = ...