39,数据库(01)
来源:互联网 发布:知乎个性域名是什么 编辑:程序博客网 时间:2024/05/24 01:50
/*
达内学习 Oracle day38 2013-10-24
*/
oracle -sql (structed query language)
数据的存储
file
dbms(数据库管理系统) 管理的文件就是db
主流的数据库:FDB 关系型数据库(基于二维表的数据库) 有行有列组成的表
数据库管理的基本单位是表
RDBMS 关系型数据库管理系统
Oracle甲骨文 50%
版本9i,10g,11g
DB2 IBM (国际商务机器)20%
sqlserver microsoft 15%
开源数据库:
mysql sun(斯坦福大学网络实验室)甲骨文
嵌入式数据库
sqllite 文本型数据库
//==================================================
SQL 语言的分类
1 查询语句
select
2 数据定义语言 DDL
create table
drop table
alter table
3 数据操作语言 DML
insert
delete
update
4 事务控制语言 TCL
commit
rollback
savepoint
5 grant revoke
//---------------------------------------------------------------
远程登陆
telnet 192.168.0.23/26
openlab open123
window: telnet IP
ubuntu: 相同
登陆数据库 sqlplus openlab/open123 sqlplus openlab open123
//-----------
察看 一张表结构
SQL>desc 表名;
SQL> 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? 字段能不能不填写
type 字段的类型
数字:number
字符串:varchar2
日期类型:date
//----------
基本概念:
选择:所有列被选择部分行被选中
投影:所有行被选中,部分列被选择
表连接:把所有表组织起来
select 语句
A,from
数据从哪里来
1,怎么从一张表查询一个字段
select 字段名 from 表;
查询 s_emp 表中的 salary;
select salary from s_emp;
2,怎么从一张表中查询多个字段
select 字段名,字段名…… from 表; //同级别的东西用逗号隔开
查询 s_emp 表中 名 和对应的 工资
select first_name,salary from s_emp;
3,查询一个表中所有字段
select * from 表;
4,sql中的数学运算 + - * /
要求把每个人的工资 加100以后显示
select salary,salary+100 from s_emp;
5,字段和表达式别名
select first_name name,salary*12 'yearsal' from s_emp;
字段 和表达式的别名。 字段或者表达式后面 起另一个名字(别名只能有一个并且别名处理成大写) 原样显示用单引号
6,sql中的字符串
在一串字符的两端 加上单引号
例如:'' 'a' 'hello'
字符串的拼接 ||
select last_name||'_'||first_name name ,salary*12 yearsal from s_emp;
col 字段名 for a+数字; 设置字段名最多显示多少个字符,超了折行
col name for a25
姓名之间加入单引号
select last_name||''''||first_name name from s_emp;
7,空值处理
重新计算年薪,要求年薪是 工资*12*(1+提成/100)
select salary*12,salary*12*(1+nvl(commission_pct,0)/100) byearsa from s_emp
任何值 和 NULL 做运算结果都是NULL
nvl(par1,par2)
par1 为NULL时返回par2的值,当par1的值不为NULL就返回par1的值
8,数据的排重显示
select distinct salary from s_emp ;
只管做什么,不管在怎么做。
select distinct salary,title from s_emp; //工资和职位都相同
B,where
限定表中数据返回,符合where条件的数据被选中,不符合where条件的数据被过滤掉
1,特殊的where条件
select id,salary from s_emp where 1=1;
2,数字型的数据的限制
列出工资大于1400的员工的id, first_name salary
select id,first_name,salary from s_emp where salary>1400;
select id,first_name,salary from s_emp where salary!=1400;
3,字符串类型的数据的判断
找出first_name 叫Mai的员工的id
select id from s_emp where first_name = 'Mai';
字符串值区分大小写,sql语句不区分大小写
4,常见的运算符
= != < > >= <=
5,sql提供的元算符
a,表达一个闭区间
[a,b]
where 字段 between a and b;
查询工资在 1500 到 2000 之间的id
select id from s_emp where salary between 1500 and 2000;
b,表达一个值 出现在一个列表中
where 字段 in(值1,值2,……);
查询部门编号是 50,31,32 的员工ID
select id, first_name,dept_id from s_emp where dept_id in(50,31,32);
改变括号内顺序对查询结果没有影响。但是可能对查询效率有影响。应该把概率高的放在前面。
c,模糊查询关键字。 关键字 like
where 字段 like '通配串'
数据库中代表0-n个任意字符的是 %,代表一个任意字符的是 _
查询s_emp中first_name 带a的
select id,first_name from s_emp where first_name like '%a%';
查询所有S_开头的表明
select table_name from user_tables where table_name like 'S\_%' escape '\';
'\' '后面的字符转义 ,只有下划线和%需要转义
d,如何判断一个字段的值是否是NULL值
where 字段 is NULL;
找出manager_id是null的人的id
select id from s_emp where manager_id is NULL;
6,逻辑条件运算符
and or not
对立面
between a and b -> not between a and b
in -> not in(注意NULL)
like -> not like
is null -> is not null
7,条件组合顺序
为了清楚加()
C,order by
数据排序
order by 位置在语句最后面
order by 排序标准 排序方式
升序(自然排序,字典排序) asc 降序(反自然,反字典) desc
按照工资排序 显示 id first_name salary
select id,first_name,salary form s_emp order by salary desc;
按照manmager_id 排序
显示id first_name,manager_id
select id,first_name,manager_id from s_emp order by manager_id;
NULL 在排序中当最大值处理
当按照第一个排序时,如果第一个字一样,按照第二排序字段。
select id,first_name,salary from s_emp order by salary asc,first_name desc;
D,单行函数
1 概念
单行函数:针对sql影响的每一行数据都做处理,每一行都会返回一个结果
sql语句影响多少行 就返回多少个结果
组函数:针对一组数据做处理,返回一个结果。无论sql语句影响多少行都返回一个结果。
2 举例 组函数 count
select count(id) from s_emp
where id>1;
select upper(first_name) from s_emp where id = 1;
3 为了测试单行函数 引入了一张表 dual
select * from dual;
4 处理字符串的单行函数
upper(par1) 转化大写
lower(par2) 转化小写
select lower('HELLO')from dual;
initcap(par1) 把每个单词的首字母变大写
select initcap('one world one dream') from dual;
length(par1) 求字符串的长度
select length('hello') from dual;
把s_emp表中所有first_name 和first_name的长度列出来
select first_name,length(first_name) from s_emp;
E,多表查询
F,组函数和分组
G,子查询
- 39,数据库(01)
- 操作系统、数据库和网络01(数据库SQL安装)
- 数据库01-sqlite3 (了解)
- 数据库01
- 常用数据库代码(数据库)
- (数据库)数据库的安全
- 数据库(六)数据库索引
- 数据库(二)操作数据库
- 数据库(二)关系数据库
- 数据库基础 (关系数据库)
- Firebird学习(01):Firebird数据库简介
- 22---数据库编程01(JDBC概述)
- Delphi数据库编程新手指南(01)
- 【数据库】数据库并发操作(二)数据库并发控制机制
- MySQL数据库一(数据库安装以及数据库的创建)
- 数据库概论(实验五)数据库完整性
- 数据库安装及数据库问题解决(六)
- 数据库安装及数据库问题解决(七)
- STM32系列芯片差别
- a sentence every day!
- OCP-1Z0-052-V8.02-185题
- C# 数据类型
- UCsocket 编程,简单聊天室实现
- 39,数据库(01)
- 【转载】计算广告学-搜索广告与广告网络Demand技术-流式计算平台
- 2014校园招聘总结
- ubuntu默认root密码
- java----冒泡排序
- Eclipse正则表达式 替换查找 /* */ 注释
- json 新用
- Eclipse 正则表达式批量查找与替换
- 软件安装说明