SQL_SELECT

SQL语言

概念:

SQL(Structured Query Language)为数据库的语言,在1974 年Boyce【博伊斯】和Chamberlin【钱伯林】提出的一种介于关系代数与关系演算之间的结构化查询语言,是一个通用的、功能极强的关系型数据库语言。

命令分类操作:

分类命令
DDLcreate:创建;drop:删除;alter:修改;rename:重命名;truncate:截断
DMLinsert:插入;delete:删除;update:更新;select:查询
DCLgrant:授权;revoke:回收权利;commit: 提交事务;rollback:回滚事务

数据库—表

1.表是从属于用户的

当前用户查询自己的表时,用户名. 可以省略,其他用户查询别的用户表时,不能省略,还必须存在权限

2.表是逻辑表(概念表),不是真实存在的物理表

块(8k) —>区(连续块)–>段(连续区) -->表(多个段) ,数据段不全是表,表一定是数据段。还有其他段:如索引段

3.表结构

表由表名、字段(名称+类型+约束)、记录 组成。与 java相对应

DBJAVA
表名类名
字段名属性名
字段类型:number、char、varchar2、date…属性类型:基本数据类型|引用数据类型
字段约束:约束行为->创建表结构时加入,操作数据时生效方法检查条件
记录:数据对象:new

三范式

1NF:

指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

2NF:

满足第一范式的前提下,第二范式就是非主属性非部分依赖于主键。

3NF:

满足第二范式的前提下,第三范式就是属性不依赖于其它非主属性。

范式总结:

简而言之,最终的目的避免数据重复冗余,1NF–>列不可再分最小原子 (避免重复);2NF–>主键依赖(确定唯一);3NF–>消除传递依赖(建立主外键关联 拆分表);

SELECT:

相关操作,代码演示:

--sql语句不区分大小写,要么全大写,要么全小写
--得到的数据称为  ->  结果集

--查询某个表格所有的字段信息
select * from 表名;

--查询某个表的指定字段名
select 列名 from 表名;

--查询某个表的多个列
select 列名1,列名2 from 表名;

--去除重复
select distinct 列名 from 表名;

--查询表达式
select 表达式 from 表名;

--使用别名,列名的 as 可用可不用,表名的别名不用 as
select 列名 as 别名 from 表名 别名

--注意点:1、*(通配符:查询所有的字段)
--		 2、as:字段别名可用可不用,表别名不可用
--		 3、"":原样输出别名,可存在空格,区分大小写
--		 4、'':表示字符串,使用 || 拼接

1.伪列:

不存在的列,构建虚拟的列

--count 和 name 就是伪列
select empno, 1*2 as count,'cmj' as name
from emp;

2.虚表

用于计算表达式,显示单条记录的值

--dual为虚表
select 1+1 from dual;

3.null

null 遇到数字参与运算的结果为 null,遇到字符串为空串

select 1+null from dual;
select '1'||null from dual;
--to_char是函数,转换为字符串
select 1||'2'||to_char(null) from dual;
select ename,sal*12+comm from emp;
--nvl内置函数,判断是否为null,如果为空,取默认值0,否
--则取字段实际值 select ename,sal*12+nvl(comm,0)
--from emp;

4.条件查询

使用 where 过滤。

4.1 比较:

= 、>、 <、 >=、 <=、 !=、 <>

这些符号简单易懂,就不多介绍了,<> 这个符号等同于 !=

4.2 且、或、非

and、or、not

select 列名 from 表名 where 条件1 and 条件2;
4.3 null

null不能使用条件判断,只能使用 is

--是否为空
select * from 表名 where 列名 is null;
--是否不为空,两种形式都可以
select * from 表名 where 列名 is not null;
select * from 表名 where not 列名 is null;
4.4 集合操作

Union、Union All、Intersect、Minus

Union,并集(去重) 对两个结果集进行并集操作,不包括重复行同时进行默认规则的排序;

Union All,全集(不去重) 对两个结果集进行并集操作,包括重复行,不进行排序 ;

Intersect,交集(找出重复) 对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;

Minus,差集(减去重复) 对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序

4.5 模糊查询

模糊查询,使用通配符:

% :零个及以上(任意个数的)的字符
_ :一个字符

遇到内容中包含 % _ 使用escape(‘单个字符’)指定转义符

--查询列名中出现 A 的字段信息
select * from 表名 where 列名 like '%A%'
--查询列名中第二个字符是A的字段信息
select * from 表名 where 列名 like '_A%';
--查询列名出现 _ 的字段信息,a 为转义字符
select * from 表名 where 列名 like '%a_%' escape('a')
4.6 in和exists

in相当于使用or的多个等值,定值集合 ,如果存在 子查询,确保 类型相同、字段数为1,如果记录多,效率不高,用于 一些 少量定值判断上

--查询该列的值与in()括号中数据匹配的字段信息
select * from 表名 where 列名 in(数据1,数据2...);

exists条件为true,存在记录则返回结果,后续不再继续比较查询,与查询的字段无关,与记录有关

--无关系列
select *
from emp
where exists
(select deptno,dname from dept where dname in('SALES', 'ACCOUNTING'));

--有关系列,通过deptno连接两个表
select *
from emp e
where exists (select deptno, dname from dept d 
              where dname in ('SALES','ACCOUNTING') and e.deptno = d.deptno);
4.7 获取所有行记录
select * from emp;
--后期字符串拼接成SQL语句有优势
select * from emp where  1=1 ;
--效率低
select * from emp where ename like '%';
4.8 排序

使用 ORDER BY 排序,排序不是真实改变存储结构的顺序,而是获取的集合的顺序。

  1. 顺序 :asc(默认) desc
  2. 多字段: 在前面字段相等时,使用后面的字段排序
  3. 空排序: 降序为 desc,注意 null 为最后
--查询表显示获得补助的所有雇员名、工资及补助,并以工资升序和补助降序排序
select ename,sal,comm from emp order by sal,comm desc;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值