SQL总括

DCL数据控制语言【revoke  grant】

相关子查询

图片 1

#引用完整性(参照完整性)

    外键约束:  foreing     key

     分清主次关系  外键注重主键    先有主键  再有外键

      语法   

         CONSTRAINT 约束的名字   FOREIGN KEY(约束的字段) REFERENCES
主表(约束字段)

        ALTE普拉多  TABLE  次表名称  ADD CONSTRAINT 约束的名字 FOREIGN
KEY(约束的字段)               REFERENCES   主表(约束的字段);

    例:

    CREATE TABLE student(sid int pirmary key,name varchar(50) not
null,sex varchar(10)                   default‘男’);

    create table score(id int,score int,sid int ,
–外键列的数据类型一定要与主键的品类一致

    CONSTRAINT fk_score_sid foreign key (sid) references student(id));

   第3种丰裕外键情势。

    ALTER TABLE score1 ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid)
REFERENCES     stu(id);

6.查询艺术

选择  【int()  not in()  between 
 and     】

模糊  【通配符: %   _   * 
   】

筛选  【where  like  = 】

排序  【order by  】

聚合  【count  sum  avge  max  min  

分组  【group by 】

再三再四  【
内连接  外接连  全连接  交叉连接  】

子查询  【select  * from  A   where
id not in (select  id from A where id>=10)】

 

 

 

 

 

 

 

 

 

 

 

 

单行函数

  • 用来操作数据项
  • 还不错参数并再次回到一个值
  • 对每3个赶回行起功效,每一行再次来到1个结果
  • 可应用转换函数修改数据类型
  • 可采取嵌套情势
  • 科学普及的单行函数包罗字符、数字、日期处理函数、类型转换函数、逻辑处理函数等

#实体的完整性

概述:  实体:即表中的一行(一条记下)代表二个实体(entity)
实体完整性的机能:标识每一行                数据不重复

封锁类型有:主键约束 primary key      唯一约束 unique   自动拉长列
 auto_increment 

  *主键约束

            注:各类表中要有一个主键。特点:数据唯一,且无法为null。

            第叁种丰硕格局:

                 CREATE TABLE student( id int primary key, name
varchar(50));

            第二种足够格局:此种情势优势在于,能够创造联合主键

                 CREATE TABLE student(id int,name varchar(50),primary
key(id));

                 CREATE TABLE student(classid int,stuid int,name
varchar(50),primary key(classid                           ,stuid));

           第一种充裕格局:

                 CREATE TABLE student(id int,name varchar(50));

                  ALTER TABLE  student  ADD PRIMARY  KEY (id);

*唯一约束

        特点是不可能重复

        create table student(id int primary key,name varchar(255)
unique);

*自动增进列

       sqlserver数据库(identity)     oracle数据库( sequence)��

       给主键添加自动增加的数值,列只好是整数类型

      create table student(id int primary key auto_increment,name
varchar(255));

UNIQUE约束

6.T-SQL组成

加上注释

comment on table 表名 is ‘注释’;–表添加注释
comment on column 表名.字段名 is ‘注释’;–字段添加注释

#域完整性

  域完整性的成效:限制此单元格的数额科学,不对照此列的别样单元格比较 域代表当前单元     格 域完整性约束:数据类型   非空约束(notnull)
 暗中认可值约束(default)    check约束(mysql不支  
 持)check(sex=’男’orsex=’女’)

  *数据类型

     数值类型、日期类型、字符串类型

  *非空约束  not null  

      CREATE TABLE student( Id int pirmary key, Name varchar(50) not
null, Sex varchar(10));

      INSERT INTO  student values(1,’tom’,null);

  *私下认可值约束

      CREATE TABLE student(Id int pirmary key,Name varchar(50) not
null,Sex varchar(10) default       ‘男’);

       insert into student1 values(1,’tom’,’女’);

      insert into  student1 values(2,’jerry’,default);

每2个表中唯有一个P逍客IMA福特ExplorerY
KEY约束,更简而言之,他是因而确立唯一索引保证钦定列的实体完整性。在使用P大切诺基IMATiggoY
KEY约束时,该列的空值属性必须定义为NOT
NULL,也便是说拥有主键的那一列,无法为空。

 

多表连接查询中的连接类型

图片 2

实业完整性简单来说,正是将表中的每一行看作2个实体。实体完整性要求表的标记符列或主键的完整性。能够因此确立唯一索引、P奥迪Q7IMA途乐Y
KEY约束、UNIQUE约束,以及列的IDENTITY属性来施行实体完整性。

3.数据完整性分类

域完整性

实体完整性

自定义完整性

引用完整性

 

多行子查询

  • 查询结果为多行
  • 多行子查询只好利用多行比较运算符

    IN:等于列表中的任何值
    ANY:比较子查询重回的每3个值,只要个中贰个满足条件就回去true
    ALL:相比子查询重回的每八个值,要个中拥有的值都满意条件才再次来到true

使用IN:

select empno,ename,job from emp where deptno in(select deptno from emp where ename = 'SMITH' or ename ='MITLER');

使用ANY

  • <ANY : 指小于最大值

  • ANY : 指大于最小值

  • ANY:与IN等价

    select empno,ename,job from emp where sal <ANY (select sal from emp where job = 'clerk')
    

使用ALL

  • <ALL : 指小于最小值
  • “>ALL” : 指大于最大值

select empno,ename,job,sal from emp where sal > ALL(select avg(sal) from emp GROUP BY depton)

选择”索引/键”选项卡。

5.7大约束

唯一约束【允许1个空】UNIQUE

主键约束【不一样意空,最少性,稳定性】P途达IMA凯雷德Y KEY

自笔者批评约束  CHECK

自定义约束 

默许约束  DEFAULT

非空约束  NOT NULL

外键约束 FOREIGN KEY

 

 

经文例子

譬如,我们利用上边包车型地铁讲话在TB_CHECK_CONSTRAINT表中新进入一列ZIP_CODE及其相应的CHECK约束:

 

现实世界的实体进入数据库

  • 1.讲实际世界中的客观对象抽象为概念模型
  • 2.把概念模型转化为某一DBMS(数据库管理种类)辅助的数据模型

当保存表或涉嫌图时,唯一约束即开立在数据库中。

范式一:保障数据库之中表每一列与主键直接有关 **{如果 某一行之中数据描述的是二个学员的实业包含   {id name sex age classid }  倘若再多加一列 classname  那种数据已然背离了  第②范式,此时应当设计多张表 }**

类型转换函数

数据类型转换包涵隐士类型转换和出示类型转换
隐士类型转换:系统自动转换
显示类型转换:调用相应的函数转换

TO_CHAQashqai:字符串转换(其余类型转换为字符串)
TO_NUMBELacrosse:数值转换
TO_DATE:日期转换

  • TO_CHAR

将日期转换为字符串格式
总得用单引号括起来,大小写不灵敏
有3个fm成分,用于补充空格恐怕禁止前边的零
行使逗号分离日期
TO_CHAR(date,’fmt’)
常用的日子格式:
YYYY:几个人数表示的年
YEA卡宴:拼写出的年
MM:两位数字的月
MONTH:全月明(例如:sepember)
DD:两位数字代表的月
DAY:全天名

select name,TO_CHAR(hiredate,'fmDD Month YYYY') HIREDATE from emp
  • TO_NUMBECR-V:将字符串转化为数值TO_NUMBER(char)

    select * from emp where deptno = TO_NUMBER('30')
    
  • TO_DATE:将字符串转换为日期TO_DATE(char,[‘fmt’])

    select TO_DATE('2006-05','YYYY-MM') from DUAL
    

在SQL
Server中,依据数据完全新点子所遵守的数据库对象和范围不一,能够将数据完整性分为以下二种。

DDL数据定义语言【create  drop  alter  declare  】

图片 3

在数据库关系图中,右击包蕴约束列的表,然后从高速菜单中选择”索引/键”命令。

 

 

简介

在Android中存款和储蓄数据有时会用到数据库,Android给我们提供了
一种类的API来操作数据库,万分不难,大家只须要输入相应的SQL语句,甚至不懂SQL语句,只传入对应的参数即可使用。还有局地第③方库,如格林Dao,OrmLite等都大幅的简化了对数据库的局地操作。这样纵然大家不须求对数据库有多明白一样能兑现效益,不过在面对错综复杂操作时,对SQL语句的熟悉使用就展现愈发主要了。因为在Android大家如若是运用SQL语句对表操作,所以本文重要介绍SQL的应用,只是不难介绍了数据库一些连锁的定义,那样能有越来越分明的认识。

对于SQL
Server中的约束,想必我们并不是很生疏。不过约束中确确实实的内蕴是怎么,并不是不胜枚贡士都很明亮的。本文以详尽的文字来介绍了怎么样是约束,以及如何在数据库编制程序中选取和采用这个约束,来达到更好的编制程序效果。(本文部分内容参考了SQL
Server联机手册)

范式一:保险数据库之中表每一列的原子性{假使 某一列 出生地的内容:甘肃-莱比锡-洪江市 ,那种数量已然背离了  第三范式,此时应有设计多张表    }

order by

  • 动用order by能够将记录实行排序
  • ASC:升序(私下认可的),DESC:降序排列
  • order by 只好放到全数select语句的最后

select name,sex,age from student order by age
asc:根据age举办降序排列
select name,sex,age,sal from student order by age asc,sal
desc:遵照age降序排列,借使相等则在遵纪守法sal升序排列

3.

 

死锁

T1 update students set name='gfd' where id=3;
update students set name='gfd' where id=4; T2 update students set name='gfd' where id=4; 
update students set name='gfd' where id=3; 

表达:在T1,T2执行完第贰条语句时,再实践下一条语句时,都被各互相锁着,所以都无法履行下去了。
就应运而生了死锁的景色,oracle数据库会自动解锁一条语句

在地方的PHavalIMAPRADOY KEY约束定义中,WITH子句设置为P大切诺基IMAPRADOY
KEY约束所建立目录的页面填充度,ON子句提议存款和储蓄索引的数据库文件组名称。将引得文件和表数据文件分寸到数据库中位居分歧硬盘驱动器的数据文件中,有利于减轻单个硬盘的载重。

4.数据完整性保持手段:约束

 

 

外接连:不仅重返符合连接条件的记录,也回到钦定表中的不相符连接条件的笔录

图片 4

  • 左外连接:先对A表和B表做内接连,再把A表中绝非匹配的结果集添加进去形成新的结果集(相应的右表的值(对应A表没有匹配的)为null)

    select * from newdept left outer join newemp on newdept.deptid = newemp.deptid;--outer可以省略 
    。。。。。。。where a.deptno = b.deptno(+);--左连接
    
  • 右外连接:
    先对A表和B表做内连接,再把B表中绝非匹配的结果集添加进去形成新的结果集(相应的左表的值(对应B表没有匹配的)为null)也回到

    select * from newdept right outer join newemp on newdept.deptid = newemp.deptid
    。。。。。。。where a.deptno(+) = b.deptno;--右连接
    
  • 全外连接:在内连接的底子上,把左右两表中不相符连接条件的记录都回来

在emp中每三个职工都有和好的mgr(COO),并且每叁个CEO自己也是合作社的职工,本身也有温馨的mgr。大家需求将每1个员工本人的名字和主任的名字都找出来。

  select worker.ename,'work for',manager.ename from emp worker,emp managetr 
  where worker.mgr = manager.empnework for:连接字符串

用SQL语句列出EMP表中享有机关的详细音讯以及相应的单位人数

select a.* , b.* from dept a,(select deptno,count(*) from emp group by deptno) b where a.deptno = b.deptno(+)
  • 全外连接

用SQL语句列出NEWEMP表和NEWDEPT表中有着部门和员工的详细消息:

select * from newdept full outer join newemp on newdept.deptid = newemp.deptid

图片 5

1.数据库设计三大范式

子查询

  • 子查询在主查询的前1遍实行
  • 主查询使用子查询的结果
  • 子查询要用括号括起来
  • 将子查询放在比较运算符的下手
  • 子查询中永不加O奥迪Q5DE大切诺基 BY子句

动用场景:例如那么些雇员的薪水比林志玲(Lin Chi-ling)的高?

DEFAULT约束

DML数据管理语言【insert  update  select  delete】

DDL语句(数据定义语言)

对表的操作能够经过DDL语句进行,包蕴:

  • create:成立新表,必须以字母开端,访问其余用户的表时必要加上用户名的前缀

    create table dept(deptno number(2),dname varchar2(14),loc varchar2(3));
    create table dept30 as select empno,ename,sal*12 ANNSAL,hiredate from emp where deptno=30;--数据从别的表中拷贝
    
  • 创设联合主键的表

    create table emp( emp_id integer, emp_name varchar2(20) not null, emp_bir date default sysdate primary key(emp_id,emp_name) );
    
  • alter:更改表的协会(字段)

alert table 表名 add (扩展的列名 类型,。。。。。);–扩充列
alert table 表名 modify (修改的列名 类型);–修改列
alert table 表名 rename column 要修改的列名 to 新的列名;–修改列名
alter table 表名 rename to 新的表名;–修改表名
alert table 表名 drop column 要去除的列名;–删除列
alert table dept30 add (job varchar2(9));
alert table dept30 modify (job varchar2(15));
alert table dept30 raname column deptname to dname;alert table dept30
drop column job;

  • drop:删除表

表中的全数数据将被删除
东西被机关提交
有着的目录被删除
不可能回退
干净删除表
drop table 表名;–删除钦点的表

  • truncate:飞快删除表中的持有记录

直白删除全部的笔录,不能内定删除条件
惊惶失措回退
只会去除数据,会保留表的协会(字段),能够重复插入数据
进程快于delect
truncate table 表名;–删除钦点的表

用户定义完整性

**范式一:保证数据库之中表每一列与主键有关{就算 某一行之中数据描述的是三个上学的小孩子的实业包蕴   {id name sex age classid }  要是再多加一列 光照强度 那种多少已然背离了  第①范式,此时应有设计多张表    }**

通用函数

  • nvl(value,srt):尽管第一个参数不为null,就赶回第3个参数,假设为null就再次来到第四个参数

    select nvl(e.name,'name is null') from employee e;
    
  • nvl2(value,x,y):若是value为null就回来y,不然再次来到x

    select nvl2(s.class_id,1,2) from students s;
    
  • nullif(x,y):若是相等重回null,不对等则重临x;

    select nullif(s.sex,'男') from students s;
    

2.

2.数量的表征:正确,可信赖,完整

键的定义

  • 超键(super
    key):在关系中能唯一区分实体的品质集称为涉及方式中的超键。
  • 候选键(candidate
    key):不包涵多余属性的超键(每3个天性都能分别实体)
  • 主键(primary key):用户选作区分实体发的三个候选键(foreign key)
  • 外键:在有个别关系A中的主键出现在另二个提到B中,此时事关A中的该主键称为关系B中的外键。

事例表明:
职员和工人(身份证号、姓名、年龄、性别)假若姓名也是唯一的超键:身份证号、姓名、姓名+年龄、姓名+性别、身份证号+年龄、身份证号+性别候选键:身份证号、姓名

SQL
Server联机丛书中指明:“对表举办安插有八个至关心保护要步骤:标识列的有效值和规定怎样强制列中的数据完整性。”

推行sql语句变成为:
select
 t_date, 
 (select count(*) from t where t_status='胜' and t_date=e.t_date) 胜, 
 (select count(*) from t where t_status='负' and t_date=e.t_date) 负
from t e group by t_date order by e.t_date;

例如,对于 pubs 数据库中的 sales 和 titles 表,引用完整性基于 sales
表中的外键 (title_id) 与 titles 表中的主键 (title_id) 之间的关系。

集合

集合中的成分得以把一条记下或然二个字段当做3个因素
用了聚众再排序的时候,order by 字段的职位(例如 1):只可以用数字了

  • intersect:交集

  • minus:减集

    • 在一张表中显得了,就不在另一张表中出现了(A表 minus
      B表):展现B表去除与A表相同的有个别
  • union all:并集(加all不去重)union :去重

    select * from (select * from (select * from employees2 e order by e.salary desc) where rownum<11
    minus
    select * from (select * from employees2 e order by e.salary desc) e where rownum<4) order by 6;--用到了集合再排序只能使用数字了
    

-或-

数据库设计范式

数据库设计范式一言以蔽之正是关周密据库在规划时索要遵守的一种标准,数据库范式依照须要从低到高分为6大范式,即首先范式(1NF)~第6范式(6NF)。在首先范式的基本功上尤为满意更加多要求的名为第一范式,3次类推。越高的范式数据库冗余越小,一般的话,数据库只需求满意第1范式(3NF)就行了。

选择”创建 UNIQUE”复选框。

字符函数

  • lower:将字符串全体变为小写

    select name,sex from student where LOWFR(name) = 'blake'; 查询姓名为blake的相应属性,不管姓名是大小写还是大小写混写的都能查出
    
  • upper:将字符串全部制改良成大写

  • initcap:将字符串的首先个假名变为大写

  • concat:将五个字符串拼接起来

  • substr:截取字符串

    select substr('helloword',2,5) from dual;--从第二个开始数5个
    
  • length:重返字符串的长度

    select length(t.empfirstname) from employee t;
    
  • instr:在二个字符串中定位子字符串的任务(没有的话重返值为0)

    select instr('hellword','w')from dual;--查询w在hellword中的位置
    
  • 左补齐函数(lpad)

  • 右补齐函数(rpad)

    select e.empfirsname,rpad(e.empfistname,10,'&') from employees e;--设置长度为10,不够的用&补齐
    
  • replace:替换函数

    select replace('ABCDFG','D','www') from dual;--用www替换D
    
  • trim(leading|trailing|both y from x):从x中截去单个字符y

  • both:截去两边的;leading:从左侧;traiing:从左侧

    select trim(both 'h' from 'hooojdhh') from dual;--截去两边的h
    

1.

其三范式

务求二个数据库表中不含有已在别的表中已涵盖的非主关键字音信(非主键属性不可能出现在第3张表中)

非主键属性重复了,完全能够依据编号(主键)去查询部门简介和称号

  实体完整性
  域完整性
  引用完整性
  用户定义完整性

数据库的羁绊

封锁是表级强制执行的条条框框,当表中数据有互动借重时,能够敬服数量不被去除

选择”约束”选项。

两张表中的数据运算

图片 6

select kc.mc "种类",kc.s1-(select sum(s1) from ck where ck.mc = kc.mc ) "剩余量" from KC;

一如既往,大家得以选用CHECK或NOCHECK来开辟或许关闭有些约束。例如,上面包车型地铁话语将关门上面建立的CH_ZIP_CODE约束:

相关文章